/ Hex Artifact Content
Login

Artifact 92343541fc50d9fd30eb734f77d43d7636521e7e:


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 50  define PragTyp_P
08d0: 41 47 45 52 5f 4f 54 41 5f 4d 4f 44 45 20 20 20  AGER_OTA_MODE   
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 45 43 55 52 45 5f 44 45 4c 45 54 45 20 20 20  SECURE_DELETE   
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 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59 20 20  _SHRINK_MEMORY  
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 4f 46 54 5f 48 45 41 50 5f 4c 49 4d 49  p_SOFT_HEAP_LIMI
0970: 54 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  T               
0980: 32 38 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54  28.#define PragT
0990: 79 70 5f 53 54 41 54 53 20 20 20 20 20 20 20 20  yp_STATS        
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 53 59 4e 43 48 52 4f 4e 4f 55 53 20  Typ_SYNCHRONOUS 
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 41 42 4c 45 5f 49 4e 46 4f 20  gTyp_TABLE_INFO 
0a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a10: 20 20 20 33 31 0a 23 64 65 66 69 6e 65 20 50 72     31.#define Pr
0a20: 61 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45  agTyp_TEMP_STORE
0a30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a40: 20 20 20 20 33 32 0a 23 64 65 66 69 6e 65 20 50      32.#define P
0a50: 72 61 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52  ragTyp_TEMP_STOR
0a60: 45 5f 44 49 52 45 43 54 4f 52 59 20 20 20 20 20  E_DIRECTORY     
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 54 48 52 45 41 44 53 20  PragTyp_THREADS 
0a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0aa0: 20 20 20 20 20 20 33 34 0a 23 64 65 66 69 6e 65        34.#define
0ab0: 20 50 72 61 67 54 79 70 5f 57 41 4c 5f 41 55 54   PragTyp_WAL_AUT
0ac0: 4f 43 48 45 43 4b 50 4f 49 4e 54 20 20 20 20 20  OCHECKPOINT     
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 57 41 4c 5f 43 48  e PragTyp_WAL_CH
0af0: 45 43 4b 50 4f 49 4e 54 20 20 20 20 20 20 20 20  ECKPOINT        
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 41 43 54 49 56  ne PragTyp_ACTIV
0b20: 41 54 45 5f 45 58 54 45 4e 53 49 4f 4e 53 20 20  ATE_EXTENSIONS  
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 48 45 58 4b  ine PragTyp_HEXK
0b50: 45 59 20 20 20 20 20 20 20 20 20 20 20 20 20 20  EY              
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 4b 45 59  fine PragTyp_KEY
0b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b90: 20 20 20 20 20 20 20 20 20 20 20 33 39 0a 23 64             39.#d
0ba0: 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 52 45  efine PragTyp_RE
0bb0: 4b 45 59 20 20 20 20 20 20 20 20 20 20 20 20 20  KEY             
0bc0: 20 20 20 20 20 20 20 20 20 20 20 20 34 30 0a 23              40.#
0bd0: 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 4c  define PragTyp_L
0be0: 4f 43 4b 5f 53 54 41 54 55 53 20 20 20 20 20 20  OCK_STATUS      
0bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 34 31 0a               41.
0c00: 23 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f  #define PragTyp_
0c10: 50 41 52 53 45 52 5f 54 52 41 43 45 20 20 20 20  PARSER_TRACE    
0c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 34 32                42
0c30: 0a 23 64 65 66 69 6e 65 20 50 72 61 67 46 6c 61  .#define PragFla
0c40: 67 5f 4e 65 65 64 53 63 68 65 6d 61 20 20 20 20  g_NeedSchema    
0c50: 20 20 20 20 20 20 20 30 78 30 31 0a 73 74 61 74         0x01.stat
0c60: 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20  ic const struct 
0c70: 73 50 72 61 67 6d 61 4e 61 6d 65 73 20 7b 0a 20  sPragmaNames {. 
0c80: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e   const char *con
0c90: 73 74 20 7a 4e 61 6d 65 3b 20 20 2f 2a 20 4e 61  st zName;  /* Na
0ca0: 6d 65 20 6f 66 20 70 72 61 67 6d 61 20 2a 2f 0a  me of pragma */.
0cb0: 20 20 75 38 20 65 50 72 61 67 54 79 70 3b 20 20    u8 ePragTyp;  
0cc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
0cd0: 72 61 67 54 79 70 5f 58 58 58 20 76 61 6c 75 65  ragTyp_XXX value
0ce0: 20 2a 2f 0a 20 20 75 38 20 6d 50 72 61 67 46 6c   */.  u8 mPragFl
0cf0: 61 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ag;             
0d00: 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  /* Zero or more 
0d10: 50 72 61 67 46 6c 61 67 5f 58 58 58 20 76 61 6c  PragFlag_XXX val
0d20: 75 65 73 20 2a 2f 0a 20 20 75 33 32 20 69 41 72  ues */.  u32 iAr
0d30: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
0d40: 20 20 20 2f 2a 20 45 78 74 72 61 20 61 72 67 75     /* Extra argu
0d50: 6d 65 6e 74 20 2a 2f 0a 7d 20 61 50 72 61 67 6d  ment */.} aPragm
0d60: 61 4e 61 6d 65 73 5b 5d 20 3d 20 7b 0a 23 69 66  aNames[] = {.#if
0d70: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
0d80: 48 41 53 5f 43 4f 44 45 43 29 20 7c 7c 20 64 65  HAS_CODEC) || de
0d90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
0da0: 42 4c 45 5f 43 45 52 4f 44 29 0a 20 20 7b 20 2f  BLE_CEROD).  { /
0db0: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
0dc0: 22 61 63 74 69 76 61 74 65 5f 65 78 74 65 6e 73  "activate_extens
0dd0: 69 6f 6e 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50  ions",.    /* eP
0de0: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
0df0: 54 79 70 5f 41 43 54 49 56 41 54 45 5f 45 58 54  Typ_ACTIVATE_EXT
0e00: 45 4e 53 49 4f 4e 53 2c 0a 20 20 20 20 2f 2a 20  ENSIONS,.    /* 
0e10: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
0e20: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
0e30: 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69     */ 0 },.#endi
0e40: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
0e50: 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
0e60: 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41  A_VERSION_PRAGMA
0e70: 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  S).  { /* zName:
0e80: 20 20 20 20 20 2a 2f 20 22 61 70 70 6c 69 63 61       */ "applica
0e90: 74 69 6f 6e 5f 69 64 22 2c 0a 20 20 20 20 2f 2a  tion_id",.    /*
0ea0: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
0eb0: 72 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41  ragTyp_HEADER_VA
0ec0: 4c 55 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  LUE,.    /* ePra
0ed0: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
0ee0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
0ef0: 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  / 0 },.#endif.#i
0f00: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
0f10: 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
0f20: 4d 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  M).  { /* zName:
0f30: 20 20 20 20 20 2a 2f 20 22 61 75 74 6f 5f 76 61       */ "auto_va
0f40: 63 75 75 6d 22 2c 0a 20 20 20 20 2f 2a 20 65 50  cuum",.    /* eP
0f50: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
0f60: 54 79 70 5f 41 55 54 4f 5f 56 41 43 55 55 4d 2c  Typ_AUTO_VACUUM,
0f70: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
0f80: 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e  g: */ PragFlag_N
0f90: 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f  eedSchema,.    /
0fa0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
0fb0: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
0fc0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
0fd0: 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41  OMIT_FLAG_PRAGMA
0fe0: 53 29 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  S).#if !defined(
0ff0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
1000: 4d 41 54 49 43 5f 49 4e 44 45 58 29 0a 20 20 7b  MATIC_INDEX).  {
1010: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
1020: 2f 20 22 61 75 74 6f 6d 61 74 69 63 5f 69 6e 64  / "automatic_ind
1030: 65 78 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ex",.    /* ePra
1040: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
1050: 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65  p_FLAG,.    /* e
1060: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
1070: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
1080: 20 20 2a 2f 20 53 51 4c 49 54 45 5f 41 75 74 6f    */ SQLITE_Auto
1090: 49 6e 64 65 78 20 7d 2c 0a 23 65 6e 64 69 66 0a  Index },.#endif.
10a0: 23 65 6e 64 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e  #endif.  { /* zN
10b0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 62 75 73  ame:     */ "bus
10c0: 79 5f 74 69 6d 65 6f 75 74 22 2c 0a 20 20 20 20  y_timeout",.    
10d0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
10e0: 20 50 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49   PragTyp_BUSY_TI
10f0: 4d 45 4f 55 54 2c 0a 20 20 20 20 2f 2a 20 65 50  MEOUT,.    /* eP
1100: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
1110: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
1120: 20 2a 2f 20 30 20 7d 2c 0a 23 69 66 20 21 64 65   */ 0 },.#if !de
1130: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
1140: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29  T_PAGER_PRAGMAS)
1150: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
1160: 20 20 20 2a 2f 20 22 63 61 63 68 65 5f 73 69 7a     */ "cache_siz
1170: 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  e",.    /* ePrag
1180: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
1190: 5f 43 41 43 48 45 5f 53 49 5a 45 2c 0a 20 20 20  _CACHE_SIZE,.   
11a0: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
11b0: 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53  / PragFlag_NeedS
11c0: 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41  chema,.    /* iA
11d0: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
11e0: 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66  .#endif.#if !def
11f0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1200: 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 20  _FLAG_PRAGMAS). 
1210: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
1220: 20 2a 2f 20 22 63 61 63 68 65 5f 73 70 69 6c 6c   */ "cache_spill
1230: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
1240: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
1250: 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72  FLAG,.    /* ePr
1260: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
1270: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
1280: 2a 2f 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53  */ SQLITE_CacheS
1290: 70 69 6c 6c 20 7d 2c 0a 23 65 6e 64 69 66 0a 20  pill },.#endif. 
12a0: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
12b0: 20 2a 2f 20 22 63 61 73 65 5f 73 65 6e 73 69 74   */ "case_sensit
12c0: 69 76 65 5f 6c 69 6b 65 22 2c 0a 20 20 20 20 2f  ive_like",.    /
12d0: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
12e0: 50 72 61 67 54 79 70 5f 43 41 53 45 5f 53 45 4e  PragTyp_CASE_SEN
12f0: 53 49 54 49 56 45 5f 4c 49 4b 45 2c 0a 20 20 20  SITIVE_LIKE,.   
1300: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
1310: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
1320: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
1330: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
1340: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
1350: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
1360: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 63 68 65 63  me:     */ "chec
1370: 6b 70 6f 69 6e 74 5f 66 75 6c 6c 66 73 79 6e 63  kpoint_fullfsync
1380: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
1390: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
13a0: 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72  FLAG,.    /* ePr
13b0: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
13c0: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
13d0: 2a 2f 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75  */ SQLITE_CkptFu
13e0: 6c 6c 46 53 79 6e 63 20 7d 2c 0a 23 65 6e 64 69  llFSync },.#endi
13f0: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
1400: 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
1410: 41 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f  A_PRAGMAS).  { /
1420: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
1430: 22 63 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 22  "collation_list"
1440: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
1450: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 43  p:  */ PragTyp_C
1460: 4f 4c 4c 41 54 49 4f 4e 5f 4c 49 53 54 2c 0a 20  OLLATION_LIST,. 
1470: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
1480: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
1490: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
14a0: 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66  .#endif.#if !def
14b0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
14c0: 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44  _COMPILEOPTION_D
14d0: 49 41 47 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  IAGS).  { /* zNa
14e0: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 63 6f 6d 70  me:     */ "comp
14f0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 2c 0a 20 20  ile_options",.  
1500: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
1510: 2a 2f 20 50 72 61 67 54 79 70 5f 43 4f 4d 50 49  */ PragTyp_COMPI
1520: 4c 45 5f 4f 50 54 49 4f 4e 53 2c 0a 20 20 20 20  LE_OPTIONS,.    
1530: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
1540: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
1550: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
1560: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
1570: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  d(SQLITE_OMIT_FL
1580: 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20  AG_PRAGMAS).  { 
1590: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
15a0: 20 22 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 22   "count_changes"
15b0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
15c0: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46  p:  */ PragTyp_F
15d0: 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  LAG,.    /* ePra
15e0: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
15f0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
1600: 2f 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  / SQLITE_CountRo
1610: 77 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66  ws },.#endif.#if
1620: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1630: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
1640: 4d 41 53 29 20 26 26 20 53 51 4c 49 54 45 5f 4f  MAS) && SQLITE_O
1650: 53 5f 57 49 4e 0a 20 20 7b 20 2f 2a 20 7a 4e 61  S_WIN.  { /* zNa
1660: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 64 61 74 61  me:     */ "data
1670: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
1680: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
1690: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
16a0: 44 41 54 41 5f 53 54 4f 52 45 5f 44 49 52 45 43  DATA_STORE_DIREC
16b0: 54 4f 52 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72  TORY,.    /* ePr
16c0: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
16d0: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
16e0: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
16f0: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
1700: 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50  TE_OMIT_SCHEMA_P
1710: 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a  RAGMAS).  { /* z
1720: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 64 61  Name:     */ "da
1730: 74 61 62 61 73 65 5f 6c 69 73 74 22 2c 0a 20 20  tabase_list",.  
1740: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
1750: 2a 2f 20 50 72 61 67 54 79 70 5f 44 41 54 41 42  */ PragTyp_DATAB
1760: 41 53 45 5f 4c 49 53 54 2c 0a 20 20 20 20 2f 2a  ASE_LIST,.    /*
1770: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50   ePragFlag: */ P
1780: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
1790: 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a  ma,.    /* iArg:
17a0: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
17b0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
17c0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  d(SQLITE_OMIT_PA
17d0: 47 45 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20  GER_PRAGMAS) && 
17e0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
17f0: 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 29  OMIT_DEPRECATED)
1800: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
1810: 20 20 20 2a 2f 20 22 64 65 66 61 75 6c 74 5f 63     */ "default_c
1820: 61 63 68 65 5f 73 69 7a 65 22 2c 0a 20 20 20 20  ache_size",.    
1830: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
1840: 20 50 72 61 67 54 79 70 5f 44 45 46 41 55 4c 54   PragTyp_DEFAULT
1850: 5f 43 41 43 48 45 5f 53 49 5a 45 2c 0a 20 20 20  _CACHE_SIZE,.   
1860: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
1870: 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53  / PragFlag_NeedS
1880: 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41  chema,.    /* iA
1890: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
18a0: 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66  .#endif.#if !def
18b0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
18c0: 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 23  _FLAG_PRAGMAS).#
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 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
18f0: 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64  KEY) && !defined
1900: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
1910: 47 47 45 52 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GGER).  { /* zNa
1920: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 64 65 66 65  me:     */ "defe
1930: 72 5f 66 6f 72 65 69 67 6e 5f 6b 65 79 73 22 2c  r_foreign_keys",
1940: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
1950: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
1960: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
1970: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1980: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1990: 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73   SQLITE_DeferFKs
19a0: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69   },.#endif.#endi
19b0: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
19c0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f  QLITE_OMIT_FLAG_
19d0: 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20  PRAGMAS).  { /* 
19e0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 65  zName:     */ "e
19f0: 6d 70 74 79 5f 72 65 73 75 6c 74 5f 63 61 6c 6c  mpty_result_call
1a00: 62 61 63 6b 73 22 2c 0a 20 20 20 20 2f 2a 20 65  backs",.    /* e
1a10: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
1a20: 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f  gTyp_FLAG,.    /
1a30: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
1a40: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
1a50: 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 4e       */ SQLITE_N
1a60: 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 7d 2c 0a 23  ullCallback },.#
1a70: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
1a80: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ed(SQLITE_OMIT_U
1a90: 54 46 31 36 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  TF16).  { /* zNa
1aa0: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 65 6e 63 6f  me:     */ "enco
1ab0: 64 69 6e 67 22 2c 0a 20 20 20 20 2f 2a 20 65 50  ding",.    /* eP
1ac0: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
1ad0: 54 79 70 5f 45 4e 43 4f 44 49 4e 47 2c 0a 20 20  Typ_ENCODING,.  
1ae0: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
1af0: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
1b00: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
1b10: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
1b20: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
1b30: 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20  FOREIGN_KEY) && 
1b40: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1b50: 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20  OMIT_TRIGGER).  
1b60: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
1b70: 2a 2f 20 22 66 6f 72 65 69 67 6e 5f 6b 65 79 5f  */ "foreign_key_
1b80: 63 68 65 63 6b 22 2c 0a 20 20 20 20 2f 2a 20 65  check",.    /* e
1b90: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
1ba0: 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  gTyp_FOREIGN_KEY
1bb0: 5f 43 48 45 43 4b 2c 0a 20 20 20 20 2f 2a 20 65  _CHECK,.    /* e
1bc0: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61  PragFlag: */ Pra
1bd0: 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61  gFlag_NeedSchema
1be0: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
1bf0: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
1c00: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
1c10: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
1c20: 49 47 4e 5f 4b 45 59 29 0a 20 20 7b 20 2f 2a 20  IGN_KEY).  { /* 
1c30: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66  zName:     */ "f
1c40: 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 22  oreign_key_list"
1c50: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
1c60: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46  p:  */ PragTyp_F
1c70: 4f 52 45 49 47 4e 5f 4b 45 59 5f 4c 49 53 54 2c  OREIGN_KEY_LIST,
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 50 72 61 67 46 6c 61 67 5f 4e  g: */ PragFlag_N
1ca0: 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f  eedSchema,.    /
1cb0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
1cc0: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
1cd0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1ce0: 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41  OMIT_FLAG_PRAGMA
1cf0: 53 29 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  S).#if !defined(
1d00: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
1d10: 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66  IGN_KEY) && !def
1d20: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1d30: 5f 54 52 49 47 47 45 52 29 0a 20 20 7b 20 2f 2a  _TRIGGER).  { /*
1d40: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
1d50: 66 6f 72 65 69 67 6e 5f 6b 65 79 73 22 2c 0a 20  foreign_keys",. 
1d60: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
1d70: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
1d80: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
1d90: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
1da0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
1db0: 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79  QLITE_ForeignKey
1dc0: 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64  s },.#endif.#end
1dd0: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
1de0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
1df0: 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d  MA_VERSION_PRAGM
1e00: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
1e10: 3a 20 20 20 20 20 2a 2f 20 22 66 72 65 65 6c 69  :     */ "freeli
1e20: 73 74 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 2f  st_count",.    /
1e30: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
1e40: 50 72 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56  PragTyp_HEADER_V
1e50: 41 4c 55 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ALUE,.    /* ePr
1e60: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
1e70: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
1e80: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
1e90: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
1ea0: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
1eb0: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
1ec0: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66 75 6c 6c  me:     */ "full
1ed0: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22 2c 0a  _column_names",.
1ee0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1ef0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
1f00: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
1f10: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
1f20: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
1f30: 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61  SQLITE_FullColNa
1f40: 6d 65 73 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e  mes },.  { /* zN
1f50: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66 75 6c  ame:     */ "ful
1f60: 6c 66 73 79 6e 63 22 2c 0a 20 20 20 20 2f 2a 20  lfsync",.    /* 
1f70: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
1f80: 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20  agTyp_FLAG,.    
1f90: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
1fa0: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
1fb0: 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f        */ SQLITE_
1fc0: 46 75 6c 6c 46 53 79 6e 63 20 7d 2c 0a 23 65 6e  FullFSync },.#en
1fd0: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
1fe0: 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43  SQLITE_HAS_CODEC
1ff0: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
2000: 20 20 20 20 2a 2f 20 22 68 65 78 6b 65 79 22 2c      */ "hexkey",
2010: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
2020: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 48 45  :  */ PragTyp_HE
2030: 58 4b 45 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72  XKEY,.    /* ePr
2040: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
2050: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2060: 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a  */ 0 },.  { /* z
2070: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 68 65  Name:     */ "he
2080: 78 72 65 6b 65 79 22 2c 0a 20 20 20 20 2f 2a 20  xrekey",.    /* 
2090: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
20a0: 61 67 54 79 70 5f 48 45 58 4b 45 59 2c 0a 20 20  agTyp_HEXKEY,.  
20b0: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
20c0: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
20d0: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
20e0: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
20f0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2100: 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 23 69  FLAG_PRAGMAS).#i
2110: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2120: 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 29 0a 20 20  E_OMIT_CHECK).  
2130: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
2140: 2a 2f 20 22 69 67 6e 6f 72 65 5f 63 68 65 63 6b  */ "ignore_check
2150: 5f 63 6f 6e 73 74 72 61 69 6e 74 73 22 2c 0a 20  _constraints",. 
2160: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2170: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
2180: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
2190: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
21a0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
21b0: 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63  QLITE_IgnoreChec
21c0: 6b 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e  ks },.#endif.#en
21d0: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
21e0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54  (SQLITE_OMIT_AUT
21f0: 4f 56 41 43 55 55 4d 29 0a 20 20 7b 20 2f 2a 20  OVACUUM).  { /* 
2200: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69  zName:     */ "i
2210: 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75  ncremental_vacuu
2220: 6d 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  m",.    /* ePrag
2230: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
2240: 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f 56 41 43  _INCREMENTAL_VAC
2250: 55 55 4d 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  UUM,.    /* ePra
2260: 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c  gFlag: */ PragFl
2270: 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20  ag_NeedSchema,. 
2280: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2290: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
22a0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
22b0: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
22c0: 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20  PRAGMAS).  { /* 
22d0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69  zName:     */ "i
22e0: 6e 64 65 78 5f 69 6e 66 6f 22 2c 0a 20 20 20 20  ndex_info",.    
22f0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2300: 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 49   PragTyp_INDEX_I
2310: 4e 46 4f 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  NFO,.    /* ePra
2320: 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c  gFlag: */ PragFl
2330: 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20  ag_NeedSchema,. 
2340: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2350: 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20   */ 0 },.  { /* 
2360: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69  zName:     */ "i
2370: 6e 64 65 78 5f 6c 69 73 74 22 2c 0a 20 20 20 20  ndex_list",.    
2380: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2390: 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c   PragTyp_INDEX_L
23a0: 49 53 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  IST,.    /* ePra
23b0: 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c  gFlag: */ PragFl
23c0: 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20  ag_NeedSchema,. 
23d0: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
23e0: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
23f0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2400: 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
2410: 54 59 5f 43 48 45 43 4b 29 0a 20 20 7b 20 2f 2a  TY_CHECK).  { /*
2420: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
2430: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22  integrity_check"
2440: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
2450: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 49  p:  */ PragTyp_I
2460: 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 2c 0a  NTEGRITY_CHECK,.
2470: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
2480: 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65  : */ PragFlag_Ne
2490: 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a  edSchema,.    /*
24a0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
24b0: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
24c0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
24d0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
24e0: 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  S).  { /* zName:
24f0: 20 20 20 20 20 2a 2f 20 22 6a 6f 75 72 6e 61 6c       */ "journal
2500: 5f 6d 6f 64 65 22 2c 0a 20 20 20 20 2f 2a 20 65  _mode",.    /* e
2510: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
2520: 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f 4d 4f 44  gTyp_JOURNAL_MOD
2530: 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  E,.    /* ePragF
2540: 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67  lag: */ PragFlag
2550: 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20  _NeedSchema,.   
2560: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
2570: 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e  / 0 },.  { /* zN
2580: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6a 6f 75  ame:     */ "jou
2590: 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 22  rnal_size_limit"
25a0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
25b0: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 4a  p:  */ PragTyp_J
25c0: 4f 55 52 4e 41 4c 5f 53 49 5a 45 5f 4c 49 4d 49  OURNAL_SIZE_LIMI
25d0: 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  T,.    /* ePragF
25e0: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
25f0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
2600: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
2610: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48  defined(SQLITE_H
2620: 41 53 5f 43 4f 44 45 43 29 0a 20 20 7b 20 2f 2a  AS_CODEC).  { /*
2630: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
2640: 6b 65 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  key",.    /* ePr
2650: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
2660: 79 70 5f 4b 45 59 2c 0a 20 20 20 20 2f 2a 20 65  yp_KEY,.    /* e
2670: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
2680: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
2690: 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66    */ 0 },.#endif
26a0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
26b0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50  LITE_OMIT_FLAG_P
26c0: 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a  RAGMAS).  { /* z
26d0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 65  Name:     */ "le
26e0: 67 61 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74  gacy_file_format
26f0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
2700: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
2710: 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72  FLAG,.    /* ePr
2720: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
2730: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2740: 2a 2f 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79  */ SQLITE_Legacy
2750: 46 69 6c 65 46 6d 74 20 7d 2c 0a 23 65 6e 64 69  FileFmt },.#endi
2760: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
2770: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
2780: 5f 50 52 41 47 4d 41 53 29 20 26 26 20 53 51 4c  _PRAGMAS) && SQL
2790: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
27a0: 4e 47 5f 53 54 59 4c 45 0a 20 20 7b 20 2f 2a 20  NG_STYLE.  { /* 
27b0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c  zName:     */ "l
27c0: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 22 2c  ock_proxy_file",
27d0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
27e0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 4c 4f  :  */ PragTyp_LO
27f0: 43 4b 5f 50 52 4f 58 59 5f 46 49 4c 45 2c 0a 20  CK_PROXY_FILE,. 
2800: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
2810: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
2820: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
2830: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
2840: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
2850: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
2860: 49 54 45 5f 54 45 53 54 29 0a 20 20 7b 20 2f 2a  ITE_TEST).  { /*
2870: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
2880: 6c 6f 63 6b 5f 73 74 61 74 75 73 22 2c 0a 20 20  lock_status",.  
2890: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
28a0: 2a 2f 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f  */ PragTyp_LOCK_
28b0: 53 54 41 54 55 53 2c 0a 20 20 20 20 2f 2a 20 65  STATUS,.    /* e
28c0: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
28d0: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
28e0: 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66    */ 0 },.#endif
28f0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
2900: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
2910: 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20  PRAGMAS).  { /* 
2920: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c  zName:     */ "l
2930: 6f 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c 0a 20 20  ocking_mode",.  
2940: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
2950: 2a 2f 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49  */ PragTyp_LOCKI
2960: 4e 47 5f 4d 4f 44 45 2c 0a 20 20 20 20 2f 2a 20  NG_MODE,.    /* 
2970: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
2980: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
2990: 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f     */ 0 },.  { /
29a0: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
29b0: 22 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 22  "max_page_count"
29c0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
29d0: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 50  p:  */ PragTyp_P
29e0: 41 47 45 5f 43 4f 55 4e 54 2c 0a 20 20 20 20 2f  AGE_COUNT,.    /
29f0: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
2a00: 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68  PragFlag_NeedSch
2a10: 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  ema,.    /* iArg
2a20: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 20  :      */ 0 },. 
2a30: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
2a40: 20 2a 2f 20 22 6d 6d 61 70 5f 73 69 7a 65 22 2c   */ "mmap_size",
2a50: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
2a60: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 4d 4d  :  */ PragTyp_MM
2a70: 41 50 5f 53 49 5a 45 2c 0a 20 20 20 20 2f 2a 20  AP_SIZE,.    /* 
2a80: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
2a90: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
2aa0: 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69     */ 0 },.#endi
2ab0: 66 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  f.  { /* zName: 
2ac0: 20 20 20 20 2a 2f 20 22 6f 74 61 5f 6d 6f 64 65      */ "ota_mode
2ad0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
2ae0: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
2af0: 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72  FLAG,.    /* ePr
2b00: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
2b10: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2b20: 2a 2f 20 53 51 4c 49 54 45 5f 4f 74 61 4d 6f 64  */ SQLITE_OtaMod
2b30: 65 20 7d 2c 0a 23 69 66 20 21 64 65 66 69 6e 65  e },.#if !define
2b40: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  d(SQLITE_OMIT_PA
2b50: 47 45 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  GER_PRAGMAS).  {
2b60: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
2b70: 2f 20 22 70 61 67 65 5f 63 6f 75 6e 74 22 2c 0a  / "page_count",.
2b80: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2b90: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 50 41 47    */ PragTyp_PAG
2ba0: 45 5f 43 4f 55 4e 54 2c 0a 20 20 20 20 2f 2a 20  E_COUNT,.    /* 
2bb0: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72  ePragFlag: */ Pr
2bc0: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
2bd0: 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  a,.    /* iArg: 
2be0: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b       */ 0 },.  {
2bf0: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
2c00: 2f 20 22 70 61 67 65 5f 73 69 7a 65 22 2c 0a 20  / "page_size",. 
2c10: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2c20: 20 2a 2f 20 50 72 61 67 54 79 70 5f 50 41 47 45   */ PragTyp_PAGE
2c30: 5f 53 49 5a 45 2c 0a 20 20 20 20 2f 2a 20 65 50  _SIZE,.    /* eP
2c40: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
2c50: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2c60: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
2c70: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
2c80: 20 20 2a 2f 20 22 70 61 67 65 72 5f 6f 74 61 5f    */ "pager_ota_
2c90: 6d 6f 64 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50  mode",.    /* eP
2ca0: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
2cb0: 54 79 70 5f 50 41 47 45 52 5f 4f 54 41 5f 4d 4f  Typ_PAGER_OTA_MO
2cc0: 44 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  DE,.    /* ePrag
2cd0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
2ce0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
2cf0: 20 30 20 7d 2c 0a 23 69 66 20 64 65 66 69 6e 65   0 },.#if define
2d00: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a  d(SQLITE_DEBUG).
2d10: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
2d20: 20 20 2a 2f 20 22 70 61 72 73 65 72 5f 74 72 61    */ "parser_tra
2d30: 63 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ce",.    /* ePra
2d40: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
2d50: 70 5f 50 41 52 53 45 52 5f 54 52 41 43 45 2c 0a  p_PARSER_TRACE,.
2d60: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
2d70: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
2d80: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
2d90: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ,.#endif.#if !de
2da0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2db0: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a  T_FLAG_PRAGMAS).
2dc0: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
2dd0: 20 20 2a 2f 20 22 71 75 65 72 79 5f 6f 6e 6c 79    */ "query_only
2de0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
2df0: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
2e00: 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72  FLAG,.    /* ePr
2e10: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
2e20: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2e30: 2a 2f 20 53 51 4c 49 54 45 5f 51 75 65 72 79 4f  */ SQLITE_QueryO
2e40: 6e 6c 79 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  nly },.#endif.#i
2e50: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2e60: 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
2e70: 5f 43 48 45 43 4b 29 0a 20 20 7b 20 2f 2a 20 7a  _CHECK).  { /* z
2e80: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 71 75  Name:     */ "qu
2e90: 69 63 6b 5f 63 68 65 63 6b 22 2c 0a 20 20 20 20  ick_check",.    
2ea0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2eb0: 20 50 72 61 67 54 79 70 5f 49 4e 54 45 47 52 49   PragTyp_INTEGRI
2ec0: 54 59 5f 43 48 45 43 4b 2c 0a 20 20 20 20 2f 2a  TY_CHECK,.    /*
2ed0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50   ePragFlag: */ P
2ee0: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
2ef0: 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a  ma,.    /* iArg:
2f00: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
2f10: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
2f20: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  d(SQLITE_OMIT_FL
2f30: 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20  AG_PRAGMAS).  { 
2f40: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
2f50: 20 22 72 65 61 64 5f 75 6e 63 6f 6d 6d 69 74 74   "read_uncommitt
2f60: 65 64 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ed",.    /* ePra
2f70: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
2f80: 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65  p_FLAG,.    /* e
2f90: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
2fa0: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
2fb0: 20 20 2a 2f 20 53 51 4c 49 54 45 5f 52 65 61 64    */ SQLITE_Read
2fc0: 55 6e 63 6f 6d 6d 69 74 74 65 64 20 7d 2c 0a 20  Uncommitted },. 
2fd0: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
2fe0: 20 2a 2f 20 22 72 65 63 75 72 73 69 76 65 5f 74   */ "recursive_t
2ff0: 72 69 67 67 65 72 73 22 2c 0a 20 20 20 20 2f 2a  riggers",.    /*
3000: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
3010: 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20  ragTyp_FLAG,.   
3020: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
3030: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
3040: 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45  :      */ SQLITE
3050: 5f 52 65 63 54 72 69 67 67 65 72 73 20 7d 2c 0a  _RecTriggers },.
3060: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
3070: 65 64 28 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f  ed(SQLITE_HAS_CO
3080: 44 45 43 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  DEC).  { /* zNam
3090: 65 3a 20 20 20 20 20 2a 2f 20 22 72 65 6b 65 79  e:     */ "rekey
30a0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
30b0: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
30c0: 52 45 4b 45 59 2c 0a 20 20 20 20 2f 2a 20 65 50  REKEY,.    /* eP
30d0: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
30e0: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
30f0: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
3100: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
3110: 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52  ITE_OMIT_FLAG_PR
3120: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
3130: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 72 65 76  ame:     */ "rev
3140: 65 72 73 65 5f 75 6e 6f 72 64 65 72 65 64 5f 73  erse_unordered_s
3150: 65 6c 65 63 74 73 22 2c 0a 20 20 20 20 2f 2a 20  elects",.    /* 
3160: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
3170: 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20  agTyp_FLAG,.    
3180: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
3190: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
31a0: 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f        */ SQLITE_
31b0: 52 65 76 65 72 73 65 4f 72 64 65 72 20 7d 2c 0a  ReverseOrder },.
31c0: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
31d0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
31e0: 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50  SCHEMA_VERSION_P
31f0: 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a  RAGMAS).  { /* z
3200: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 73 63  Name:     */ "sc
3210: 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22 2c 0a 20  hema_version",. 
3220: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
3230: 20 2a 2f 20 50 72 61 67 54 79 70 5f 48 45 41 44   */ PragTyp_HEAD
3240: 45 52 5f 56 41 4c 55 45 2c 0a 20 20 20 20 2f 2a  ER_VALUE,.    /*
3250: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
3260: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
3270: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
3280: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
3290: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
32a0: 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f  R_PRAGMAS).  { /
32b0: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
32c0: 22 73 65 63 75 72 65 5f 64 65 6c 65 74 65 22 2c  "secure_delete",
32d0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
32e0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 53 45  :  */ PragTyp_SE
32f0: 43 55 52 45 5f 44 45 4c 45 54 45 2c 0a 20 20 20  CURE_DELETE,.   
3300: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
3310: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
3320: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
3330: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
3340: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
3350: 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  LAG_PRAGMAS).  {
3360: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
3370: 2f 20 22 73 68 6f 72 74 5f 63 6f 6c 75 6d 6e 5f  / "short_column_
3380: 6e 61 6d 65 73 22 2c 0a 20 20 20 20 2f 2a 20 65  names",.    /* e
3390: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
33a0: 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f  gTyp_FLAG,.    /
33b0: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
33c0: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
33d0: 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 53       */ SQLITE_S
33e0: 68 6f 72 74 43 6f 6c 4e 61 6d 65 73 20 7d 2c 0a  hortColNames },.
33f0: 23 65 6e 64 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e  #endif.  { /* zN
3400: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 73 68 72  ame:     */ "shr
3410: 69 6e 6b 5f 6d 65 6d 6f 72 79 22 2c 0a 20 20 20  ink_memory",.   
3420: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
3430: 2f 20 50 72 61 67 54 79 70 5f 53 48 52 49 4e 4b  / PragTyp_SHRINK
3440: 5f 4d 45 4d 4f 52 59 2c 0a 20 20 20 20 2f 2a 20  _MEMORY,.    /* 
3450: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
3460: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
3470: 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f     */ 0 },.  { /
3480: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
3490: 22 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74  "soft_heap_limit
34a0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
34b0: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
34c0: 53 4f 46 54 5f 48 45 41 50 5f 4c 49 4d 49 54 2c  SOFT_HEAP_LIMIT,
34d0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
34e0: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
34f0: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
3500: 7d 2c 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  },.#if !defined(
3510: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47  SQLITE_OMIT_FLAG
3520: 5f 50 52 41 47 4d 41 53 29 0a 23 69 66 20 64 65  _PRAGMAS).#if de
3530: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
3540: 55 47 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  UG).  { /* zName
3550: 3a 20 20 20 20 20 2a 2f 20 22 73 71 6c 5f 74 72  :     */ "sql_tr
3560: 61 63 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ace",.    /* ePr
3570: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
3580: 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20  yp_FLAG,.    /* 
3590: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
35a0: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
35b0: 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 53 71 6c     */ SQLITE_Sql
35c0: 54 72 61 63 65 20 7d 2c 0a 23 65 6e 64 69 66 0a  Trace },.#endif.
35d0: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
35e0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
35f0: 53 43 48 45 4d 41 5f 50 52 41 47 4d 41 53 29 0a  SCHEMA_PRAGMAS).
3600: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
3610: 20 20 2a 2f 20 22 73 74 61 74 73 22 2c 0a 20 20    */ "stats",.  
3620: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
3630: 2a 2f 20 50 72 61 67 54 79 70 5f 53 54 41 54 53  */ PragTyp_STATS
3640: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
3650: 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f  ag: */ PragFlag_
3660: 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20  NeedSchema,.    
3670: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
3680: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
3690: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
36a0: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
36b0: 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  MAS).  { /* zNam
36c0: 65 3a 20 20 20 20 20 2a 2f 20 22 73 79 6e 63 68  e:     */ "synch
36d0: 72 6f 6e 6f 75 73 22 2c 0a 20 20 20 20 2f 2a 20  ronous",.    /* 
36e0: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
36f0: 61 67 54 79 70 5f 53 59 4e 43 48 52 4f 4e 4f 55  agTyp_SYNCHRONOU
3700: 53 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  S,.    /* ePragF
3710: 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67  lag: */ PragFlag
3720: 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20  _NeedSchema,.   
3730: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
3740: 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  / 0 },.#endif.#i
3750: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
3760: 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52  E_OMIT_SCHEMA_PR
3770: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
3780: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 74 61 62  ame:     */ "tab
3790: 6c 65 5f 69 6e 66 6f 22 2c 0a 20 20 20 20 2f 2a  le_info",.    /*
37a0: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
37b0: 72 61 67 54 79 70 5f 54 41 42 4c 45 5f 49 4e 46  ragTyp_TABLE_INF
37c0: 4f 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  O,.    /* ePragF
37d0: 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67  lag: */ PragFlag
37e0: 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20  _NeedSchema,.   
37f0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
3800: 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  / 0 },.#endif.#i
3810: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
3820: 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
3830: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
3840: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 74 65 6d 70  me:     */ "temp
3850: 5f 73 74 6f 72 65 22 2c 0a 20 20 20 20 2f 2a 20  _store",.    /* 
3860: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
3870: 61 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45  agTyp_TEMP_STORE
3880: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
3890: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
38a0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
38b0: 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65   },.  { /* zName
38c0: 3a 20 20 20 20 20 2a 2f 20 22 74 65 6d 70 5f 73  :     */ "temp_s
38d0: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 22 2c  tore_directory",
38e0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
38f0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 54 45  :  */ PragTyp_TE
3900: 4d 50 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f  MP_STORE_DIRECTO
3910: 52 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  RY,.    /* ePrag
3920: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
3930: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
3940: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7b   0 },.#endif.  {
3950: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
3960: 2f 20 22 74 68 72 65 61 64 73 22 2c 0a 20 20 20  / "threads",.   
3970: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
3980: 2f 20 50 72 61 67 54 79 70 5f 54 48 52 45 41 44  / PragTyp_THREAD
3990: 53 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  S,.    /* ePragF
39a0: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
39b0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
39c0: 30 20 7d 2c 0a 23 69 66 20 21 64 65 66 69 6e 65  0 },.#if !define
39d0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43  d(SQLITE_OMIT_SC
39e0: 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41  HEMA_VERSION_PRA
39f0: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
3a00: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 75 73 65 72  me:     */ "user
3a10: 5f 76 65 72 73 69 6f 6e 22 2c 0a 20 20 20 20 2f  _version",.    /
3a20: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
3a30: 50 72 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56  PragTyp_HEADER_V
3a40: 41 4c 55 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ALUE,.    /* ePr
3a50: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
3a60: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
3a70: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
3a80: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
3a90: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
3aa0: 47 4d 41 53 29 0a 23 69 66 20 64 65 66 69 6e 65  GMAS).#if define
3ab0: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a  d(SQLITE_DEBUG).
3ac0: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
3ad0: 20 20 2a 2f 20 22 76 64 62 65 5f 61 64 64 6f 70    */ "vdbe_addop
3ae0: 74 72 61 63 65 22 2c 0a 20 20 20 20 2f 2a 20 65  trace",.    /* e
3af0: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
3b00: 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f  gTyp_FLAG,.    /
3b10: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
3b20: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
3b30: 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 56       */ SQLITE_V
3b40: 64 62 65 41 64 64 6f 70 54 72 61 63 65 20 7d 2c  dbeAddopTrace },
3b50: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
3b60: 20 20 20 2a 2f 20 22 76 64 62 65 5f 64 65 62 75     */ "vdbe_debu
3b70: 67 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  g",.    /* ePrag
3b80: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
3b90: 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50  _FLAG,.    /* eP
3ba0: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
3bb0: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
3bc0: 20 2a 2f 20 53 51 4c 49 54 45 5f 53 71 6c 54 72   */ SQLITE_SqlTr
3bd0: 61 63 65 7c 53 51 4c 49 54 45 5f 56 64 62 65 4c  ace|SQLITE_VdbeL
3be0: 69 73 74 69 6e 67 7c 53 51 4c 49 54 45 5f 56 64  isting|SQLITE_Vd
3bf0: 62 65 54 72 61 63 65 20 7d 2c 0a 20 20 7b 20 2f  beTrace },.  { /
3c00: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
3c10: 22 76 64 62 65 5f 65 71 70 22 2c 0a 20 20 20 20  "vdbe_eqp",.    
3c20: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
3c30: 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20   PragTyp_FLAG,. 
3c40: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
3c50: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
3c60: 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49  rg:      */ SQLI
3c70: 54 45 5f 56 64 62 65 45 51 50 20 7d 2c 0a 20 20  TE_VdbeEQP },.  
3c80: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
3c90: 2a 2f 20 22 76 64 62 65 5f 6c 69 73 74 69 6e 67  */ "vdbe_listing
3ca0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
3cb0: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
3cc0: 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72  FLAG,.    /* ePr
3cd0: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
3ce0: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
3cf0: 2a 2f 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69  */ SQLITE_VdbeLi
3d00: 73 74 69 6e 67 20 7d 2c 0a 20 20 7b 20 2f 2a 20  sting },.  { /* 
3d10: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76  zName:     */ "v
3d20: 64 62 65 5f 74 72 61 63 65 22 2c 0a 20 20 20 20  dbe_trace",.    
3d30: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
3d40: 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20   PragTyp_FLAG,. 
3d50: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
3d60: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
3d70: 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49  rg:      */ SQLI
3d80: 54 45 5f 56 64 62 65 54 72 61 63 65 20 7d 2c 0a  TE_VdbeTrace },.
3d90: 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69  #endif.#endif.#i
3da0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
3db0: 45 5f 4f 4d 49 54 5f 57 41 4c 29 0a 20 20 7b 20  E_OMIT_WAL).  { 
3dc0: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
3dd0: 20 22 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70   "wal_autocheckp
3de0: 6f 69 6e 74 22 2c 0a 20 20 20 20 2f 2a 20 65 50  oint",.    /* eP
3df0: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
3e00: 54 79 70 5f 57 41 4c 5f 41 55 54 4f 43 48 45 43  Typ_WAL_AUTOCHEC
3e10: 4b 50 4f 49 4e 54 2c 0a 20 20 20 20 2f 2a 20 65  KPOINT,.    /* e
3e20: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
3e30: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
3e40: 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a    */ 0 },.  { /*
3e50: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
3e60: 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e 74 22 2c  wal_checkpoint",
3e70: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
3e80: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 57 41  :  */ PragTyp_WA
3e90: 4c 5f 43 48 45 43 4b 50 4f 49 4e 54 2c 0a 20 20  L_CHECKPOINT,.  
3ea0: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
3eb0: 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64  */ PragFlag_Need
3ec0: 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69  Schema,.    /* i
3ed0: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
3ee0: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ,.#endif.#if !de
3ef0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
3f00: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a  T_FLAG_PRAGMAS).
3f10: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
3f20: 20 20 2a 2f 20 22 77 72 69 74 61 62 6c 65 5f 73    */ "writable_s
3f30: 63 68 65 6d 61 22 2c 0a 20 20 20 20 2f 2a 20 65  chema",.    /* e
3f40: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
3f50: 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f  gTyp_FLAG,.    /
3f60: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
3f70: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
3f80: 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 57       */ SQLITE_W
3f90: 72 69 74 65 53 63 68 65 6d 61 7c 53 51 4c 49 54  riteSchema|SQLIT
3fa0: 45 5f 52 65 63 6f 76 65 72 79 4d 6f 64 65 20 7d  E_RecoveryMode }
3fb0: 2c 0a 23 65 6e 64 69 66 0a 7d 3b 0a 2f 2a 20 4e  ,.#endif.};./* N
3fc0: 75 6d 62 65 72 20 6f 66 20 70 72 61 67 6d 61 73  umber of pragmas
3fd0: 3a 20 35 39 20 6f 6e 20 62 79 20 64 65 66 61 75  : 59 on by defau
3fe0: 6c 74 2c 20 37 32 20 74 6f 74 61 6c 2e 20 2a 2f  lt, 72 total. */
3ff0: 0a 2f 2a 20 45 6e 64 20 6f 66 20 74 68 65 20 61  ./* End of the a
4000: 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e  utomatically gen
4010: 65 72 61 74 65 64 20 70 72 61 67 6d 61 20 74 61  erated pragma ta
4020: 62 6c 65 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ble..***********
4030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4040: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4050: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4060: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4070: 2f 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  /../*.** Interpr
4080: 65 74 20 74 68 65 20 67 69 76 65 6e 20 73 74 72  et the given str
4090: 69 6e 67 20 61 73 20 61 20 73 61 66 65 74 79 20  ing as a safety 
40a0: 6c 65 76 65 6c 2e 20 20 52 65 74 75 72 6e 20 30  level.  Return 0
40b0: 20 66 6f 72 20 4f 46 46 2c 0a 2a 2a 20 31 20 66   for OFF,.** 1 f
40c0: 6f 72 20 4f 4e 20 6f 72 20 4e 4f 52 4d 41 4c 20  or ON or NORMAL 
40d0: 61 6e 64 20 32 20 66 6f 72 20 46 55 4c 4c 2e 20  and 2 for FULL. 
40e0: 20 52 65 74 75 72 6e 20 31 20 66 6f 72 20 61 6e   Return 1 for an
40f0: 20 65 6d 70 74 79 20 6f 72 20 0a 2a 2a 20 75 6e   empty or .** un
4100: 72 65 63 6f 67 6e 69 7a 65 64 20 73 74 72 69 6e  recognized strin
4110: 67 20 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 65  g argument.  The
4120: 20 46 55 4c 4c 20 6f 70 74 69 6f 6e 20 69 73 20   FULL option is 
4130: 64 69 73 61 6c 6c 6f 77 65 64 0a 2a 2a 20 69 66  disallowed.** if
4140: 20 74 68 65 20 6f 6d 69 74 46 75 6c 6c 20 70 61   the omitFull pa
4150: 72 61 6d 65 74 65 72 20 69 74 20 31 2e 0a 2a 2a  rameter it 1..**
4160: 0a 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68  .** Note that th
4170: 65 20 76 61 6c 75 65 73 20 72 65 74 75 72 6e 65  e values returne
4180: 64 20 61 72 65 20 6f 6e 65 20 6c 65 73 73 20 74  d are one less t
4190: 68 61 74 20 74 68 65 20 76 61 6c 75 65 73 20 74  hat the values t
41a0: 68 61 74 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65  hat.** should be
41b0: 20 70 61 73 73 65 64 20 69 6e 74 6f 20 73 71 6c   passed into sql
41c0: 69 74 65 33 42 74 72 65 65 53 65 74 53 61 66 65  ite3BtreeSetSafe
41d0: 74 79 4c 65 76 65 6c 28 29 2e 20 20 54 68 65 20  tyLevel().  The 
41e0: 69 73 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 73 75  is done.** to su
41f0: 70 70 6f 72 74 20 6c 65 67 61 63 79 20 53 51 4c  pport legacy SQL
4200: 20 63 6f 64 65 2e 20 20 54 68 65 20 73 61 66 65   code.  The safe
4210: 74 79 20 6c 65 76 65 6c 20 75 73 65 64 20 74 6f  ty level used to
4220: 20 62 65 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 61   be boolean.** a
4230: 6e 64 20 6f 6c 64 65 72 20 73 63 72 69 70 74 73  nd older scripts
4240: 20 6d 61 79 20 68 61 76 65 20 75 73 65 64 20 6e   may have used n
4250: 75 6d 62 65 72 73 20 30 20 66 6f 72 20 4f 46 46  umbers 0 for OFF
4260: 20 61 6e 64 20 31 20 66 6f 72 20 4f 4e 2e 0a 2a   and 1 for ON..*
4270: 2f 0a 73 74 61 74 69 63 20 75 38 20 67 65 74 53  /.static u8 getS
4280: 61 66 65 74 79 4c 65 76 65 6c 28 63 6f 6e 73 74  afetyLevel(const
4290: 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6f 6d   char *z, int om
42a0: 69 74 46 75 6c 6c 2c 20 75 38 20 64 66 6c 74 29  itFull, u8 dflt)
42b0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
42c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
42d0: 2a 20 31 32 33 34 35 36 37 38 39 20 31 32 33 34  * 123456789 1234
42e0: 35 36 37 38 39 20 2a 2f 0a 20 20 73 74 61 74 69  56789 */.  stati
42f0: 63 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 54 65  c const char zTe
4300: 78 74 5b 5d 20 3d 20 22 6f 6e 6f 66 66 61 6c 73  xt[] = "onoffals
4310: 65 79 65 73 74 72 75 65 66 75 6c 6c 22 3b 0a 20  eyestruefull";. 
4320: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38   static const u8
4330: 20 69 4f 66 66 73 65 74 5b 5d 20 3d 20 7b 30 2c   iOffset[] = {0,
4340: 20 31 2c 20 32 2c 20 34 2c 20 39 2c 20 31 32 2c   1, 2, 4, 9, 12,
4350: 20 31 36 7d 3b 0a 20 20 73 74 61 74 69 63 20 63   16};.  static c
4360: 6f 6e 73 74 20 75 38 20 69 4c 65 6e 67 74 68 5b  onst u8 iLength[
4370: 5d 20 3d 20 7b 32 2c 20 32 2c 20 33 2c 20 35 2c  ] = {2, 2, 3, 5,
4380: 20 33 2c 20 34 2c 20 34 7d 3b 0a 20 20 73 74 61   3, 4, 4};.  sta
4390: 74 69 63 20 63 6f 6e 73 74 20 75 38 20 69 56 61  tic const u8 iVa
43a0: 6c 75 65 5b 5d 20 3d 20 20 7b 31 2c 20 30 2c 20  lue[] =  {1, 0, 
43b0: 30 2c 20 30 2c 20 31 2c 20 31 2c 20 32 7d 3b 0a  0, 0, 1, 1, 2};.
43c0: 20 20 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 69 66    int i, n;.  if
43d0: 28 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74  ( sqlite3Isdigit
43e0: 28 2a 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75  (*z) ){.    retu
43f0: 72 6e 20 28 75 38 29 73 71 6c 69 74 65 33 41 74  rn (u8)sqlite3At
4400: 6f 69 28 7a 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d  oi(z);.  }.  n =
4410: 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30   sqlite3Strlen30
4420: 28 7a 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20  (z);.  for(i=0; 
4430: 69 3c 41 72 72 61 79 53 69 7a 65 28 69 4c 65 6e  i<ArraySize(iLen
4440: 67 74 68 29 2d 6f 6d 69 74 46 75 6c 6c 3b 20 69  gth)-omitFull; i
4450: 2b 2b 29 7b 0a 20 20 20 20 69 66 28 20 69 4c 65  ++){.    if( iLe
4460: 6e 67 74 68 5b 69 5d 3d 3d 6e 20 26 26 20 73 71  ngth[i]==n && sq
4470: 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 26 7a  lite3StrNICmp(&z
4480: 54 65 78 74 5b 69 4f 66 66 73 65 74 5b 69 5d 5d  Text[iOffset[i]]
4490: 2c 7a 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ,z,n)==0 ){.    
44a0: 20 20 72 65 74 75 72 6e 20 69 56 61 6c 75 65 5b    return iValue[
44b0: 69 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  i];.    }.  }.  
44c0: 72 65 74 75 72 6e 20 64 66 6c 74 3b 0a 7d 0a 0a  return dflt;.}..
44d0: 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  /*.** Interpret 
44e0: 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67  the given string
44f0: 20 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61   as a boolean va
4500: 6c 75 65 2e 0a 2a 2f 0a 75 38 20 73 71 6c 69 74  lue..*/.u8 sqlit
4510: 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e  e3GetBoolean(con
4520: 73 74 20 63 68 61 72 20 2a 7a 2c 20 75 38 20 64  st char *z, u8 d
4530: 66 6c 74 29 7b 0a 20 20 72 65 74 75 72 6e 20 67  flt){.  return g
4540: 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 7a 2c  etSafetyLevel(z,
4550: 31 2c 64 66 6c 74 29 21 3d 30 3b 0a 7d 0a 0a 2f  1,dflt)!=0;.}../
4560: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 47 65 74  * The sqlite3Get
4570: 42 6f 6f 6c 65 61 6e 28 29 20 66 75 6e 63 74 69  Boolean() functi
4580: 6f 6e 20 69 73 20 75 73 65 64 20 62 79 20 6f 74  on is used by ot
4590: 68 65 72 20 6d 6f 64 75 6c 65 73 20 62 75 74 20  her modules but 
45a0: 74 68 65 0a 2a 2a 20 72 65 6d 61 69 6e 64 65 72  the.** remainder
45b0: 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20 69 73   of this file is
45c0: 20 73 70 65 63 69 66 69 63 20 74 6f 20 50 52 41   specific to PRA
45d0: 47 4d 41 20 70 72 6f 63 65 73 73 69 6e 67 2e 20  GMA processing. 
45e0: 20 53 6f 20 6f 6d 69 74 0a 2a 2a 20 74 68 65 20   So omit.** the 
45f0: 72 65 73 74 20 6f 66 20 74 68 65 20 66 69 6c 65  rest of the file
4600: 20 69 66 20 50 52 41 47 4d 41 73 20 61 72 65 20   if PRAGMAs are 
4610: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
4620: 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21   build..*/.#if !
4630: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
4640: 4d 49 54 5f 50 52 41 47 4d 41 29 0a 0a 2f 2a 0a  MIT_PRAGMA)../*.
4650: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
4660: 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73   given string as
4670: 20 61 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20   a locking mode 
4680: 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  value..*/.static
4690: 20 69 6e 74 20 67 65 74 4c 6f 63 6b 69 6e 67 4d   int getLockingM
46a0: 6f 64 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ode(const char *
46b0: 7a 29 7b 0a 20 20 69 66 28 20 7a 20 29 7b 0a 20  z){.  if( z ){. 
46c0: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
46d0: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 65 78 63  3StrICmp(z, "exc
46e0: 6c 75 73 69 76 65 22 29 20 29 20 72 65 74 75 72  lusive") ) retur
46f0: 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  n PAGER_LOCKINGM
4700: 4f 44 45 5f 45 58 43 4c 55 53 49 56 45 3b 0a 20  ODE_EXCLUSIVE;. 
4710: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
4720: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 72  3StrICmp(z, "nor
4730: 6d 61 6c 22 29 20 29 20 72 65 74 75 72 6e 20 50  mal") ) return P
4740: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
4750: 5f 4e 4f 52 4d 41 4c 3b 0a 20 20 7d 0a 20 20 72  _NORMAL;.  }.  r
4760: 65 74 75 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b  eturn PAGER_LOCK
4770: 49 4e 47 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 7d  INGMODE_QUERY;.}
4780: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
4790: 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
47a0: 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  ./*.** Interpret
47b0: 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e   the given strin
47c0: 67 20 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63  g as an auto-vac
47d0: 75 75 6d 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a  uum mode value..
47e0: 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  **.** The follow
47f0: 69 6e 67 20 73 74 72 69 6e 67 73 2c 20 22 6e 6f  ing strings, "no
4800: 6e 65 22 2c 20 22 66 75 6c 6c 22 20 61 6e 64 20  ne", "full" and 
4810: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 20 61 72  "incremental" ar
4820: 65 20 0a 2a 2a 20 61 63 63 65 70 74 61 62 6c 65  e .** acceptable
4830: 2c 20 61 73 20 61 72 65 20 74 68 65 69 72 20 6e  , as are their n
4840: 75 6d 65 72 69 63 20 65 71 75 69 76 61 6c 65 6e  umeric equivalen
4850: 74 73 3a 20 30 2c 20 31 20 61 6e 64 20 32 20 72  ts: 0, 1 and 2 r
4860: 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a  espectively..*/.
4870: 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 41 75  static int getAu
4880: 74 6f 56 61 63 75 75 6d 28 63 6f 6e 73 74 20 63  toVacuum(const c
4890: 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69  har *z){.  int i
48a0: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
48b0: 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f  e3StrICmp(z, "no
48c0: 6e 65 22 29 20 29 20 72 65 74 75 72 6e 20 42 54  ne") ) return BT
48d0: 52 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 4e  REE_AUTOVACUUM_N
48e0: 4f 4e 45 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  ONE;.  if( 0==sq
48f0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
4900: 22 66 75 6c 6c 22 29 20 29 20 72 65 74 75 72 6e  "full") ) return
4910: 20 42 54 52 45 45 5f 41 55 54 4f 56 41 43 55 55   BTREE_AUTOVACUU
4920: 4d 5f 46 55 4c 4c 3b 0a 20 20 69 66 28 20 30 3d  M_FULL;.  if( 0=
4930: 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28  =sqlite3StrICmp(
4940: 7a 2c 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22  z, "incremental"
4950: 29 20 29 20 72 65 74 75 72 6e 20 42 54 52 45 45  ) ) return BTREE
4960: 5f 41 55 54 4f 56 41 43 55 55 4d 5f 49 4e 43 52  _AUTOVACUUM_INCR
4970: 3b 0a 20 20 69 20 3d 20 73 71 6c 69 74 65 33 41  ;.  i = sqlite3A
4980: 74 6f 69 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e  toi(z);.  return
4990: 20 28 75 38 29 28 28 69 3e 3d 30 26 26 69 3c 3d   (u8)((i>=0&&i<=
49a0: 32 29 3f 69 3a 30 29 3b 0a 7d 0a 23 65 6e 64 69  2)?i:0);.}.#endi
49b0: 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49  f /* ifndef SQLI
49c0: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
49d0: 55 4d 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  UM */..#ifndef S
49e0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
49f0: 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49  _PRAGMAS./*.** I
4a00: 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69 76  nterpret the giv
4a10: 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20 74  en string as a t
4a20: 65 6d 70 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e  emp db location.
4a30: 20 52 65 74 75 72 6e 20 31 20 66 6f 72 20 66 69   Return 1 for fi
4a40: 6c 65 0a 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d  le.** backed tem
4a50: 70 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 73  porary databases
4a60: 2c 20 32 20 66 6f 72 20 74 68 65 20 52 65 64 2d  , 2 for the Red-
4a70: 42 6c 61 63 6b 20 74 72 65 65 20 69 6e 20 6d 65  Black tree in me
4a80: 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a  mory database.**
4a90: 20 61 6e 64 20 30 20 74 6f 20 75 73 65 20 74 68   and 0 to use th
4aa0: 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64  e compile-time d
4ab0: 65 66 61 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69  efault..*/.stati
4ac0: 63 20 69 6e 74 20 67 65 74 54 65 6d 70 53 74 6f  c int getTempSto
4ad0: 72 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  re(const char *z
4ae0: 29 7b 0a 20 20 69 66 28 20 7a 5b 30 5d 3e 3d 27  ){.  if( z[0]>='
4af0: 30 27 20 26 26 20 7a 5b 30 5d 3c 3d 27 32 27 20  0' && z[0]<='2' 
4b00: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 7a 5b  ){.    return z[
4b10: 30 5d 20 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73  0] - '0';.  }els
4b20: 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
4b30: 49 43 6d 70 28 7a 2c 20 22 66 69 6c 65 22 29 3d  ICmp(z, "file")=
4b40: 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
4b50: 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   1;.  }else if( 
4b60: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
4b70: 2c 20 22 6d 65 6d 6f 72 79 22 29 3d 3d 30 20 29  , "memory")==0 )
4b80: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 32 3b 0a  {.    return 2;.
4b90: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74    }else{.    ret
4ba0: 75 72 6e 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e  urn 0;.  }.}.#en
4bb0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41  dif /* SQLITE_PA
4bc0: 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  GER_PRAGMAS */..
4bd0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
4be0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
4bf0: 53 0a 2f 2a 0a 2a 2a 20 49 6e 76 61 6c 69 64 61  S./*.** Invalida
4c00: 74 65 20 74 65 6d 70 20 73 74 6f 72 61 67 65 2c  te temp storage,
4c10: 20 65 69 74 68 65 72 20 77 68 65 6e 20 74 68 65   either when the
4c20: 20 74 65 6d 70 20 73 74 6f 72 61 67 65 20 69 73   temp storage is
4c30: 20 63 68 61 6e 67 65 64 0a 2a 2a 20 66 72 6f 6d   changed.** from
4c40: 20 64 65 66 61 75 6c 74 2c 20 6f 72 20 77 68 65   default, or whe
4c50: 6e 20 27 66 69 6c 65 27 20 61 6e 64 20 74 68 65  n 'file' and the
4c60: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
4c70: 63 74 6f 72 79 20 68 61 73 20 63 68 61 6e 67 65  ctory has change
4c80: 64 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  d.*/.static int 
4c90: 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74  invalidateTempSt
4ca0: 6f 72 61 67 65 28 50 61 72 73 65 20 2a 70 50 61  orage(Parse *pPa
4cb0: 72 73 65 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  rse){.  sqlite3 
4cc0: 2a 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62  *db = pParse->db
4cd0: 3b 0a 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b  ;.  if( db->aDb[
4ce0: 31 5d 2e 70 42 74 21 3d 30 20 29 7b 0a 20 20 20  1].pBt!=0 ){.   
4cf0: 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f   if( !db->autoCo
4d00: 6d 6d 69 74 20 7c 7c 20 73 71 6c 69 74 65 33 42  mmit || sqlite3B
4d10: 74 72 65 65 49 73 49 6e 52 65 61 64 54 72 61 6e  treeIsInReadTran
4d20: 73 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74  s(db->aDb[1].pBt
4d30: 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ) ){.      sqlit
4d40: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
4d50: 65 2c 20 22 74 65 6d 70 6f 72 61 72 79 20 73 74  e, "temporary st
4d60: 6f 72 61 67 65 20 63 61 6e 6e 6f 74 20 62 65 20  orage cannot be 
4d70: 63 68 61 6e 67 65 64 20 22 0a 20 20 20 20 20 20  changed ".      
4d80: 20 20 22 66 72 6f 6d 20 77 69 74 68 69 6e 20 61    "from within a
4d90: 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a   transaction");.
4da0: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
4db0: 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
4dc0: 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
4dd0: 65 43 6c 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31  eClose(db->aDb[1
4de0: 5d 2e 70 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e  ].pBt);.    db->
4df0: 61 44 62 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a  aDb[1].pBt = 0;.
4e00: 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
4e10: 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
4e20: 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a  ection(db);.  }.
4e30: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
4e40: 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  OK;.}.#endif /* 
4e50: 53 51 4c 49 54 45 5f 50 41 47 45 52 5f 50 52 41  SQLITE_PAGER_PRA
4e60: 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GMAS */..#ifndef
4e70: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
4e80: 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a  ER_PRAGMAS./*.**
4e90: 20 49 66 20 74 68 65 20 54 45 4d 50 20 64 61 74   If the TEMP dat
4ea0: 61 62 61 73 65 20 69 73 20 6f 70 65 6e 2c 20 63  abase is open, c
4eb0: 6c 6f 73 65 20 69 74 20 61 6e 64 20 6d 61 72 6b  lose it and mark
4ec0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
4ed0: 68 65 6d 61 0a 2a 2a 20 61 73 20 6e 65 65 64 69  hema.** as needi
4ee0: 6e 67 20 72 65 6c 6f 61 64 69 6e 67 2e 20 20 54  ng reloading.  T
4ef0: 68 69 73 20 6d 75 73 74 20 62 65 20 64 6f 6e 65  his must be done
4f00: 20 77 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20   when using the 
4f10: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
4f20: 45 0a 2a 2a 20 6f 72 20 44 45 46 41 55 4c 54 5f  E.** or DEFAULT_
4f30: 54 45 4d 50 5f 53 54 4f 52 45 20 70 72 61 67 6d  TEMP_STORE pragm
4f40: 61 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  as..*/.static in
4f50: 74 20 63 68 61 6e 67 65 54 65 6d 70 53 74 6f 72  t changeTempStor
4f60: 61 67 65 28 50 61 72 73 65 20 2a 70 50 61 72 73  age(Parse *pPars
4f70: 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  e, const char *z
4f80: 53 74 6f 72 61 67 65 54 79 70 65 29 7b 0a 20 20  StorageType){.  
4f90: 69 6e 74 20 74 73 20 3d 20 67 65 74 54 65 6d 70  int ts = getTemp
4fa0: 53 74 6f 72 65 28 7a 53 74 6f 72 61 67 65 54 79  Store(zStorageTy
4fb0: 70 65 29 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a  pe);.  sqlite3 *
4fc0: 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b  db = pParse->db;
4fd0: 0a 20 20 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f  .  if( db->temp_
4fe0: 73 74 6f 72 65 3d 3d 74 73 20 29 20 72 65 74 75  store==ts ) retu
4ff0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20  rn SQLITE_OK;.  
5000: 69 66 28 20 69 6e 76 61 6c 69 64 61 74 65 54 65  if( invalidateTe
5010: 6d 70 53 74 6f 72 61 67 65 28 20 70 50 61 72 73  mpStorage( pPars
5020: 65 20 29 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b  e ) != SQLITE_OK
5030: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
5040: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
5050: 0a 20 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  .  db->temp_stor
5060: 65 20 3d 20 28 75 38 29 74 73 3b 0a 20 20 72 65  e = (u8)ts;.  re
5070: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
5080: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
5090: 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  TE_PAGER_PRAGMAS
50a0: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72   */../*.** Gener
50b0: 61 74 65 20 63 6f 64 65 20 74 6f 20 72 65 74 75  ate code to retu
50c0: 72 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e 74 65  rn a single inte
50d0: 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74  ger value..*/.st
50e0: 61 74 69 63 20 76 6f 69 64 20 72 65 74 75 72 6e  atic void return
50f0: 53 69 6e 67 6c 65 49 6e 74 28 50 61 72 73 65 20  SingleInt(Parse 
5100: 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
5110: 68 61 72 20 2a 7a 4c 61 62 65 6c 2c 20 69 36 34  har *zLabel, i64
5120: 20 76 61 6c 75 65 29 7b 0a 20 20 56 64 62 65 20   value){.  Vdbe 
5130: 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56  *v = sqlite3GetV
5140: 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 69  dbe(pParse);.  i
5150: 6e 74 20 6d 65 6d 20 3d 20 2b 2b 70 50 61 72 73  nt mem = ++pPars
5160: 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 69 36 34 20 2a  e->nMem;.  i64 *
5170: 70 49 36 34 20 3d 20 73 71 6c 69 74 65 33 44 62  pI64 = sqlite3Db
5180: 4d 61 6c 6c 6f 63 52 61 77 28 70 50 61 72 73 65  MallocRaw(pParse
5190: 2d 3e 64 62 2c 20 73 69 7a 65 6f 66 28 76 61 6c  ->db, sizeof(val
51a0: 75 65 29 29 3b 0a 20 20 69 66 28 20 70 49 36 34  ue));.  if( pI64
51b0: 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70   ){.    memcpy(p
51c0: 49 36 34 2c 20 26 76 61 6c 75 65 2c 20 73 69 7a  I64, &value, siz
51d0: 65 6f 66 28 76 61 6c 75 65 29 29 3b 0a 20 20 7d  eof(value));.  }
51e0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64  .  sqlite3VdbeAd
51f0: 64 4f 70 34 28 76 2c 20 4f 50 5f 49 6e 74 36 34  dOp4(v, OP_Int64
5200: 2c 20 30 2c 20 6d 65 6d 2c 20 30 2c 20 28 63 68  , 0, mem, 0, (ch
5210: 61 72 2a 29 70 49 36 34 2c 20 50 34 5f 49 4e 54  ar*)pI64, P4_INT
5220: 36 34 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  64);.  sqlite3Vd
5230: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
5240: 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
5250: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
5260: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
5270: 7a 4c 61 62 65 6c 2c 20 53 51 4c 49 54 45 5f 53  zLabel, SQLITE_S
5280: 54 41 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65  TATIC);.  sqlite
5290: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
52a0: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 6d 65 6d  P_ResultRow, mem
52b0: 2c 20 31 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  , 1);.}.../*.** 
52c0: 53 65 74 20 74 68 65 20 73 61 66 65 74 79 5f 6c  Set the safety_l
52d0: 65 76 65 6c 20 61 6e 64 20 70 61 67 65 72 20 66  evel and pager f
52e0: 6c 61 67 73 20 66 6f 72 20 70 61 67 65 72 20 69  lags for pager i
52f0: 44 62 2e 20 20 4f 72 20 69 66 20 69 44 62 3c 30  Db.  Or if iDb<0
5300: 0a 2a 2a 20 73 65 74 20 74 68 65 73 65 20 76 61  .** set these va
5310: 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20 70 61 67  lues for all pag
5320: 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ers..*/.#ifndef 
5330: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
5340: 52 5f 50 52 41 47 4d 41 53 0a 73 74 61 74 69 63  R_PRAGMAS.static
5350: 20 76 6f 69 64 20 73 65 74 41 6c 6c 50 61 67 65   void setAllPage
5360: 72 46 6c 61 67 73 28 73 71 6c 69 74 65 33 20 2a  rFlags(sqlite3 *
5370: 64 62 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e 61  db){.  if( db->a
5380: 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
5390: 20 44 62 20 2a 70 44 62 20 3d 20 64 62 2d 3e 61   Db *pDb = db->a
53a0: 44 62 3b 0a 20 20 20 20 69 6e 74 20 6e 20 3d 20  Db;.    int n = 
53b0: 64 62 2d 3e 6e 44 62 3b 0a 20 20 20 20 61 73 73  db->nDb;.    ass
53c0: 65 72 74 28 20 53 51 4c 49 54 45 5f 46 75 6c 6c  ert( SQLITE_Full
53d0: 46 53 79 6e 63 3d 3d 50 41 47 45 52 5f 46 55 4c  FSync==PAGER_FUL
53e0: 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20 20 61 73  LFSYNC );.    as
53f0: 73 65 72 74 28 20 53 51 4c 49 54 45 5f 43 6b 70  sert( SQLITE_Ckp
5400: 74 46 75 6c 6c 46 53 79 6e 63 3d 3d 50 41 47 45  tFullFSync==PAGE
5410: 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43  R_CKPT_FULLFSYNC
5420: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
5430: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
5440: 6c 3d 3d 50 41 47 45 52 5f 43 41 43 48 45 53 50  l==PAGER_CACHESP
5450: 49 4c 4c 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ILL );.    asser
5460: 74 28 20 28 50 41 47 45 52 5f 46 55 4c 4c 46 53  t( (PAGER_FULLFS
5470: 59 4e 43 20 7c 20 50 41 47 45 52 5f 43 4b 50 54  YNC | PAGER_CKPT
5480: 5f 46 55 4c 4c 46 53 59 4e 43 20 7c 20 50 41 47  _FULLFSYNC | PAG
5490: 45 52 5f 43 41 43 48 45 53 50 49 4c 4c 29 0a 20  ER_CACHESPILL). 
54a0: 20 20 20 20 20 20 20 20 20 20 20 20 3d 3d 20 20              ==  
54b0: 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b  PAGER_FLAGS_MASK
54c0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
54d0: 28 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76  (pDb->safety_lev
54e0: 65 6c 20 26 20 50 41 47 45 52 5f 53 59 4e 43 48  el & PAGER_SYNCH
54f0: 52 4f 4e 4f 55 53 5f 4d 41 53 4b 29 3d 3d 70 44  RONOUS_MASK)==pD
5500: 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  b->safety_level 
5510: 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 6e  );.    while( (n
5520: 2d 2d 29 20 3e 20 30 20 29 7b 0a 20 20 20 20 20  --) > 0 ){.     
5530: 20 69 66 28 20 70 44 62 2d 3e 70 42 74 20 29 7b   if( pDb->pBt ){
5540: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
5550: 42 74 72 65 65 53 65 74 50 61 67 65 72 46 6c 61  BtreeSetPagerFla
5560: 67 73 28 70 44 62 2d 3e 70 42 74 2c 0a 20 20 20  gs(pDb->pBt,.   
5570: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44                pD
5580: 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  b->safety_level 
5590: 7c 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 50  | (db->flags & P
55a0: 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b 29  AGER_FLAGS_MASK)
55b0: 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   );.      }.    
55c0: 20 20 70 44 62 2b 2b 3b 0a 20 20 20 20 7d 0a 20    pDb++;.    }. 
55d0: 20 7d 0a 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66   }.}.#else.# def
55e0: 69 6e 65 20 73 65 74 41 6c 6c 50 61 67 65 72 46  ine setAllPagerF
55f0: 6c 61 67 73 28 58 29 20 20 2f 2a 20 6e 6f 2d 6f  lags(X)  /* no-o
5600: 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  p */.#endif.../*
5610: 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 68 75 6d  .** Return a hum
5620: 61 6e 2d 72 65 61 64 61 62 6c 65 20 6e 61 6d 65  an-readable name
5630: 20 66 6f 72 20 61 20 63 6f 6e 73 74 72 61 69 6e   for a constrain
5640: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 63 74  t resolution act
5650: 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ion..*/.#ifndef 
5660: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
5670: 49 47 4e 5f 4b 45 59 0a 73 74 61 74 69 63 20 63  IGN_KEY.static c
5680: 6f 6e 73 74 20 63 68 61 72 20 2a 61 63 74 69 6f  onst char *actio
5690: 6e 4e 61 6d 65 28 75 38 20 61 63 74 69 6f 6e 29  nName(u8 action)
56a0: 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
56b0: 7a 4e 61 6d 65 3b 0a 20 20 73 77 69 74 63 68 28  zName;.  switch(
56c0: 20 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 63   action ){.    c
56d0: 61 73 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 3a 20  ase OE_SetNull: 
56e0: 20 7a 4e 61 6d 65 20 3d 20 22 53 45 54 20 4e 55   zName = "SET NU
56f0: 4c 4c 22 3b 20 20 20 20 20 20 20 20 62 72 65 61  LL";        brea
5700: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 53  k;.    case OE_S
5710: 65 74 44 66 6c 74 3a 20 20 7a 4e 61 6d 65 20 3d  etDflt:  zName =
5720: 20 22 53 45 54 20 44 45 46 41 55 4c 54 22 3b 20   "SET DEFAULT"; 
5730: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
5740: 61 73 65 20 4f 45 5f 43 61 73 63 61 64 65 3a 20  ase OE_Cascade: 
5750: 20 7a 4e 61 6d 65 20 3d 20 22 43 41 53 43 41 44   zName = "CASCAD
5760: 45 22 3b 20 20 20 20 20 20 20 20 20 62 72 65 61  E";         brea
5770: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 52  k;.    case OE_R
5780: 65 73 74 72 69 63 74 3a 20 7a 4e 61 6d 65 20 3d  estrict: zName =
5790: 20 22 52 45 53 54 52 49 43 54 22 3b 20 20 20 20   "RESTRICT";    
57a0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64      break;.    d
57b0: 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 20 20  efault:         
57c0: 20 7a 4e 61 6d 65 20 3d 20 22 4e 4f 20 41 43 54   zName = "NO ACT
57d0: 49 4f 4e 22 3b 20 20 0a 20 20 20 20 20 20 20 20  ION";  .        
57e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
57f0: 73 65 72 74 28 20 61 63 74 69 6f 6e 3d 3d 4f 45  sert( action==OE
5800: 5f 4e 6f 6e 65 20 29 3b 20 62 72 65 61 6b 3b 0a  _None ); break;.
5810: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 4e 61    }.  return zNa
5820: 6d 65 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f  me;.}.#endif.../
5830: 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 65  *.** Parameter e
5840: 4d 6f 64 65 20 6d 75 73 74 20 62 65 20 6f 6e 65  Mode must be one
5850: 20 6f 66 20 74 68 65 20 50 41 47 45 52 5f 4a 4f   of the PAGER_JO
5860: 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 63 6f  URNALMODE_XXX co
5870: 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 66 69 6e  nstants.** defin
5880: 65 64 20 69 6e 20 70 61 67 65 72 2e 68 2e 20 54  ed in pager.h. T
5890: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  his function ret
58a0: 75 72 6e 73 20 74 68 65 20 61 73 73 6f 63 69 61  urns the associa
58b0: 74 65 64 20 6c 6f 77 65 72 63 61 73 65 0a 2a 2a  ted lowercase.**
58c0: 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 6e 61   journal-mode na
58d0: 6d 65 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61  me..*/.const cha
58e0: 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  r *sqlite3Journa
58f0: 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 20 65 4d  lModename(int eM
5900: 6f 64 65 29 7b 0a 20 20 73 74 61 74 69 63 20 63  ode){.  static c
5910: 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 4d 6f  har * const azMo
5920: 64 65 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20  deName[] = {.   
5930: 20 22 64 65 6c 65 74 65 22 2c 20 22 70 65 72 73   "delete", "pers
5940: 69 73 74 22 2c 20 22 6f 66 66 22 2c 20 22 74 72  ist", "off", "tr
5950: 75 6e 63 61 74 65 22 2c 20 22 6d 65 6d 6f 72 79  uncate", "memory
5960: 22 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ".#ifndef SQLITE
5970: 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 20 20 20 2c  _OMIT_WAL.     ,
5980: 20 22 77 61 6c 22 0a 23 65 6e 64 69 66 0a 20 20   "wal".#endif.  
5990: 7d 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47  };.  assert( PAG
59a0: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44  ER_JOURNALMODE_D
59b0: 45 4c 45 54 45 3d 3d 30 20 29 3b 0a 20 20 61 73  ELETE==0 );.  as
59c0: 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52  sert( PAGER_JOUR
59d0: 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 3d  NALMODE_PERSIST=
59e0: 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =1 );.  assert( 
59f0: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
5a00: 45 5f 4f 46 46 3d 3d 32 20 29 3b 0a 20 20 61 73  E_OFF==2 );.  as
5a10: 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52  sert( PAGER_JOUR
5a20: 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45  NALMODE_TRUNCATE
5a30: 3d 3d 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==3 );.  assert(
5a40: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
5a50: 44 45 5f 4d 45 4d 4f 52 59 3d 3d 34 20 29 3b 0a  DE_MEMORY==4 );.
5a60: 20 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f    assert( PAGER_
5a70: 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 3d  JOURNALMODE_WAL=
5a80: 3d 35 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =5 );.  assert( 
5a90: 65 4d 6f 64 65 3e 3d 30 20 26 26 20 65 4d 6f 64  eMode>=0 && eMod
5aa0: 65 3c 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 4d  e<=ArraySize(azM
5ab0: 6f 64 65 4e 61 6d 65 29 20 29 3b 0a 0a 20 20 69  odeName) );..  i
5ac0: 66 28 20 65 4d 6f 64 65 3d 3d 41 72 72 61 79 53  f( eMode==ArrayS
5ad0: 69 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29 20  ize(azModeName) 
5ae0: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 72 65  ) return 0;.  re
5af0: 74 75 72 6e 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b  turn azModeName[
5b00: 65 4d 6f 64 65 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  eMode];.}../*.**
5b10: 20 50 72 6f 63 65 73 73 20 61 20 70 72 61 67 6d   Process a pragm
5b20: 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 2a  a statement.  .*
5b30: 2a 0a 2a 2a 20 50 72 61 67 6d 61 73 20 61 72 65  *.** Pragmas are
5b40: 20 6f 66 20 74 68 69 73 20 66 6f 72 6d 3a 0a 2a   of this form:.*
5b50: 2a 0a 2a 2a 20 20 20 20 20 20 50 52 41 47 4d 41  *.**      PRAGMA
5b60: 20 5b 64 61 74 61 62 61 73 65 2e 5d 69 64 20 5b   [database.]id [
5b70: 3d 20 76 61 6c 75 65 5d 0a 2a 2a 0a 2a 2a 20 54  = value].**.** T
5b80: 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 6d 69  he identifier mi
5b90: 67 68 74 20 61 6c 73 6f 20 62 65 20 61 20 73 74  ght also be a st
5ba0: 72 69 6e 67 2e 20 20 54 68 65 20 76 61 6c 75 65  ring.  The value
5bb0: 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 61 6e   is a string, an
5bc0: 64 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 72 2c  d.** identifier,
5bd0: 20 6f 72 20 61 20 6e 75 6d 62 65 72 2e 20 20 49   or a number.  I
5be0: 66 20 6d 69 6e 75 73 46 6c 61 67 20 69 73 20 74  f minusFlag is t
5bf0: 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 76 61  rue, then the va
5c00: 6c 75 65 20 69 73 0a 2a 2a 20 61 20 6e 75 6d 62  lue is.** a numb
5c10: 65 72 20 74 68 61 74 20 77 61 73 20 70 72 65 63  er that was prec
5c20: 65 64 65 64 20 62 79 20 61 20 6d 69 6e 75 73 20  eded by a minus 
5c30: 73 69 67 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  sign..**.** If t
5c40: 68 65 20 6c 65 66 74 20 73 69 64 65 20 69 73 20  he left side is 
5c50: 22 64 61 74 61 62 61 73 65 2e 69 64 22 20 74 68  "database.id" th
5c60: 65 6e 20 70 49 64 31 20 69 73 20 74 68 65 20 64  en pId1 is the d
5c70: 61 74 61 62 61 73 65 20 6e 61 6d 65 0a 2a 2a 20  atabase name.** 
5c80: 61 6e 64 20 70 49 64 32 20 69 73 20 74 68 65 20  and pId2 is the 
5c90: 69 64 2e 20 20 49 66 20 74 68 65 20 6c 65 66 74  id.  If the left
5ca0: 20 73 69 64 65 20 69 73 20 6a 75 73 74 20 22 69   side is just "i
5cb0: 64 22 20 74 68 65 6e 20 70 49 64 31 20 69 73 20  d" then pId1 is 
5cc0: 74 68 65 0a 2a 2a 20 69 64 20 61 6e 64 20 70 49  the.** id and pI
5cd0: 64 32 20 69 73 20 61 6e 79 20 65 6d 70 74 79 20  d2 is any empty 
5ce0: 73 74 72 69 6e 67 2e 0a 2a 2f 0a 76 6f 69 64 20  string..*/.void 
5cf0: 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 0a 20  sqlite3Pragma(. 
5d00: 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20   Parse *pParse, 
5d10: 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 31 2c 20  .  Token *pId1, 
5d20: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
5d30: 70 61 72 74 20 6f 66 20 5b 64 61 74 61 62 61 73  part of [databas
5d40: 65 2e 5d 69 64 20 66 69 65 6c 64 20 2a 2f 0a 20  e.]id field */. 
5d50: 20 54 6f 6b 65 6e 20 2a 70 49 64 32 2c 20 20 20   Token *pId2,   
5d60: 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20 70       /* Second p
5d70: 61 72 74 20 6f 66 20 5b 64 61 74 61 62 61 73 65  art of [database
5d80: 2e 5d 69 64 20 66 69 65 6c 64 2c 20 6f 72 20 4e  .]id field, or N
5d90: 55 4c 4c 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a  ULL */.  Token *
5da0: 70 56 61 6c 75 65 2c 20 20 20 20 20 20 2f 2a 20  pValue,      /* 
5db0: 54 6f 6b 65 6e 20 66 6f 72 20 3c 76 61 6c 75 65  Token for <value
5dc0: 3e 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  >, or NULL */.  
5dd0: 69 6e 74 20 6d 69 6e 75 73 46 6c 61 67 20 20 20  int minusFlag   
5de0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61      /* True if a
5df0: 20 27 2d 27 20 73 69 67 6e 20 70 72 65 63 65 64   '-' sign preced
5e00: 65 64 20 3c 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b  ed <value> */.){
5e10: 0a 20 20 63 68 61 72 20 2a 7a 4c 65 66 74 20 3d  .  char *zLeft =
5e20: 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6c   0;       /* Nul
5e30: 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d  -terminated UTF-
5e40: 38 20 73 74 72 69 6e 67 20 3c 69 64 3e 20 2a 2f  8 string <id> */
5e50: 0a 20 20 63 68 61 72 20 2a 7a 52 69 67 68 74 20  .  char *zRight 
5e60: 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6c  = 0;      /* Nul
5e70: 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d  -terminated UTF-
5e80: 38 20 73 74 72 69 6e 67 20 3c 76 61 6c 75 65 3e  8 string <value>
5e90: 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63  , or NULL */.  c
5ea0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d  onst char *zDb =
5eb0: 20 30 3b 20 20 20 2f 2a 20 54 68 65 20 64 61 74   0;   /* The dat
5ec0: 61 62 61 73 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  abase name */.  
5ed0: 54 6f 6b 65 6e 20 2a 70 49 64 3b 20 20 20 20 20  Token *pId;     
5ee0: 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
5ef0: 72 20 74 6f 20 3c 69 64 3e 20 74 6f 6b 65 6e 20  r to <id> token 
5f00: 2a 2f 0a 20 20 63 68 61 72 20 2a 61 46 63 6e 74  */.  char *aFcnt
5f10: 6c 5b 34 5d 3b 20 20 20 20 20 20 20 2f 2a 20 41  l[4];       /* A
5f20: 72 67 75 6d 65 6e 74 20 74 6f 20 53 51 4c 49 54  rgument to SQLIT
5f30: 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a  E_FCNTL_PRAGMA *
5f40: 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
5f50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
5f60: 74 61 62 61 73 65 20 69 6e 64 65 78 20 66 6f 72  tabase index for
5f70: 20 3c 64 61 74 61 62 61 73 65 3e 20 2a 2f 0a 20   <database> */. 
5f80: 20 69 6e 74 20 6c 77 72 2c 20 75 70 72 2c 20 6d   int lwr, upr, m
5f90: 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  id;           /*
5fa0: 20 42 69 6e 61 72 79 20 73 65 61 72 63 68 20 62   Binary search b
5fb0: 6f 75 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 72  ounds */.  int r
5fc0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
5fd0: 20 20 20 20 20 20 20 20 2f 2a 20 72 65 74 75 72          /* retur
5fe0: 6e 20 76 61 6c 75 65 20 66 6f 72 6d 20 53 51 4c  n value form SQL
5ff0: 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41  ITE_FCNTL_PRAGMA
6000: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   */.  sqlite3 *d
6010: 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 20  b = pParse->db; 
6020: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
6030: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
6040: 0a 20 20 44 62 20 2a 70 44 62 3b 20 20 20 20 20  .  Db *pDb;     
6050: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6060: 2f 2a 20 54 68 65 20 73 70 65 63 69 66 69 63 20  /* The specific 
6070: 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 70  database being p
6080: 72 61 67 6d 61 65 64 20 2a 2f 0a 20 20 56 64 62  ragmaed */.  Vdb
6090: 65 20 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65  e *v = sqlite3Ge
60a0: 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 20 20  tVdbe(pParse);  
60b0: 2f 2a 20 50 72 65 70 61 72 65 64 20 73 74 61 74  /* Prepared stat
60c0: 65 6d 65 6e 74 20 2a 2f 0a 0a 20 20 69 66 28 20  ement */..  if( 
60d0: 76 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20  v==0 ) return;. 
60e0: 20 73 71 6c 69 74 65 33 56 64 62 65 52 75 6e 4f   sqlite3VdbeRunO
60f0: 6e 6c 79 4f 6e 63 65 28 76 29 3b 0a 20 20 70 50  nlyOnce(v);.  pP
6100: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a  arse->nMem = 2;.
6110: 0a 20 20 2f 2a 20 49 6e 74 65 72 70 72 65 74 20  .  /* Interpret 
6120: 74 68 65 20 5b 64 61 74 61 62 61 73 65 2e 5d 20  the [database.] 
6130: 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 61 67  part of the prag
6140: 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 69 44  ma statement. iD
6150: 62 20 69 73 20 74 68 65 0a 20 20 2a 2a 20 69 6e  b is the.  ** in
6160: 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
6170: 61 73 65 20 74 68 69 73 20 70 72 61 67 6d 61 20  ase this pragma 
6180: 69 73 20 62 65 69 6e 67 20 61 70 70 6c 69 65 64  is being applied
6190: 20 74 6f 20 69 6e 20 64 62 2e 61 44 62 5b 5d 2e   to in db.aDb[].
61a0: 20 2a 2f 0a 20 20 69 44 62 20 3d 20 73 71 6c 69   */.  iDb = sqli
61b0: 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 70  te3TwoPartName(p
61c0: 50 61 72 73 65 2c 20 70 49 64 31 2c 20 70 49 64  Parse, pId1, pId
61d0: 32 2c 20 26 70 49 64 29 3b 0a 20 20 69 66 28 20  2, &pId);.  if( 
61e0: 69 44 62 3c 30 20 29 20 72 65 74 75 72 6e 3b 0a  iDb<0 ) return;.
61f0: 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
6200: 5b 69 44 62 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20  [iDb];..  /* If 
6210: 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73  the temp databas
6220: 65 20 68 61 73 20 62 65 65 6e 20 65 78 70 6c 69  e has been expli
6230: 63 69 74 6c 79 20 6e 61 6d 65 64 20 61 73 20 70  citly named as p
6240: 61 72 74 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a  art of the .  **
6250: 20 70 72 61 67 6d 61 2c 20 6d 61 6b 65 20 73 75   pragma, make su
6260: 72 65 20 69 74 20 69 73 20 6f 70 65 6e 2e 20 0a  re it is open. .
6270: 20 20 2a 2f 0a 20 20 69 66 28 20 69 44 62 3d 3d    */.  if( iDb==
6280: 31 20 26 26 20 73 71 6c 69 74 65 33 4f 70 65 6e  1 && sqlite3Open
6290: 54 65 6d 70 44 61 74 61 62 61 73 65 28 70 50 61  TempDatabase(pPa
62a0: 72 73 65 29 20 29 7b 0a 20 20 20 20 72 65 74 75  rse) ){.    retu
62b0: 72 6e 3b 0a 20 20 7d 0a 0a 20 20 7a 4c 65 66 74  rn;.  }..  zLeft
62c0: 20 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72   = sqlite3NameFr
62d0: 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 49 64 29  omToken(db, pId)
62e0: 3b 0a 20 20 69 66 28 20 21 7a 4c 65 66 74 20 29  ;.  if( !zLeft )
62f0: 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20 6d   return;.  if( m
6300: 69 6e 75 73 46 6c 61 67 20 29 7b 0a 20 20 20 20  inusFlag ){.    
6310: 7a 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65 33  zRight = sqlite3
6320: 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 2d 25 54  MPrintf(db, "-%T
6330: 22 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d 65  ", pValue);.  }e
6340: 6c 73 65 7b 0a 20 20 20 20 7a 52 69 67 68 74 20  lse{.    zRight 
6350: 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f  = sqlite3NameFro
6360: 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 56 61 6c 75  mToken(db, pValu
6370: 65 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72  e);.  }..  asser
6380: 74 28 20 70 49 64 32 20 29 3b 0a 20 20 7a 44 62  t( pId2 );.  zDb
6390: 20 3d 20 70 49 64 32 2d 3e 6e 3e 30 20 3f 20 70   = pId2->n>0 ? p
63a0: 44 62 2d 3e 7a 4e 61 6d 65 20 3a 20 30 3b 0a 20  Db->zName : 0;. 
63b0: 20 69 66 28 20 73 71 6c 69 74 65 33 41 75 74 68   if( sqlite3Auth
63c0: 43 68 65 63 6b 28 70 50 61 72 73 65 2c 20 53 51  Check(pParse, SQ
63d0: 4c 49 54 45 5f 50 52 41 47 4d 41 2c 20 7a 4c 65  LITE_PRAGMA, zLe
63e0: 66 74 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29  ft, zRight, zDb)
63f0: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 70 72 61   ){.    goto pra
6400: 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20  gma_out;.  }..  
6410: 2f 2a 20 53 65 6e 64 20 61 6e 20 53 51 4c 49 54  /* Send an SQLIT
6420: 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 66  E_FCNTL_PRAGMA f
6430: 69 6c 65 2d 63 6f 6e 74 72 6f 6c 20 74 6f 20 74  ile-control to t
6440: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 56 46  he underlying VF
6450: 53 0a 20 20 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  S.  ** connectio
6460: 6e 2e 20 20 49 66 20 69 74 20 72 65 74 75 72 6e  n.  If it return
6470: 73 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 74 68 65  s SQLITE_OK, the
6480: 6e 20 61 73 73 75 6d 65 20 74 68 61 74 20 74 68  n assume that th
6490: 65 20 56 46 53 0a 20 20 2a 2a 20 68 61 6e 64 6c  e VFS.  ** handl
64a0: 65 64 20 74 68 65 20 70 72 61 67 6d 61 20 61 6e  ed the pragma an
64b0: 64 20 67 65 6e 65 72 61 74 65 20 61 20 6e 6f 2d  d generate a no-
64c0: 6f 70 20 70 72 65 70 61 72 65 64 20 73 74 61 74  op prepared stat
64d0: 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 61 46  ement..  */.  aF
64e0: 63 6e 74 6c 5b 30 5d 20 3d 20 30 3b 0a 20 20 61  cntl[0] = 0;.  a
64f0: 46 63 6e 74 6c 5b 31 5d 20 3d 20 7a 4c 65 66 74  Fcntl[1] = zLeft
6500: 3b 0a 20 20 61 46 63 6e 74 6c 5b 32 5d 20 3d 20  ;.  aFcntl[2] = 
6510: 7a 52 69 67 68 74 3b 0a 20 20 61 46 63 6e 74 6c  zRight;.  aFcntl
6520: 5b 33 5d 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62  [3] = 0;.  db->b
6530: 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79  usyHandler.nBusy
6540: 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 0;.  rc = sql
6550: 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
6560: 6c 28 64 62 2c 20 7a 44 62 2c 20 53 51 4c 49 54  l(db, zDb, SQLIT
6570: 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 2c 20  E_FCNTL_PRAGMA, 
6580: 28 76 6f 69 64 2a 29 61 46 63 6e 74 6c 29 3b 0a  (void*)aFcntl);.
6590: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
65a0: 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28 20 61  _OK ){.    if( a
65b0: 46 63 6e 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20  Fcntl[0] ){.    
65c0: 20 20 69 6e 74 20 6d 65 6d 20 3d 20 2b 2b 70 50    int mem = ++pP
65d0: 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20  arse->nMem;.    
65e0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
65f0: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
6600: 38 2c 20 30 2c 20 6d 65 6d 2c 20 30 2c 20 61 46  8, 0, mem, 0, aF
6610: 63 6e 74 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20  cntl[0], 0);.   
6620: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
6630: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
6640: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
6650: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
6660: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
6670: 22 72 65 73 75 6c 74 22 2c 20 53 51 4c 49 54 45  "result", SQLITE
6680: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
6690: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
66a0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
66b0: 77 2c 20 6d 65 6d 2c 20 31 29 3b 0a 20 20 20 20  w, mem, 1);.    
66c0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61    sqlite3_free(a
66d0: 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d  Fcntl[0]);.    }
66e0: 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61  .    goto pragma
66f0: 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 69 66 28 20  _out;.  }.  if( 
6700: 72 63 21 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f  rc!=SQLITE_NOTFO
6710: 55 4e 44 20 29 7b 0a 20 20 20 20 69 66 28 20 61  UND ){.    if( a
6720: 46 63 6e 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20  Fcntl[0] ){.    
6730: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73    sqlite3ErrorMs
6740: 67 28 70 50 61 72 73 65 2c 20 22 25 73 22 2c 20  g(pParse, "%s", 
6750: 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20  aFcntl[0]);.    
6760: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61    sqlite3_free(a
6770: 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d  Fcntl[0]);.    }
6780: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 45 72  .    pParse->nEr
6790: 72 2b 2b 3b 0a 20 20 20 20 70 50 61 72 73 65 2d  r++;.    pParse-
67a0: 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 67 6f  >rc = rc;.    go
67b0: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
67c0: 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 63 61 74 65 20   }..  /* Locate 
67d0: 74 68 65 20 70 72 61 67 6d 61 20 69 6e 20 74 68  the pragma in th
67e0: 65 20 6c 6f 6f 6b 75 70 20 74 61 62 6c 65 20 2a  e lookup table *
67f0: 2f 0a 20 20 6c 77 72 20 3d 20 30 3b 0a 20 20 75  /.  lwr = 0;.  u
6800: 70 72 20 3d 20 41 72 72 61 79 53 69 7a 65 28 61  pr = ArraySize(a
6810: 50 72 61 67 6d 61 4e 61 6d 65 73 29 2d 31 3b 0a  PragmaNames)-1;.
6820: 20 20 77 68 69 6c 65 28 20 6c 77 72 3c 3d 75 70    while( lwr<=up
6830: 72 20 29 7b 0a 20 20 20 20 6d 69 64 20 3d 20 28  r ){.    mid = (
6840: 6c 77 72 2b 75 70 72 29 2f 32 3b 0a 20 20 20 20  lwr+upr)/2;.    
6850: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 72  rc = sqlite3_str
6860: 69 63 6d 70 28 7a 4c 65 66 74 2c 20 61 50 72 61  icmp(zLeft, aPra
6870: 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 7a 4e  gmaNames[mid].zN
6880: 61 6d 65 29 3b 0a 20 20 20 20 69 66 28 20 72 63  ame);.    if( rc
6890: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ==0 ) break;.   
68a0: 20 69 66 28 20 72 63 3c 30 20 29 7b 0a 20 20 20   if( rc<0 ){.   
68b0: 20 20 20 75 70 72 20 3d 20 6d 69 64 20 2d 20 31     upr = mid - 1
68c0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
68d0: 20 20 20 6c 77 72 20 3d 20 6d 69 64 20 2b 20 31     lwr = mid + 1
68e0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
68f0: 28 20 6c 77 72 3e 75 70 72 20 29 20 67 6f 74 6f  ( lwr>upr ) goto
6900: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 0a 20 20   pragma_out;..  
6910: 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  /* Make sure the
6920: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
6930: 20 69 73 20 6c 6f 61 64 65 64 20 69 66 20 74 68   is loaded if th
6940: 65 20 70 72 61 67 6d 61 20 72 65 71 75 69 72 65  e pragma require
6950: 73 20 74 68 61 74 20 2a 2f 0a 20 20 69 66 28 20  s that */.  if( 
6960: 28 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69  (aPragmaNames[mi
6970: 64 5d 2e 6d 50 72 61 67 46 6c 61 67 20 26 20 50  d].mPragFlag & P
6980: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
6990: 6d 61 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 66  ma)!=0 ){.    if
69a0: 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  ( sqlite3ReadSch
69b0: 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f  ema(pParse) ) go
69c0: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
69d0: 20 7d 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f   }..  /* Jump to
69e0: 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
69f0: 20 70 72 61 67 6d 61 20 68 61 6e 64 6c 65 72 20   pragma handler 
6a00: 2a 2f 0a 20 20 73 77 69 74 63 68 28 20 61 50 72  */.  switch( aPr
6a10: 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 65  agmaNames[mid].e
6a20: 50 72 61 67 54 79 70 20 29 7b 0a 20 20 0a 23 69  PragTyp ){.  .#i
6a30: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
6a40: 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
6a50: 47 4d 41 53 29 20 26 26 20 21 64 65 66 69 6e 65  GMAS) && !define
6a60: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45  d(SQLITE_OMIT_DE
6a70: 50 52 45 43 41 54 45 44 29 0a 20 20 2f 2a 0a 20  PRECATED).  /*. 
6a80: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
6a90: 61 62 61 73 65 2e 5d 64 65 66 61 75 6c 74 5f 63  abase.]default_c
6aa0: 61 63 68 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20  ache_size.  **  
6ab0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
6ac0: 2e 5d 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  .]default_cache_
6ad0: 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  size=N.  **.  **
6ae0: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
6af0: 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72  reports the curr
6b00: 65 6e 74 20 70 65 72 73 69 73 74 65 6e 74 20 73  ent persistent s
6b10: 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20  etting for the. 
6b20: 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73   ** page cache s
6b30: 69 7a 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20  ize.  The value 
6b40: 72 65 74 75 72 6e 65 64 20 69 73 20 74 68 65 20  returned is the 
6b50: 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
6b60: 66 0a 20 20 2a 2a 20 70 61 67 65 73 20 69 6e 20  f.  ** pages in 
6b70: 74 68 65 20 70 61 67 65 20 63 61 63 68 65 2e 20  the page cache. 
6b80: 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d   The second form
6b90: 20 73 65 74 73 20 62 6f 74 68 20 74 68 65 20 63   sets both the c
6ba0: 75 72 72 65 6e 74 0a 20 20 2a 2a 20 70 61 67 65  urrent.  ** page
6bb0: 20 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75   cache size valu
6bc0: 65 20 61 6e 64 20 74 68 65 20 70 65 72 73 69 73  e and the persis
6bd0: 74 65 6e 74 20 70 61 67 65 20 63 61 63 68 65 20  tent page cache 
6be0: 73 69 7a 65 20 76 61 6c 75 65 0a 20 20 2a 2a 20  size value.  ** 
6bf0: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61  stored in the da
6c00: 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 2a  tabase file..  *
6c10: 2a 0a 20 20 2a 2a 20 4f 6c 64 65 72 20 76 65 72  *.  ** Older ver
6c20: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
6c30: 77 6f 75 6c 64 20 73 65 74 20 74 68 65 20 64 65  would set the de
6c40: 66 61 75 6c 74 20 63 61 63 68 65 20 73 69 7a 65  fault cache size
6c50: 20 74 6f 20 61 0a 20 20 2a 2a 20 6e 65 67 61 74   to a.  ** negat
6c60: 69 76 65 20 6e 75 6d 62 65 72 20 74 6f 20 69 6e  ive number to in
6c70: 64 69 63 61 74 65 20 73 79 6e 63 68 72 6f 6e 6f  dicate synchrono
6c80: 75 73 3d 4f 46 46 2e 20 20 54 68 65 73 65 20 64  us=OFF.  These d
6c90: 61 79 73 2c 20 73 79 6e 63 68 72 6f 6e 6f 75 73  ays, synchronous
6ca0: 0a 20 20 2a 2a 20 69 73 20 61 6c 77 61 79 73 20  .  ** is always 
6cb0: 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 20 72 65  on by default re
6cc0: 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
6cd0: 73 69 67 6e 20 6f 66 20 74 68 65 20 64 65 66 61  sign of the defa
6ce0: 75 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73  ult cache.  ** s
6cf0: 69 7a 65 2e 20 20 42 75 74 20 63 6f 6e 74 69 6e  ize.  But contin
6d00: 75 65 20 74 6f 20 74 61 6b 65 20 74 68 65 20 61  ue to take the a
6d10: 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66  bsolute value of
6d20: 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 61 63   the default cac
6d30: 68 65 0a 20 20 2a 2a 20 73 69 7a 65 20 6f 66 20  he.  ** size of 
6d40: 68 69 73 74 6f 72 69 63 61 6c 20 63 6f 6d 70 61  historical compa
6d50: 74 69 62 69 6c 69 74 79 2e 0a 20 20 2a 2f 0a 20  tibility..  */. 
6d60: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 44 45   case PragTyp_DE
6d70: 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45  FAULT_CACHE_SIZE
6d80: 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  : {.    static c
6d90: 6f 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56  onst int iLn = V
6da0: 44 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e  DBE_OFFSET_LINEN
6db0: 4f 28 32 29 3b 0a 20 20 20 20 73 74 61 74 69 63  O(2);.    static
6dc0: 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73   const VdbeOpLis
6dd0: 74 20 67 65 74 43 61 63 68 65 53 69 7a 65 5b 5d  t getCacheSize[]
6de0: 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f   = {.      { OP_
6df0: 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 30 2c 20  Transaction, 0, 
6e00: 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20  0,        0},   
6e10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e20: 20 20 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20        /* 0 */.  
6e30: 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f      { OP_ReadCoo
6e40: 6b 69 65 2c 20 20 30 2c 20 31 2c 20 20 20 20 20  kie,  0, 1,     
6e50: 20 20 20 42 54 52 45 45 5f 44 45 46 41 55 4c 54     BTREE_DEFAULT
6e60: 5f 43 41 43 48 45 5f 53 49 5a 45 7d 2c 20 20 2f  _CACHE_SIZE},  /
6e70: 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f  * 1 */.      { O
6e80: 50 5f 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31  P_IfPos,       1
6e90: 2c 20 38 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 8,        0},.
6ea0: 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67        { OP_Integ
6eb0: 65 72 2c 20 20 20 20 20 30 2c 20 32 2c 20 20 20  er,     0, 2,   
6ec0: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b       0},.      {
6ed0: 20 4f 50 5f 53 75 62 74 72 61 63 74 2c 20 20 20   OP_Subtract,   
6ee0: 20 31 2c 20 32 2c 20 20 20 20 20 20 20 20 31 7d   1, 2,        1}
6ef0: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 50  ,.      { OP_IfP
6f00: 6f 73 2c 20 20 20 20 20 20 20 31 2c 20 38 2c 20  os,       1, 8, 
6f10: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20         0},.     
6f20: 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20   { OP_Integer,  
6f30: 20 20 20 30 2c 20 31 2c 20 20 20 20 20 20 20 20     0, 1,        
6f40: 30 7d 2c 20 20 20 20 20 20 20 20 20 20 20 20 20  0},             
6f50: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 36              /* 6
6f60: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 4e   */.      { OP_N
6f70: 6f 6f 70 2c 20 20 20 20 20 20 20 20 30 2c 20 30  oop,        0, 0
6f80: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
6f90: 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f     { OP_ResultRo
6fa0: 77 2c 20 20 20 31 2c 20 31 2c 20 20 20 20 20 20  w,   1, 1,      
6fb0: 20 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20 20    0},.    };.   
6fc0: 20 69 6e 74 20 61 64 64 72 3b 0a 20 20 20 20 73   int addr;.    s
6fd0: 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74  qlite3VdbeUsesBt
6fe0: 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20  ree(v, iDb);.   
6ff0: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
7000: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
7010: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
7020: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
7030: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
7040: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
7050: 45 2c 20 22 63 61 63 68 65 5f 73 69 7a 65 22 2c  E, "cache_size",
7060: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
7070: 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  .      pParse->n
7080: 4d 65 6d 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20  Mem += 2;.      
7090: 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  addr = sqlite3Vd
70a0: 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41  beAddOpList(v, A
70b0: 72 72 61 79 53 69 7a 65 28 67 65 74 43 61 63 68  rraySize(getCach
70c0: 65 53 69 7a 65 29 2c 20 67 65 74 43 61 63 68 65  eSize), getCache
70d0: 53 69 7a 65 2c 69 4c 6e 29 3b 0a 20 20 20 20 20  Size,iLn);.     
70e0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
70f0: 67 65 50 31 28 76 2c 20 61 64 64 72 2c 20 69 44  geP1(v, addr, iD
7100: 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  b);.      sqlite
7110: 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c  3VdbeChangeP1(v,
7120: 20 61 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20   addr+1, iDb);. 
7130: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
7140: 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72  ChangeP1(v, addr
7150: 2b 36 2c 20 53 51 4c 49 54 45 5f 44 45 46 41 55  +6, SQLITE_DEFAU
7160: 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 29 3b 0a  LT_CACHE_SIZE);.
7170: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
7180: 20 69 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69   int size = sqli
7190: 74 65 33 41 62 73 49 6e 74 33 32 28 73 71 6c 69  te3AbsInt32(sqli
71a0: 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29  te3Atoi(zRight))
71b0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  ;.      sqlite3B
71c0: 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69  eginWriteOperati
71d0: 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44  on(pParse, 0, iD
71e0: 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  b);.      sqlite
71f0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
7200: 50 5f 49 6e 74 65 67 65 72 2c 20 73 69 7a 65 2c  P_Integer, size,
7210: 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   1);.      sqlit
7220: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
7230: 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 69 44  OP_SetCookie, iD
7240: 62 2c 20 42 54 52 45 45 5f 44 45 46 41 55 4c 54  b, BTREE_DEFAULT
7250: 5f 43 41 43 48 45 5f 53 49 5a 45 2c 20 31 29 3b  _CACHE_SIZE, 1);
7260: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73  .      assert( s
7270: 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
7280: 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30  xHeld(db, iDb, 0
7290: 29 20 29 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e  ) );.      pDb->
72a0: 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73  pSchema->cache_s
72b0: 69 7a 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20  ize = size;.    
72c0: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
72d0: 74 43 61 63 68 65 53 69 7a 65 28 70 44 62 2d 3e  tCacheSize(pDb->
72e0: 70 42 74 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d  pBt, pDb->pSchem
72f0: 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a  a->cache_size);.
7300: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
7310: 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21  .  }.#endif /* !
7320: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
7330: 52 5f 50 52 41 47 4d 41 53 20 26 26 20 21 53 51  R_PRAGMAS && !SQ
7340: 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43  LITE_OMIT_DEPREC
7350: 41 54 45 44 20 2a 2f 0a 0a 20 20 2f 2a 0a 20 20  ATED */..  /*.  
7360: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
7370: 62 61 73 65 2e 5d 70 61 67 65 72 5f 6f 74 61 5f  base.]pager_ota_
7380: 6d 6f 64 65 3d 5b 30 31 5d 0a 20 20 2a 2a 0a 20  mode=[01].  **. 
7390: 20 2a 2a 20 54 68 69 73 20 70 72 61 67 6d 61 20   ** This pragma 
73a0: 73 65 74 73 20 61 20 66 6c 61 67 20 6f 6e 20 74  sets a flag on t
73b0: 68 65 20 70 61 67 65 72 20 61 73 73 6f 63 69 61  he pager associa
73c0: 74 65 64 20 77 69 74 68 20 74 68 65 20 6d 61 69  ted with the mai
73d0: 6e 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20  n database.  ** 
73e0: 6f 6e 6c 79 2e 20 54 68 65 20 66 6c 61 67 20 63  only. The flag c
73f0: 61 6e 20 6f 6e 6c 79 20 62 65 20 73 65 74 20 77  an only be set w
7400: 68 65 6e 20 74 68 65 72 65 20 69 73 20 6e 6f 20  hen there is no 
7410: 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69 6f 6e  open transaction
7420: 20 61 6e 64 20 0a 20 20 2a 2a 20 74 68 65 20 70   and .  ** the p
7430: 61 67 65 72 20 64 6f 65 73 20 6e 6f 74 20 61 6c  ager does not al
7440: 72 65 61 64 79 20 68 61 76 65 20 61 6e 20 6f 70  ready have an op
7450: 65 6e 20 57 41 4c 20 66 69 6c 65 2e 0a 20 20 2a  en WAL file..  *
7460: 2a 0a 20 20 2a 2a 20 4f 6e 63 65 20 74 68 65 20  *.  ** Once the 
7470: 66 6c 61 67 20 68 61 73 20 62 65 65 6e 20 73 65  flag has been se
7480: 74 2c 20 69 74 20 69 73 20 6e 6f 74 20 70 6f 73  t, it is not pos
7490: 73 69 62 6c 65 20 74 6f 20 6f 70 65 6e 20 61 20  sible to open a 
74a0: 72 65 67 75 6c 61 72 20 57 41 4c 0a 20 20 2a 2a  regular WAL.  **
74b0: 20 66 69 6c 65 2e 20 49 66 2c 20 77 68 65 6e 20   file. If, when 
74c0: 74 68 65 20 6e 65 78 74 20 72 65 61 64 2d 74 72  the next read-tr
74d0: 61 6e 73 61 63 74 69 6f 6e 20 69 73 20 6f 70 65  ansaction is ope
74e0: 6e 65 64 2c 20 61 20 2a 2d 77 61 6c 20 66 69 6c  ned, a *-wal fil
74f0: 65 20 69 73 20 0a 20 20 2a 2a 20 66 6f 75 6e 64  e is .  ** found
7500: 20 6f 72 20 74 68 65 20 64 61 74 61 62 61 73 65   or the database
7510: 20 68 65 61 64 65 72 20 66 6c 61 67 73 20 69 6e   header flags in
7520: 64 69 63 61 74 65 20 74 68 61 74 20 69 74 20 69  dicate that it i
7530: 73 20 61 20 77 61 6c 2d 6d 6f 64 65 20 0a 20 20  s a wal-mode .  
7540: 2a 2a 20 64 61 74 61 62 61 73 65 2c 20 53 51 4c  ** database, SQL
7550: 49 54 45 5f 43 41 4e 54 4f 50 45 4e 20 69 73 20  ITE_CANTOPEN is 
7560: 72 65 74 75 72 6e 65 64 2e 0a 20 20 2a 2a 0a 20  returned..  **. 
7570: 20 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 69   ** Otherwise, i
7580: 66 20 6e 6f 20 57 41 4c 20 66 69 6c 65 20 6f 72  f no WAL file or
7590: 20 66 6c 61 67 73 20 61 72 65 20 66 6f 75 6e 64   flags are found
75a0: 2c 20 74 68 65 20 70 61 67 65 72 20 6f 70 65 6e  , the pager open
75b0: 73 20 74 68 65 20 2a 2d 6f 61 6c 0a 20 20 2a 2a  s the *-oal.  **
75c0: 20 66 69 6c 65 20 61 6e 64 20 75 73 65 73 20 69   file and uses i
75d0: 74 20 61 73 20 61 20 77 72 69 74 65 2d 61 68 65  t as a write-ahe
75e0: 61 64 2d 6c 6f 67 20 77 69 74 68 20 74 68 65 20  ad-log with the 
75f0: 2a 2d 73 68 6d 20 64 61 74 61 20 73 74 6f 72 65  *-shm data store
7600: 64 20 69 6e 0a 20 20 2a 2a 20 68 65 61 70 2d 6d  d in.  ** heap-m
7610: 65 6d 6f 72 79 2e 20 49 66 20 74 68 65 20 2a 2d  emory. If the *-
7620: 6f 61 6c 20 66 69 6c 65 20 61 6c 72 65 61 64 79  oal file already
7630: 20 65 78 69 73 74 73 20 62 75 74 20 74 68 65 20   exists but the 
7640: 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 68 61  database file ha
7650: 73 0a 20 20 2a 2a 20 62 65 65 6e 20 6d 6f 64 69  s.  ** been modi
7660: 66 69 65 64 20 73 69 6e 63 65 20 69 74 20 77 61  fied since it wa
7670: 73 20 63 72 65 61 74 65 64 2c 20 61 6e 20 53 51  s created, an SQ
7680: 4c 49 54 45 5f 42 55 53 59 5f 53 4e 41 50 53 48  LITE_BUSY_SNAPSH
7690: 4f 54 20 65 72 72 6f 72 20 69 73 0a 20 20 2a 2a  OT error is.  **
76a0: 20 72 65 74 75 72 6e 65 64 20 61 6e 64 20 74 68   returned and th
76b0: 65 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74 69  e read-transacti
76c0: 6f 6e 20 63 61 6e 6e 6f 74 20 62 65 20 6f 70 65  on cannot be ope
76d0: 6e 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4f  ned..  **.  ** O
76e0: 74 68 65 72 20 63 6c 69 65 6e 74 73 20 73 65 65  ther clients see
76f0: 20 61 20 72 6f 6c 6c 62 61 63 6b 2d 6d 6f 64 65   a rollback-mode
7700: 20 64 61 74 61 62 61 73 65 20 6f 6e 20 77 68 69   database on whi
7710: 63 68 20 74 68 65 20 70 61 67 65 72 5f 6f 74 61  ch the pager_ota
7720: 5f 6d 6f 64 65 0a 20 20 2a 2a 20 63 6c 69 65 6e  _mode.  ** clien
7730: 74 20 69 73 20 68 6f 6c 64 69 6e 67 20 61 20 53  t is holding a S
7740: 48 41 52 45 44 20 6c 6f 63 6b 2e 0a 20 20 2a 2f  HARED lock..  */
7750: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
7760: 50 41 47 45 52 5f 4f 54 41 5f 4d 4f 44 45 3a 20  PAGER_OTA_MODE: 
7770: 7b 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42 74  {.    Btree *pBt
7780: 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20   = pDb->pBt;.   
7790: 20 61 73 73 65 72 74 28 20 70 42 74 21 3d 30 20   assert( pBt!=0 
77a0: 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  );.    if( zRigh
77b0: 74 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69  t ){.      int i
77c0: 41 72 67 20 3d 20 73 71 6c 69 74 65 33 41 74 6f  Arg = sqlite3Ato
77d0: 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20  i(zRight);.     
77e0: 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d   Pager *pPager =
77f0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67   sqlite3BtreePag
7800: 65 72 28 70 42 74 29 3b 0a 20 20 20 20 20 20 69  er(pBt);.      i
7810: 66 28 20 73 71 6c 69 74 65 33 42 74 72 65 65 49  f( sqlite3BtreeI
7820: 73 49 6e 52 65 61 64 54 72 61 6e 73 28 70 42 74  sInReadTrans(pBt
7830: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ) ){.        sql
7840: 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61  ite3ErrorMsg(pPa
7850: 72 73 65 2c 20 0a 20 20 20 20 20 20 20 20 20 20  rse, .          
7860: 20 20 22 63 61 6e 6e 6f 74 20 73 65 74 20 70 61    "cannot set pa
7870: 67 65 72 5f 6f 74 61 5f 6d 6f 64 65 20 77 69 74  ger_ota_mode wit
7880: 68 20 6f 70 65 6e 20 74 72 61 6e 73 61 63 74 69  h open transacti
7890: 6f 6e 22 0a 20 20 20 20 20 20 20 20 29 3b 0a 20  on".        );. 
78a0: 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73       }else if( s
78b0: 71 6c 69 74 65 33 50 61 67 65 72 57 61 6c 53 75  qlite3PagerWalSu
78c0: 70 70 6f 72 74 65 64 28 70 50 61 67 65 72 29 3d  pported(pPager)=
78d0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  =0 ){.        sq
78e0: 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50  lite3ErrorMsg(pP
78f0: 61 72 73 65 2c 0a 20 20 20 20 20 20 20 20 20 20  arse,.          
7900: 20 20 22 63 61 6e 6e 6f 74 20 73 65 74 20 70 61    "cannot set pa
7910: 67 65 72 5f 6f 74 61 5f 6d 6f 64 65 20 77 69 74  ger_ota_mode wit
7920: 68 6f 75 74 20 77 61 6c 20 73 75 70 70 6f 72 74  hout wal support
7930: 22 0a 20 20 20 20 20 20 20 20 29 3b 0a 20 20 20  ".        );.   
7940: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c     }else if( sql
7950: 69 74 65 33 50 61 67 65 72 53 65 74 4f 74 61 4d  ite3PagerSetOtaM
7960: 6f 64 65 28 73 71 6c 69 74 65 33 42 74 72 65 65  ode(sqlite3Btree
7970: 50 61 67 65 72 28 70 42 74 29 2c 20 69 41 72 67  Pager(pBt), iArg
7980: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ) ){.        sql
7990: 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61  ite3ErrorMsg(pPa
79a0: 72 73 65 2c 20 22 63 61 6e 6e 6f 74 20 73 65 74  rse, "cannot set
79b0: 20 70 61 67 65 72 5f 6f 74 61 5f 6d 6f 64 65 20   pager_ota_mode 
79c0: 69 6e 20 77 61 6c 20 6d 6f 64 65 22 29 3b 0a 20  in wal mode");. 
79d0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
79e0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66   break;.  }..#if
79f0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
7a00: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
7a10: 4d 41 53 29 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  MAS).  /*.  **  
7a20: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
7a30: 2e 5d 70 61 67 65 5f 73 69 7a 65 0a 20 20 2a 2a  .]page_size.  **
7a40: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
7a50: 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65 3d 4e 0a  se.]page_size=N.
7a60: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69    **.  ** The fi
7a70: 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73  rst form reports
7a80: 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 65 74   the current set
7a90: 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a  ting for the.  *
7aa0: 2a 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20  * database page 
7ab0: 73 69 7a 65 20 69 6e 20 62 79 74 65 73 2e 20 20  size in bytes.  
7ac0: 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  The second form 
7ad0: 73 65 74 73 20 74 68 65 0a 20 20 2a 2a 20 64 61  sets the.  ** da
7ae0: 74 61 62 61 73 65 20 70 61 67 65 20 73 69 7a 65  tabase page size
7af0: 20 76 61 6c 75 65 2e 20 20 54 68 65 20 76 61 6c   value.  The val
7b00: 75 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65 20 73  ue can only be s
7b10: 65 74 20 69 66 0a 20 20 2a 2a 20 74 68 65 20 64  et if.  ** the d
7b20: 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20  atabase has not 
7b30: 79 65 74 20 62 65 65 6e 20 63 72 65 61 74 65 64  yet been created
7b40: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
7b50: 61 67 54 79 70 5f 50 41 47 45 5f 53 49 5a 45 3a  agTyp_PAGE_SIZE:
7b60: 20 7b 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42   {.    Btree *pB
7b70: 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20  t = pDb->pBt;.  
7b80: 20 20 61 73 73 65 72 74 28 20 70 42 74 21 3d 30    assert( pBt!=0
7b90: 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69   );.    if( !zRi
7ba0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  ght ){.      int
7bb0: 20 73 69 7a 65 20 3d 20 41 4c 57 41 59 53 28 70   size = ALWAYS(p
7bc0: 42 74 29 20 3f 20 73 71 6c 69 74 65 33 42 74 72  Bt) ? sqlite3Btr
7bd0: 65 65 47 65 74 50 61 67 65 53 69 7a 65 28 70 42  eeGetPageSize(pB
7be0: 74 29 20 3a 20 30 3b 0a 20 20 20 20 20 20 72 65  t) : 0;.      re
7bf0: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50  turnSingleInt(pP
7c00: 61 72 73 65 2c 20 22 70 61 67 65 5f 73 69 7a 65  arse, "page_size
7c10: 22 2c 20 73 69 7a 65 29 3b 0a 20 20 20 20 7d 65  ", size);.    }e
7c20: 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20 4d 61  lse{.      /* Ma
7c30: 6c 6c 6f 63 20 6d 61 79 20 66 61 69 6c 20 77 68  lloc may fail wh
7c40: 65 6e 20 73 65 74 74 69 6e 67 20 74 68 65 20 70  en setting the p
7c50: 61 67 65 2d 73 69 7a 65 2c 20 61 73 20 74 68 65  age-size, as the
7c60: 72 65 20 69 73 20 61 6e 20 69 6e 74 65 72 6e 61  re is an interna
7c70: 6c 0a 20 20 20 20 20 20 2a 2a 20 62 75 66 66 65  l.      ** buffe
7c80: 72 20 74 68 61 74 20 74 68 65 20 70 61 67 65 72  r that the pager
7c90: 20 6d 6f 64 75 6c 65 20 72 65 73 69 7a 65 73 20   module resizes 
7ca0: 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f 72 65  using sqlite3_re
7cb0: 61 6c 6c 6f 63 28 29 2e 0a 20 20 20 20 20 20 2a  alloc()..      *
7cc0: 2f 0a 20 20 20 20 20 20 64 62 2d 3e 6e 65 78 74  /.      db->next
7cd0: 50 61 67 65 73 69 7a 65 20 3d 20 73 71 6c 69 74  Pagesize = sqlit
7ce0: 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a  e3Atoi(zRight);.
7cf0: 20 20 20 20 20 20 69 66 28 20 53 51 4c 49 54 45        if( SQLITE
7d00: 5f 4e 4f 4d 45 4d 3d 3d 73 71 6c 69 74 65 33 42  _NOMEM==sqlite3B
7d10: 74 72 65 65 53 65 74 50 61 67 65 53 69 7a 65 28  treeSetPageSize(
7d20: 70 42 74 2c 20 64 62 2d 3e 6e 65 78 74 50 61 67  pBt, db->nextPag
7d30: 65 73 69 7a 65 2c 2d 31 2c 30 29 20 29 7b 0a 20  esize,-1,0) ){. 
7d40: 20 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c 6c 6f         db->mallo
7d50: 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20 20 20  cFailed = 1;.   
7d60: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62     }.    }.    b
7d70: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
7d80: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
7d90: 74 61 62 61 73 65 2e 5d 73 65 63 75 72 65 5f 64  tabase.]secure_d
7da0: 65 6c 65 74 65 0a 20 20 2a 2a 20 20 50 52 41 47  elete.  **  PRAG
7db0: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 65  MA [database.]se
7dc0: 63 75 72 65 5f 64 65 6c 65 74 65 3d 4f 4e 2f 4f  cure_delete=ON/O
7dd0: 46 46 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  FF.  **.  ** The
7de0: 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f   first form repo
7df0: 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
7e00: 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a  setting for the.
7e10: 20 20 2a 2a 20 73 65 63 75 72 65 5f 64 65 6c 65    ** secure_dele
7e20: 74 65 20 66 6c 61 67 2e 20 20 54 68 65 20 73 65  te flag.  The se
7e30: 63 6f 6e 64 20 66 6f 72 6d 20 63 68 61 6e 67 65  cond form change
7e40: 73 20 74 68 65 20 73 65 63 75 72 65 5f 64 65 6c  s the secure_del
7e50: 65 74 65 0a 20 20 2a 2a 20 66 6c 61 67 20 73 65  ete.  ** flag se
7e60: 74 74 69 6e 67 20 61 6e 64 20 72 65 70 6f 72 74  tting and report
7e70: 73 20 74 68 65 6e 65 77 20 76 61 6c 75 65 2e 0a  s thenew value..
7e80: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
7e90: 54 79 70 5f 53 45 43 55 52 45 5f 44 45 4c 45 54  Typ_SECURE_DELET
7ea0: 45 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20 2a  E: {.    Btree *
7eb0: 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a  pBt = pDb->pBt;.
7ec0: 20 20 20 20 69 6e 74 20 62 20 3d 20 2d 31 3b 0a      int b = -1;.
7ed0: 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74 21      assert( pBt!
7ee0: 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52  =0 );.    if( zR
7ef0: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 62 20  ight ){.      b 
7f00: 3d 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  = sqlite3GetBool
7f10: 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 3b 0a  ean(zRight, 0);.
7f20: 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20 70 49      }.    if( pI
7f30: 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 62 3e 3d 30  d2->n==0 && b>=0
7f40: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69   ){.      int ii
7f50: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 69 3d 30  ;.      for(ii=0
7f60: 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
7f70: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ++){.        sql
7f80: 69 74 65 33 42 74 72 65 65 53 65 63 75 72 65 44  ite3BtreeSecureD
7f90: 65 6c 65 74 65 28 64 62 2d 3e 61 44 62 5b 69 69  elete(db->aDb[ii
7fa0: 5d 2e 70 42 74 2c 20 62 29 3b 0a 20 20 20 20 20  ].pBt, b);.     
7fb0: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 20 3d   }.    }.    b =
7fc0: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 63   sqlite3BtreeSec
7fd0: 75 72 65 44 65 6c 65 74 65 28 70 42 74 2c 20 62  ureDelete(pBt, b
7fe0: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e  );.    returnSin
7ff0: 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22  gleInt(pParse, "
8000: 73 65 63 75 72 65 5f 64 65 6c 65 74 65 22 2c 20  secure_delete", 
8010: 62 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  b);.    break;. 
8020: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50   }..  /*.  **  P
8030: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
8040: 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 0a  ]max_page_count.
8050: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
8060: 74 61 62 61 73 65 2e 5d 6d 61 78 5f 70 61 67 65  tabase.]max_page
8070: 5f 63 6f 75 6e 74 3d 4e 0a 20 20 2a 2a 0a 20 20  _count=N.  **.  
8080: 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72  ** The first for
8090: 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75  m reports the cu
80a0: 72 72 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f  rrent setting fo
80b0: 72 20 74 68 65 0a 20 20 2a 2a 20 6d 61 78 69 6d  r the.  ** maxim
80c0: 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  um number of pag
80d0: 65 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  es in the databa
80e0: 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20 0a 20  se file.  The . 
80f0: 20 2a 2a 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20   ** second form 
8100: 61 74 74 65 6d 70 74 73 20 74 6f 20 63 68 61 6e  attempts to chan
8110: 67 65 20 74 68 69 73 20 73 65 74 74 69 6e 67 2e  ge this setting.
8120: 20 20 42 6f 74 68 0a 20 20 2a 2a 20 66 6f 72 6d    Both.  ** form
8130: 73 20 72 65 74 75 72 6e 20 74 68 65 20 63 75 72  s return the cur
8140: 72 65 6e 74 20 73 65 74 74 69 6e 67 2e 0a 20 20  rent setting..  
8150: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 61 62 73 6f  **.  ** The abso
8160: 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20 4e 20  lute value of N 
8170: 69 73 20 75 73 65 64 2e 20 20 54 68 69 73 20 69  is used.  This i
8180: 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64 20 61  s undocumented a
8190: 6e 64 20 6d 69 67 68 74 0a 20 20 2a 2a 20 63 68  nd might.  ** ch
81a0: 61 6e 67 65 2e 20 20 54 68 65 20 6f 6e 6c 79 20  ange.  The only 
81b0: 70 75 72 70 6f 73 65 20 69 73 20 74 6f 20 70 72  purpose is to pr
81c0: 6f 76 69 64 65 20 61 6e 20 65 61 73 79 20 77 61  ovide an easy wa
81d0: 79 20 74 6f 20 74 65 73 74 0a 20 20 2a 2a 20 74  y to test.  ** t
81e0: 68 65 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74  he sqlite3AbsInt
81f0: 33 32 28 29 20 66 75 6e 63 74 69 6f 6e 2e 0a 20  32() function.. 
8200: 20 2a 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   **.  **  PRAGMA
8210: 20 5b 64 61 74 61 62 61 73 65 2e 5d 70 61 67 65   [database.]page
8220: 5f 63 6f 75 6e 74 0a 20 20 2a 2a 0a 20 20 2a 2a  _count.  **.  **
8230: 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75 6d 62   Return the numb
8240: 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
8250: 68 65 20 73 70 65 63 69 66 69 65 64 20 64 61 74  he specified dat
8260: 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61  abase..  */.  ca
8270: 73 65 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f  se PragTyp_PAGE_
8280: 43 4f 55 4e 54 3a 20 7b 0a 20 20 20 20 69 6e 74  COUNT: {.    int
8290: 20 69 52 65 67 3b 0a 20 20 20 20 73 71 6c 69 74   iReg;.    sqlit
82a0: 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
82b0: 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b  ma(pParse, iDb);
82c0: 0a 20 20 20 20 69 52 65 67 20 3d 20 2b 2b 70 50  .    iReg = ++pP
82d0: 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20  arse->nMem;.    
82e0: 69 66 28 20 73 71 6c 69 74 65 33 54 6f 6c 6f 77  if( sqlite3Tolow
82f0: 65 72 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27 70  er(zLeft[0])=='p
8300: 27 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ' ){.      sqlit
8310: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
8320: 4f 50 5f 50 61 67 65 63 6f 75 6e 74 2c 20 69 44  OP_Pagecount, iD
8330: 62 2c 20 69 52 65 67 29 3b 0a 20 20 20 20 7d 65  b, iReg);.    }e
8340: 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  lse{.      sqlit
8350: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
8360: 4f 50 5f 4d 61 78 50 67 63 6e 74 2c 20 69 44 62  OP_MaxPgcnt, iDb
8370: 2c 20 69 52 65 67 2c 20 0a 20 20 20 20 20 20 20  , iReg, .       
8380: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8390: 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74 33 32   sqlite3AbsInt32
83a0: 28 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69  (sqlite3Atoi(zRi
83b0: 67 68 74 29 29 29 3b 0a 20 20 20 20 7d 0a 20 20  ght)));.    }.  
83c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
83d0: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
83e0: 52 6f 77 2c 20 69 52 65 67 2c 20 31 29 3b 0a 20  Row, iReg, 1);. 
83f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
8400: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
8410: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
8420: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
8430: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c  COLNAME_NAME, zL
8440: 65 66 74 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e  eft, SQLITE_TRAN
8450: 53 49 45 4e 54 29 3b 0a 20 20 20 20 62 72 65 61  SIENT);.    brea
8460: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
8470: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
8480: 61 73 65 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64  ase.]locking_mod
8490: 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  e.  **  PRAGMA [
84a0: 64 61 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 69 6e  database.]lockin
84b0: 67 5f 6d 6f 64 65 20 3d 20 28 6e 6f 72 6d 61 6c  g_mode = (normal
84c0: 7c 65 78 63 6c 75 73 69 76 65 29 0a 20 20 2a 2f  |exclusive).  */
84d0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
84e0: 4c 4f 43 4b 49 4e 47 5f 4d 4f 44 45 3a 20 7b 0a  LOCKING_MODE: {.
84f0: 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
8500: 7a 52 65 74 20 3d 20 22 6e 6f 72 6d 61 6c 22 3b  zRet = "normal";
8510: 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64 65 20 3d  .    int eMode =
8520: 20 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28   getLockingMode(
8530: 7a 52 69 67 68 74 29 3b 0a 0a 20 20 20 20 69 66  zRight);..    if
8540: 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 26 26 20  ( pId2->n==0 && 
8550: 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43  eMode==PAGER_LOC
8560: 4b 49 4e 47 4d 4f 44 45 5f 51 55 45 52 59 20 29  KINGMODE_QUERY )
8570: 7b 0a 20 20 20 20 20 20 2f 2a 20 53 69 6d 70 6c  {.      /* Simpl
8580: 65 20 22 50 52 41 47 4d 41 20 6c 6f 63 6b 69 6e  e "PRAGMA lockin
8590: 67 5f 6d 6f 64 65 3b 22 20 73 74 61 74 65 6d 65  g_mode;" stateme
85a0: 6e 74 2e 20 54 68 69 73 20 69 73 20 61 20 71 75  nt. This is a qu
85b0: 65 72 79 20 66 6f 72 0a 20 20 20 20 20 20 2a 2a  ery for.      **
85c0: 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 65 66   the current def
85d0: 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64  ault locking mod
85e0: 65 20 28 77 68 69 63 68 20 6d 61 79 20 62 65 20  e (which may be 
85f0: 64 69 66 66 65 72 65 6e 74 20 74 6f 0a 20 20 20  different to.   
8600: 20 20 20 2a 2a 20 74 68 65 20 6c 6f 63 6b 69 6e     ** the lockin
8610: 67 2d 6d 6f 64 65 20 6f 66 20 74 68 65 20 6d 61  g-mode of the ma
8620: 69 6e 20 64 61 74 61 62 61 73 65 29 2e 0a 20 20  in database)..  
8630: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 65 4d 6f      */.      eMo
8640: 64 65 20 3d 20 64 62 2d 3e 64 66 6c 74 4c 6f 63  de = db->dfltLoc
8650: 6b 4d 6f 64 65 3b 0a 20 20 20 20 7d 65 6c 73 65  kMode;.    }else
8660: 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20 2a 70  {.      Pager *p
8670: 50 61 67 65 72 3b 0a 20 20 20 20 20 20 69 66 28  Pager;.      if(
8680: 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20   pId2->n==0 ){. 
8690: 20 20 20 20 20 20 20 2f 2a 20 54 68 69 73 20 69         /* This i
86a0: 6e 64 69 63 61 74 65 73 20 74 68 61 74 20 6e 6f  ndicates that no
86b0: 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65 20 77   database name w
86c0: 61 73 20 73 70 65 63 69 66 69 65 64 20 61 73 20  as specified as 
86d0: 70 61 72 74 0a 20 20 20 20 20 20 20 20 2a 2a 20  part.        ** 
86e0: 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20 63 6f  of the PRAGMA co
86f0: 6d 6d 61 6e 64 2e 20 49 6e 20 74 68 69 73 20 63  mmand. In this c
8700: 61 73 65 20 74 68 65 20 6c 6f 63 6b 69 6e 67 2d  ase the locking-
8710: 6d 6f 64 65 20 6d 75 73 74 20 62 65 0a 20 20 20  mode must be.   
8720: 20 20 20 20 20 2a 2a 20 73 65 74 20 6f 6e 20 61       ** set on a
8730: 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
8740: 62 61 73 65 73 2c 20 61 73 20 77 65 6c 6c 20 61  bases, as well a
8750: 73 20 74 68 65 20 6d 61 69 6e 20 64 62 20 66 69  s the main db fi
8760: 6c 65 2e 0a 20 20 20 20 20 20 20 20 2a 2a 0a 20  le..        **. 
8770: 20 20 20 20 20 20 20 2a 2a 20 41 6c 73 6f 2c 20         ** Also, 
8780: 74 68 65 20 73 71 6c 69 74 65 33 2e 64 66 6c 74  the sqlite3.dflt
8790: 4c 6f 63 6b 4d 6f 64 65 20 76 61 72 69 61 62 6c  LockMode variabl
87a0: 65 20 69 73 20 73 65 74 20 73 6f 20 74 68 61 74  e is set so that
87b0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 6e 79 20  .        ** any 
87c0: 73 75 62 73 65 71 75 65 6e 74 6c 79 20 61 74 74  subsequently att
87d0: 61 63 68 65 64 20 64 61 74 61 62 61 73 65 73 20  ached databases 
87e0: 61 6c 73 6f 20 75 73 65 20 74 68 65 20 73 70 65  also use the spe
87f0: 63 69 66 69 65 64 0a 20 20 20 20 20 20 20 20 2a  cified.        *
8800: 2a 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 2e 0a  * locking mode..
8810: 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20          */.     
8820: 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 20     int ii;.     
8830: 20 20 20 61 73 73 65 72 74 28 70 44 62 3d 3d 26     assert(pDb==&
8840: 64 62 2d 3e 61 44 62 5b 30 5d 29 3b 0a 20 20 20  db->aDb[0]);.   
8850: 20 20 20 20 20 66 6f 72 28 69 69 3d 32 3b 20 69       for(ii=2; i
8860: 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29  i<db->nDb; ii++)
8870: 7b 0a 20 20 20 20 20 20 20 20 20 20 70 50 61 67  {.          pPag
8880: 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
8890: 65 50 61 67 65 72 28 64 62 2d 3e 61 44 62 5b 69  ePager(db->aDb[i
88a0: 69 5d 2e 70 42 74 29 3b 0a 20 20 20 20 20 20 20  i].pBt);.       
88b0: 20 20 20 73 71 6c 69 74 65 33 50 61 67 65 72 4c     sqlite3PagerL
88c0: 6f 63 6b 69 6e 67 4d 6f 64 65 28 70 50 61 67 65  ockingMode(pPage
88d0: 72 2c 20 65 4d 6f 64 65 29 3b 0a 20 20 20 20 20  r, eMode);.     
88e0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64 62 2d     }.        db-
88f0: 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 20 3d 20  >dfltLockMode = 
8900: 28 75 38 29 65 4d 6f 64 65 3b 0a 20 20 20 20 20  (u8)eMode;.     
8910: 20 7d 0a 20 20 20 20 20 20 70 50 61 67 65 72 20   }.      pPager 
8920: 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
8930: 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20  ger(pDb->pBt);. 
8940: 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 73 71 6c       eMode = sql
8950: 69 74 65 33 50 61 67 65 72 4c 6f 63 6b 69 6e 67  ite3PagerLocking
8960: 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4d 6f  Mode(pPager, eMo
8970: 64 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20  de);.    }..    
8980: 61 73 73 65 72 74 28 20 65 4d 6f 64 65 3d 3d 50  assert( eMode==P
8990: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
89a0: 5f 4e 4f 52 4d 41 4c 0a 20 20 20 20 20 20 20 20  _NORMAL.        
89b0: 20 20 20 20 7c 7c 20 65 4d 6f 64 65 3d 3d 50 41      || eMode==PA
89c0: 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f  GER_LOCKINGMODE_
89d0: 45 58 43 4c 55 53 49 56 45 20 29 3b 0a 20 20 20  EXCLUSIVE );.   
89e0: 20 69 66 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45   if( eMode==PAGE
89f0: 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58  R_LOCKINGMODE_EX
8a00: 43 4c 55 53 49 56 45 20 29 7b 0a 20 20 20 20 20  CLUSIVE ){.     
8a10: 20 7a 52 65 74 20 3d 20 22 65 78 63 6c 75 73 69   zRet = "exclusi
8a20: 76 65 22 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73  ve";.    }.    s
8a30: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
8a40: 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20  Cols(v, 1);.    
8a50: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
8a60: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
8a70: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6c 6f 63 6b 69  AME_NAME, "locki
8a80: 6e 67 5f 6d 6f 64 65 22 2c 20 53 51 4c 49 54 45  ng_mode", SQLITE
8a90: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71  _STATIC);.    sq
8aa0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
8ab0: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
8ac0: 2c 20 31 2c 20 30 2c 20 7a 52 65 74 2c 20 30 29  , 1, 0, zRet, 0)
8ad0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
8ae0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
8af0: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a  sultRow, 1, 1);.
8b00: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
8b10: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
8b20: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a 6f 75  A [database.]jou
8b30: 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20 2a 2a 20 20  rnal_mode.  **  
8b40: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
8b50: 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 20 3d  .]journal_mode =
8b60: 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 20 20 20  .  **           
8b70: 20 20 20 20 20 20 20 20 20 20 20 28 64 65 6c 65             (dele
8b80: 74 65 7c 70 65 72 73 69 73 74 7c 6f 66 66 7c 74  te|persist|off|t
8b90: 72 75 6e 63 61 74 65 7c 6d 65 6d 6f 72 79 7c 77  runcate|memory|w
8ba0: 61 6c 7c 6f 66 66 29 0a 20 20 2a 2f 0a 20 20 63  al|off).  */.  c
8bb0: 61 73 65 20 50 72 61 67 54 79 70 5f 4a 4f 55 52  ase PragTyp_JOUR
8bc0: 4e 41 4c 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20  NAL_MODE: {.    
8bd0: 69 6e 74 20 65 4d 6f 64 65 3b 20 20 20 20 20 20  int eMode;      
8be0: 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68 65 20    /* One of the 
8bf0: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
8c00: 45 5f 58 58 58 20 73 79 6d 62 6f 6c 73 20 2a 2f  E_XXX symbols */
8c10: 0a 20 20 20 20 69 6e 74 20 69 69 3b 20 20 20 20  .    int ii;    
8c20: 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
8c30: 6f 75 6e 74 65 72 20 2a 2f 0a 0a 20 20 20 20 73  ounter */..    s
8c40: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
8c50: 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20  Cols(v, 1);.    
8c60: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
8c70: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
8c80: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6a 6f 75 72 6e  AME_NAME, "journ
8c90: 61 6c 5f 6d 6f 64 65 22 2c 20 53 51 4c 49 54 45  al_mode", SQLITE
8ca0: 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20 20 20 69  _STATIC);..    i
8cb0: 66 28 20 7a 52 69 67 68 74 3d 3d 30 20 29 7b 0a  f( zRight==0 ){.
8cc0: 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68 65 72        /* If ther
8cd0: 65 20 69 73 20 6e 6f 20 22 3d 4d 4f 44 45 22 20  e is no "=MODE" 
8ce0: 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 61 67  part of the prag
8cf0: 6d 61 2c 20 64 6f 20 61 20 71 75 65 72 79 20 66  ma, do a query f
8d00: 6f 72 20 74 68 65 0a 20 20 20 20 20 20 2a 2a 20  or the.      ** 
8d10: 63 75 72 72 65 6e 74 20 6d 6f 64 65 20 2a 2f 0a  current mode */.
8d20: 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 50 41        eMode = PA
8d30: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
8d40: 51 55 45 52 59 3b 0a 20 20 20 20 7d 65 6c 73 65  QUERY;.    }else
8d50: 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68  {.      const ch
8d60: 61 72 20 2a 7a 4d 6f 64 65 3b 0a 20 20 20 20 20  ar *zMode;.     
8d70: 20 69 6e 74 20 6e 20 3d 20 73 71 6c 69 74 65 33   int n = sqlite3
8d80: 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29  Strlen30(zRight)
8d90: 3b 0a 20 20 20 20 20 20 66 6f 72 28 65 4d 6f 64  ;.      for(eMod
8da0: 65 3d 30 3b 20 28 7a 4d 6f 64 65 20 3d 20 73 71  e=0; (zMode = sq
8db0: 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65  lite3JournalMode
8dc0: 6e 61 6d 65 28 65 4d 6f 64 65 29 29 21 3d 30 3b  name(eMode))!=0;
8dd0: 20 65 4d 6f 64 65 2b 2b 29 7b 0a 20 20 20 20 20   eMode++){.     
8de0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74     if( sqlite3St
8df0: 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 7a  rNICmp(zRight, z
8e00: 4d 6f 64 65 2c 20 6e 29 3d 3d 30 20 29 20 62 72  Mode, n)==0 ) br
8e10: 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  eak;.      }.   
8e20: 20 20 20 69 66 28 20 21 7a 4d 6f 64 65 20 29 7b     if( !zMode ){
8e30: 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66 20 74  .        /* If t
8e40: 68 65 20 22 3d 4d 4f 44 45 22 20 70 61 72 74 20  he "=MODE" part 
8e50: 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68 20 61  does not match a
8e60: 6e 79 20 6b 6e 6f 77 6e 20 6a 6f 75 72 6e 61 6c  ny known journal
8e70: 20 6d 6f 64 65 2c 0a 20 20 20 20 20 20 20 20 2a   mode,.        *
8e80: 2a 20 74 68 65 6e 20 64 6f 20 61 20 71 75 65 72  * then do a quer
8e90: 79 20 2a 2f 0a 20 20 20 20 20 20 20 20 65 4d 6f  y */.        eMo
8ea0: 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f 55 52 4e  de = PAGER_JOURN
8eb0: 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 20 20  ALMODE_QUERY;.  
8ec0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
8ed0: 69 66 28 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52  if( eMode==PAGER
8ee0: 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45  _JOURNALMODE_QUE
8ef0: 52 59 20 26 26 20 70 49 64 32 2d 3e 6e 3d 3d 30  RY && pId2->n==0
8f00: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43 6f 6e   ){.      /* Con
8f10: 76 65 72 74 20 22 50 52 41 47 4d 41 20 6a 6f 75  vert "PRAGMA jou
8f20: 72 6e 61 6c 5f 6d 6f 64 65 22 20 69 6e 74 6f 20  rnal_mode" into 
8f30: 22 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a 6f 75  "PRAGMA main.jou
8f40: 72 6e 61 6c 5f 6d 6f 64 65 22 20 2a 2f 0a 20 20  rnal_mode" */.  
8f50: 20 20 20 20 69 44 62 20 3d 20 30 3b 0a 20 20 20      iDb = 0;.   
8f60: 20 20 20 70 49 64 32 2d 3e 6e 20 3d 20 31 3b 0a     pId2->n = 1;.
8f70: 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28 69 69      }.    for(ii
8f80: 3d 64 62 2d 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d  =db->nDb-1; ii>=
8f90: 30 3b 20 69 69 2d 2d 29 7b 0a 20 20 20 20 20 20  0; ii--){.      
8fa0: 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  if( db->aDb[ii].
8fb0: 70 42 74 20 26 26 20 28 69 69 3d 3d 69 44 62 20  pBt && (ii==iDb 
8fc0: 7c 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30 29 20 29  || pId2->n==0) )
8fd0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
8fe0: 33 56 64 62 65 55 73 65 73 42 74 72 65 65 28 76  3VdbeUsesBtree(v
8ff0: 2c 20 69 69 29 3b 0a 20 20 20 20 20 20 20 20 73  , ii);.        s
9000: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
9010: 28 76 2c 20 4f 50 5f 4a 6f 75 72 6e 61 6c 4d 6f  (v, OP_JournalMo
9020: 64 65 2c 20 69 69 2c 20 31 2c 20 65 4d 6f 64 65  de, ii, 1, eMode
9030: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
9040: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
9050: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
9060: 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20  ultRow, 1, 1);. 
9070: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
9080: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
9090: 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a 6f 75 72   [database.]jour
90a0: 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 0a 20  nal_size_limit. 
90b0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
90c0: 61 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 73  abase.]journal_s
90d0: 69 7a 65 5f 6c 69 6d 69 74 3d 4e 0a 20 20 2a 2a  ize_limit=N.  **
90e0: 0a 20 20 2a 2a 20 47 65 74 20 6f 72 20 73 65 74  .  ** Get or set
90f0: 20 74 68 65 20 73 69 7a 65 20 6c 69 6d 69 74 20   the size limit 
9100: 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f 75 72  on rollback jour
9110: 6e 61 6c 20 66 69 6c 65 73 2e 0a 20 20 2a 2f 0a  nal files..  */.
9120: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4a    case PragTyp_J
9130: 4f 55 52 4e 41 4c 5f 53 49 5a 45 5f 4c 49 4d 49  OURNAL_SIZE_LIMI
9140: 54 3a 20 7b 0a 20 20 20 20 50 61 67 65 72 20 2a  T: {.    Pager *
9150: 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33  pPager = sqlite3
9160: 42 74 72 65 65 50 61 67 65 72 28 70 44 62 2d 3e  BtreePager(pDb->
9170: 70 42 74 29 3b 0a 20 20 20 20 69 36 34 20 69 4c  pBt);.    i64 iL
9180: 69 6d 69 74 20 3d 20 2d 32 3b 0a 20 20 20 20 69  imit = -2;.    i
9190: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
91a0: 20 20 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48     sqlite3DecOrH
91b0: 65 78 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20  exToI64(zRight, 
91c0: 26 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20 20 20  &iLimit);.      
91d0: 69 66 28 20 69 4c 69 6d 69 74 3c 2d 31 20 29 20  if( iLimit<-1 ) 
91e0: 69 4c 69 6d 69 74 20 3d 20 2d 31 3b 0a 20 20 20  iLimit = -1;.   
91f0: 20 7d 0a 20 20 20 20 69 4c 69 6d 69 74 20 3d 20   }.    iLimit = 
9200: 73 71 6c 69 74 65 33 50 61 67 65 72 4a 6f 75 72  sqlite3PagerJour
9210: 6e 61 6c 53 69 7a 65 4c 69 6d 69 74 28 70 50 61  nalSizeLimit(pPa
9220: 67 65 72 2c 20 69 4c 69 6d 69 74 29 3b 0a 20 20  ger, iLimit);.  
9230: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
9240: 74 28 70 50 61 72 73 65 2c 20 22 6a 6f 75 72 6e  t(pParse, "journ
9250: 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 22 2c 20  al_size_limit", 
9260: 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20 62 72 65  iLimit);.    bre
9270: 61 6b 3b 0a 20 20 7d 0a 0a 23 65 6e 64 69 66 20  ak;.  }..#endif 
9280: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  /* SQLITE_OMIT_P
9290: 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a  AGER_PRAGMAS */.
92a0: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
92b0: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 61 75  MA [database.]au
92c0: 74 6f 5f 76 61 63 75 75 6d 0a 20 20 2a 2a 20 20  to_vacuum.  **  
92d0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
92e0: 2e 5d 61 75 74 6f 5f 76 61 63 75 75 6d 3d 4e 0a  .]auto_vacuum=N.
92f0: 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72    **.  ** Get or
9300: 20 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f   set the value o
9310: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 27  f the database '
9320: 61 75 74 6f 2d 76 61 63 75 75 6d 27 20 70 61 72  auto-vacuum' par
9330: 61 6d 65 74 65 72 2e 0a 20 20 2a 2a 20 54 68 65  ameter..  ** The
9340: 20 76 61 6c 75 65 20 69 73 20 6f 6e 65 20 6f 66   value is one of
9350: 3a 20 20 30 20 4e 4f 4e 45 20 31 20 46 55 4c 4c  :  0 NONE 1 FULL
9360: 20 32 20 49 4e 43 52 45 4d 45 4e 54 41 4c 0a 20   2 INCREMENTAL. 
9370: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
9380: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
9390: 55 4d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  UM.  case PragTy
93a0: 70 5f 41 55 54 4f 5f 56 41 43 55 55 4d 3a 20 7b  p_AUTO_VACUUM: {
93b0: 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 20  .    Btree *pBt 
93c0: 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20  = pDb->pBt;.    
93d0: 61 73 73 65 72 74 28 20 70 42 74 21 3d 30 20 29  assert( pBt!=0 )
93e0: 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  ;.    if( !zRigh
93f0: 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72  t ){.      retur
9400: 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73  nSingleInt(pPars
9410: 65 2c 20 22 61 75 74 6f 5f 76 61 63 75 75 6d 22  e, "auto_vacuum"
9420: 2c 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65  , sqlite3BtreeGe
9430: 74 41 75 74 6f 56 61 63 75 75 6d 28 70 42 74 29  tAutoVacuum(pBt)
9440: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
9450: 20 20 20 20 69 6e 74 20 65 41 75 74 6f 20 3d 20      int eAuto = 
9460: 67 65 74 41 75 74 6f 56 61 63 75 75 6d 28 7a 52  getAutoVacuum(zR
9470: 69 67 68 74 29 3b 0a 20 20 20 20 20 20 61 73 73  ight);.      ass
9480: 65 72 74 28 20 65 41 75 74 6f 3e 3d 30 20 26 26  ert( eAuto>=0 &&
9490: 20 65 41 75 74 6f 3c 3d 32 20 29 3b 0a 20 20 20   eAuto<=2 );.   
94a0: 20 20 20 64 62 2d 3e 6e 65 78 74 41 75 74 6f 76     db->nextAutov
94b0: 61 63 20 3d 20 28 75 38 29 65 41 75 74 6f 3b 0a  ac = (u8)eAuto;.
94c0: 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 20 53 65        /* Call Se
94d0: 74 41 75 74 6f 56 61 63 75 75 6d 28 29 20 74 6f  tAutoVacuum() to
94e0: 20 73 65 74 20 69 6e 69 74 69 61 6c 69 7a 65 20   set initialize 
94f0: 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 61 75 74  the internal aut
9500: 6f 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a 20 69  o and.      ** i
9510: 6e 63 72 2d 76 61 63 75 75 6d 20 66 6c 61 67 73  ncr-vacuum flags
9520: 2e 20 54 68 69 73 20 69 73 20 72 65 71 75 69 72  . This is requir
9530: 65 64 20 69 6e 20 63 61 73 65 20 74 68 69 73 20  ed in case this 
9540: 63 6f 6e 6e 65 63 74 69 6f 6e 0a 20 20 20 20 20  connection.     
9550: 20 2a 2a 20 63 72 65 61 74 65 73 20 74 68 65 20   ** creates the 
9560: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 49  database file. I
9570: 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74 20 74  t is important t
9580: 68 61 74 20 69 74 20 69 73 20 63 72 65 61 74 65  hat it is create
9590: 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20 61 6e  d.      ** as an
95a0: 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 63 61 70   auto-vacuum cap
95b0: 61 62 6c 65 20 64 62 2e 0a 20 20 20 20 20 20 2a  able db..      *
95c0: 2f 0a 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c  /.      rc = sql
95d0: 69 74 65 33 42 74 72 65 65 53 65 74 41 75 74 6f  ite3BtreeSetAuto
95e0: 56 61 63 75 75 6d 28 70 42 74 2c 20 65 41 75 74  Vacuum(pBt, eAut
95f0: 6f 29 3b 0a 20 20 20 20 20 20 69 66 28 20 72 63  o);.      if( rc
9600: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26 20 28  ==SQLITE_OK && (
9610: 65 41 75 74 6f 3d 3d 31 20 7c 7c 20 65 41 75 74  eAuto==1 || eAut
9620: 6f 3d 3d 32 29 20 29 7b 0a 20 20 20 20 20 20 20  o==2) ){.       
9630: 20 2f 2a 20 57 68 65 6e 20 73 65 74 74 69 6e 67   /* When setting
9640: 20 74 68 65 20 61 75 74 6f 5f 76 61 63 75 75 6d   the auto_vacuum
9650: 20 6d 6f 64 65 20 74 6f 20 65 69 74 68 65 72 20   mode to either 
9660: 22 66 75 6c 6c 22 20 6f 72 20 0a 20 20 20 20 20  "full" or .     
9670: 20 20 20 2a 2a 20 22 69 6e 63 72 65 6d 65 6e 74     ** "increment
9680: 61 6c 22 2c 20 77 72 69 74 65 20 74 68 65 20 76  al", write the v
9690: 61 6c 75 65 20 6f 66 20 6d 65 74 61 5b 36 5d 20  alue of meta[6] 
96a0: 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 0a  in the database.
96b0: 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c 65 2e          ** file.
96c0: 20 42 65 66 6f 72 65 20 77 72 69 74 69 6e 67 20   Before writing 
96d0: 74 6f 20 6d 65 74 61 5b 36 5d 2c 20 63 68 65 63  to meta[6], chec
96e0: 6b 20 74 68 61 74 20 6d 65 74 61 5b 33 5d 20 69  k that meta[3] i
96f0: 6e 64 69 63 61 74 65 73 0a 20 20 20 20 20 20 20  ndicates.       
9700: 20 2a 2a 20 74 68 61 74 20 74 68 69 73 20 72 65   ** that this re
9710: 61 6c 6c 79 20 69 73 20 61 6e 20 61 75 74 6f 2d  ally is an auto-
9720: 76 61 63 75 75 6d 20 63 61 70 61 62 6c 65 20 64  vacuum capable d
9730: 61 74 61 62 61 73 65 2e 0a 20 20 20 20 20 20 20  atabase..       
9740: 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 74 61 74   */.        stat
9750: 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 69 4c 6e  ic const int iLn
9760: 20 3d 20 56 44 42 45 5f 4f 46 46 53 45 54 5f 4c   = VDBE_OFFSET_L
9770: 49 4e 45 4e 4f 28 32 29 3b 0a 20 20 20 20 20 20  INENO(2);.      
9780: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56    static const V
9790: 64 62 65 4f 70 4c 69 73 74 20 73 65 74 4d 65 74  dbeOpList setMet
97a0: 61 36 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20  a6[] = {.       
97b0: 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74     { OP_Transact
97c0: 69 6f 6e 2c 20 20 20 20 30 2c 20 20 20 20 20 20  ion,    0,      
97d0: 20 20 20 31 2c 20 20 20 20 20 20 20 20 20 20 20     1,           
97e0: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20        0},    /* 
97f0: 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b  0 */.          {
9800: 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 2c 20   OP_ReadCookie, 
9810: 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 31      0,         1
9820: 2c 20 20 20 20 20 20 20 20 20 42 54 52 45 45 5f  ,         BTREE_
9830: 4c 41 52 47 45 53 54 5f 52 4f 4f 54 5f 50 41 47  LARGEST_ROOT_PAG
9840: 45 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 7b 20  E},.          { 
9850: 4f 50 5f 49 66 2c 20 20 20 20 20 20 20 20 20 20  OP_If,          
9860: 20 20 20 31 2c 20 20 20 20 20 20 20 20 20 30 2c     1,         0,
9870: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
9880: 20 30 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f 0a   0},    /* 2 */.
9890: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 48            { OP_H
98a0: 61 6c 74 2c 20 20 20 20 20 20 20 20 20 20 20 53  alt,           S
98b0: 51 4c 49 54 45 5f 4f 4b 2c 20 4f 45 5f 41 62 6f  QLITE_OK, OE_Abo
98c0: 72 74 2c 20 20 20 20 20 20 20 20 20 20 30 7d 2c  rt,          0},
98d0: 20 20 20 20 2f 2a 20 33 20 2a 2f 0a 20 20 20 20      /* 3 */.    
98e0: 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67        { OP_Integ
98f0: 65 72 2c 20 20 20 20 20 20 20 20 30 2c 20 20 20  er,        0,   
9900: 20 20 20 20 20 20 31 2c 20 20 20 20 20 20 20 20        1,        
9910: 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20           0},    
9920: 2f 2a 20 34 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 4 */.        
9930: 20 20 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65    { OP_SetCookie
9940: 2c 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20  ,      0,       
9950: 20 20 42 54 52 45 45 5f 49 4e 43 52 5f 56 41 43    BTREE_INCR_VAC
9960: 55 55 4d 2c 20 31 7d 2c 20 20 20 20 2f 2a 20 35  UUM, 1},    /* 5
9970: 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 3b 0a 20   */.        };. 
9980: 20 20 20 20 20 20 20 69 6e 74 20 69 41 64 64 72         int iAddr
9990: 3b 0a 20 20 20 20 20 20 20 20 69 41 64 64 72 20  ;.        iAddr 
99a0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
99b0: 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53  OpList(v, ArrayS
99c0: 69 7a 65 28 73 65 74 4d 65 74 61 36 29 2c 20 73  ize(setMeta6), s
99d0: 65 74 4d 65 74 61 36 2c 20 69 4c 6e 29 3b 0a 20  etMeta6, iLn);. 
99e0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
99f0: 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 69 41  beChangeP1(v, iA
9a00: 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  ddr, iDb);.     
9a10: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
9a20: 61 6e 67 65 50 31 28 76 2c 20 69 41 64 64 72 2b  angeP1(v, iAddr+
9a30: 31 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 20  1, iDb);.       
9a40: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
9a50: 67 65 50 32 28 76 2c 20 69 41 64 64 72 2b 32 2c  geP2(v, iAddr+2,
9a60: 20 69 41 64 64 72 2b 34 29 3b 0a 20 20 20 20 20   iAddr+4);.     
9a70: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
9a80: 61 6e 67 65 50 31 28 76 2c 20 69 41 64 64 72 2b  angeP1(v, iAddr+
9a90: 34 2c 20 65 41 75 74 6f 2d 31 29 3b 0a 20 20 20  4, eAuto-1);.   
9aa0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9ab0: 43 68 61 6e 67 65 50 31 28 76 2c 20 69 41 64 64  ChangeP1(v, iAdd
9ac0: 72 2b 35 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  r+5, iDb);.     
9ad0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55 73     sqlite3VdbeUs
9ae0: 65 73 42 74 72 65 65 28 76 2c 20 69 44 62 29 3b  esBtree(v, iDb);
9af0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
9b00: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65     break;.  }.#e
9b10: 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  ndif..  /*.  ** 
9b20: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
9b30: 65 2e 5d 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76  e.]incremental_v
9b40: 61 63 75 75 6d 28 4e 29 0a 20 20 2a 2a 0a 20 20  acuum(N).  **.  
9b50: 2a 2a 20 44 6f 20 4e 20 73 74 65 70 73 20 6f 66  ** Do N steps of
9b60: 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76 61 63   incremental vac
9b70: 75 75 6d 69 6e 67 20 6f 6e 20 61 20 64 61 74 61  uuming on a data
9b80: 62 61 73 65 2e 0a 20 20 2a 2f 0a 23 69 66 6e 64  base..  */.#ifnd
9b90: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
9ba0: 55 54 4f 56 41 43 55 55 4d 0a 20 20 63 61 73 65  UTOVACUUM.  case
9bb0: 20 50 72 61 67 54 79 70 5f 49 4e 43 52 45 4d 45   PragTyp_INCREME
9bc0: 4e 54 41 4c 5f 56 41 43 55 55 4d 3a 20 7b 0a 20  NTAL_VACUUM: {. 
9bd0: 20 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c 20 61     int iLimit, a
9be0: 64 64 72 3b 0a 20 20 20 20 69 66 28 20 7a 52 69  ddr;.    if( zRi
9bf0: 67 68 74 3d 3d 30 20 7c 7c 20 21 73 71 6c 69 74  ght==0 || !sqlit
9c00: 65 33 47 65 74 49 6e 74 33 32 28 7a 52 69 67 68  e3GetInt32(zRigh
9c10: 74 2c 20 26 69 4c 69 6d 69 74 29 20 7c 7c 20 69  t, &iLimit) || i
9c20: 4c 69 6d 69 74 3c 3d 30 20 29 7b 0a 20 20 20 20  Limit<=0 ){.    
9c30: 20 20 69 4c 69 6d 69 74 20 3d 20 30 78 37 66 66    iLimit = 0x7ff
9c40: 66 66 66 66 66 3b 0a 20 20 20 20 7d 0a 20 20 20  fffff;.    }.   
9c50: 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69   sqlite3BeginWri
9c60: 74 65 4f 70 65 72 61 74 69 6f 6e 28 70 50 61 72  teOperation(pPar
9c70: 73 65 2c 20 30 2c 20 69 44 62 29 3b 0a 20 20 20  se, 0, iDb);.   
9c80: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
9c90: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
9ca0: 2c 20 69 4c 69 6d 69 74 2c 20 31 29 3b 0a 20 20  , iLimit, 1);.  
9cb0: 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33    addr = sqlite3
9cc0: 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50  VdbeAddOp1(v, OP
9cd0: 5f 49 6e 63 72 56 61 63 75 75 6d 2c 20 69 44 62  _IncrVacuum, iDb
9ce0: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
9cf0: 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  v);.    sqlite3V
9d00: 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f  dbeAddOp1(v, OP_
9d10: 52 65 73 75 6c 74 52 6f 77 2c 20 31 29 3b 0a 20  ResultRow, 1);. 
9d20: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
9d30: 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d  dOp2(v, OP_AddIm
9d40: 6d 2c 20 31 2c 20 2d 31 29 3b 0a 20 20 20 20 73  m, 1, -1);.    s
9d50: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
9d60: 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 2c  (v, OP_IfPos, 1,
9d70: 20 61 64 64 72 29 3b 20 56 64 62 65 43 6f 76 65   addr); VdbeCove
9d80: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 73 71 6c  rage(v);.    sql
9d90: 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
9da0: 28 76 2c 20 61 64 64 72 29 3b 0a 20 20 20 20 62  (v, addr);.    b
9db0: 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
9dc0: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
9dd0: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
9de0: 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50  MAS.  /*.  **  P
9df0: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
9e00: 5d 63 61 63 68 65 5f 73 69 7a 65 0a 20 20 2a 2a  ]cache_size.  **
9e10: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
9e20: 73 65 2e 5d 63 61 63 68 65 5f 73 69 7a 65 3d 4e  se.]cache_size=N
9e30: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66  .  **.  ** The f
9e40: 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74  irst form report
9e50: 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 6c 6f  s the current lo
9e60: 63 61 6c 20 73 65 74 74 69 6e 67 20 66 6f 72 20  cal setting for 
9e70: 74 68 65 0a 20 20 2a 2a 20 70 61 67 65 20 63 61  the.  ** page ca
9e80: 63 68 65 20 73 69 7a 65 2e 20 54 68 65 20 73 65  che size. The se
9e90: 63 6f 6e 64 20 66 6f 72 6d 20 73 65 74 73 20 74  cond form sets t
9ea0: 68 65 20 6c 6f 63 61 6c 0a 20 20 2a 2a 20 70 61  he local.  ** pa
9eb0: 67 65 20 63 61 63 68 65 20 73 69 7a 65 20 76 61  ge cache size va
9ec0: 6c 75 65 2e 20 20 49 66 20 4e 20 69 73 20 70 6f  lue.  If N is po
9ed0: 73 69 74 69 76 65 20 74 68 65 6e 20 74 68 61 74  sitive then that
9ee0: 20 69 73 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d   is the.  ** num
9ef0: 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20  ber of pages in 
9f00: 74 68 65 20 63 61 63 68 65 2e 20 20 49 66 20 4e  the cache.  If N
9f10: 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68   is negative, th
9f20: 65 6e 20 74 68 65 0a 20 20 2a 2a 20 6e 75 6d 62  en the.  ** numb
9f30: 65 72 20 6f 66 20 70 61 67 65 73 20 69 73 20 61  er of pages is a
9f40: 64 6a 75 73 74 65 64 20 73 6f 20 74 68 61 74 20  djusted so that 
9f50: 74 68 65 20 63 61 63 68 65 20 75 73 65 73 20 2d  the cache uses -
9f60: 4e 20 6b 69 62 69 62 79 74 65 73 0a 20 20 2a 2a  N kibibytes.  **
9f70: 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a 20 20 2a 2f   of memory..  */
9f80: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
9f90: 43 41 43 48 45 5f 53 49 5a 45 3a 20 7b 0a 20 20  CACHE_SIZE: {.  
9fa0: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
9fb0: 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
9fc0: 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a  (db, iDb, 0) );.
9fd0: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
9fe0: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53  ){.      returnS
9ff0: 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c  ingleInt(pParse,
a000: 20 22 63 61 63 68 65 5f 73 69 7a 65 22 2c 20 70   "cache_size", p
a010: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63  Db->pSchema->cac
a020: 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 65  he_size);.    }e
a030: 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 73  lse{.      int s
a040: 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 74 6f  ize = sqlite3Ato
a050: 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20  i(zRight);.     
a060: 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63   pDb->pSchema->c
a070: 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a 65  ache_size = size
a080: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 42  ;.      sqlite3B
a090: 74 72 65 65 53 65 74 43 61 63 68 65 53 69 7a 65  treeSetCacheSize
a0a0: 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d 3e  (pDb->pBt, pDb->
a0b0: 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73  pSchema->cache_s
a0c0: 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  ize);.    }.    
a0d0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
a0e0: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
a0f0: 61 74 61 62 61 73 65 2e 5d 6d 6d 61 70 5f 73 69  atabase.]mmap_si
a100: 7a 65 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ze(N).  **.  ** 
a110: 55 73 65 64 20 74 6f 20 73 65 74 20 6d 61 70 70  Used to set mapp
a120: 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69 74 2e 20  ing size limit. 
a130: 54 68 65 20 6d 61 70 70 69 6e 67 20 73 69 7a 65  The mapping size
a140: 20 6c 69 6d 69 74 20 69 73 0a 20 20 2a 2a 20 75   limit is.  ** u
a150: 73 65 64 20 74 6f 20 6c 69 6d 69 74 20 74 68 65  sed to limit the
a160: 20 61 67 67 72 65 67 61 74 65 20 73 69 7a 65 20   aggregate size 
a170: 6f 66 20 61 6c 6c 20 6d 65 6d 6f 72 79 20 6d 61  of all memory ma
a180: 70 70 65 64 20 72 65 67 69 6f 6e 73 20 6f 66 20  pped regions of 
a190: 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73  the.  ** databas
a1a0: 65 20 66 69 6c 65 2e 20 49 66 20 74 68 69 73 20  e file. If this 
a1b0: 70 61 72 61 6d 65 74 65 72 20 69 73 20 73 65 74  parameter is set
a1c0: 20 74 6f 20 7a 65 72 6f 2c 20 74 68 65 6e 20 6d   to zero, then m
a1d0: 65 6d 6f 72 79 20 6d 61 70 70 69 6e 67 0a 20 20  emory mapping.  
a1e0: 2a 2a 20 69 73 20 6e 6f 74 20 75 73 65 64 20 61  ** is not used a
a1f0: 74 20 61 6c 6c 2e 20 20 49 66 20 4e 20 69 73 20  t all.  If N is 
a200: 6e 65 67 61 74 69 76 65 2c 20 74 68 65 6e 20 74  negative, then t
a210: 68 65 20 64 65 66 61 75 6c 74 20 6d 65 6d 6f 72  he default memor
a220: 79 20 6d 61 70 0a 20 20 2a 2a 20 6c 69 6d 69 74  y map.  ** limit
a230: 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79 20 73   determined by s
a240: 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28 53 51  qlite3_config(SQ
a250: 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 4d 41 50  LITE_CONFIG_MMAP
a260: 5f 53 49 5a 45 29 20 69 73 20 73 65 74 2e 0a 20  _SIZE) is set.. 
a270: 20 2a 2a 20 54 68 65 20 70 61 72 61 6d 65 74 65   ** The paramete
a280: 72 20 4e 20 69 73 20 6d 65 61 73 75 72 65 64 20  r N is measured 
a290: 69 6e 20 62 79 74 65 73 2e 0a 20 20 2a 2a 0a 20  in bytes..  **. 
a2a0: 20 2a 2a 20 54 68 69 73 20 76 61 6c 75 65 20 69   ** This value i
a2b0: 73 20 61 64 76 69 73 6f 72 79 2e 20 20 54 68 65  s advisory.  The
a2c0: 20 75 6e 64 65 72 6c 79 69 6e 67 20 56 46 53 20   underlying VFS 
a2d0: 69 73 20 66 72 65 65 20 74 6f 20 6d 65 6d 6f 72  is free to memor
a2e0: 79 20 6d 61 70 0a 20 20 2a 2a 20 61 73 20 6c 69  y map.  ** as li
a2f0: 74 74 6c 65 20 6f 72 20 61 73 20 6d 75 63 68 20  ttle or as much 
a300: 61 73 20 69 74 20 77 61 6e 74 73 2e 20 20 45 78  as it wants.  Ex
a310: 63 65 70 74 2c 20 69 66 20 4e 20 69 73 20 73 65  cept, if N is se
a320: 74 20 74 6f 20 30 20 74 68 65 6e 20 74 68 65 0a  t to 0 then the.
a330: 20 20 2a 2a 20 75 70 70 65 72 20 6c 61 79 65 72    ** upper layer
a340: 73 20 77 69 6c 6c 20 6e 65 76 65 72 20 69 6e 76  s will never inv
a350: 6f 6b 65 20 74 68 65 20 78 46 65 74 63 68 20 69  oke the xFetch i
a360: 6e 74 65 72 66 61 63 65 73 20 74 6f 20 74 68 65  nterfaces to the
a370: 20 56 46 53 2e 0a 20 20 2a 2f 0a 20 20 63 61 73   VFS..  */.  cas
a380: 65 20 50 72 61 67 54 79 70 5f 4d 4d 41 50 5f 53  e PragTyp_MMAP_S
a390: 49 5a 45 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74  IZE: {.    sqlit
a3a0: 65 33 5f 69 6e 74 36 34 20 73 7a 3b 0a 23 69 66  e3_int64 sz;.#if
a3b0: 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d 41 50   SQLITE_MAX_MMAP
a3c0: 5f 53 49 5a 45 3e 30 0a 20 20 20 20 61 73 73 65  _SIZE>0.    asse
a3d0: 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
a3e0: 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69  aMutexHeld(db, i
a3f0: 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66  Db, 0) );.    if
a400: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
a410: 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 20 20    int ii;.      
a420: 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54  sqlite3DecOrHexT
a430: 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26 73 7a  oI64(zRight, &sz
a440: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73 7a 3c  );.      if( sz<
a450: 30 20 29 20 73 7a 20 3d 20 73 71 6c 69 74 65 33  0 ) sz = sqlite3
a460: 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 73 7a 4d  GlobalConfig.szM
a470: 6d 61 70 3b 0a 20 20 20 20 20 20 69 66 28 20 70  map;.      if( p
a480: 49 64 32 2d 3e 6e 3d 3d 30 20 29 20 64 62 2d 3e  Id2->n==0 ) db->
a490: 73 7a 4d 6d 61 70 20 3d 20 73 7a 3b 0a 20 20 20  szMmap = sz;.   
a4a0: 20 20 20 66 6f 72 28 69 69 3d 64 62 2d 3e 6e 44     for(ii=db->nD
a4b0: 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69 69 2d 2d  b-1; ii>=0; ii--
a4c0: 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20 64  ){.        if( d
a4d0: 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20 26  b->aDb[ii].pBt &
a4e0: 26 20 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70 49  & (ii==iDb || pI
a4f0: 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20 20  d2->n==0) ){.   
a500: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74         sqlite3Bt
a510: 72 65 65 53 65 74 4d 6d 61 70 4c 69 6d 69 74 28  reeSetMmapLimit(
a520: 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c  db->aDb[ii].pBt,
a530: 20 73 7a 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a   sz);.        }.
a540: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
a550: 20 20 73 7a 20 3d 20 2d 31 3b 0a 20 20 20 20 72    sz = -1;.    r
a560: 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65  c = sqlite3_file
a570: 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62  _control(db, zDb
a580: 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4d  , SQLITE_FCNTL_M
a590: 4d 41 50 5f 53 49 5a 45 2c 20 26 73 7a 29 3b 0a  MAP_SIZE, &sz);.
a5a0: 23 65 6c 73 65 0a 20 20 20 20 73 7a 20 3d 20 30  #else.    sz = 0
a5b0: 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c 49 54  ;.    rc = SQLIT
a5c0: 45 5f 4f 4b 3b 0a 23 65 6e 64 69 66 0a 20 20 20  E_OK;.#endif.   
a5d0: 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f   if( rc==SQLITE_
a5e0: 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75  OK ){.      retu
a5f0: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72  rnSingleInt(pPar
a600: 73 65 2c 20 22 6d 6d 61 70 5f 73 69 7a 65 22 2c  se, "mmap_size",
a610: 20 73 7a 29 3b 0a 20 20 20 20 7d 65 6c 73 65 20   sz);.    }else 
a620: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4e  if( rc!=SQLITE_N
a630: 4f 54 46 4f 55 4e 44 20 29 7b 0a 20 20 20 20 20  OTFOUND ){.     
a640: 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b   pParse->nErr++;
a650: 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 72  .      pParse->r
a660: 63 20 3d 20 72 63 3b 0a 20 20 20 20 7d 0a 20 20  c = rc;.    }.  
a670: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
a680: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
a690: 20 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 2a 2a   temp_store.  **
a6a0: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
a6b0: 74 6f 72 65 20 3d 20 22 64 65 66 61 75 6c 74 22  tore = "default"
a6c0: 7c 22 6d 65 6d 6f 72 79 22 7c 22 66 69 6c 65 22  |"memory"|"file"
a6d0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72  .  **.  ** Retur
a6e0: 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63  n or set the loc
a6f0: 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  al value of the 
a700: 74 65 6d 70 5f 73 74 6f 72 65 20 66 6c 61 67 2e  temp_store flag.
a710: 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20    Changing.  ** 
a720: 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20  the local value 
a730: 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 20 63 68  does not make ch
a740: 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 69 73  anges to the dis
a750: 6b 20 66 69 6c 65 20 61 6e 64 20 74 68 65 20 64  k file and the d
a760: 65 66 61 75 6c 74 0a 20 20 2a 2a 20 76 61 6c 75  efault.  ** valu
a770: 65 20 77 69 6c 6c 20 62 65 20 72 65 73 74 6f 72  e will be restor
a780: 65 64 20 74 68 65 20 6e 65 78 74 20 74 69 6d 65  ed the next time
a790: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73   the database is
a7a0: 20 6f 70 65 6e 65 64 2e 0a 20 20 2a 2a 0a 20 20   opened..  **.  
a7b0: 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 69 74 20  ** Note that it 
a7c0: 69 73 20 70 6f 73 73 69 62 6c 65 20 66 6f 72 20  is possible for 
a7d0: 74 68 65 20 6c 69 62 72 61 72 79 20 63 6f 6d 70  the library comp
a7e0: 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73  ile-time options
a7f0: 20 74 6f 0a 20 20 2a 2a 20 6f 76 65 72 72 69 64   to.  ** overrid
a800: 65 20 74 68 69 73 20 73 65 74 74 69 6e 67 0a 20  e this setting. 
a810: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
a820: 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45 3a 20 7b  yp_TEMP_STORE: {
a830: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
a840: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
a850: 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
a860: 2c 20 22 74 65 6d 70 5f 73 74 6f 72 65 22 2c 20  , "temp_store", 
a870: 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 29 3b  db->temp_store);
a880: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
a890: 20 20 63 68 61 6e 67 65 54 65 6d 70 53 74 6f 72    changeTempStor
a8a0: 61 67 65 28 70 50 61 72 73 65 2c 20 7a 52 69 67  age(pParse, zRig
a8b0: 68 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62  ht);.    }.    b
a8c0: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
a8d0: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 65    **   PRAGMA te
a8e0: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
a8f0: 72 79 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  ry.  **   PRAGMA
a900: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
a910: 63 74 6f 72 79 20 3d 20 22 22 7c 22 64 69 72 65  ctory = ""|"dire
a920: 63 74 6f 72 79 5f 6e 61 6d 65 22 0a 20 20 2a 2a  ctory_name".  **
a930: 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20  .  ** Return or 
a940: 73 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61  set the local va
a950: 6c 75 65 20 6f 66 20 74 68 65 20 74 65 6d 70 5f  lue of the temp_
a960: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory 
a970: 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a  flag.  Changing.
a980: 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 73    ** the value s
a990: 65 74 73 20 61 20 73 70 65 63 69 66 69 63 20 64  ets a specific d
a9a0: 69 72 65 63 74 6f 72 79 20 74 6f 20 62 65 20 75  irectory to be u
a9b0: 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72 61 72  sed for temporar
a9c0: 79 20 66 69 6c 65 73 2e 0a 20 20 2a 2a 20 53 65  y files..  ** Se
a9d0: 74 74 69 6e 67 20 74 6f 20 61 20 6e 75 6c 6c 20  tting to a null 
a9e0: 73 74 72 69 6e 67 20 72 65 76 65 72 74 73 20 74  string reverts t
a9f0: 6f 20 74 68 65 20 64 65 66 61 75 6c 74 20 74 65  o the default te
aa00: 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74 6f 72  mporary director
aa10: 79 20 73 65 61 72 63 68 2e 0a 20 20 2a 2a 20 49  y search..  ** I
aa20: 66 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65  f temporary dire
aa30: 63 74 6f 72 79 20 69 73 20 63 68 61 6e 67 65 64  ctory is changed
aa40: 2c 20 74 68 65 6e 20 69 6e 76 61 6c 69 64 61 74  , then invalidat
aa50: 65 54 65 6d 70 53 74 6f 72 61 67 65 2e 0a 20 20  eTempStorage..  
aa60: 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  **.  */.  case P
aa70: 72 61 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52  ragTyp_TEMP_STOR
aa80: 45 5f 44 49 52 45 43 54 4f 52 59 3a 20 7b 0a 20  E_DIRECTORY: {. 
aa90: 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29     if( !zRight )
aaa0: 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  {.      if( sqli
aab0: 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f  te3_temp_directo
aac0: 72 79 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  ry ){.        sq
aad0: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
aae0: 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20  ols(v, 1);.     
aaf0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
ab00: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
ab10: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 0a 20 20  OLNAME_NAME, .  
ab20: 20 20 20 20 20 20 20 20 20 20 22 74 65 6d 70 5f            "temp_
ab30: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 22  store_directory"
ab40: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
ab50: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
ab60: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
ab70: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c  P_String8, 0, 1,
ab80: 20 30 2c 20 73 71 6c 69 74 65 33 5f 74 65 6d 70   0, sqlite3_temp
ab90: 5f 64 69 72 65 63 74 6f 72 79 2c 20 30 29 3b 0a  _directory, 0);.
aba0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
abb0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
abc0: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29  ResultRow, 1, 1)
abd0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
abe0: 6c 73 65 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c  lse{.#ifndef SQL
abf0: 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 20  ITE_OMIT_WSD.   
ac00: 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d     if( zRight[0]
ac10: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20   ){.        int 
ac20: 72 65 73 3b 0a 20 20 20 20 20 20 20 20 72 63 20  res;.        rc 
ac30: 3d 20 73 71 6c 69 74 65 33 4f 73 41 63 63 65 73  = sqlite3OsAcces
ac40: 73 28 64 62 2d 3e 70 56 66 73 2c 20 7a 52 69 67  s(db->pVfs, zRig
ac50: 68 74 2c 20 53 51 4c 49 54 45 5f 41 43 43 45 53  ht, SQLITE_ACCES
ac60: 53 5f 52 45 41 44 57 52 49 54 45 2c 20 26 72 65  S_READWRITE, &re
ac70: 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  s);.        if( 
ac80: 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c  rc!=SQLITE_OK ||
ac90: 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20   res==0 ){.     
aca0: 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f       sqlite3Erro
acb0: 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22 6e 6f  rMsg(pParse, "no
acc0: 74 20 61 20 77 72 69 74 61 62 6c 65 20 64 69 72  t a writable dir
acd0: 65 63 74 6f 72 79 22 29 3b 0a 20 20 20 20 20 20  ectory");.      
ace0: 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f      goto pragma_
acf0: 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  out;.        }. 
ad00: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
ad10: 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f   SQLITE_TEMP_STO
ad20: 52 45 3d 3d 30 0a 20 20 20 20 20 20 20 7c 7c 20  RE==0.       || 
ad30: 28 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f  (SQLITE_TEMP_STO
ad40: 52 45 3d 3d 31 20 26 26 20 64 62 2d 3e 74 65 6d  RE==1 && db->tem
ad50: 70 5f 73 74 6f 72 65 3c 3d 31 29 0a 20 20 20 20  p_store<=1).    
ad60: 20 20 20 7c 7c 20 28 53 51 4c 49 54 45 5f 54 45     || (SQLITE_TE
ad70: 4d 50 5f 53 54 4f 52 45 3d 3d 32 20 26 26 20 64  MP_STORE==2 && d
ad80: 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3d 3d 31  b->temp_store==1
ad90: 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20 20 20  ).      ){.     
ada0: 20 20 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d     invalidateTem
adb0: 70 53 74 6f 72 61 67 65 28 70 50 61 72 73 65 29  pStorage(pParse)
adc0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
add0: 73 71 6c 69 74 65 33 5f 66 72 65 65 28 73 71 6c  sqlite3_free(sql
ade0: 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74  ite3_temp_direct
adf0: 6f 72 79 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ory);.      if( 
ae00: 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20  zRight[0] ){.   
ae10: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 74 65 6d       sqlite3_tem
ae20: 70 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 73 71  p_directory = sq
ae30: 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25  lite3_mprintf("%
ae40: 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20  s", zRight);.   
ae50: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
ae60: 20 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64    sqlite3_temp_d
ae70: 69 72 65 63 74 6f 72 79 20 3d 20 30 3b 0a 20 20  irectory = 0;.  
ae80: 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20      }.#endif /* 
ae90: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20  SQLITE_OMIT_WSD 
aea0: 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65  */.    }.    bre
aeb0: 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66 20 53 51 4c  ak;.  }..#if SQL
aec0: 49 54 45 5f 4f 53 5f 57 49 4e 0a 20 20 2f 2a 0a  ITE_OS_WIN.  /*.
aed0: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 64 61    **   PRAGMA da
aee0: 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  ta_store_directo
aef0: 72 79 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  ry.  **   PRAGMA
af00: 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65   data_store_dire
af10: 63 74 6f 72 79 20 3d 20 22 22 7c 22 64 69 72 65  ctory = ""|"dire
af20: 63 74 6f 72 79 5f 6e 61 6d 65 22 0a 20 20 2a 2a  ctory_name".  **
af30: 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20  .  ** Return or 
af40: 73 65 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61  set the local va
af50: 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 5f  lue of the data_
af60: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20  store_directory 
af70: 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a  flag.  Changing.
af80: 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 73    ** the value s
af90: 65 74 73 20 61 20 73 70 65 63 69 66 69 63 20 64  ets a specific d
afa0: 69 72 65 63 74 6f 72 79 20 74 6f 20 62 65 20 75  irectory to be u
afb0: 73 65 64 20 66 6f 72 20 64 61 74 61 62 61 73 65  sed for database
afc0: 20 66 69 6c 65 73 20 74 68 61 74 0a 20 20 2a 2a   files that.  **
afd0: 20 77 65 72 65 20 73 70 65 63 69 66 69 65 64 20   were specified 
afe0: 77 69 74 68 20 61 20 72 65 6c 61 74 69 76 65 20  with a relative 
aff0: 70 61 74 68 6e 61 6d 65 2e 20 20 53 65 74 74 69  pathname.  Setti
b000: 6e 67 20 74 6f 20 61 20 6e 75 6c 6c 20 73 74 72  ng to a null str
b010: 69 6e 67 20 72 65 76 65 72 74 73 0a 20 20 2a 2a  ing reverts.  **
b020: 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c 74 20   to the default 
b030: 64 61 74 61 62 61 73 65 20 64 69 72 65 63 74 6f  database directo
b040: 72 79 2c 20 77 68 69 63 68 20 66 6f 72 20 64 61  ry, which for da
b050: 74 61 62 61 73 65 20 66 69 6c 65 73 20 73 70 65  tabase files spe
b060: 63 69 66 69 65 64 20 77 69 74 68 0a 20 20 2a 2a  cified with.  **
b070: 20 61 20 72 65 6c 61 74 69 76 65 20 70 61 74 68   a relative path
b080: 20 77 69 6c 6c 20 70 72 6f 62 61 62 6c 79 20 62   will probably b
b090: 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65 20 63  e based on the c
b0a0: 75 72 72 65 6e 74 20 64 69 72 65 63 74 6f 72 79  urrent directory
b0b0: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70 72   for the.  ** pr
b0c0: 6f 63 65 73 73 2e 20 20 44 61 74 61 62 61 73 65  ocess.  Database
b0d0: 20 66 69 6c 65 20 73 70 65 63 69 66 69 65 64 20   file specified 
b0e0: 77 69 74 68 20 61 6e 20 61 62 73 6f 6c 75 74 65  with an absolute
b0f0: 20 70 61 74 68 20 61 72 65 20 6e 6f 74 20 69 6d   path are not im
b100: 70 61 63 74 65 64 0a 20 20 2a 2a 20 62 79 20 74  pacted.  ** by t
b110: 68 69 73 20 73 65 74 74 69 6e 67 2c 20 72 65 67  his setting, reg
b120: 61 72 64 6c 65 73 73 20 6f 66 20 69 74 73 20 76  ardless of its v
b130: 61 6c 75 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a  alue..  **.  */.
b140: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 44    case PragTyp_D
b150: 41 54 41 5f 53 54 4f 52 45 5f 44 49 52 45 43 54  ATA_STORE_DIRECT
b160: 4f 52 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 21  ORY: {.    if( !
b170: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
b180: 69 66 28 20 73 71 6c 69 74 65 33 5f 64 61 74 61  if( sqlite3_data
b190: 5f 64 69 72 65 63 74 6f 72 79 20 29 7b 0a 20 20  _directory ){.  
b1a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b1b0: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
b1c0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
b1d0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
b1e0: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
b1f0: 41 4d 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20  AME, .          
b200: 20 20 22 64 61 74 61 5f 73 74 6f 72 65 5f 64 69    "data_store_di
b210: 72 65 63 74 6f 72 79 22 2c 20 53 51 4c 49 54 45  rectory", SQLITE
b220: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
b230: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
b240: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
b250: 38 2c 20 30 2c 20 31 2c 20 30 2c 20 73 71 6c 69  8, 0, 1, 0, sqli
b260: 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f  te3_data_directo
b270: 72 79 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  ry, 0);.        
b280: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
b290: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
b2a0: 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 20 20  w, 1, 1);.      
b2b0: 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69 66  }.    }else{.#if
b2c0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
b2d0: 5f 57 53 44 0a 20 20 20 20 20 20 69 66 28 20 7a  _WSD.      if( z
b2e0: 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20  Right[0] ){.    
b2f0: 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20      int res;.   
b300: 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65       rc = sqlite
b310: 33 4f 73 41 63 63 65 73 73 28 64 62 2d 3e 70 56  3OsAccess(db->pV
b320: 66 73 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c 49  fs, zRight, SQLI
b330: 54 45 5f 41 43 43 45 53 53 5f 52 45 41 44 57 52  TE_ACCESS_READWR
b340: 49 54 45 2c 20 26 72 65 73 29 3b 0a 20 20 20 20  ITE, &res);.    
b350: 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49      if( rc!=SQLI
b360: 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20  TE_OK || res==0 
b370: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
b380: 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61  ite3ErrorMsg(pPa
b390: 72 73 65 2c 20 22 6e 6f 74 20 61 20 77 72 69 74  rse, "not a writ
b3a0: 61 62 6c 65 20 64 69 72 65 63 74 6f 72 79 22 29  able directory")
b3b0: 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f  ;.          goto
b3c0: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20   pragma_out;.   
b3d0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
b3e0: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65       sqlite3_fre
b3f0: 65 28 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64  e(sqlite3_data_d
b400: 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20 20  irectory);.     
b410: 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29   if( zRight[0] )
b420: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
b430: 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79  3_data_directory
b440: 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e   = sqlite3_mprin
b450: 74 66 28 22 25 73 22 2c 20 7a 52 69 67 68 74 29  tf("%s", zRight)
b460: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
b470: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 64         sqlite3_d
b480: 61 74 61 5f 64 69 72 65 63 74 6f 72 79 20 3d 20  ata_directory = 
b490: 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69  0;.      }.#endi
b4a0: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
b4b0: 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a 20 20  _WSD */.    }.  
b4c0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
b4d0: 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f  dif..#if SQLITE_
b4e0: 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53  ENABLE_LOCKING_S
b4f0: 54 59 4c 45 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  TYLE.  /*.  **  
b500: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
b510: 65 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  e.]lock_proxy_fi
b520: 6c 65 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  le.  **   PRAGMA
b530: 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f 63 6b   [database.]lock
b540: 5f 70 72 6f 78 79 5f 66 69 6c 65 20 3d 20 22 3a  _proxy_file = ":
b550: 61 75 74 6f 3a 22 7c 22 6c 6f 63 6b 5f 66 69 6c  auto:"|"lock_fil
b560: 65 5f 70 61 74 68 22 0a 20 20 2a 2a 0a 20 20 2a  e_path".  **.  *
b570: 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20  * Return or set 
b580: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  the value of the
b590: 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65   lock_proxy_file
b5a0: 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67   flag.  Changing
b5b0: 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20  .  ** the value 
b5c0: 73 65 74 73 20 61 20 73 70 65 63 69 66 69 63 20  sets a specific 
b5d0: 66 69 6c 65 20 74 6f 20 62 65 20 75 73 65 64 20  file to be used 
b5e0: 66 6f 72 20 64 61 74 61 62 61 73 65 20 61 63 63  for database acc
b5f0: 65 73 73 20 6c 6f 63 6b 73 2e 0a 20 20 2a 2a 0a  ess locks..  **.
b600: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
b610: 54 79 70 5f 4c 4f 43 4b 5f 50 52 4f 58 59 5f 46  Typ_LOCK_PROXY_F
b620: 49 4c 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 21  ILE: {.    if( !
b630: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
b640: 50 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20  Pager *pPager = 
b650: 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
b660: 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20  r(pDb->pBt);.   
b670: 20 20 20 63 68 61 72 20 2a 70 72 6f 78 79 5f 66     char *proxy_f
b680: 69 6c 65 5f 70 61 74 68 20 3d 20 4e 55 4c 4c 3b  ile_path = NULL;
b690: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
b6a0: 69 6c 65 20 2a 70 46 69 6c 65 20 3d 20 73 71 6c  ile *pFile = sql
b6b0: 69 74 65 33 50 61 67 65 72 46 69 6c 65 28 70 50  ite3PagerFile(pP
b6c0: 61 67 65 72 29 3b 0a 20 20 20 20 20 20 73 71 6c  ager);.      sql
b6d0: 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72 6f  ite3OsFileContro
b6e0: 6c 48 69 6e 74 28 70 46 69 6c 65 2c 20 53 51 4c  lHint(pFile, SQL
b6f0: 49 54 45 5f 47 45 54 5f 4c 4f 43 4b 50 52 4f 58  ITE_GET_LOCKPROX
b700: 59 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20  YFILE, .        
b710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b720: 20 20 20 26 70 72 6f 78 79 5f 66 69 6c 65 5f 70     &proxy_file_p
b730: 61 74 68 29 3b 0a 20 20 20 20 20 20 0a 20 20 20  ath);.      .   
b740: 20 20 20 69 66 28 20 70 72 6f 78 79 5f 66 69 6c     if( proxy_fil
b750: 65 5f 70 61 74 68 20 29 7b 0a 20 20 20 20 20 20  e_path ){.      
b760: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
b770: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
b780: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
b790: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
b7a0: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
b7b0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
b7c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7d0: 22 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65  "lock_proxy_file
b7e0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
b7f0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
b800: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
b810: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31  OP_String8, 0, 1
b820: 2c 20 30 2c 20 70 72 6f 78 79 5f 66 69 6c 65 5f  , 0, proxy_file_
b830: 70 61 74 68 2c 20 30 29 3b 0a 20 20 20 20 20 20  path, 0);.      
b840: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
b850: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
b860: 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20  Row, 1, 1);.    
b870: 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20    }.    }else{. 
b880: 20 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67       Pager *pPag
b890: 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
b8a0: 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29  ePager(pDb->pBt)
b8b0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  ;.      sqlite3_
b8c0: 66 69 6c 65 20 2a 70 46 69 6c 65 20 3d 20 73 71  file *pFile = sq
b8d0: 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65 28 70  lite3PagerFile(p
b8e0: 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20 69 6e  Pager);.      in
b8f0: 74 20 72 65 73 3b 0a 20 20 20 20 20 20 69 66 28  t res;.      if(
b900: 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20   zRight[0] ){.  
b910: 20 20 20 20 20 20 72 65 73 3d 73 71 6c 69 74 65        res=sqlite
b920: 33 4f 73 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 70  3OsFileControl(p
b930: 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f 53 45 54  File, SQLITE_SET
b940: 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20  _LOCKPROXYFILE, 
b950: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b970: 20 20 20 20 20 20 7a 52 69 67 68 74 29 3b 0a 20        zRight);. 
b980: 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a 20 20       } else {.  
b990: 20 20 20 20 20 20 72 65 73 3d 73 71 6c 69 74 65        res=sqlite
b9a0: 33 4f 73 46 69 6c 65 43 6f 6e 74 72 6f 6c 28 70  3OsFileControl(p
b9b0: 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f 53 45 54  File, SQLITE_SET
b9c0: 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20  _LOCKPROXYFILE, 
b9d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
b9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9f0: 20 20 20 20 20 20 4e 55 4c 4c 29 3b 0a 20 20 20        NULL);.   
ba00: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 72     }.      if( r
ba10: 65 73 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  es!=SQLITE_OK ){
ba20: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
ba30: 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c  ErrorMsg(pParse,
ba40: 20 22 66 61 69 6c 65 64 20 74 6f 20 73 65 74 20   "failed to set 
ba50: 6c 6f 63 6b 20 70 72 6f 78 79 20 66 69 6c 65 22  lock proxy file"
ba60: 29 3b 0a 20 20 20 20 20 20 20 20 67 6f 74 6f 20  );.        goto 
ba70: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20  pragma_out;.    
ba80: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72    }.    }.    br
ba90: 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20  eak;.  }.#endif 
baa0: 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45  /* SQLITE_ENABLE
bab0: 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 20 2a  _LOCKING_STYLE *
bac0: 2f 20 20 20 20 20 20 0a 20 20 20 20 0a 20 20 2f  /      .    .  /
bad0: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
bae0: 5b 64 61 74 61 62 61 73 65 2e 5d 73 79 6e 63 68  [database.]synch
baf0: 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20 20 20 50 52  ronous.  **   PR
bb00: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
bb10: 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 7c  synchronous=OFF|
bb20: 4f 4e 7c 4e 4f 52 4d 41 4c 7c 46 55 4c 4c 0a 20  ON|NORMAL|FULL. 
bb30: 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20   **.  ** Return 
bb40: 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c  or set the local
bb50: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 73 79   value of the sy
bb60: 6e 63 68 72 6f 6e 6f 75 73 20 66 6c 61 67 2e 20  nchronous flag. 
bb70: 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74   Changing.  ** t
bb80: 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 64  he local value d
bb90: 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 20 63 68 61  oes not make cha
bba0: 6e 67 65 73 20 74 6f 20 74 68 65 20 64 69 73 6b  nges to the disk
bbb0: 20 66 69 6c 65 20 61 6e 64 20 74 68 65 0a 20 20   file and the.  
bbc0: 2a 2a 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  ** default value
bbd0: 20 77 69 6c 6c 20 62 65 20 72 65 73 74 6f 72 65   will be restore
bbe0: 64 20 74 68 65 20 6e 65 78 74 20 74 69 6d 65 20  d the next time 
bbf0: 74 68 65 20 64 61 74 61 62 61 73 65 20 69 73 0a  the database is.
bc00: 20 20 2a 2a 20 6f 70 65 6e 65 64 2e 0a 20 20 2a    ** opened..  *
bc10: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
bc20: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3a 20 7b 0a  _SYNCHRONOUS: {.
bc30: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
bc40: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53  ){.      returnS
bc50: 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c  ingleInt(pParse,
bc60: 20 22 73 79 6e 63 68 72 6f 6e 6f 75 73 22 2c 20   "synchronous", 
bc70: 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65  pDb->safety_leve
bc80: 6c 2d 31 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  l-1);.    }else{
bc90: 0a 20 20 20 20 20 20 69 66 28 20 21 64 62 2d 3e  .      if( !db->
bca0: 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20  autoCommit ){.  
bcb0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72        sqlite3Err
bcc0: 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 0a 20  orMsg(pParse, . 
bcd0: 20 20 20 20 20 20 20 20 20 20 20 22 53 61 66 65             "Safe
bce0: 74 79 20 6c 65 76 65 6c 20 6d 61 79 20 6e 6f 74  ty level may not
bcf0: 20 62 65 20 63 68 61 6e 67 65 64 20 69 6e 73 69   be changed insi
bd00: 64 65 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e  de a transaction
bd10: 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  ");.      }else{
bd20: 0a 20 20 20 20 20 20 20 20 70 44 62 2d 3e 73 61  .        pDb->sa
bd30: 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 67 65 74  fety_level = get
bd40: 53 61 66 65 74 79 4c 65 76 65 6c 28 7a 52 69 67  SafetyLevel(zRig
bd50: 68 74 2c 30 2c 31 29 2b 31 3b 0a 20 20 20 20 20  ht,0,1)+1;.     
bd60: 20 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c     setAllPagerFl
bd70: 61 67 73 28 64 62 29 3b 0a 20 20 20 20 20 20 7d  ags(db);.      }
bd80: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
bd90: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
bda0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
bdb0: 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69  R_PRAGMAS */..#i
bdc0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
bdd0: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 0a 20  T_FLAG_PRAGMAS. 
bde0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 46 4c   case PragTyp_FL
bdf0: 41 47 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  AG: {.    if( zR
be00: 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ight==0 ){.     
be10: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
be20: 28 70 50 61 72 73 65 2c 20 61 50 72 61 67 6d 61  (pParse, aPragma
be30: 4e 61 6d 65 73 5b 6d 69 64 5d 2e 7a 4e 61 6d 65  Names[mid].zName
be40: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
be50: 20 20 20 20 20 20 20 28 64 62 2d 3e 66 6c 61 67         (db->flag
be60: 73 20 26 20 61 50 72 61 67 6d 61 4e 61 6d 65 73  s & aPragmaNames
be70: 5b 6d 69 64 5d 2e 69 41 72 67 29 21 3d 30 20 29  [mid].iArg)!=0 )
be80: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
be90: 20 20 20 69 6e 74 20 6d 61 73 6b 20 3d 20 61 50     int mask = aP
bea0: 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e  ragmaNames[mid].
beb0: 69 41 72 67 3b 20 20 20 20 2f 2a 20 4d 61 73 6b  iArg;    /* Mask
bec0: 20 6f 66 20 62 69 74 73 20 74 6f 20 73 65 74 20   of bits to set 
bed0: 6f 72 20 63 6c 65 61 72 2e 20 2a 2f 0a 20 20 20  or clear. */.   
bee0: 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43     if( db->autoC
bef0: 6f 6d 6d 69 74 3d 3d 30 20 29 7b 0a 20 20 20 20  ommit==0 ){.    
bf00: 20 20 20 20 2f 2a 20 46 6f 72 65 69 67 6e 20 6b      /* Foreign k
bf10: 65 79 20 73 75 70 70 6f 72 74 20 6d 61 79 20 6e  ey support may n
bf20: 6f 74 20 62 65 20 65 6e 61 62 6c 65 64 20 6f 72  ot be enabled or
bf30: 20 64 69 73 61 62 6c 65 64 20 77 68 69 6c 65 20   disabled while 
bf40: 6e 6f 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 69  not.        ** i
bf50: 6e 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 6d 6f  n auto-commit mo
bf60: 64 65 2e 20 20 2a 2f 0a 20 20 20 20 20 20 20 20  de.  */.        
bf70: 6d 61 73 6b 20 26 3d 20 7e 28 53 51 4c 49 54 45  mask &= ~(SQLITE
bf80: 5f 46 6f 72 65 69 67 6e 4b 65 79 73 29 3b 0a 20  _ForeignKeys);. 
bf90: 20 20 20 20 20 7d 0a 23 69 66 20 53 51 4c 49 54       }.#if SQLIT
bfa0: 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49 43  E_USER_AUTHENTIC
bfb0: 41 54 49 4f 4e 0a 20 20 20 20 20 20 69 66 28 20  ATION.      if( 
bfc0: 64 62 2d 3e 61 75 74 68 2e 61 75 74 68 4c 65 76  db->auth.authLev
bfd0: 65 6c 3d 3d 55 41 55 54 48 5f 55 73 65 72 20 29  el==UAUTH_User )
bfe0: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 44 6f 20  {.        /* Do 
bff0: 6e 6f 74 20 61 6c 6c 6f 77 20 6e 6f 6e 2d 61 64  not allow non-ad
c000: 6d 69 6e 20 75 73 65 72 73 20 74 6f 20 6d 6f 64  min users to mod
c010: 69 66 79 20 74 68 65 20 73 63 68 65 6d 61 20 61  ify the schema a
c020: 72 62 69 74 72 61 72 69 6c 79 20 2a 2f 0a 20 20  rbitrarily */.  
c030: 20 20 20 20 20 20 6d 61 73 6b 20 26 3d 20 7e 28        mask &= ~(
c040: 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65  SQLITE_WriteSche
c050: 6d 61 29 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e  ma);.      }.#en
c060: 64 69 66 0a 0a 20 20 20 20 20 20 69 66 28 20 73  dif..      if( s
c070: 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e  qlite3GetBoolean
c080: 28 7a 52 69 67 68 74 2c 20 30 29 20 29 7b 0a 20  (zRight, 0) ){. 
c090: 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73         db->flags
c0a0: 20 7c 3d 20 6d 61 73 6b 3b 0a 20 20 20 20 20 20   |= mask;.      
c0b0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 64  }else{.        d
c0c0: 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 6d 61 73  b->flags &= ~mas
c0d0: 6b 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 6d  k;.        if( m
c0e0: 61 73 6b 3d 3d 53 51 4c 49 54 45 5f 44 65 66 65  ask==SQLITE_Defe
c0f0: 72 46 4b 73 20 29 20 64 62 2d 3e 6e 44 65 66 65  rFKs ) db->nDefe
c100: 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 30 3b  rredImmCons = 0;
c110: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
c120: 2f 2a 20 4d 61 6e 79 20 6f 66 20 74 68 65 20 66  /* Many of the f
c130: 6c 61 67 2d 70 72 61 67 6d 61 73 20 6d 6f 64 69  lag-pragmas modi
c140: 66 79 20 74 68 65 20 63 6f 64 65 20 67 65 6e 65  fy the code gene
c150: 72 61 74 65 64 20 62 79 20 74 68 65 20 53 51 4c  rated by the SQL
c160: 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70 69   .      ** compi
c170: 6c 65 72 20 28 65 67 2e 20 63 6f 75 6e 74 5f 63  ler (eg. count_c
c180: 68 61 6e 67 65 73 29 2e 20 53 6f 20 61 64 64 20  hanges). So add 
c190: 61 6e 20 6f 70 63 6f 64 65 20 74 6f 20 65 78 70  an opcode to exp
c1a0: 69 72 65 20 61 6c 6c 0a 20 20 20 20 20 20 2a 2a  ire all.      **
c1b0: 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20 73 74   compiled SQL st
c1c0: 61 74 65 6d 65 6e 74 73 20 61 66 74 65 72 20 6d  atements after m
c1d0: 6f 64 69 66 79 69 6e 67 20 61 20 70 72 61 67 6d  odifying a pragm
c1e0: 61 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20 2a  a value..      *
c1f0: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
c200: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
c210: 45 78 70 69 72 65 2c 20 30 2c 20 30 29 3b 0a 20  Expire, 0, 0);. 
c220: 20 20 20 20 20 73 65 74 41 6c 6c 50 61 67 65 72       setAllPager
c230: 46 6c 61 67 73 28 64 62 29 3b 0a 20 20 20 20 7d  Flags(db);.    }
c240: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
c250: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
c260: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
c270: 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  AS */..#ifndef S
c280: 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
c290: 41 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20  A_PRAGMAS.  /*. 
c2a0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 61 62   **   PRAGMA tab
c2b0: 6c 65 5f 69 6e 66 6f 28 3c 74 61 62 6c 65 3e 29  le_info(<table>)
c2c0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72  .  **.  ** Retur
c2d0: 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20 66  n a single row f
c2e0: 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20 6f  or each column o
c2f0: 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62 6c  f the named tabl
c300: 65 2e 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20 6f  e. The columns o
c310: 66 0a 20 20 2a 2a 20 74 68 65 20 72 65 74 75 72  f.  ** the retur
c320: 6e 65 64 20 64 61 74 61 20 73 65 74 20 61 72 65  ned data set are
c330: 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 63 69 64 3a  :.  **.  ** cid:
c340: 20 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 69          Column i
c350: 64 20 28 6e 75 6d 62 65 72 65 64 20 66 72 6f 6d  d (numbered from
c360: 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2c 20   left to right, 
c370: 73 74 61 72 74 69 6e 67 20 61 74 20 30 29 0a 20  starting at 0). 
c380: 20 2a 2a 20 6e 61 6d 65 3a 20 20 20 20 20 20 20   ** name:       
c390: 43 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 20 20 2a 2a  Column name.  **
c3a0: 20 74 79 70 65 3a 20 20 20 20 20 20 20 43 6f 6c   type:       Col
c3b0: 75 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 20  umn declaration 
c3c0: 74 79 70 65 2e 0a 20 20 2a 2a 20 6e 6f 74 6e 75  type..  ** notnu
c3d0: 6c 6c 3a 20 20 20 20 54 72 75 65 20 69 66 20 27  ll:    True if '
c3e0: 4e 4f 54 20 4e 55 4c 4c 27 20 69 73 20 70 61 72  NOT NULL' is par
c3f0: 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64 65 63 6c  t of column decl
c400: 61 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 64 66 6c  aration.  ** dfl
c410: 74 5f 76 61 6c 75 65 3a 20 54 68 65 20 64 65 66  t_value: The def
c420: 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20 74  ault value for t
c430: 68 65 20 63 6f 6c 75 6d 6e 2c 20 69 66 20 61 6e  he column, if an
c440: 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  y..  */.  case P
c450: 72 61 67 54 79 70 5f 54 41 42 4c 45 5f 49 4e 46  ragTyp_TABLE_INF
c460: 4f 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b  O: if( zRight ){
c470: 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
c480: 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c  ;.    pTab = sql
c490: 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62  ite3FindTable(db
c4a0: 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a  , zRight, zDb);.
c4b0: 20 20 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a      if( pTab ){.
c4c0: 20 20 20 20 20 20 69 6e 74 20 69 2c 20 6b 3b 0a        int i, k;.
c4d0: 20 20 20 20 20 20 69 6e 74 20 6e 48 69 64 64 65        int nHidde
c4e0: 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 43 6f 6c  n = 0;.      Col
c4f0: 75 6d 6e 20 2a 70 43 6f 6c 3b 0a 20 20 20 20 20  umn *pCol;.     
c500: 20 49 6e 64 65 78 20 2a 70 50 6b 20 3d 20 73 71   Index *pPk = sq
c510: 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49  lite3PrimaryKeyI
c520: 6e 64 65 78 28 70 54 61 62 29 3b 0a 20 20 20 20  ndex(pTab);.    
c530: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
c540: 4e 75 6d 43 6f 6c 73 28 76 2c 20 36 29 3b 0a 20  NumCols(v, 6);. 
c550: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
c560: 6d 20 3d 20 36 3b 0a 20 20 20 20 20 20 73 71 6c  m = 6;.      sql
c570: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
c580: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
c590: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
c5a0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
c5b0: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
c5c0: 45 2c 20 22 63 69 64 22 2c 20 53 51 4c 49 54 45  E, "cid", SQLITE
c5d0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
c5e0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
c5f0: 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e  lName(v, 1, COLN
c600: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22  AME_NAME, "name"
c610: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
c620: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
c630: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
c640: 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   2, COLNAME_NAME
c650: 2c 20 22 74 79 70 65 22 2c 20 53 51 4c 49 54 45  , "type", SQLITE
c660: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
c670: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
c680: 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e  lName(v, 3, COLN
c690: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 6f 74 6e 75  AME_NAME, "notnu
c6a0: 6c 6c 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ll", SQLITE_STAT
c6b0: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
c6c0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
c6d0: 28 76 2c 20 34 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 4, COLNAME_N
c6e0: 41 4d 45 2c 20 22 64 66 6c 74 5f 76 61 6c 75 65  AME, "dflt_value
c6f0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
c700: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
c710: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
c720: 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 5, COLNAME_NAM
c730: 45 2c 20 22 70 6b 22 2c 20 53 51 4c 49 54 45 5f  E, "pk", SQLITE_
c740: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
c750: 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f 6c  qlite3ViewGetCol
c760: 75 6d 6e 4e 61 6d 65 73 28 70 50 61 72 73 65 2c  umnNames(pParse,
c770: 20 70 54 61 62 29 3b 0a 20 20 20 20 20 20 66 6f   pTab);.      fo
c780: 72 28 69 3d 30 2c 20 70 43 6f 6c 3d 70 54 61 62  r(i=0, pCol=pTab
c790: 2d 3e 61 43 6f 6c 3b 20 69 3c 70 54 61 62 2d 3e  ->aCol; i<pTab->
c7a0: 6e 43 6f 6c 3b 20 69 2b 2b 2c 20 70 43 6f 6c 2b  nCol; i++, pCol+
c7b0: 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  +){.        if( 
c7c0: 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28 70  IsHiddenColumn(p
c7d0: 43 6f 6c 29 20 29 7b 0a 20 20 20 20 20 20 20 20  Col) ){.        
c7e0: 20 20 6e 48 69 64 64 65 6e 2b 2b 3b 0a 20 20 20    nHidden++;.   
c7f0: 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65 3b         continue;
c800: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
c810: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c820: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
c830: 65 72 2c 20 69 2d 6e 48 69 64 64 65 6e 2c 20 31  er, i-nHidden, 1
c840: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
c850: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
c860: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32  OP_String8, 0, 2
c870: 2c 20 30 2c 20 70 43 6f 6c 2d 3e 7a 4e 61 6d 65  , 0, pCol->zName
c880: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 0);.        sq
c890: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
c8a0: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
c8b0: 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20 20  , 3, 0,.        
c8c0: 20 20 20 70 43 6f 6c 2d 3e 7a 54 79 70 65 20 3f     pCol->zType ?
c8d0: 20 70 43 6f 6c 2d 3e 7a 54 79 70 65 20 3a 20 22   pCol->zType : "
c8e0: 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73  ", 0);.        s
c8f0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
c900: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
c910: 28 70 43 6f 6c 2d 3e 6e 6f 74 4e 75 6c 6c 20 3f  (pCol->notNull ?
c920: 20 31 20 3a 20 30 29 2c 20 34 29 3b 0a 20 20 20   1 : 0), 4);.   
c930: 20 20 20 20 20 69 66 28 20 70 43 6f 6c 2d 3e 7a       if( pCol->z
c940: 44 66 6c 74 20 29 7b 0a 20 20 20 20 20 20 20 20  Dflt ){.        
c950: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c960: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
c970: 38 2c 20 30 2c 20 35 2c 20 30 2c 20 28 63 68 61  8, 0, 5, 0, (cha
c980: 72 2a 29 70 43 6f 6c 2d 3e 7a 44 66 6c 74 2c 20  r*)pCol->zDflt, 
c990: 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73  0);.        }els
c9a0: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  e{.          sql
c9b0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
c9c0: 2c 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20 35 29  , OP_Null, 0, 5)
c9d0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
c9e0: 20 20 20 20 69 66 28 20 28 70 43 6f 6c 2d 3e 63      if( (pCol->c
c9f0: 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c 41  olFlags & COLFLA
ca00: 47 5f 50 52 49 4d 4b 45 59 29 3d 3d 30 20 29 7b  G_PRIMKEY)==0 ){
ca10: 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20 30  .          k = 0
ca20: 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 20  ;.        }else 
ca30: 69 66 28 20 70 50 6b 3d 3d 30 20 29 7b 0a 20 20  if( pPk==0 ){.  
ca40: 20 20 20 20 20 20 20 20 6b 20 3d 20 31 3b 0a 20          k = 1;. 
ca50: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
ca60: 20 20 20 20 20 20 20 20 69 66 28 20 28 64 62 2d          if( (db-
ca70: 3e 66 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f  >flags & SQLITE_
ca80: 4f 74 61 4d 6f 64 65 29 20 26 26 20 48 61 73 52  OtaMode) && HasR
ca90: 6f 77 69 64 28 70 54 61 62 29 20 29 7b 0a 20 20  owid(pTab) ){.  
caa0: 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b            k = 0;
cab0: 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
cac0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 66 6f  {.            fo
cad0: 72 28 6b 3d 31 3b 20 41 4c 57 41 59 53 28 6b 3c  r(k=1; ALWAYS(k<
cae0: 3d 70 54 61 62 2d 3e 6e 43 6f 6c 29 20 26 26 20  =pTab->nCol) && 
caf0: 70 50 6b 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 2d  pPk->aiColumn[k-
cb00: 31 5d 21 3d 69 3b 20 6b 2b 2b 29 7b 7d 0a 20 20  1]!=i; k++){}.  
cb10: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
cb20: 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69    }.        sqli
cb30: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
cb40: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6b 2c 20   OP_Integer, k, 
cb50: 36 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  6);.        sqli
cb60: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
cb70: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
cb80: 2c 20 36 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 6);.      }.  
cb90: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
cba0: 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  ..  case PragTyp
cbb0: 5f 53 54 41 54 53 3a 20 7b 0a 20 20 20 20 49 6e  _STATS: {.    In
cbc0: 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 48  dex *pIdx;.    H
cbd0: 61 73 68 45 6c 65 6d 20 2a 69 3b 0a 20 20 20 20  ashElem *i;.    
cbe0: 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64  v = sqlite3GetVd
cbf0: 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20  be(pParse);.    
cc00: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
cc10: 6d 43 6f 6c 73 28 76 2c 20 34 29 3b 0a 20 20 20  mCols(v, 4);.   
cc20: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
cc30: 34 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f  4;.    sqlite3Co
cc40: 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70  deVerifySchema(p
cc50: 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20  Parse, iDb);.   
cc60: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
cc70: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
cc80: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 61 62 6c  NAME_NAME, "tabl
cc90: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
cca0: 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  C);.    sqlite3V
ccb0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
ccc0: 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   1, COLNAME_NAME
ccd0: 2c 20 22 69 6e 64 65 78 22 2c 20 53 51 4c 49 54  , "index", SQLIT
cce0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
ccf0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
cd00: 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41  Name(v, 2, COLNA
cd10: 4d 45 5f 4e 41 4d 45 2c 20 22 77 69 64 74 68 22  ME_NAME, "width"
cd20: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
cd30: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
cd40: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33  eSetColName(v, 3
cd50: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
cd60: 22 68 65 69 67 68 74 22 2c 20 53 51 4c 49 54 45  "height", SQLITE
cd70: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 66 6f  _STATIC);.    fo
cd80: 72 28 69 3d 73 71 6c 69 74 65 48 61 73 68 46 69  r(i=sqliteHashFi
cd90: 72 73 74 28 26 70 44 62 2d 3e 70 53 63 68 65 6d  rst(&pDb->pSchem
cda0: 61 2d 3e 74 62 6c 48 61 73 68 29 3b 20 69 3b 20  a->tblHash); i; 
cdb0: 69 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74  i=sqliteHashNext
cdc0: 28 69 29 29 7b 0a 20 20 20 20 20 20 54 61 62 6c  (i)){.      Tabl
cdd0: 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65  e *pTab = sqlite
cde0: 48 61 73 68 44 61 74 61 28 69 29 3b 0a 20 20 20  HashData(i);.   
cdf0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
ce00: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
ce10: 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 70 54 61  g8, 0, 1, 0, pTa
ce20: 62 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20  b->zName, 0);.  
ce30: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
ce40: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 75 6c 6c  ddOp2(v, OP_Null
ce50: 2c 20 30 2c 20 32 29 3b 0a 20 20 20 20 20 20 73  , 0, 2);.      s
ce60: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
ce70: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 0a  (v, OP_Integer,.
ce80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ce90: 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29             (int)
cea0: 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49  sqlite3LogEstToI
ceb0: 6e 74 28 70 54 61 62 2d 3e 73 7a 54 61 62 52 6f  nt(pTab->szTabRo
cec0: 77 29 2c 20 33 29 3b 0a 20 20 20 20 20 20 73 71  w), 3);.      sq
ced0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
cee0: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 0a  v, OP_Integer, .
cef0: 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 73            (int)s
cf00: 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e  qlite3LogEstToIn
cf10: 74 28 70 54 61 62 2d 3e 6e 52 6f 77 4c 6f 67 45  t(pTab->nRowLogE
cf20: 73 74 29 2c 20 34 29 3b 0a 20 20 20 20 20 20 73  st), 4);.      s
cf30: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
cf40: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
cf50: 2c 20 31 2c 20 34 29 3b 0a 20 20 20 20 20 20 66  , 1, 4);.      f
cf60: 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49  or(pIdx=pTab->pI
cf70: 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78  ndex; pIdx; pIdx
cf80: 3d 70 49 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20  =pIdx->pNext){. 
cf90: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
cfa0: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
cfb0: 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c  tring8, 0, 2, 0,
cfc0: 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 30 29   pIdx->zName, 0)
cfd0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
cfe0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
cff0: 50 5f 49 6e 74 65 67 65 72 2c 0a 20 20 20 20 20  P_Integer,.     
d000: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d010: 20 20 20 20 20 20 20 20 28 69 6e 74 29 73 71 6c          (int)sql
d020: 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28  ite3LogEstToInt(
d030: 70 49 64 78 2d 3e 73 7a 49 64 78 52 6f 77 29 2c  pIdx->szIdxRow),
d040: 20 33 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   3);.        sql
d050: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
d060: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 0a 20  , OP_Integer, . 
d070: 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29             (int)
d080: 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49  sqlite3LogEstToI
d090: 6e 74 28 70 49 64 78 2d 3e 61 69 52 6f 77 4c 6f  nt(pIdx->aiRowLo
d0a0: 67 45 73 74 5b 30 5d 29 2c 20 34 29 3b 0a 20 20  gEst[0]), 4);.  
d0b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d0c0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
d0d0: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29 3b 0a  sultRow, 1, 4);.
d0e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
d0f0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61  }.  break;..  ca
d100: 73 65 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58  se PragTyp_INDEX
d110: 5f 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67 68  _INFO: if( zRigh
d120: 74 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a  t ){.    Index *
d130: 70 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20  pIdx;.    Table 
d140: 2a 70 54 61 62 3b 0a 20 20 20 20 70 49 64 78 20  *pTab;.    pIdx 
d150: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64  = sqlite3FindInd
d160: 65 78 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a  ex(db, zRight, z
d170: 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64  Db);.    if( pId
d180: 78 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69  x ){.      int i
d190: 3b 0a 20 20 20 20 20 20 70 54 61 62 20 3d 20 70  ;.      pTab = p
d1a0: 49 64 78 2d 3e 70 54 61 62 6c 65 3b 0a 20 20 20  Idx->pTable;.   
d1b0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
d1c0: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a  tNumCols(v, 3);.
d1d0: 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d        pParse->nM
d1e0: 65 6d 20 3d 20 33 3b 0a 20 20 20 20 20 20 73 71  em = 3;.      sq
d1f0: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
d200: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44  chema(pParse, iD
d210: 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  b);.      sqlite
d220: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
d230: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
d240: 4d 45 2c 20 22 73 65 71 6e 6f 22 2c 20 53 51 4c  ME, "seqno", SQL
d250: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
d260: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
d270: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43  tColName(v, 1, C
d280: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 69  OLNAME_NAME, "ci
d290: 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  d", SQLITE_STATI
d2a0: 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
d2b0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
d2c0: 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 2, COLNAME_NA
d2d0: 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49  ME, "name", SQLI
d2e0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
d2f0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 49 64    for(i=0; i<pId
d300: 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 20 69 2b 2b 29  x->nKeyCol; i++)
d310: 7b 0a 20 20 20 20 20 20 20 20 69 31 36 20 63 6e  {.        i16 cn
d320: 75 6d 20 3d 20 70 49 64 78 2d 3e 61 69 43 6f 6c  um = pIdx->aiCol
d330: 75 6d 6e 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20  umn[i];.        
d340: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d350: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
d360: 20 69 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20   i, 1);.        
d370: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d380: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
d390: 20 63 6e 75 6d 2c 20 32 29 3b 0a 20 20 20 20 20   cnum, 2);.     
d3a0: 20 20 20 61 73 73 65 72 74 28 20 70 54 61 62 2d     assert( pTab-
d3b0: 3e 6e 43 6f 6c 3e 63 6e 75 6d 20 29 3b 0a 20 20  >nCol>cnum );.  
d3c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d3d0: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
d3e0: 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20  ring8, 0, 3, 0, 
d3f0: 70 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e 75 6d 5d  pTab->aCol[cnum]
d400: 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20  .zName, 0);.    
d410: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d420: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
d430: 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20  ltRow, 1, 3);.  
d440: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
d450: 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65    break;..  case
d460: 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c   PragTyp_INDEX_L
d470: 49 53 54 3a 20 69 66 28 20 7a 52 69 67 68 74 20  IST: if( zRight 
d480: 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49  ){.    Index *pI
d490: 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70  dx;.    Table *p
d4a0: 54 61 62 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a  Tab;.    int i;.
d4b0: 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74      pTab = sqlit
d4c0: 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20  e3FindTable(db, 
d4d0: 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20  zRight, zDb);.  
d4e0: 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20    if( pTab ){.  
d4f0: 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47      v = sqlite3G
d500: 65 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a  etVdbe(pParse);.
d510: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d520: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33  eSetNumCols(v, 3
d530: 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d  );.      pParse-
d540: 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 20  >nMem = 3;.     
d550: 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
d560: 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c  fySchema(pParse,
d570: 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c   iDb);.      sql
d580: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
d590: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
d5a0: 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53 51  _NAME, "seq", SQ
d5b0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
d5c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
d5d0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20  etColName(v, 1, 
d5e0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e  COLNAME_NAME, "n
d5f0: 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ame", SQLITE_STA
d600: 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
d610: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
d620: 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 2, COLNAME_
d630: 4e 41 4d 45 2c 20 22 75 6e 69 71 75 65 22 2c 20  NAME, "unique", 
d640: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
d650: 20 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d 70        for(pIdx=p
d660: 54 61 62 2d 3e 70 49 6e 64 65 78 2c 20 69 3d 30  Tab->pIndex, i=0
d670: 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64  ; pIdx; pIdx=pId
d680: 78 2d 3e 70 4e 65 78 74 2c 20 69 2b 2b 29 7b 0a  x->pNext, i++){.
d690: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d6a0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
d6b0: 49 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a  Integer, i, 1);.
d6c0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d6d0: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
d6e0: 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30  String8, 0, 2, 0
d6f0: 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 30  , pIdx->zName, 0
d700: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
d710: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
d720: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 49 73 55 6e  OP_Integer, IsUn
d730: 69 71 75 65 49 6e 64 65 78 28 70 49 64 78 29 2c  iqueIndex(pIdx),
d740: 20 33 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   3);.        sql
d750: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
d760: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
d770: 31 2c 20 33 29 3b 0a 20 20 20 20 20 20 7d 0a 20  1, 3);.      }. 
d780: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
d790: 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  ;..  case PragTy
d7a0: 70 5f 44 41 54 41 42 41 53 45 5f 4c 49 53 54 3a  p_DATABASE_LIST:
d7b0: 20 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20   {.    int i;.  
d7c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
d7d0: 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20  NumCols(v, 3);. 
d7e0: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
d7f0: 3d 20 33 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 3;.    sqlite3
d800: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
d810: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
d820: 45 2c 20 22 73 65 71 22 2c 20 53 51 4c 49 54 45  E, "seq", SQLITE
d830: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71  _STATIC);.    sq
d840: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
d850: 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d  ame(v, 1, COLNAM
d860: 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20  E_NAME, "name", 
d870: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
d880: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
d890: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20  etColName(v, 2, 
d8a0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 66  COLNAME_NAME, "f
d8b0: 69 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ile", SQLITE_STA
d8c0: 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d  TIC);.    for(i=
d8d0: 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b  0; i<db->nDb; i+
d8e0: 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62  +){.      if( db
d8f0: 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3d 3d 30 20  ->aDb[i].pBt==0 
d900: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
d910: 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44    assert( db->aD
d920: 62 5b 69 5d 2e 7a 4e 61 6d 65 21 3d 30 20 29 3b  b[i].zName!=0 );
d930: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
d940: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
d950: 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20  nteger, i, 1);. 
d960: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d970: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
d980: 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 64  ing8, 0, 2, 0, d
d990: 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c  b->aDb[i].zName,
d9a0: 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
d9b0: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
d9c0: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33  OP_String8, 0, 3
d9d0: 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20  , 0,.           
d9e0: 73 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 46  sqlite3BtreeGetF
d9f0: 69 6c 65 6e 61 6d 65 28 64 62 2d 3e 61 44 62 5b  ilename(db->aDb[
da00: 69 5d 2e 70 42 74 29 2c 20 30 29 3b 0a 20 20 20  i].pBt), 0);.   
da10: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
da20: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
da30: 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 20  tRow, 1, 3);.   
da40: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
da50: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
da60: 43 4f 4c 4c 41 54 49 4f 4e 5f 4c 49 53 54 3a 20  COLLATION_LIST: 
da70: 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b  {.    int i = 0;
da80: 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 70  .    HashElem *p
da90: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
daa0: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 32  eSetNumCols(v, 2
dab0: 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  );.    pParse->n
dac0: 4d 65 6d 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c  Mem = 2;.    sql
dad0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
dae0: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
daf0: 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53 51  _NAME, "seq", SQ
db00: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
db10: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
db20: 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f  ColName(v, 1, CO
db30: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d  LNAME_NAME, "nam
db40: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
db50: 43 29 3b 0a 20 20 20 20 66 6f 72 28 70 3d 73 71  C);.    for(p=sq
db60: 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64  liteHashFirst(&d
db70: 62 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 20 70 3b  b->aCollSeq); p;
db80: 20 70 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78   p=sqliteHashNex
db90: 74 28 70 29 29 7b 0a 20 20 20 20 20 20 43 6f 6c  t(p)){.      Col
dba0: 6c 53 65 71 20 2a 70 43 6f 6c 6c 20 3d 20 28 43  lSeq *pColl = (C
dbb0: 6f 6c 6c 53 65 71 20 2a 29 73 71 6c 69 74 65 48  ollSeq *)sqliteH
dbc0: 61 73 68 44 61 74 61 28 70 29 3b 0a 20 20 20 20  ashData(p);.    
dbd0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
dbe0: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
dbf0: 72 2c 20 69 2b 2b 2c 20 31 29 3b 0a 20 20 20 20  r, i++, 1);.    
dc00: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
dc10: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
dc20: 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70 43 6f 6c  8, 0, 2, 0, pCol
dc30: 6c 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20  l->zName, 0);.  
dc40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
dc50: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
dc60: 6c 74 52 6f 77 2c 20 31 2c 20 32 29 3b 0a 20 20  ltRow, 1, 2);.  
dc70: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
dc80: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
dc90: 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52  E_OMIT_SCHEMA_PR
dca0: 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65  AGMAS */..#ifnde
dcb0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
dcc0: 52 45 49 47 4e 5f 4b 45 59 0a 20 20 63 61 73 65  REIGN_KEY.  case
dcd0: 20 50 72 61 67 54 79 70 5f 46 4f 52 45 49 47 4e   PragTyp_FOREIGN
dce0: 5f 4b 45 59 5f 4c 49 53 54 3a 20 69 66 28 20 7a  _KEY_LIST: if( z
dcf0: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 46 4b 65  Right ){.    FKe
dd00: 79 20 2a 70 46 4b 3b 0a 20 20 20 20 54 61 62 6c  y *pFK;.    Tabl
dd10: 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 54 61  e *pTab;.    pTa
dd20: 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54  b = sqlite3FindT
dd30: 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c  able(db, zRight,
dd40: 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70   zDb);.    if( p
dd50: 54 61 62 20 29 7b 0a 20 20 20 20 20 20 76 20 3d  Tab ){.      v =
dd60: 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28   sqlite3GetVdbe(
dd70: 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 70  pParse);.      p
dd80: 46 4b 20 3d 20 70 54 61 62 2d 3e 70 46 4b 65 79  FK = pTab->pFKey
dd90: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 46 4b 20  ;.      if( pFK 
dda0: 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  ){.        int i
ddb0: 20 3d 20 30 3b 20 0a 20 20 20 20 20 20 20 20 73   = 0; .        s
ddc0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
ddd0: 43 6f 6c 73 28 76 2c 20 38 29 3b 0a 20 20 20 20  Cols(v, 8);.    
dde0: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
ddf0: 20 3d 20 38 3b 0a 20 20 20 20 20 20 20 20 73 71   = 8;.        sq
de00: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
de10: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44  chema(pParse, iD
de20: 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  b);.        sqli
de30: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
de40: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
de50: 4e 41 4d 45 2c 20 22 69 64 22 2c 20 53 51 4c 49  NAME, "id", SQLI
de60: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
de70: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
de80: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20  etColName(v, 1, 
de90: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73  COLNAME_NAME, "s
dea0: 65 71 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  eq", SQLITE_STAT
deb0: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  IC);.        sql
dec0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
ded0: 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45  me(v, 2, COLNAME
dee0: 5f 4e 41 4d 45 2c 20 22 74 61 62 6c 65 22 2c 20  _NAME, "table", 
def0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
df00: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
df10: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
df20: 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   3, COLNAME_NAME
df30: 2c 20 22 66 72 6f 6d 22 2c 20 53 51 4c 49 54 45  , "from", SQLITE
df40: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
df50: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
df60: 43 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c 20 43 4f  ColName(v, 4, CO
df70: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 6f 22  LNAME_NAME, "to"
df80: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
df90: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
dfa0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
dfb0: 76 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 5, COLNAME_NA
dfc0: 4d 45 2c 20 22 6f 6e 5f 75 70 64 61 74 65 22 2c  ME, "on_update",
dfd0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
dfe0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
dff0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
e000: 2c 20 36 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 6, COLNAME_NAM
e010: 45 2c 20 22 6f 6e 5f 64 65 6c 65 74 65 22 2c 20  E, "on_delete", 
e020: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
e030: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
e040: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
e050: 20 37 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   7, COLNAME_NAME
e060: 2c 20 22 6d 61 74 63 68 22 2c 20 53 51 4c 49 54  , "match", SQLIT
e070: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
e080: 20 20 20 77 68 69 6c 65 28 70 46 4b 29 7b 0a 20     while(pFK){. 
e090: 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a 3b 0a           int j;.
e0a0: 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d            for(j=
e0b0: 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20  0; j<pFK->nCol; 
e0c0: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  j++){.          
e0d0: 20 20 63 68 61 72 20 2a 7a 43 6f 6c 20 3d 20 70    char *zCol = p
e0e0: 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 43 6f 6c  FK->aCol[j].zCol
e0f0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 68  ;.            ch
e100: 61 72 20 2a 7a 4f 6e 44 65 6c 65 74 65 20 3d 20  ar *zOnDelete = 
e110: 28 63 68 61 72 20 2a 29 61 63 74 69 6f 6e 4e 61  (char *)actionNa
e120: 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69 6f 6e 5b  me(pFK->aAction[
e130: 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  0]);.           
e140: 20 63 68 61 72 20 2a 7a 4f 6e 55 70 64 61 74 65   char *zOnUpdate
e150: 20 3d 20 28 63 68 61 72 20 2a 29 61 63 74 69 6f   = (char *)actio
e160: 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69  nName(pFK->aActi
e170: 6f 6e 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20  on[1]);.        
e180: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
e190: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
e1a0: 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20 20  ger, i, 1);.    
e1b0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
e1c0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
e1d0: 49 6e 74 65 67 65 72 2c 20 6a 2c 20 32 29 3b 0a  Integer, j, 2);.
e1e0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
e1f0: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
e200: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
e210: 33 2c 20 30 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20  3, 0, pFK->zTo, 
e220: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0);.            
e230: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e240: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
e250: 20 30 2c 20 34 2c 20 30 2c 0a 20 20 20 20 20 20   0, 4, 0,.      
e260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e270: 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e 61 43          pTab->aC
e280: 6f 6c 5b 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e  ol[pFK->aCol[j].
e290: 69 46 72 6f 6d 5d 2e 7a 4e 61 6d 65 2c 20 30 29  iFrom].zName, 0)
e2a0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
e2b0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
e2c0: 76 2c 20 7a 43 6f 6c 20 3f 20 4f 50 5f 53 74 72  v, zCol ? OP_Str
e2d0: 69 6e 67 38 20 3a 20 4f 50 5f 4e 75 6c 6c 2c 20  ing8 : OP_Null, 
e2e0: 30 2c 20 35 2c 20 30 2c 20 7a 43 6f 6c 2c 20 30  0, 5, 0, zCol, 0
e2f0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
e300: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
e310: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
e320: 30 2c 20 36 2c 20 30 2c 20 7a 4f 6e 55 70 64 61  0, 6, 0, zOnUpda
e330: 74 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  te, 0);.        
e340: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
e350: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
e360: 6e 67 38 2c 20 30 2c 20 37 2c 20 30 2c 20 7a 4f  ng8, 0, 7, 0, zO
e370: 6e 44 65 6c 65 74 65 2c 20 30 29 3b 0a 20 20 20  nDelete, 0);.   
e380: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
e390: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
e3a0: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 38 2c 20  _String8, 0, 8, 
e3b0: 30 2c 20 22 4e 4f 4e 45 22 2c 20 30 29 3b 0a 20  0, "NONE", 0);. 
e3c0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
e3d0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
e3e0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
e3f0: 20 38 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d   8);.          }
e400: 0a 20 20 20 20 20 20 20 20 20 20 2b 2b 69 3b 0a  .          ++i;.
e410: 20 20 20 20 20 20 20 20 20 20 70 46 4b 20 3d 20            pFK = 
e420: 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 3b 0a  pFK->pNextFrom;.
e430: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
e440: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  }.    }.  }.  br
e450: 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 21  eak;.#endif /* !
e460: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
e470: 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29  MIT_FOREIGN_KEY)
e480: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
e490: 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
e4a0: 5f 4b 45 59 0a 23 69 66 6e 64 65 66 20 53 51 4c  _KEY.#ifndef SQL
e4b0: 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
e4c0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
e4d0: 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 43 48 45 43  FOREIGN_KEY_CHEC
e4e0: 4b 3a 20 7b 0a 20 20 20 20 46 4b 65 79 20 2a 70  K: {.    FKey *p
e4f0: 46 4b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  FK;             
e500: 2f 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79  /* A foreign key
e510: 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20   constraint */. 
e520: 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20     Table *pTab; 
e530: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68 69            /* Chi
e540: 6c 64 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e  ld table contain
e550: 20 22 52 45 46 45 52 45 4e 43 45 53 22 20 6b 65   "REFERENCES" ke
e560: 79 77 6f 72 64 20 2a 2f 0a 20 20 20 20 54 61 62  yword */.    Tab
e570: 6c 65 20 2a 70 50 61 72 65 6e 74 3b 20 20 20 20  le *pParent;    
e580: 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 74 61      /* Parent ta
e590: 62 6c 65 20 74 68 61 74 20 63 68 69 6c 64 20 70  ble that child p
e5a0: 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a 20 20 20 20  oints to */.    
e5b0: 49 6e 64 65 78 20 2a 70 49 64 78 3b 20 20 20 20  Index *pIdx;    
e5c0: 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20         /* Index 
e5d0: 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20 74 61  in the parent ta
e5e0: 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ble */.    int i
e5f0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
e600: 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
e610: 72 3a 20 20 46 6f 72 65 69 67 6e 20 6b 65 79 20  r:  Foreign key 
e620: 6e 75 6d 62 65 72 20 66 6f 72 20 70 54 61 62 20  number for pTab 
e630: 2a 2f 0a 20 20 20 20 69 6e 74 20 6a 3b 20 20 20  */.    int j;   
e640: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
e650: 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20   Loop counter:  
e660: 46 69 65 6c 64 20 6f 66 20 74 68 65 20 66 6f 72  Field of the for
e670: 65 69 67 6e 20 6b 65 79 20 2a 2f 0a 20 20 20 20  eign key */.    
e680: 48 61 73 68 45 6c 65 6d 20 2a 6b 3b 20 20 20 20  HashElem *k;    
e690: 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
e6a0: 6f 75 6e 74 65 72 3a 20 20 4e 65 78 74 20 74 61  ounter:  Next ta
e6b0: 62 6c 65 20 69 6e 20 73 63 68 65 6d 61 20 2a 2f  ble in schema */
e6c0: 0a 20 20 20 20 69 6e 74 20 78 3b 20 20 20 20 20  .    int x;     
e6d0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 72              /* r
e6e0: 65 73 75 6c 74 20 76 61 72 69 61 62 6c 65 20 2a  esult variable *
e6f0: 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 73  /.    int regRes
e700: 75 6c 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20  ult;         /* 
e710: 33 20 72 65 67 69 73 74 65 72 73 20 74 6f 20 68  3 registers to h
e720: 6f 6c 64 20 61 20 72 65 73 75 6c 74 20 72 6f 77  old a result row
e730: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 4b   */.    int regK
e740: 65 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ey;            /
e750: 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20 68 6f  * Register to ho
e760: 6c 64 20 6b 65 79 20 66 6f 72 20 63 68 65 63 6b  ld key for check
e770: 69 6e 67 20 74 68 65 20 46 4b 20 2a 2f 0a 20 20  ing the FK */.  
e780: 20 20 69 6e 74 20 72 65 67 52 6f 77 3b 20 20 20    int regRow;   
e790: 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69           /* Regi
e7a0: 73 74 65 72 73 20 74 6f 20 68 6f 6c 64 20 61 20  sters to hold a 
e7b0: 72 6f 77 20 66 72 6f 6d 20 70 54 61 62 20 2a 2f  row from pTab */
e7c0: 0a 20 20 20 20 69 6e 74 20 61 64 64 72 54 6f 70  .    int addrTop
e7d0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54  ;           /* T
e7e0: 6f 70 20 6f 66 20 61 20 6c 6f 6f 70 20 63 68 65  op of a loop che
e7f0: 63 6b 69 6e 67 20 66 6f 72 65 69 67 6e 20 6b 65  cking foreign ke
e800: 79 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64  ys */.    int ad
e810: 64 72 4f 6b 3b 20 20 20 20 20 20 20 20 20 20 20  drOk;           
e820: 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 69 66   /* Jump here if
e830: 20 74 68 65 20 6b 65 79 20 69 73 20 4f 4b 20 2a   the key is OK *
e840: 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c  /.    int *aiCol
e850: 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  s;           /* 
e860: 63 68 69 6c 64 20 74 6f 20 70 61 72 65 6e 74 20  child to parent 
e870: 63 6f 6c 75 6d 6e 20 6d 61 70 70 69 6e 67 20 2a  column mapping *
e880: 2f 0a 0a 20 20 20 20 72 65 67 52 65 73 75 6c 74  /..    regResult
e890: 20 3d 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2b   = pParse->nMem+
e8a0: 31 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  1;.    pParse->n
e8b0: 4d 65 6d 20 2b 3d 20 34 3b 0a 20 20 20 20 72 65  Mem += 4;.    re
e8c0: 67 4b 65 79 20 3d 20 2b 2b 70 50 61 72 73 65 2d  gKey = ++pParse-
e8d0: 3e 6e 4d 65 6d 3b 0a 20 20 20 20 72 65 67 52 6f  >nMem;.    regRo
e8e0: 77 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d  w = ++pParse->nM
e8f0: 65 6d 3b 0a 20 20 20 20 76 20 3d 20 73 71 6c 69  em;.    v = sqli
e900: 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73  te3GetVdbe(pPars
e910: 65 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  e);.    sqlite3V
e920: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
e930: 20 34 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   4);.    sqlite3
e940: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
e950: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
e960: 45 2c 20 22 74 61 62 6c 65 22 2c 20 53 51 4c 49  E, "table", SQLI
e970: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
e980: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
e990: 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e  lName(v, 1, COLN
e9a0: 41 4d 45 5f 4e 41 4d 45 2c 20 22 72 6f 77 69 64  AME_NAME, "rowid
e9b0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
e9c0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
e9d0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
e9e0: 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  2, COLNAME_NAME,
e9f0: 20 22 70 61 72 65 6e 74 22 2c 20 53 51 4c 49 54   "parent", SQLIT
ea00: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
ea10: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
ea20: 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41  Name(v, 3, COLNA
ea30: 4d 45 5f 4e 41 4d 45 2c 20 22 66 6b 69 64 22 2c  ME_NAME, "fkid",
ea40: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
ea50: 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65  .    sqlite3Code
ea60: 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61  VerifySchema(pPa
ea70: 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 6b  rse, iDb);.    k
ea80: 20 3d 20 73 71 6c 69 74 65 48 61 73 68 46 69 72   = sqliteHashFir
ea90: 73 74 28 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d  st(&db->aDb[iDb]
eaa0: 2e 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73  .pSchema->tblHas
eab0: 68 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 6b  h);.    while( k
eac0: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 52   ){.      if( zR
ead0: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 20 20  ight ){.        
eae0: 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33 4c 6f  pTab = sqlite3Lo
eaf0: 63 61 74 65 54 61 62 6c 65 28 70 50 61 72 73 65  cateTable(pParse
eb00: 2c 20 30 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62  , 0, zRight, zDb
eb10: 29 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d 20 30  );.        k = 0
eb20: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
eb30: 20 20 20 20 20 20 20 70 54 61 62 20 3d 20 28 54         pTab = (T
eb40: 61 62 6c 65 2a 29 73 71 6c 69 74 65 48 61 73 68  able*)sqliteHash
eb50: 44 61 74 61 28 6b 29 3b 0a 20 20 20 20 20 20 20  Data(k);.       
eb60: 20 6b 20 3d 20 73 71 6c 69 74 65 48 61 73 68 4e   k = sqliteHashN
eb70: 65 78 74 28 6b 29 3b 0a 20 20 20 20 20 20 7d 0a  ext(k);.      }.
eb80: 20 20 20 20 20 20 69 66 28 20 70 54 61 62 3d 3d        if( pTab==
eb90: 30 20 7c 7c 20 70 54 61 62 2d 3e 70 46 4b 65 79  0 || pTab->pFKey
eba0: 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
ebb0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 61 62        sqlite3Tab
ebc0: 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65 2c 20 69  leLock(pParse, i
ebd0: 44 62 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c 20  Db, pTab->tnum, 
ebe0: 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 29 3b  0, pTab->zName);
ebf0: 0a 20 20 20 20 20 20 69 66 28 20 70 54 61 62 2d  .      if( pTab-
ec00: 3e 6e 43 6f 6c 2b 72 65 67 52 6f 77 3e 70 50 61  >nCol+regRow>pPa
ec10: 72 73 65 2d 3e 6e 4d 65 6d 20 29 20 70 50 61 72  rse->nMem ) pPar
ec20: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 70 54 61 62 2d  se->nMem = pTab-
ec30: 3e 6e 43 6f 6c 20 2b 20 72 65 67 52 6f 77 3b 0a  >nCol + regRow;.
ec40: 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65        sqlite3Ope
ec50: 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20 30  nTable(pParse, 0
ec60: 2c 20 69 44 62 2c 20 70 54 61 62 2c 20 4f 50 5f  , iDb, pTab, OP_
ec70: 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20 20 20 20  OpenRead);.     
ec80: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ec90: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
eca0: 2c 20 30 2c 20 72 65 67 52 65 73 75 6c 74 2c 20  , 0, regResult, 
ecb0: 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a  0, pTab->zName,.
ecc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ecd0: 20 20 20 20 20 20 20 20 50 34 5f 54 52 41 4e 53          P4_TRANS
ece0: 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 66 6f 72  IENT);.      for
ecf0: 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e  (i=1, pFK=pTab->
ed00: 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c  pFKey; pFK; i++,
ed10: 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46   pFK=pFK->pNextF
ed20: 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70 50  rom){.        pP
ed30: 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33 46  arent = sqlite3F
ed40: 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 70 46 4b  indTable(db, pFK
ed50: 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20  ->zTo, zDb);.   
ed60: 20 20 20 20 20 69 66 28 20 70 50 61 72 65 6e 74       if( pParent
ed70: 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
ed80: 20 20 20 20 20 20 20 20 70 49 64 78 20 3d 20 30          pIdx = 0
ed90: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
eda0: 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73  3TableLock(pPars
edb0: 65 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2d  e, iDb, pParent-
edc0: 3e 74 6e 75 6d 2c 20 30 2c 20 70 50 61 72 65 6e  >tnum, 0, pParen
edd0: 74 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  t->zName);.     
ede0: 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46 6b     x = sqlite3Fk
edf0: 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61 72  LocateIndex(pPar
ee00: 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46 4b  se, pParent, pFK
ee10: 2c 20 26 70 49 64 78 2c 20 30 29 3b 0a 20 20 20  , &pIdx, 0);.   
ee20: 20 20 20 20 20 69 66 28 20 78 3d 3d 30 20 29 7b       if( x==0 ){
ee30: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70  .          if( p
ee40: 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Idx==0 ){.      
ee50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65        sqlite3Ope
ee60: 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20 69  nTable(pParse, i
ee70: 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2c 20  , iDb, pParent, 
ee80: 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20  OP_OpenRead);.  
ee90: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
eea0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
eeb0: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
eec0: 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20 69 2c 20  OP_OpenRead, i, 
eed0: 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 69 44 62 29  pIdx->tnum, iDb)
eee0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
eef0: 6c 69 74 65 33 56 64 62 65 53 65 74 50 34 4b 65  lite3VdbeSetP4Ke
ef00: 79 49 6e 66 6f 28 70 50 61 72 73 65 2c 20 70 49  yInfo(pParse, pI
ef10: 64 78 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  dx);.          }
ef20: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
ef30: 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b            k = 0;
ef40: 0a 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b  .          break
ef50: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
ef60: 20 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74    }.      assert
ef70: 28 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 3e 30  ( pParse->nErr>0
ef80: 20 7c 7c 20 70 46 4b 3d 3d 30 20 29 3b 0a 20 20   || pFK==0 );.  
ef90: 20 20 20 20 69 66 28 20 70 46 4b 20 29 20 62 72      if( pFK ) br
efa0: 65 61 6b 3b 0a 20 20 20 20 20 20 69 66 28 20 70  eak;.      if( p
efb0: 50 61 72 73 65 2d 3e 6e 54 61 62 3c 69 20 29 20  Parse->nTab<i ) 
efc0: 70 50 61 72 73 65 2d 3e 6e 54 61 62 20 3d 20 69  pParse->nTab = i
efd0: 3b 0a 20 20 20 20 20 20 61 64 64 72 54 6f 70 20  ;.      addrTop 
efe0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
eff0: 4f 70 31 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64  Op1(v, OP_Rewind
f000: 2c 20 30 29 3b 20 56 64 62 65 43 6f 76 65 72 61  , 0); VdbeCovera
f010: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 66 6f 72  ge(v);.      for
f020: 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e  (i=1, pFK=pTab->
f030: 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c  pFKey; pFK; i++,
f040: 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46   pFK=pFK->pNextF
f050: 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70 50  rom){.        pP
f060: 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33 46  arent = sqlite3F
f070: 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 70 46 4b  indTable(db, pFK
f080: 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20  ->zTo, zDb);.   
f090: 20 20 20 20 20 70 49 64 78 20 3d 20 30 3b 0a 20       pIdx = 0;. 
f0a0: 20 20 20 20 20 20 20 61 69 43 6f 6c 73 20 3d 20         aiCols = 
f0b0: 30 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  0;.        if( p
f0c0: 50 61 72 65 6e 74 20 29 7b 0a 20 20 20 20 20 20  Parent ){.      
f0d0: 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46      x = sqlite3F
f0e0: 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61  kLocateIndex(pPa
f0f0: 72 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46  rse, pParent, pF
f100: 4b 2c 20 26 70 49 64 78 2c 20 26 61 69 43 6f 6c  K, &pIdx, &aiCol
f110: 73 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73  s);.          as
f120: 73 65 72 74 28 20 78 3d 3d 30 20 29 3b 0a 20 20  sert( x==0 );.  
f130: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
f140: 61 64 64 72 4f 6b 20 3d 20 73 71 6c 69 74 65 33  addrOk = sqlite3
f150: 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29  VdbeMakeLabel(v)
f160: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 50  ;.        if( pP
f170: 61 72 65 6e 74 20 26 26 20 70 49 64 78 3d 3d 30  arent && pIdx==0
f180: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e   ){.          in
f190: 74 20 69 4b 65 79 20 3d 20 70 46 4b 2d 3e 61 43  t iKey = pFK->aC
f1a0: 6f 6c 5b 30 5d 2e 69 46 72 6f 6d 3b 0a 20 20 20  ol[0].iFrom;.   
f1b0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 69         assert( i
f1c0: 4b 65 79 3e 3d 30 20 26 26 20 69 4b 65 79 3c 70  Key>=0 && iKey<p
f1d0: 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20  Tab->nCol );.   
f1e0: 20 20 20 20 20 20 20 69 66 28 20 69 4b 65 79 21         if( iKey!
f1f0: 3d 70 54 61 62 2d 3e 69 50 4b 65 79 20 29 7b 0a  =pTab->iPKey ){.
f200: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
f210: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
f220: 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 30 2c 20 69   OP_Column, 0, i
f230: 4b 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20  Key, regRow);.  
f240: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
f250: 33 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 76  3ColumnDefault(v
f260: 2c 20 70 54 61 62 2c 20 69 4b 65 79 2c 20 72 65  , pTab, iKey, re
f270: 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20  gRow);.         
f280: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
f290: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c  dOp2(v, OP_IsNul
f2a0: 6c 2c 20 72 65 67 52 6f 77 2c 20 61 64 64 72 4f  l, regRow, addrO
f2b0: 6b 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  k); VdbeCoverage
f2c0: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  (v);.           
f2d0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
f2e0: 70 32 28 76 2c 20 4f 50 5f 4d 75 73 74 42 65 49  p2(v, OP_MustBeI
f2f0: 6e 74 2c 20 72 65 67 52 6f 77 2c 20 0a 20 20 20  nt, regRow, .   
f300: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
f310: 74 65 33 56 64 62 65 43 75 72 72 65 6e 74 41 64  te3VdbeCurrentAd
f320: 64 72 28 76 29 2b 33 29 3b 20 56 64 62 65 43 6f  dr(v)+3); VdbeCo
f330: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
f340: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
f350: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
f360: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
f370: 52 6f 77 69 64 2c 20 30 2c 20 72 65 67 52 6f 77  Rowid, 0, regRow
f380: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
f390: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
f3a0: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
f3b0: 5f 4e 6f 74 45 78 69 73 74 73 2c 20 69 2c 20 30  _NotExists, i, 0
f3c0: 2c 20 72 65 67 52 6f 77 29 3b 20 56 64 62 65 43  , regRow); VdbeC
f3d0: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
f3e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
f3f0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 47 6f  eAddOp2(v, OP_Go
f400: 74 6f 2c 20 30 2c 20 61 64 64 72 4f 6b 29 3b 0a  to, 0, addrOk);.
f410: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
f420: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
f430: 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72   sqlite3VdbeCurr
f440: 65 6e 74 41 64 64 72 28 76 29 2d 32 29 3b 0a 20  entAddr(v)-2);. 
f450: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
f460: 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b          for(j=0;
f470: 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b   j<pFK->nCol; j+
f480: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +){.            
f490: 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
f4a0: 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28  etColumnOfTable(
f4b0: 76 2c 20 70 54 61 62 2c 20 30 2c 0a 20 20 20 20  v, pTab, 0,.    
f4c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f4d0: 20 20 20 20 20 20 20 20 61 69 43 6f 6c 73 20 3f          aiCols ?
f4e0: 20 61 69 43 6f 6c 73 5b 6a 5d 20 3a 20 70 46 4b   aiCols[j] : pFK
f4f0: 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 2c  ->aCol[j].iFrom,
f500: 20 72 65 67 52 6f 77 2b 6a 29 3b 0a 20 20 20 20   regRow+j);.    
f510: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
f520: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
f530: 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2b 6a  IsNull, regRow+j
f540: 2c 20 61 64 64 72 4f 6b 29 3b 20 56 64 62 65 43  , addrOk); VdbeC
f550: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
f560: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
f570: 20 20 69 66 28 20 70 50 61 72 65 6e 74 20 29 7b    if( pParent ){
f580: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
f590: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
f5a0: 2c 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 2c  , OP_MakeRecord,
f5b0: 20 72 65 67 52 6f 77 2c 20 70 46 4b 2d 3e 6e 43   regRow, pFK->nC
f5c0: 6f 6c 2c 20 72 65 67 4b 65 79 2c 0a 20 20 20 20  ol, regKey,.    
f5d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f5e0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
f5f0: 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74  3IndexAffinitySt
f600: 72 28 76 2c 70 49 64 78 29 2c 20 70 46 4b 2d 3e  r(v,pIdx), pFK->
f610: 6e 43 6f 6c 29 3b 0a 20 20 20 20 20 20 20 20 20  nCol);.         
f620: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
f630: 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46 6f  dOp4Int(v, OP_Fo
f640: 75 6e 64 2c 20 69 2c 20 61 64 64 72 4f 6b 2c 20  und, i, addrOk, 
f650: 72 65 67 4b 65 79 2c 20 30 29 3b 0a 20 20 20 20  regKey, 0);.    
f660: 20 20 20 20 20 20 20 20 56 64 62 65 43 6f 76 65          VdbeCove
f670: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
f680: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20     }.        }. 
f690: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
f6a0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
f6b0: 6f 77 69 64 2c 20 30 2c 20 72 65 67 52 65 73 75  owid, 0, regResu
f6c0: 6c 74 2b 31 29 3b 0a 20 20 20 20 20 20 20 20 73  lt+1);.        s
f6d0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
f6e0: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
f6f0: 30 2c 20 72 65 67 52 65 73 75 6c 74 2b 32 2c 20  0, regResult+2, 
f700: 30 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  0, .            
f710: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 46                pF
f720: 4b 2d 3e 7a 54 6f 2c 20 50 34 5f 54 52 41 4e 53  K->zTo, P4_TRANS
f730: 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 20 20 73  IENT);.        s
f740: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
f750: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
f760: 69 2d 31 2c 20 72 65 67 52 65 73 75 6c 74 2b 33  i-1, regResult+3
f770: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
f780: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
f790: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 72 65  OP_ResultRow, re
f7a0: 67 52 65 73 75 6c 74 2c 20 34 29 3b 0a 20 20 20  gResult, 4);.   
f7b0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
f7c0: 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76 2c 20  ResolveLabel(v, 
f7d0: 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20  addrOk);.       
f7e0: 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
f7f0: 62 2c 20 61 69 43 6f 6c 73 29 3b 0a 20 20 20 20  b, aiCols);.    
f800: 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
f810: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
f820: 50 5f 4e 65 78 74 2c 20 30 2c 20 61 64 64 72 54  P_Next, 0, addrT
f830: 6f 70 2b 31 29 3b 20 56 64 62 65 43 6f 76 65 72  op+1); VdbeCover
f840: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73 71  age(v);.      sq
f850: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
f860: 65 28 76 2c 20 61 64 64 72 54 6f 70 29 3b 0a 20  e(v, addrTop);. 
f870: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
f880: 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  ;.#endif /* !def
f890: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
f8a0: 5f 54 52 49 47 47 45 52 29 20 2a 2f 0a 23 65 6e  _TRIGGER) */.#en
f8b0: 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28  dif /* !defined(
f8c0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
f8d0: 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69 66  IGN_KEY) */..#if
f8e0: 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 63 61  ndef NDEBUG.  ca
f8f0: 73 65 20 50 72 61 67 54 79 70 5f 50 41 52 53 45  se PragTyp_PARSE
f900: 52 5f 54 52 41 43 45 3a 20 7b 0a 20 20 20 20 69  R_TRACE: {.    i
f910: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
f920: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47 65     if( sqlite3Ge
f930: 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c  tBoolean(zRight,
f940: 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73   0) ){.        s
f950: 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63  qlite3ParserTrac
f960: 65 28 73 74 64 65 72 72 2c 20 22 70 61 72 73 65  e(stderr, "parse
f970: 72 3a 20 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c  r: ");.      }el
f980: 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  se{.        sqli
f990: 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28 30  te3ParserTrace(0
f9a0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 0);.      }.  
f9b0: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
f9c0: 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 52 65  .#endif..  /* Re
f9d0: 69 6e 73 74 61 6c 6c 20 74 68 65 20 4c 49 4b 45  install the LIKE
f9e0: 20 61 6e 64 20 47 4c 4f 42 20 66 75 6e 63 74 69   and GLOB functi
f9f0: 6f 6e 73 2e 20 20 54 68 65 20 76 61 72 69 61 6e  ons.  The varian
fa00: 74 20 6f 66 20 4c 49 4b 45 0a 20 20 2a 2a 20 75  t of LIKE.  ** u
fa10: 73 65 64 20 77 69 6c 6c 20 62 65 20 63 61 73 65  sed will be case
fa20: 20 73 65 6e 73 69 74 69 76 65 20 6f 72 20 6e 6f   sensitive or no
fa30: 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74  t depending on t
fa40: 68 65 20 52 48 53 2e 0a 20 20 2a 2f 0a 20 20 63  he RHS..  */.  c
fa50: 61 73 65 20 50 72 61 67 54 79 70 5f 43 41 53 45  ase PragTyp_CASE
fa60: 5f 53 45 4e 53 49 54 49 56 45 5f 4c 49 4b 45 3a  _SENSITIVE_LIKE:
fa70: 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68   {.    if( zRigh
fa80: 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  t ){.      sqlit
fa90: 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75  e3RegisterLikeFu
faa0: 6e 63 74 69 6f 6e 73 28 64 62 2c 20 73 71 6c 69  nctions(db, sqli
fab0: 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52  te3GetBoolean(zR
fac0: 69 67 68 74 2c 20 30 29 29 3b 0a 20 20 20 20 7d  ight, 0));.    }
fad0: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 23  .  }.  break;..#
fae0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 49 4e  ifndef SQLITE_IN
faf0: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52  TEGRITY_CHECK_ER
fb00: 52 4f 52 5f 4d 41 58 0a 23 20 64 65 66 69 6e 65  ROR_MAX.# define
fb10: 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54   SQLITE_INTEGRIT
fb20: 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41  Y_CHECK_ERROR_MA
fb30: 58 20 31 30 30 0a 23 65 6e 64 69 66 0a 0a 23 69  X 100.#endif..#i
fb40: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
fb50: 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
fb60: 4b 0a 20 20 2f 2a 20 50 72 61 67 6d 61 20 22 71  K.  /* Pragma "q
fb70: 75 69 63 6b 5f 63 68 65 63 6b 22 20 69 73 20 72  uick_check" is r
fb80: 65 64 75 63 65 64 20 76 65 72 73 69 6f 6e 20 6f  educed version o
fb90: 66 20 0a 20 20 2a 2a 20 69 6e 74 65 67 72 69 74  f .  ** integrit
fba0: 79 5f 63 68 65 63 6b 20 64 65 73 69 67 6e 65 64  y_check designed
fbb0: 20 74 6f 20 64 65 74 65 63 74 20 6d 6f 73 74 20   to detect most 
fbc0: 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
fbd0: 69 6f 6e 0a 20 20 2a 2a 20 77 69 74 68 6f 75 74  ion.  ** without
fbe0: 20 6d 6f 73 74 20 6f 66 20 74 68 65 20 6f 76 65   most of the ove
fbf0: 72 68 65 61 64 20 6f 66 20 61 20 66 75 6c 6c 20  rhead of a full 
fc00: 69 6e 74 65 67 72 69 74 79 2d 63 68 65 63 6b 2e  integrity-check.
fc10: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
fc20: 67 54 79 70 5f 49 4e 54 45 47 52 49 54 59 5f 43  gTyp_INTEGRITY_C
fc30: 48 45 43 4b 3a 20 7b 0a 20 20 20 20 69 6e 74 20  HECK: {.    int 
fc40: 69 2c 20 6a 2c 20 61 64 64 72 2c 20 6d 78 45 72  i, j, addr, mxEr
fc50: 72 3b 0a 0a 20 20 20 20 2f 2a 20 43 6f 64 65 20  r;..    /* Code 
fc60: 74 68 61 74 20 61 70 70 65 61 72 73 20 61 74 20  that appears at 
fc70: 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69  the end of the i
fc80: 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 2e 20  ntegrity check. 
fc90: 20 49 66 20 6e 6f 20 65 72 72 6f 72 0a 20 20 20   If no error.   
fca0: 20 2a 2a 20 6d 65 73 73 61 67 65 73 20 68 61 76   ** messages hav
fcb0: 65 20 62 65 65 6e 20 67 65 6e 65 72 61 74 65 64  e been generated
fcc0: 2c 20 6f 75 74 70 75 74 20 4f 4b 2e 20 20 4f 74  , output OK.  Ot
fcd0: 68 65 72 77 69 73 65 20 6f 75 74 70 75 74 20 74  herwise output t
fce0: 68 65 0a 20 20 20 20 2a 2a 20 65 72 72 6f 72 20  he.    ** error 
fcf0: 6d 65 73 73 61 67 65 0a 20 20 20 20 2a 2f 0a 20  message.    */. 
fd00: 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
fd10: 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42 45 5f 4f  int iLn = VDBE_O
fd20: 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b  FFSET_LINENO(2);
fd30: 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
fd40: 74 20 56 64 62 65 4f 70 4c 69 73 74 20 65 6e 64  t VdbeOpList end
fd50: 43 6f 64 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  Code[] = {.     
fd60: 20 7b 20 4f 50 5f 49 66 4e 65 67 2c 20 20 20 20   { OP_IfNeg,    
fd70: 20 20 20 31 2c 20 30 2c 20 20 20 20 20 20 20 20     1, 0,        
fd80: 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20  0},    /* 0 */. 
fd90: 20 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67       { OP_String
fda0: 38 2c 20 20 20 20 20 30 2c 20 33 2c 20 20 20 20  8,     0, 3,    
fdb0: 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20      0},    /* 1 
fdc0: 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52 65  */.      { OP_Re
fdd0: 73 75 6c 74 52 6f 77 2c 20 20 20 33 2c 20 31 2c  sultRow,   3, 1,
fde0: 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20          0},.    
fdf0: 7d 3b 0a 0a 20 20 20 20 69 6e 74 20 69 73 51 75  };..    int isQu
fe00: 69 63 6b 20 3d 20 28 73 71 6c 69 74 65 33 54 6f  ick = (sqlite3To
fe10: 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29 3d  lower(zLeft[0])=
fe20: 3d 27 71 27 29 3b 0a 0a 20 20 20 20 2f 2a 20 49  ='q');..    /* I
fe30: 66 20 74 68 65 20 50 52 41 47 4d 41 20 63 6f 6d  f the PRAGMA com
fe40: 6d 61 6e 64 20 77 61 73 20 6f 66 20 74 68 65 20  mand was of the 
fe50: 66 6f 72 6d 20 22 50 52 41 47 4d 41 20 3c 64 62  form "PRAGMA <db
fe60: 3e 2e 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63  >.integrity_chec
fe70: 6b 22 2c 0a 20 20 20 20 2a 2a 20 74 68 65 6e 20  k",.    ** then 
fe80: 69 44 62 20 69 73 20 73 65 74 20 74 6f 20 74 68  iDb is set to th
fe90: 65 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64  e index of the d
fea0: 61 74 61 62 61 73 65 20 69 64 65 6e 74 69 66 69  atabase identifi
feb0: 65 64 20 62 79 20 3c 64 62 3e 2e 0a 20 20 20 20  ed by <db>..    
fec0: 2a 2a 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c  ** In this case,
fed0: 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 20 6f   the integrity o
fee0: 66 20 64 61 74 61 62 61 73 65 20 69 44 62 20 6f  f database iDb o
fef0: 6e 6c 79 20 69 73 20 76 65 72 69 66 69 65 64 20  nly is verified 
ff00: 62 79 0a 20 20 20 20 2a 2a 20 74 68 65 20 56 44  by.    ** the VD
ff10: 42 45 20 63 72 65 61 74 65 64 20 62 65 6c 6f 77  BE created below
ff20: 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20  ..    **.    ** 
ff30: 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 74 68  Otherwise, if th
ff40: 65 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 73 69  e command was si
ff50: 6d 70 6c 79 20 22 50 52 41 47 4d 41 20 69 6e 74  mply "PRAGMA int
ff60: 65 67 72 69 74 79 5f 63 68 65 63 6b 22 20 28 6f  egrity_check" (o
ff70: 72 0a 20 20 20 20 2a 2a 20 22 50 52 41 47 4d 41  r.    ** "PRAGMA
ff80: 20 71 75 69 63 6b 5f 63 68 65 63 6b 22 29 2c 20   quick_check"), 
ff90: 74 68 65 6e 20 69 44 62 20 69 73 20 73 65 74 20  then iDb is set 
ffa0: 74 6f 20 30 2e 20 49 6e 20 74 68 69 73 20 63 61  to 0. In this ca
ffb0: 73 65 2c 20 73 65 74 20 69 44 62 0a 20 20 20 20  se, set iDb.    
ffc0: 2a 2a 20 74 6f 20 2d 31 20 68 65 72 65 2c 20 74  ** to -1 here, t
ffd0: 6f 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 20  o indicate that 
ffe0: 74 68 65 20 56 44 42 45 20 73 68 6f 75 6c 64 20  the VDBE should 
fff0: 76 65 72 69 66 79 20 74 68 65 20 69 6e 74 65 67  verify the integ
10000 72 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 61  rity.    ** of a
10010 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ll attached data
10020 62 61 73 65 73 2e 20 20 2a 2f 0a 20 20 20 20 61  bases.  */.    a
10030 73 73 65 72 74 28 20 69 44 62 3e 3d 30 20 29 3b  ssert( iDb>=0 );
10040 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62  .    assert( iDb
10050 3d 3d 30 20 7c 7c 20 70 49 64 32 2d 3e 7a 20 29  ==0 || pId2->z )
10060 3b 0a 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e  ;.    if( pId2->
10070 7a 3d 3d 30 20 29 20 69 44 62 20 3d 20 2d 31 3b  z==0 ) iDb = -1;
10080 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c  ..    /* Initial
10090 69 7a 65 20 74 68 65 20 56 44 42 45 20 70 72 6f  ize the VDBE pro
100a0 67 72 61 6d 20 2a 2f 0a 20 20 20 20 70 50 61 72  gram */.    pPar
100b0 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20  se->nMem = 6;.  
100c0 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
100d0 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
100e0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
100f0 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
10100 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 69 6e  OLNAME_NAME, "in
10110 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 20  tegrity_check", 
10120 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
10130 0a 20 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20  .    /* Set the 
10140 6d 61 78 69 6d 75 6d 20 65 72 72 6f 72 20 63 6f  maximum error co
10150 75 6e 74 20 2a 2f 0a 20 20 20 20 6d 78 45 72 72  unt */.    mxErr
10160 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52   = SQLITE_INTEGR
10170 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f  ITY_CHECK_ERROR_
10180 4d 41 58 3b 0a 20 20 20 20 69 66 28 20 7a 52 69  MAX;.    if( zRi
10190 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
101a0 69 74 65 33 47 65 74 49 6e 74 33 32 28 7a 52 69  ite3GetInt32(zRi
101b0 67 68 74 2c 20 26 6d 78 45 72 72 29 3b 0a 20 20  ght, &mxErr);.  
101c0 20 20 20 20 69 66 28 20 6d 78 45 72 72 3c 3d 30      if( mxErr<=0
101d0 20 29 7b 0a 20 20 20 20 20 20 20 20 6d 78 45 72   ){.        mxEr
101e0 72 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47  r = SQLITE_INTEG
101f0 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52  RITY_CHECK_ERROR
10200 5f 4d 41 58 3b 0a 20 20 20 20 20 20 7d 0a 20 20  _MAX;.      }.  
10210 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
10220 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
10230 49 6e 74 65 67 65 72 2c 20 6d 78 45 72 72 2c 20  Integer, mxErr, 
10240 31 29 3b 20 20 2f 2a 20 72 65 67 5b 31 5d 20 68  1);  /* reg[1] h
10250 6f 6c 64 73 20 65 72 72 6f 72 73 20 6c 65 66 74  olds errors left
10260 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20 44 6f 20 61   */..    /* Do a
10270 6e 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63  n integrity chec
10280 6b 20 6f 6e 20 65 61 63 68 20 64 61 74 61 62 61  k on each databa
10290 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 66  se file */.    f
102a0 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44  or(i=0; i<db->nD
102b0 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 48  b; i++){.      H
102c0 61 73 68 45 6c 65 6d 20 2a 78 3b 0a 20 20 20 20  ashElem *x;.    
102d0 20 20 48 61 73 68 20 2a 70 54 62 6c 73 3b 0a 20    Hash *pTbls;. 
102e0 20 20 20 20 20 69 6e 74 20 63 6e 74 20 3d 20 30       int cnt = 0
102f0 3b 0a 0a 20 20 20 20 20 20 69 66 28 20 4f 4d 49  ;..      if( OMI
10300 54 5f 54 45 4d 50 44 42 20 26 26 20 69 3d 3d 31  T_TEMPDB && i==1
10310 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
10320 20 20 20 69 66 28 20 69 44 62 3e 3d 30 20 26 26     if( iDb>=0 &&
10330 20 69 21 3d 69 44 62 20 29 20 63 6f 6e 74 69 6e   i!=iDb ) contin
10340 75 65 3b 0a 0a 20 20 20 20 20 20 73 71 6c 69 74  ue;..      sqlit
10350 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
10360 6d 61 28 70 50 61 72 73 65 2c 20 69 29 3b 0a 20  ma(pParse, i);. 
10370 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69       addr = sqli
10380 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
10390 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 2f   OP_IfPos, 1); /
103a0 2a 20 48 61 6c 74 20 69 66 20 6f 75 74 20 6f 66  * Halt if out of
103b0 20 65 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20 20   errors */.     
103c0 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
103d0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
103e0 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
103f0 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20  Halt, 0, 0);.   
10400 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
10410 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b  mpHere(v, addr);
10420 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 61 6e  ..      /* Do an
10430 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b   integrity check
10440 20 6f 66 20 74 68 65 20 42 2d 54 72 65 65 0a 20   of the B-Tree. 
10450 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a       **.      **
10460 20 42 65 67 69 6e 20 62 79 20 66 69 6c 6c 69 6e   Begin by fillin
10470 67 20 72 65 67 69 73 74 65 72 73 20 32 2c 20 33  g registers 2, 3
10480 2c 20 2e 2e 2e 20 77 69 74 68 20 74 68 65 20 72  , ... with the r
10490 6f 6f 74 20 70 61 67 65 73 20 6e 75 6d 62 65 72  oot pages number
104a0 73 0a 20 20 20 20 20 20 2a 2a 20 66 6f 72 20 61  s.      ** for a
104b0 6c 6c 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  ll tables and in
104c0 64 69 63 65 73 20 69 6e 20 74 68 65 20 64 61 74  dices in the dat
104d0 61 62 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a  abase..      */.
104e0 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
104f0 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
10500 48 65 6c 64 28 64 62 2c 20 69 2c 20 30 29 20 29  Held(db, i, 0) )
10510 3b 0a 20 20 20 20 20 20 70 54 62 6c 73 20 3d 20  ;.      pTbls = 
10520 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 53 63 68  &db->aDb[i].pSch
10530 65 6d 61 2d 3e 74 62 6c 48 61 73 68 3b 0a 20 20  ema->tblHash;.  
10540 20 20 20 20 66 6f 72 28 78 3d 73 71 6c 69 74 65      for(x=sqlite
10550 48 61 73 68 46 69 72 73 74 28 70 54 62 6c 73 29  HashFirst(pTbls)
10560 3b 20 78 3b 20 78 3d 73 71 6c 69 74 65 48 61 73  ; x; x=sqliteHas
10570 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20 20 20  hNext(x)){.     
10580 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d     Table *pTab =
10590 20 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28   sqliteHashData(
105a0 78 29 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65  x);.        Inde
105b0 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 20 20 20  x *pIdx;.       
105c0 20 69 66 28 20 48 61 73 52 6f 77 69 64 28 70 54   if( HasRowid(pT
105d0 61 62 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ab) ){.         
105e0 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
105f0 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
10600 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c 20 32 2b  , pTab->tnum, 2+
10610 63 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  cnt);.          
10620 56 64 62 65 43 6f 6d 6d 65 6e 74 28 28 76 2c 20  VdbeComment((v, 
10630 22 25 73 22 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d  "%s", pTab->zNam
10640 65 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 63  e));.          c
10650 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nt++;.        }.
10660 20 20 20 20 20 20 20 20 66 6f 72 28 70 49 64 78          for(pIdx
10670 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70  =pTab->pIndex; p
10680 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e  Idx; pIdx=pIdx->
10690 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20 20 20  pNext){.        
106a0 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
106b0 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
106c0 72 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 32  r, pIdx->tnum, 2
106d0 2b 63 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20  +cnt);.         
106e0 20 56 64 62 65 43 6f 6d 6d 65 6e 74 28 28 76 2c   VdbeComment((v,
106f0 20 22 25 73 22 2c 20 70 49 64 78 2d 3e 7a 4e 61   "%s", pIdx->zNa
10700 6d 65 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20  me));.          
10710 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  cnt++;.        }
10720 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
10730 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 73 75 66  /* Make sure suf
10740 66 69 63 69 65 6e 74 20 6e 75 6d 62 65 72 20 6f  ficient number o
10750 66 20 72 65 67 69 73 74 65 72 73 20 68 61 76 65  f registers have
10760 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20   been allocated 
10770 2a 2f 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d  */.      pParse-
10780 3e 6e 4d 65 6d 20 3d 20 4d 41 58 28 20 70 50 61  >nMem = MAX( pPa
10790 72 73 65 2d 3e 6e 4d 65 6d 2c 20 63 6e 74 2b 38  rse->nMem, cnt+8
107a0 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f   );..      /* Do
107b0 20 74 68 65 20 62 2d 74 72 65 65 20 69 6e 74 65   the b-tree inte
107c0 67 72 69 74 79 20 63 68 65 63 6b 73 20 2a 2f 0a  grity checks */.
107d0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
107e0 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 49 6e  eAddOp3(v, OP_In
107f0 74 65 67 72 69 74 79 43 6b 2c 20 32 2c 20 63 6e  tegrityCk, 2, cn
10800 74 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  t, 1);.      sql
10810 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 35  ite3VdbeChangeP5
10820 28 76 2c 20 28 75 38 29 69 29 3b 0a 20 20 20 20  (v, (u8)i);.    
10830 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33    addr = sqlite3
10840 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50  VdbeAddOp1(v, OP
10850 5f 49 73 4e 75 6c 6c 2c 20 32 29 3b 20 56 64 62  _IsNull, 2); Vdb
10860 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
10870 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
10880 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
10890 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20  ng8, 0, 3, 0,.  
108a0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4d 50         sqlite3MP
108b0 72 69 6e 74 66 28 64 62 2c 20 22 2a 2a 2a 20 69  rintf(db, "*** i
108c0 6e 20 64 61 74 61 62 61 73 65 20 25 73 20 2a 2a  n database %s **
108d0 2a 5c 6e 22 2c 20 64 62 2d 3e 61 44 62 5b 69 5d  *\n", db->aDb[i]
108e0 2e 7a 4e 61 6d 65 29 2c 0a 20 20 20 20 20 20 20  .zName),.       
108f0 20 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a 20    P4_DYNAMIC);. 
10900 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10910 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d 6f 76  AddOp3(v, OP_Mov
10920 65 2c 20 32 2c 20 34 2c 20 31 29 3b 0a 20 20 20  e, 2, 4, 1);.   
10930 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
10940 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61  dOp3(v, OP_Conca
10950 74 2c 20 34 2c 20 33 2c 20 32 29 3b 0a 20 20 20  t, 4, 3, 2);.   
10960 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
10970 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
10980 74 52 6f 77 2c 20 32 2c 20 31 29 3b 0a 20 20 20  tRow, 2, 1);.   
10990 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
109a0 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b  mpHere(v, addr);
109b0 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20  ..      /* Make 
109c0 73 75 72 65 20 61 6c 6c 20 74 68 65 20 69 6e 64  sure all the ind
109d0 69 63 65 73 20 61 72 65 20 63 6f 6e 73 74 72 75  ices are constru
109e0 63 74 65 64 20 63 6f 72 72 65 63 74 6c 79 2e 0a  cted correctly..
109f0 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 66        */.      f
10a00 6f 72 28 78 3d 73 71 6c 69 74 65 48 61 73 68 46  or(x=sqliteHashF
10a10 69 72 73 74 28 70 54 62 6c 73 29 3b 20 78 20 26  irst(pTbls); x &
10a20 26 20 21 69 73 51 75 69 63 6b 3b 20 78 3d 73 71  & !isQuick; x=sq
10a30 6c 69 74 65 48 61 73 68 4e 65 78 74 28 78 29 29  liteHashNext(x))
10a40 7b 0a 20 20 20 20 20 20 20 20 54 61 62 6c 65 20  {.        Table 
10a50 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61  *pTab = sqliteHa
10a60 73 68 44 61 74 61 28 78 29 3b 0a 20 20 20 20 20  shData(x);.     
10a70 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 2c 20     Index *pIdx, 
10a80 2a 70 50 6b 3b 0a 20 20 20 20 20 20 20 20 49 6e  *pPk;.        In
10a90 64 65 78 20 2a 70 50 72 69 6f 72 20 3d 20 30 3b  dex *pPrior = 0;
10aa0 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 6f 6f  .        int loo
10ab0 70 54 6f 70 3b 0a 20 20 20 20 20 20 20 20 69 6e  pTop;.        in
10ac0 74 20 69 44 61 74 61 43 75 72 2c 20 69 49 64 78  t iDataCur, iIdx
10ad0 43 75 72 3b 0a 20 20 20 20 20 20 20 20 69 6e 74  Cur;.        int
10ae0 20 72 31 20 3d 20 2d 31 3b 0a 0a 20 20 20 20 20   r1 = -1;..     
10af0 20 20 20 69 66 28 20 70 54 61 62 2d 3e 70 49 6e     if( pTab->pIn
10b00 64 65 78 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  dex==0 ) continu
10b10 65 3b 0a 20 20 20 20 20 20 20 20 70 50 6b 20 3d  e;.        pPk =
10b20 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20   HasRowid(pTab) 
10b30 3f 20 30 20 3a 20 73 71 6c 69 74 65 33 50 72 69  ? 0 : sqlite3Pri
10b40 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 70 54 61  maryKeyIndex(pTa
10b50 62 29 3b 0a 20 20 20 20 20 20 20 20 61 64 64 72  b);.        addr
10b60 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
10b70 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73  dOp1(v, OP_IfPos
10b80 2c 20 31 29 3b 20 20 2f 2a 20 53 74 6f 70 20 69  , 1);  /* Stop i
10b90 66 20 6f 75 74 20 6f 66 20 65 72 72 6f 72 73 20  f out of errors 
10ba0 2a 2f 0a 20 20 20 20 20 20 20 20 56 64 62 65 43  */.        VdbeC
10bb0 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
10bc0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
10bd0 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74  ddOp2(v, OP_Halt
10be0 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  , 0, 0);.       
10bf0 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
10c00 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20  Here(v, addr);. 
10c10 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
10c20 70 72 43 61 63 68 65 43 6c 65 61 72 28 70 50 61  prCacheClear(pPa
10c30 72 73 65 29 3b 0a 20 20 20 20 20 20 20 20 73 71  rse);.        sq
10c40 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e  lite3OpenTableAn
10c50 64 49 6e 64 69 63 65 73 28 70 50 61 72 73 65 2c  dIndices(pParse,
10c60 20 70 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52 65   pTab, OP_OpenRe
10c70 61 64 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  ad,.            
10c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c90 20 20 20 20 20 20 20 31 2c 20 30 2c 20 26 69 44         1, 0, &iD
10ca0 61 74 61 43 75 72 2c 20 26 69 49 64 78 43 75 72  ataCur, &iIdxCur
10cb0 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
10cc0 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
10cd0 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20 37  OP_Integer, 0, 7
10ce0 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a  );.        for(j
10cf0 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70  =0, pIdx=pTab->p
10d00 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64  Index; pIdx; pId
10d10 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a  x=pIdx->pNext, j
10d20 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  ++){.          s
10d30 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
10d40 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
10d50 30 2c 20 38 2b 6a 29 3b 20 2f 2a 20 69 6e 64 65  0, 8+j); /* inde
10d60 78 20 65 6e 74 72 69 65 73 20 63 6f 75 6e 74 65  x entries counte
10d70 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20  r */.        }. 
10d80 20 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e         pParse->n
10d90 4d 65 6d 20 3d 20 4d 41 58 28 70 50 61 72 73 65  Mem = MAX(pParse
10da0 2d 3e 6e 4d 65 6d 2c 20 38 2b 6a 29 3b 0a 20 20  ->nMem, 8+j);.  
10db0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10dc0 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
10dd0 77 69 6e 64 2c 20 69 44 61 74 61 43 75 72 2c 20  wind, iDataCur, 
10de0 30 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  0); VdbeCoverage
10df0 28 76 29 3b 0a 20 20 20 20 20 20 20 20 6c 6f 6f  (v);.        loo
10e00 70 54 6f 70 20 3d 20 73 71 6c 69 74 65 33 56 64  pTop = sqlite3Vd
10e10 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41  beAddOp2(v, OP_A
10e20 64 64 49 6d 6d 2c 20 37 2c 20 31 29 3b 0a 20 20  ddImm, 7, 1);.  
10e30 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66 79 20        /* Verify 
10e40 74 68 61 74 20 61 6c 6c 20 4e 4f 54 20 4e 55 4c  that all NOT NUL
10e50 4c 20 63 6f 6c 75 6d 6e 73 20 72 65 61 6c 6c 79  L columns really
10e60 20 61 72 65 20 4e 4f 54 20 4e 55 4c 4c 20 2a 2f   are NOT NULL */
10e70 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30  .        for(j=0
10e80 3b 20 6a 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20  ; j<pTab->nCol; 
10e90 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  j++){.          
10ea0 63 68 61 72 20 2a 7a 45 72 72 3b 0a 20 20 20 20  char *zErr;.    
10eb0 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20        int jmp2, 
10ec0 6a 6d 70 33 3b 0a 20 20 20 20 20 20 20 20 20 20  jmp3;.          
10ed0 69 66 28 20 6a 3d 3d 70 54 61 62 2d 3e 69 50 4b  if( j==pTab->iPK
10ee0 65 79 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  ey ) continue;. 
10ef0 20 20 20 20 20 20 20 20 20 69 66 28 20 70 54 61           if( pTa
10f00 62 2d 3e 61 43 6f 6c 5b 6a 5d 2e 6e 6f 74 4e 75  b->aCol[j].notNu
10f10 6c 6c 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  ll==0 ) continue
10f20 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
10f30 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
10f40 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 76 2c 20 70  lumnOfTable(v, p
10f50 54 61 62 2c 20 69 44 61 74 61 43 75 72 2c 20 6a  Tab, iDataCur, j
10f60 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 3);.          
10f70 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
10f80 65 50 35 28 76 2c 20 4f 50 46 4c 41 47 5f 54 59  eP5(v, OPFLAG_TY
10f90 50 45 4f 46 41 52 47 29 3b 0a 20 20 20 20 20 20  PEOFARG);.      
10fa0 20 20 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74      jmp2 = sqlit
10fb0 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20  e3VdbeAddOp1(v, 
10fc0 4f 50 5f 4e 6f 74 4e 75 6c 6c 2c 20 33 29 3b 20  OP_NotNull, 3); 
10fd0 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
10fe0 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
10ff0 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
11000 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31  OP_AddImm, 1, -1
11010 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20  ); /* Decrement 
11020 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20  error limit */. 
11030 20 20 20 20 20 20 20 20 20 7a 45 72 72 20 3d 20           zErr = 
11040 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64  sqlite3MPrintf(d
11050 62 2c 20 22 4e 55 4c 4c 20 76 61 6c 75 65 20 69  b, "NULL value i
11060 6e 20 25 73 2e 25 73 22 2c 20 70 54 61 62 2d 3e  n %s.%s", pTab->
11070 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20  zName,.         
11080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11090 20 20 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c 5b       pTab->aCol[
110a0 6a 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20  j].zName);.     
110b0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
110c0 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
110d0 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 7a  ing8, 0, 3, 0, z
110e0 45 72 72 2c 20 50 34 5f 44 59 4e 41 4d 49 43 29  Err, P4_DYNAMIC)
110f0 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
11100 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
11110 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 33   OP_ResultRow, 3
11120 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 1);.          
11130 6a 6d 70 33 20 3d 20 73 71 6c 69 74 65 33 56 64  jmp3 = sqlite3Vd
11140 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49  beAddOp1(v, OP_I
11150 66 50 6f 73 2c 20 31 29 3b 20 56 64 62 65 43 6f  fPos, 1); VdbeCo
11160 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
11170 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
11180 41 64 64 4f 70 30 28 76 2c 20 4f 50 5f 48 61 6c  AddOp0(v, OP_Hal
11190 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  t);.          sq
111a0 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
111b0 65 28 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20 20  e(v, jmp2);.    
111c0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
111d0 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70  eJumpHere(v, jmp
111e0 33 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  3);.        }.  
111f0 20 20 20 20 20 20 2f 2a 20 56 61 6c 69 64 61 74        /* Validat
11200 65 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73 20  e index entries 
11210 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20  for the current 
11220 72 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 66  row */.        f
11230 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61  or(j=0, pIdx=pTa
11240 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b  b->pIndex; pIdx;
11250 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78   pIdx=pIdx->pNex
11260 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20  t, j++){.       
11270 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70     int jmp2, jmp
11280 33 2c 20 6a 6d 70 34 2c 20 6a 6d 70 35 3b 0a 20  3, jmp4, jmp5;. 
11290 20 20 20 20 20 20 20 20 20 69 6e 74 20 63 6b 55           int ckU
112a0 6e 69 71 20 3d 20 73 71 6c 69 74 65 33 56 64 62  niq = sqlite3Vdb
112b0 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20  eMakeLabel(v);. 
112c0 20 20 20 20 20 20 20 20 20 69 66 28 20 70 50 6b           if( pPk
112d0 3d 3d 70 49 64 78 20 29 20 63 6f 6e 74 69 6e 75  ==pIdx ) continu
112e0 65 3b 0a 20 20 20 20 20 20 20 20 20 20 72 31 20  e;.          r1 
112f0 3d 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74  = sqlite3Generat
11300 65 49 6e 64 65 78 4b 65 79 28 70 50 61 72 73 65  eIndexKey(pParse
11310 2c 20 70 49 64 78 2c 20 69 44 61 74 61 43 75 72  , pIdx, iDataCur
11320 2c 20 30 2c 20 30 2c 20 26 6a 6d 70 33 2c 0a 20  , 0, 0, &jmp3,. 
11330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11350 20 20 20 20 20 20 70 50 72 69 6f 72 2c 20 72 31        pPrior, r1
11360 29 3b 0a 20 20 20 20 20 20 20 20 20 20 70 50 72  );.          pPr
11370 69 6f 72 20 3d 20 70 49 64 78 3b 0a 20 20 20 20  ior = pIdx;.    
11380 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
11390 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64  eAddOp2(v, OP_Ad
113a0 64 49 6d 6d 2c 20 38 2b 6a 2c 20 31 29 3b 20 20  dImm, 8+j, 1);  
113b0 2f 2a 20 69 6e 63 72 65 6d 65 6e 74 20 65 6e 74  /* increment ent
113c0 72 79 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20  ry count */.    
113d0 20 20 20 20 20 20 2f 2a 20 56 65 72 69 66 79 20        /* Verify 
113e0 74 68 61 74 20 61 6e 20 69 6e 64 65 78 20 65 6e  that an index en
113f0 74 72 79 20 65 78 69 73 74 73 20 66 6f 72 20 74  try exists for t
11400 68 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65  he current table
11410 20 72 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20   row */.        
11420 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65 33    jmp2 = sqlite3
11430 56 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76 2c  VdbeAddOp4Int(v,
11440 20 4f 50 5f 46 6f 75 6e 64 2c 20 69 49 64 78 43   OP_Found, iIdxC
11450 75 72 2b 6a 2c 20 63 6b 55 6e 69 71 2c 20 72 31  ur+j, ckUniq, r1
11460 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
11470 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11480 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e 6e 43          pIdx->nC
11490 6f 6c 75 6d 6e 29 3b 20 56 64 62 65 43 6f 76 65  olumn); VdbeCove
114a0 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
114b0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
114c0 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d  dOp2(v, OP_AddIm
114d0 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44 65  m, 1, -1); /* De
114e0 63 72 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c 69  crement error li
114f0 6d 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  mit */.         
11500 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
11510 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
11520 2c 20 30 2c 20 33 2c 20 30 2c 20 22 72 6f 77 20  , 0, 3, 0, "row 
11530 22 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20  ", P4_STATIC);. 
11540 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
11550 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
11560 5f 43 6f 6e 63 61 74 2c 20 37 2c 20 33 2c 20 33  _Concat, 7, 3, 3
11570 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
11580 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
11590 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
115a0 20 34 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20   4, 0, .        
115b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115c0 20 20 20 20 22 20 6d 69 73 73 69 6e 67 20 66 72      " missing fr
115d0 6f 6d 20 69 6e 64 65 78 20 22 2c 20 50 34 5f 53  om index ", P4_S
115e0 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
115f0 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
11600 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74  Op3(v, OP_Concat
11610 2c 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20  , 4, 3, 3);.    
11620 20 20 20 20 20 20 6a 6d 70 35 20 3d 20 73 71 6c        jmp5 = sql
11630 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
11640 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
11650 20 34 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20   4, 0,.         
11660 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11670 20 20 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e            pIdx->
11680 7a 4e 61 6d 65 2c 20 50 34 5f 54 52 41 4e 53 49  zName, P4_TRANSI
11690 45 4e 54 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ENT);.          
116a0 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
116b0 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20  3(v, OP_Concat, 
116c0 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20 20  4, 3, 3);.      
116d0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
116e0 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
116f0 6c 74 52 6f 77 2c 20 33 2c 20 31 29 3b 0a 20 20  ltRow, 3, 1);.  
11700 20 20 20 20 20 20 20 20 6a 6d 70 34 20 3d 20 73          jmp4 = s
11710 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
11720 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29  (v, OP_IfPos, 1)
11730 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
11740 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
11750 69 74 65 33 56 64 62 65 41 64 64 4f 70 30 28 76  ite3VdbeAddOp0(v
11760 2c 20 4f 50 5f 48 61 6c 74 29 3b 0a 20 20 20 20  , OP_Halt);.    
11770 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
11780 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70  eJumpHere(v, jmp
11790 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a  2);.          /*
117a0 20 46 6f 72 20 55 4e 49 51 55 45 20 69 6e 64 65   For UNIQUE inde
117b0 78 65 73 2c 20 76 65 72 69 66 79 20 74 68 61 74  xes, verify that
117c0 20 6f 6e 6c 79 20 6f 6e 65 20 65 6e 74 72 79 20   only one entry 
117d0 65 78 69 73 74 73 20 77 69 74 68 20 74 68 65 0a  exists with the.
117e0 20 20 20 20 20 20 20 20 20 20 2a 2a 20 63 75 72            ** cur
117f0 72 65 6e 74 20 6b 65 79 2e 20 20 54 68 65 20 65  rent key.  The e
11800 6e 74 72 79 20 69 73 20 75 6e 69 71 75 65 20 69  ntry is unique i
11810 66 20 28 31 29 20 61 6e 79 20 63 6f 6c 75 6d 6e  f (1) any column
11820 20 69 73 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20   is NULL.       
11830 20 20 20 2a 2a 20 6f 72 20 28 32 29 20 74 68 65     ** or (2) the
11840 20 6e 65 78 74 20 65 6e 74 72 79 20 68 61 73 20   next entry has 
11850 61 20 64 69 66 66 65 72 65 6e 74 20 6b 65 79 20  a different key 
11860 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  */.          if(
11870 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 70   IsUniqueIndex(p
11880 49 64 78 29 20 29 7b 0a 20 20 20 20 20 20 20 20  Idx) ){.        
11890 20 20 20 20 69 6e 74 20 75 6e 69 71 4f 6b 20 3d      int uniqOk =
118a0 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65   sqlite3VdbeMake
118b0 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20 20 20 20  Label(v);.      
118c0 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 36 3b 0a        int jmp6;.
118d0 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
118e0 6b 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  kk;.            
118f0 66 6f 72 28 6b 6b 3d 30 3b 20 6b 6b 3c 70 49 64  for(kk=0; kk<pId
11900 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 20 6b 6b 2b 2b  x->nKeyCol; kk++
11910 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  ){.             
11920 20 69 6e 74 20 69 43 6f 6c 20 3d 20 70 49 64 78   int iCol = pIdx
11930 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 6b 5d 3b 0a  ->aiColumn[kk];.
11940 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
11950 73 65 72 74 28 20 69 43 6f 6c 3e 3d 30 20 26 26  sert( iCol>=0 &&
11960 20 69 43 6f 6c 3c 70 54 61 62 2d 3e 6e 43 6f 6c   iCol<pTab->nCol
11970 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20   );.            
11980 20 20 69 66 28 20 70 54 61 62 2d 3e 61 43 6f 6c    if( pTab->aCol
11990 5b 69 43 6f 6c 5d 2e 6e 6f 74 4e 75 6c 6c 20 29  [iCol].notNull )
119a0 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
119b0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
119c0 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
119d0 5f 49 73 4e 75 6c 6c 2c 20 72 31 2b 6b 6b 2c 20  _IsNull, r1+kk, 
119e0 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20 20  uniqOk);.       
119f0 20 20 20 20 20 20 20 56 64 62 65 43 6f 76 65 72         VdbeCover
11a00 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
11a10 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
11a20 20 20 6a 6d 70 36 20 3d 20 73 71 6c 69 74 65 33    jmp6 = sqlite3
11a30 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50  VdbeAddOp1(v, OP
11a40 5f 4e 65 78 74 2c 20 69 49 64 78 43 75 72 2b 6a  _Next, iIdxCur+j
11a50 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
11a60 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  v);.            
11a70 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
11a80 32 28 76 2c 20 4f 50 5f 47 6f 74 6f 2c 20 30 2c  2(v, OP_Goto, 0,
11a90 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20   uniqOk);.      
11aa0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
11ab0 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70  eJumpHere(v, jmp
11ac0 36 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  6);.            
11ad0 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
11ae0 34 49 6e 74 28 76 2c 20 4f 50 5f 49 64 78 47 54  4Int(v, OP_IdxGT
11af0 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20 75 6e 69  , iIdxCur+j, uni
11b00 71 4f 6b 2c 20 72 31 2c 0a 20 20 20 20 20 20 20  qOk, r1,.       
11b10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b20 20 20 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e            pIdx->
11b30 6e 4b 65 79 43 6f 6c 29 3b 20 56 64 62 65 43 6f  nKeyCol); VdbeCo
11b40 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
11b50 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
11b60 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41  beAddOp2(v, OP_A
11b70 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f  ddImm, 1, -1); /
11b80 2a 20 44 65 63 72 65 6d 65 6e 74 20 65 72 72 6f  * Decrement erro
11b90 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20 20 20  r limit */.     
11ba0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
11bb0 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
11bc0 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c  tring8, 0, 3, 0,
11bd0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
11be0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
11bf0 6e 6f 6e 2d 75 6e 69 71 75 65 20 65 6e 74 72 79  non-unique entry
11c00 20 69 6e 20 69 6e 64 65 78 20 22 2c 20 50 34 5f   in index ", P4_
11c10 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
11c20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
11c30 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 47 6f 74  AddOp2(v, OP_Got
11c40 6f 2c 20 30 2c 20 6a 6d 70 35 29 3b 0a 20 20 20  o, 0, jmp5);.   
11c50 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
11c60 56 64 62 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c  VdbeResolveLabel
11c70 28 76 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20  (v, uniqOk);.   
11c80 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
11c90 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
11ca0 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 34 29 3b  mpHere(v, jmp4);
11cb0 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
11cc0 65 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78  e3ResolvePartIdx
11cd0 4c 61 62 65 6c 28 70 50 61 72 73 65 2c 20 6a 6d  Label(pParse, jm
11ce0 70 33 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  p3);.        }. 
11cf0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
11d00 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e  beAddOp2(v, OP_N
11d10 65 78 74 2c 20 69 44 61 74 61 43 75 72 2c 20 6c  ext, iDataCur, l
11d20 6f 6f 70 54 6f 70 29 3b 20 56 64 62 65 43 6f 76  oopTop); VdbeCov
11d30 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
11d40 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
11d50 70 48 65 72 65 28 76 2c 20 6c 6f 6f 70 54 6f 70  pHere(v, loopTop
11d60 2d 31 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c  -1);.#ifndef SQL
11d70 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f  ITE_OMIT_BTREECO
11d80 55 4e 54 0a 20 20 20 20 20 20 20 20 73 71 6c 69  UNT.        sqli
11d90 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
11da0 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
11db0 32 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20  2, 0, .         
11dc0 20 20 20 20 20 20 20 20 20 20 20 20 22 77 72 6f              "wro
11dd0 6e 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20  ng # of entries 
11de0 69 6e 20 69 6e 64 65 78 20 22 2c 20 50 34 5f 53  in index ", P4_S
11df0 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
11e00 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54  for(j=0, pIdx=pT
11e10 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78  ab->pIndex; pIdx
11e20 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65  ; pIdx=pIdx->pNe
11e30 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  xt, j++){.      
11e40 20 20 20 20 69 66 28 20 70 50 6b 3d 3d 70 49 64      if( pPk==pId
11e50 78 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  x ) continue;.  
11e60 20 20 20 20 20 20 20 20 61 64 64 72 20 3d 20 73          addr = s
11e70 71 6c 69 74 65 33 56 64 62 65 43 75 72 72 65 6e  qlite3VdbeCurren
11e80 74 41 64 64 72 28 76 29 3b 0a 20 20 20 20 20 20  tAddr(v);.      
11e90 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
11ea0 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 66 50 6f  ddOp2(v, OP_IfPo
11eb0 73 2c 20 31 2c 20 61 64 64 72 2b 32 29 3b 20 56  s, 1, addr+2); V
11ec0 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
11ed0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
11ee0 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
11ef0 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20  P_Halt, 0, 0);. 
11f00 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
11f10 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
11f20 5f 43 6f 75 6e 74 2c 20 69 49 64 78 43 75 72 2b  _Count, iIdxCur+
11f30 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20  j, 3);.         
11f40 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
11f50 70 33 28 76 2c 20 4f 50 5f 45 71 2c 20 38 2b 6a  p3(v, OP_Eq, 8+j
11f60 2c 20 61 64 64 72 2b 38 2c 20 33 29 3b 20 56 64  , addr+8, 3); Vd
11f70 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
11f80 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
11f90 56 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c 20  VdbeChangeP5(v, 
11fa0 53 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 29 3b  SQLITE_NOTNULL);
11fb0 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
11fc0 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
11fd0 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31  OP_AddImm, 1, -1
11fe0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
11ff0 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
12000 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
12010 20 33 2c 20 30 2c 20 70 49 64 78 2d 3e 7a 4e 61   3, 0, pIdx->zNa
12020 6d 65 2c 20 50 34 5f 54 52 41 4e 53 49 45 4e 54  me, P4_TRANSIENT
12030 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
12040 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
12050 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 33 2c 20  , OP_Concat, 3, 
12060 32 2c 20 37 29 3b 0a 20 20 20 20 20 20 20 20 20  2, 7);.         
12070 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
12080 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
12090 6f 77 2c 20 37 2c 20 31 29 3b 0a 20 20 20 20 20  ow, 7, 1);.     
120a0 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53     }.#endif /* S
120b0 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45  QLITE_OMIT_BTREE
120c0 43 4f 55 4e 54 20 2a 2f 0a 20 20 20 20 20 20 7d  COUNT */.      }
120d0 20 0a 20 20 20 20 7d 0a 20 20 20 20 61 64 64 72   .    }.    addr
120e0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
120f0 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79  dOpList(v, Array
12100 53 69 7a 65 28 65 6e 64 43 6f 64 65 29 2c 20 65  Size(endCode), e
12110 6e 64 43 6f 64 65 2c 20 69 4c 6e 29 3b 0a 20 20  ndCode, iLn);.  
12120 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
12130 6e 67 65 50 33 28 76 2c 20 61 64 64 72 2c 20 2d  ngeP3(v, addr, -
12140 6d 78 45 72 72 29 3b 0a 20 20 20 20 73 71 6c 69  mxErr);.    sqli
12150 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
12160 76 2c 20 61 64 64 72 29 3b 0a 20 20 20 20 73 71  v, addr);.    sq
12170 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
12180 34 28 76 2c 20 61 64 64 72 2b 31 2c 20 22 6f 6b  4(v, addr+1, "ok
12190 22 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20  ", P4_STATIC);. 
121a0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
121b0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
121c0 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  T_INTEGRITY_CHEC
121d0 4b 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  K */..#ifndef SQ
121e0 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a  LITE_OMIT_UTF16.
121f0 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
12200 4d 41 20 65 6e 63 6f 64 69 6e 67 0a 20 20 2a 2a  MA encoding.  **
12210 20 20 20 50 52 41 47 4d 41 20 65 6e 63 6f 64 69     PRAGMA encodi
12220 6e 67 20 3d 20 22 75 74 66 2d 38 22 7c 22 75 74  ng = "utf-8"|"ut
12230 66 2d 31 36 22 7c 22 75 74 66 2d 31 36 6c 65 22  f-16"|"utf-16le"
12240 7c 22 75 74 66 2d 31 36 62 65 22 0a 20 20 2a 2a  |"utf-16be".  **
12250 0a 20 20 2a 2a 20 49 6e 20 69 74 73 20 66 69 72  .  ** In its fir
12260 73 74 20 66 6f 72 6d 2c 20 74 68 69 73 20 70 72  st form, this pr
12270 61 67 6d 61 20 72 65 74 75 72 6e 73 20 74 68 65  agma returns the
12280 20 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74 68 65   encoding of the
12290 20 6d 61 69 6e 0a 20 20 2a 2a 20 64 61 74 61 62   main.  ** datab
122a0 61 73 65 2e 20 49 66 20 74 68 65 20 64 61 74 61  ase. If the data
122b0 62 61 73 65 20 69 73 20 6e 6f 74 20 69 6e 69 74  base is not init
122c0 69 61 6c 69 7a 65 64 2c 20 69 74 20 69 73 20 69  ialized, it is i
122d0 6e 69 74 69 61 6c 69 7a 65 64 20 6e 6f 77 2e 0a  nitialized now..
122e0 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 65    **.  ** The se
122f0 63 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68 69  cond form of thi
12300 73 20 70 72 61 67 6d 61 20 69 73 20 61 20 6e 6f  s pragma is a no
12310 2d 6f 70 20 69 66 20 74 68 65 20 6d 61 69 6e 20  -op if the main 
12320 64 61 74 61 62 61 73 65 20 66 69 6c 65 0a 20 20  database file.  
12330 2a 2a 20 68 61 73 20 6e 6f 74 20 61 6c 72 65 61  ** has not alrea
12340 64 79 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69  dy been initiali
12350 7a 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73  zed. In this cas
12360 65 20 69 74 20 73 65 74 73 20 74 68 65 20 64 65  e it sets the de
12370 66 61 75 6c 74 0a 20 20 2a 2a 20 65 6e 63 6f 64  fault.  ** encod
12380 69 6e 67 20 74 68 61 74 20 77 69 6c 6c 20 62 65  ing that will be
12390 20 75 73 65 64 20 66 6f 72 20 74 68 65 20 6d 61   used for the ma
123a0 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
123b0 20 69 66 20 61 20 6e 65 77 20 66 69 6c 65 0a 20   if a new file. 
123c0 20 2a 2a 20 69 73 20 63 72 65 61 74 65 64 2e 20   ** is created. 
123d0 49 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 6d  If an existing m
123e0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
123f0 65 20 69 73 20 6f 70 65 6e 65 64 2c 20 74 68 65  e is opened, the
12400 6e 20 74 68 65 0a 20 20 2a 2a 20 64 65 66 61 75  n the.  ** defau
12410 6c 74 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  lt text encoding
12420 20 66 6f 72 20 74 68 65 20 65 78 69 73 74 69 6e   for the existin
12430 67 20 64 61 74 61 62 61 73 65 20 69 73 20 75 73  g database is us
12440 65 64 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49  ed..  ** .  ** I
12450 6e 20 61 6c 6c 20 63 61 73 65 73 20 6e 65 77 20  n all cases new 
12460 64 61 74 61 62 61 73 65 73 20 63 72 65 61 74 65  databases create
12470 64 20 75 73 69 6e 67 20 74 68 65 20 41 54 54 41  d using the ATTA
12480 43 48 20 63 6f 6d 6d 61 6e 64 20 61 72 65 0a 20  CH command are. 
12490 20 2a 2a 20 63 72 65 61 74 65 64 20 74 6f 20 75   ** created to u
124a0 73 65 20 74 68 65 20 73 61 6d 65 20 64 65 66 61  se the same defa
124b0 75 6c 74 20 74 65 78 74 20 65 6e 63 6f 64 69 6e  ult text encodin
124c0 67 20 61 73 20 74 68 65 20 6d 61 69 6e 20 64 61  g as the main da
124d0 74 61 62 61 73 65 2e 20 49 66 0a 20 20 2a 2a 20  tabase. If.  ** 
124e0 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
124f0 65 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 69  e has not been i
12500 6e 69 74 69 61 6c 69 7a 65 64 20 61 6e 64 2f 6f  nitialized and/o
12510 72 20 63 72 65 61 74 65 64 20 77 68 65 6e 20 41  r created when A
12520 54 54 41 43 48 0a 20 20 2a 2a 20 69 73 20 65 78  TTACH.  ** is ex
12530 65 63 75 74 65 64 2c 20 74 68 69 73 20 69 73 20  ecuted, this is 
12540 64 6f 6e 65 20 62 65 66 6f 72 65 20 74 68 65 20  done before the 
12550 41 54 54 41 43 48 20 6f 70 65 72 61 74 69 6f 6e  ATTACH operation
12560 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 74  ..  **.  ** In t
12570 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 74  he second form t
12580 68 69 73 20 70 72 61 67 6d 61 20 73 65 74 73 20  his pragma sets 
12590 74 68 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e  the text encodin
125a0 67 20 74 6f 20 62 65 20 75 73 65 64 20 69 6e 0a  g to be used in.
125b0 20 20 2a 2a 20 6e 65 77 20 64 61 74 61 62 61 73    ** new databas
125c0 65 20 66 69 6c 65 73 20 63 72 65 61 74 65 64 20  e files created 
125d0 75 73 69 6e 67 20 74 68 69 73 20 64 61 74 61 62  using this datab
125e0 61 73 65 20 68 61 6e 64 6c 65 2e 20 49 74 20 69  ase handle. It i
125f0 73 20 6f 6e 6c 79 0a 20 20 2a 2a 20 75 73 65 66  s only.  ** usef
12600 75 6c 20 69 66 20 69 6e 76 6f 6b 65 64 20 69 6d  ul if invoked im
12610 6d 65 64 69 61 74 65 6c 79 20 61 66 74 65 72 20  mediately after 
12620 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
12630 65 20 69 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  e i.  */.  case 
12640 50 72 61 67 54 79 70 5f 45 4e 43 4f 44 49 4e 47  PragTyp_ENCODING
12650 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  : {.    static c
12660 6f 6e 73 74 20 73 74 72 75 63 74 20 45 6e 63 4e  onst struct EncN
12670 61 6d 65 20 7b 0a 20 20 20 20 20 20 63 68 61 72  ame {.      char
12680 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 20 75   *zName;.      u
12690 38 20 65 6e 63 3b 0a 20 20 20 20 7d 20 65 6e 63  8 enc;.    } enc
126a0 6e 61 6d 65 73 5b 5d 20 3d 20 7b 0a 20 20 20 20  names[] = {.    
126b0 20 20 7b 20 22 55 54 46 38 22 2c 20 20 20 20 20    { "UTF8",     
126c0 53 51 4c 49 54 45 5f 55 54 46 38 20 20 20 20 20  SQLITE_UTF8     
126d0 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55     },.      { "U
126e0 54 46 2d 38 22 2c 20 20 20 20 53 51 4c 49 54 45  TF-8",    SQLITE
126f0 5f 55 54 46 38 20 20 20 20 20 20 20 20 7d 2c 20  _UTF8        }, 
12700 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d   /* Must be elem
12710 65 6e 74 20 5b 31 5d 20 2a 2f 0a 20 20 20 20 20  ent [1] */.     
12720 20 7b 20 22 55 54 46 2d 31 36 6c 65 22 2c 20 53   { "UTF-16le", S
12730 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 20 20  QLITE_UTF16LE   
12740 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65    },  /* Must be
12750 20 65 6c 65 6d 65 6e 74 20 5b 32 5d 20 2a 2f 0a   element [2] */.
12760 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36 62        { "UTF-16b
12770 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  e", SQLITE_UTF16
12780 42 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75  BE     },  /* Mu
12790 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 33  st be element [3
127a0 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54  ] */.      { "UT
127b0 46 31 36 6c 65 22 2c 20 20 53 51 4c 49 54 45 5f  F16le",  SQLITE_
127c0 55 54 46 31 36 4c 45 20 20 20 20 20 7d 2c 0a 20  UTF16LE     },. 
127d0 20 20 20 20 20 7b 20 22 55 54 46 31 36 62 65 22       { "UTF16be"
127e0 2c 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42  ,  SQLITE_UTF16B
127f0 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b  E     },.      {
12800 20 22 55 54 46 2d 31 36 22 2c 20 20 20 30 20 20   "UTF-16",   0  
12810 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12820 7d 2c 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46  }, /* SQLITE_UTF
12830 31 36 4e 41 54 49 56 45 20 2a 2f 0a 20 20 20 20  16NATIVE */.    
12840 20 20 7b 20 22 55 54 46 31 36 22 2c 20 20 20 20    { "UTF16",    
12850 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0               
12860 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45 5f     }, /* SQLITE_
12870 55 54 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a 20  UTF16NATIVE */. 
12880 20 20 20 20 20 7b 20 30 2c 20 30 20 7d 0a 20 20       { 0, 0 }.  
12890 20 20 7d 3b 0a 20 20 20 20 63 6f 6e 73 74 20 73    };.    const s
128a0 74 72 75 63 74 20 45 6e 63 4e 61 6d 65 20 2a 70  truct EncName *p
128b0 45 6e 63 3b 0a 20 20 20 20 69 66 28 20 21 7a 52  Enc;.    if( !zR
128c0 69 67 68 74 20 29 7b 20 20 20 20 2f 2a 20 22 50  ight ){    /* "P
128d0 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 22 20  RAGMA encoding" 
128e0 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  */.      if( sql
128f0 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 70  ite3ReadSchema(p
12900 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70 72  Parse) ) goto pr
12910 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20  agma_out;.      
12920 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
12930 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20  mCols(v, 1);.   
12940 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
12950 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
12960 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 65 6e  OLNAME_NAME, "en
12970 63 6f 64 69 6e 67 22 2c 20 53 51 4c 49 54 45 5f  coding", SQLITE_
12980 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
12990 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
129a0 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
129b0 30 2c 20 31 29 3b 0a 20 20 20 20 20 20 61 73 73  0, 1);.      ass
129c0 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51  ert( encnames[SQ
129d0 4c 49 54 45 5f 55 54 46 38 5d 2e 65 6e 63 3d 3d  LITE_UTF8].enc==
129e0 53 51 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a 20  SQLITE_UTF8 );. 
129f0 20 20 20 20 20 61 73 73 65 72 74 28 20 65 6e 63       assert( enc
12a00 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54 46  names[SQLITE_UTF
12a10 31 36 4c 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54  16LE].enc==SQLIT
12a20 45 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20 20  E_UTF16LE );.   
12a30 20 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61     assert( encna
12a40 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 31 36  mes[SQLITE_UTF16
12a50 42 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f  BE].enc==SQLITE_
12a60 55 54 46 31 36 42 45 20 29 3b 0a 20 20 20 20 20  UTF16BE );.     
12a70 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
12a80 67 65 50 34 28 76 2c 20 2d 31 2c 20 65 6e 63 6e  geP4(v, -1, encn
12a90 61 6d 65 73 5b 45 4e 43 28 70 50 61 72 73 65 2d  ames[ENC(pParse-
12aa0 3e 64 62 29 5d 2e 7a 4e 61 6d 65 2c 20 50 34 5f  >db)].zName, P4_
12ab0 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
12ac0 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
12ad0 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
12ae0 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 7d 65 6c  , 1, 1);.    }el
12af0 73 65 7b 20 20 20 20 20 20 20 20 20 20 20 20 20  se{             
12b00 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 22 50             /* "P
12b10 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d  RAGMA encoding =
12b20 20 58 58 58 22 20 2a 2f 0a 20 20 20 20 20 20 2f   XXX" */.      /
12b30 2a 20 4f 6e 6c 79 20 63 68 61 6e 67 65 20 74 68  * Only change th
12b40 65 20 76 61 6c 75 65 20 6f 66 20 73 71 6c 69 74  e value of sqlit
12b50 65 2e 65 6e 63 20 69 66 20 74 68 65 20 64 61 74  e.enc if the dat
12b60 61 62 61 73 65 20 68 61 6e 64 6c 65 20 69 73 20  abase handle is 
12b70 6e 6f 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 69  not.      ** ini
12b80 74 69 61 6c 69 7a 65 64 2e 20 49 66 20 74 68 65  tialized. If the
12b90 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 65   main database e
12ba0 78 69 73 74 73 2c 20 74 68 65 20 6e 65 77 20 73  xists, the new s
12bb0 71 6c 69 74 65 2e 65 6e 63 20 76 61 6c 75 65 0a  qlite.enc value.
12bc0 20 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20 62 65        ** will be
12bd0 20 6f 76 65 72 77 72 69 74 74 65 6e 20 77 68 65   overwritten whe
12be0 6e 20 74 68 65 20 73 63 68 65 6d 61 20 69 73 20  n the schema is 
12bf0 6e 65 78 74 20 6c 6f 61 64 65 64 2e 20 49 66 20  next loaded. If 
12c00 69 74 20 64 6f 65 73 20 6e 6f 74 0a 20 20 20 20  it does not.    
12c10 20 20 2a 2a 20 61 6c 72 65 61 64 79 20 65 78 69    ** already exi
12c20 73 74 73 2c 20 69 74 20 77 69 6c 6c 20 62 65 20  sts, it will be 
12c30 63 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74  created to use t
12c40 68 65 20 6e 65 77 20 65 6e 63 6f 64 69 6e 67 20  he new encoding 
12c50 76 61 6c 75 65 2e 0a 20 20 20 20 20 20 2a 2f 0a  value..      */.
12c60 20 20 20 20 20 20 69 66 28 20 0a 20 20 20 20 20        if( .     
12c70 20 20 20 21 28 44 62 48 61 73 50 72 6f 70 65 72     !(DbHasProper
12c80 74 79 28 64 62 2c 20 30 2c 20 44 42 5f 53 63 68  ty(db, 0, DB_Sch
12c90 65 6d 61 4c 6f 61 64 65 64 29 29 20 7c 7c 20 0a  emaLoaded)) || .
12ca0 20 20 20 20 20 20 20 20 44 62 48 61 73 50 72 6f          DbHasPro
12cb0 70 65 72 74 79 28 64 62 2c 20 30 2c 20 44 42 5f  perty(db, 0, DB_
12cc0 45 6d 70 74 79 29 20 0a 20 20 20 20 20 20 29 7b  Empty) .      ){
12cd0 0a 20 20 20 20 20 20 20 20 66 6f 72 28 70 45 6e  .        for(pEn
12ce0 63 3d 26 65 6e 63 6e 61 6d 65 73 5b 30 5d 3b 20  c=&encnames[0]; 
12cf0 70 45 6e 63 2d 3e 7a 4e 61 6d 65 3b 20 70 45 6e  pEnc->zName; pEn
12d00 63 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  c++){.          
12d10 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
12d20 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 70 45  rICmp(zRight, pE
12d30 6e 63 2d 3e 7a 4e 61 6d 65 29 20 29 7b 0a 20 20  nc->zName) ){.  
12d40 20 20 20 20 20 20 20 20 20 20 45 4e 43 28 70 50            ENC(pP
12d50 61 72 73 65 2d 3e 64 62 29 20 3d 20 70 45 6e 63  arse->db) = pEnc
12d60 2d 3e 65 6e 63 20 3f 20 70 45 6e 63 2d 3e 65 6e  ->enc ? pEnc->en
12d70 63 20 3a 20 53 51 4c 49 54 45 5f 55 54 46 31 36  c : SQLITE_UTF16
12d80 4e 41 54 49 56 45 3b 0a 20 20 20 20 20 20 20 20  NATIVE;.        
12d90 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
12da0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
12db0 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 70 45  .        if( !pE
12dc0 6e 63 2d 3e 7a 4e 61 6d 65 20 29 7b 0a 20 20 20  nc->zName ){.   
12dd0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72         sqlite3Er
12de0 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22  rorMsg(pParse, "
12df0 75 6e 73 75 70 70 6f 72 74 65 64 20 65 6e 63 6f  unsupported enco
12e00 64 69 6e 67 3a 20 25 73 22 2c 20 7a 52 69 67 68  ding: %s", zRigh
12e10 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  t);.        }.  
12e20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
12e30 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20    break;.#endif 
12e40 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  /* SQLITE_OMIT_U
12e50 54 46 31 36 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  TF16 */..#ifndef
12e60 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48   SQLITE_OMIT_SCH
12e70 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47  EMA_VERSION_PRAG
12e80 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  MAS.  /*.  **   
12e90 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
12ea0 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  .]schema_version
12eb0 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
12ec0 64 61 74 61 62 61 73 65 2e 5d 73 63 68 65 6d 61  database.]schema
12ed0 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74 65  _version = <inte
12ee0 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20  ger>.  **.  **  
12ef0 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
12f00 65 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e 0a  e.]user_version.
12f10 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64    **   PRAGMA [d
12f20 61 74 61 62 61 73 65 2e 5d 75 73 65 72 5f 76 65  atabase.]user_ve
12f30 72 73 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72  rsion = <integer
12f40 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52  >.  **.  **   PR
12f50 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
12f60 66 72 65 65 6c 69 73 74 5f 63 6f 75 6e 74 20 3d  freelist_count =
12f70 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a   <integer>.  **.
12f80 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64    **   PRAGMA [d
12f90 61 74 61 62 61 73 65 2e 5d 61 70 70 6c 69 63 61  atabase.]applica
12fa0 74 69 6f 6e 5f 69 64 0a 20 20 2a 2a 20 20 20 50  tion_id.  **   P
12fb0 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
12fc0 5d 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 20  ]application_id 
12fd0 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a  = <integer>.  **
12fe0 0a 20 20 2a 2a 20 54 68 65 20 70 72 61 67 6d 61  .  ** The pragma
12ff0 27 73 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  's schema_versio
13000 6e 20 61 6e 64 20 75 73 65 72 5f 76 65 72 73 69  n and user_versi
13010 6f 6e 20 61 72 65 20 75 73 65 64 20 74 6f 20 73  on are used to s
13020 65 74 20 6f 72 20 67 65 74 0a 20 20 2a 2a 20 74  et or get.  ** t
13030 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
13040 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 61  schema-version a
13050 6e 64 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 2c  nd user-version,
13060 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 42   respectively. B
13070 6f 74 68 0a 20 20 2a 2a 20 74 68 65 20 73 63 68  oth.  ** the sch
13080 65 6d 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20  ema-version and 
13090 74 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e  the user-version
130a0 20 61 72 65 20 33 32 2d 62 69 74 20 73 69 67 6e   are 32-bit sign
130b0 65 64 20 69 6e 74 65 67 65 72 73 0a 20 20 2a 2a  ed integers.  **
130c0 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64   stored in the d
130d0 61 74 61 62 61 73 65 20 68 65 61 64 65 72 2e 0a  atabase header..
130e0 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 63    **.  ** The sc
130f0 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 69 73 20 75  hema-cookie is u
13100 73 75 61 6c 6c 79 20 6f 6e 6c 79 20 6d 61 6e 69  sually only mani
13110 70 75 6c 61 74 65 64 20 69 6e 74 65 72 6e 61 6c  pulated internal
13120 6c 79 20 62 79 20 53 51 4c 69 74 65 2e 20 49 74  ly by SQLite. It
13130 0a 20 20 2a 2a 20 69 73 20 69 6e 63 72 65 6d 65  .  ** is increme
13140 6e 74 65 64 20 62 79 20 53 51 4c 69 74 65 20 77  nted by SQLite w
13150 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61  henever the data
13160 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 6d  base schema is m
13170 6f 64 69 66 69 65 64 20 28 62 79 0a 20 20 2a 2a  odified (by.  **
13180 20 63 72 65 61 74 69 6e 67 20 6f 72 20 64 72 6f   creating or dro
13190 70 70 69 6e 67 20 61 20 74 61 62 6c 65 20 6f 72  pping a table or
131a0 20 69 6e 64 65 78 29 2e 20 54 68 65 20 73 63 68   index). The sch
131b0 65 6d 61 20 76 65 72 73 69 6f 6e 20 69 73 20 75  ema version is u
131c0 73 65 64 20 62 79 0a 20 20 2a 2a 20 53 51 4c 69  sed by.  ** SQLi
131d0 74 65 20 65 61 63 68 20 74 69 6d 65 20 61 20 71  te each time a q
131e0 75 65 72 79 20 69 73 20 65 78 65 63 75 74 65 64  uery is executed
131f0 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20   to ensure that 
13200 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 63 61 63  the internal cac
13210 68 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 73  he.  ** of the s
13220 63 68 65 6d 61 20 75 73 65 64 20 77 68 65 6e 20  chema used when 
13230 63 6f 6d 70 69 6c 69 6e 67 20 74 68 65 20 53 51  compiling the SQ
13240 4c 20 71 75 65 72 79 20 6d 61 74 63 68 65 73 20  L query matches 
13250 74 68 65 20 73 63 68 65 6d 61 20 6f 66 0a 20 20  the schema of.  
13260 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ** the database 
13270 61 67 61 69 6e 73 74 20 77 68 69 63 68 20 74 68  against which th
13280 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79  e compiled query
13290 20 69 73 20 61 63 74 75 61 6c 6c 79 20 65 78 65   is actually exe
132a0 63 75 74 65 64 2e 0a 20 20 2a 2a 20 53 75 62 76  cuted..  ** Subv
132b0 65 72 74 69 6e 67 20 74 68 69 73 20 6d 65 63 68  erting this mech
132c0 61 6e 69 73 6d 20 62 79 20 75 73 69 6e 67 20 22  anism by using "
132d0 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65  PRAGMA schema_ve
132e0 72 73 69 6f 6e 22 20 74 6f 20 6d 6f 64 69 66 79  rsion" to modify
132f0 0a 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61  .  ** the schema
13300 2d 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 74 65  -version is pote
13310 6e 74 69 61 6c 6c 79 20 64 61 6e 67 65 72 6f 75  ntially dangerou
13320 73 20 61 6e 64 20 6d 61 79 20 6c 65 61 64 20 74  s and may lead t
13330 6f 20 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 63  o program.  ** c
13340 72 61 73 68 65 73 20 6f 72 20 64 61 74 61 62 61  rashes or databa
13350 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 2e 20 55  se corruption. U
13360 73 65 20 77 69 74 68 20 63 61 75 74 69 6f 6e 21  se with caution!
13370 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 75  .  **.  ** The u
13380 73 65 72 2d 76 65 72 73 69 6f 6e 20 69 73 20 6e  ser-version is n
13390 6f 74 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c  ot used internal
133a0 6c 79 20 62 79 20 53 51 4c 69 74 65 2e 20 49 74  ly by SQLite. It
133b0 20 6d 61 79 20 62 65 20 75 73 65 64 20 62 79 0a   may be used by.
133c0 20 20 2a 2a 20 61 70 70 6c 69 63 61 74 69 6f 6e    ** application
133d0 73 20 66 6f 72 20 61 6e 79 20 70 75 72 70 6f 73  s for any purpos
133e0 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  e..  */.  case P
133f0 72 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41  ragTyp_HEADER_VA
13400 4c 55 45 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69  LUE: {.    int i
13410 43 6f 6f 6b 69 65 3b 20 20 20 2f 2a 20 43 6f 6f  Cookie;   /* Coo
13420 6b 69 65 20 69 6e 64 65 78 2e 20 31 20 66 6f 72  kie index. 1 for
13430 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 2c 20   schema-cookie, 
13440 36 20 66 6f 72 20 75 73 65 72 2d 63 6f 6f 6b 69  6 for user-cooki
13450 65 2e 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  e. */.    sqlite
13460 33 56 64 62 65 55 73 65 73 42 74 72 65 65 28 76  3VdbeUsesBtree(v
13470 2c 20 69 44 62 29 3b 0a 20 20 20 20 73 77 69 74  , iDb);.    swit
13480 63 68 28 20 7a 4c 65 66 74 5b 30 5d 20 29 7b 0a  ch( zLeft[0] ){.
13490 20 20 20 20 20 20 63 61 73 65 20 27 61 27 3a 20        case 'a': 
134a0 63 61 73 65 20 27 41 27 3a 0a 20 20 20 20 20 20  case 'A':.      
134b0 20 20 69 43 6f 6f 6b 69 65 20 3d 20 42 54 52 45    iCookie = BTRE
134c0 45 5f 41 50 50 4c 49 43 41 54 49 4f 4e 5f 49 44  E_APPLICATION_ID
134d0 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ;.        break;
134e0 0a 20 20 20 20 20 20 63 61 73 65 20 27 66 27 3a  .      case 'f':
134f0 20 63 61 73 65 20 27 46 27 3a 0a 20 20 20 20 20   case 'F':.     
13500 20 20 20 69 43 6f 6f 6b 69 65 20 3d 20 42 54 52     iCookie = BTR
13510 45 45 5f 46 52 45 45 5f 50 41 47 45 5f 43 4f 55  EE_FREE_PAGE_COU
13520 4e 54 3b 0a 20 20 20 20 20 20 20 20 62 72 65 61  NT;.        brea
13530 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20 27 73  k;.      case 's
13540 27 3a 20 63 61 73 65 20 27 53 27 3a 0a 20 20 20  ': case 'S':.   
13550 20 20 20 20 20 69 43 6f 6f 6b 69 65 20 3d 20 42       iCookie = B
13560 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53  TREE_SCHEMA_VERS
13570 49 4f 4e 3b 0a 20 20 20 20 20 20 20 20 62 72 65  ION;.        bre
13580 61 6b 3b 0a 20 20 20 20 20 20 64 65 66 61 75 6c  ak;.      defaul
13590 74 3a 0a 20 20 20 20 20 20 20 20 69 43 6f 6f 6b  t:.        iCook
135a0 69 65 20 3d 20 42 54 52 45 45 5f 55 53 45 52 5f  ie = BTREE_USER_
135b0 56 45 52 53 49 4f 4e 3b 0a 20 20 20 20 20 20 20  VERSION;.       
135c0 20 62 72 65 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20   break;.    }.. 
135d0 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 26 26     if( zRight &&
135e0 20 69 43 6f 6f 6b 69 65 21 3d 42 54 52 45 45 5f   iCookie!=BTREE_
135f0 46 52 45 45 5f 50 41 47 45 5f 43 4f 55 4e 54 20  FREE_PAGE_COUNT 
13600 29 7b 0a 20 20 20 20 20 20 2f 2a 20 57 72 69 74  ){.      /* Writ
13610 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  e the specified 
13620 63 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a 2f 0a  cookie value */.
13630 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
13640 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 73 65  st VdbeOpList se
13650 74 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20  tCookie[] = {.  
13660 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73        { OP_Trans
13670 61 63 74 69 6f 6e 2c 20 20 20 20 30 2c 20 20 31  action,    0,  1
13680 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a  ,  0},    /* 0 *
13690 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49  /.        { OP_I
136a0 6e 74 65 67 65 72 2c 20 20 20 20 20 20 20 20 30  nteger,        0
136b0 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a  ,  1,  0},    /*
136c0 20 31 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20   1 */.        { 
136d0 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20  OP_SetCookie,   
136e0 20 20 20 30 2c 20 20 30 2c 20 20 31 7d 2c 20 20     0,  0,  1},  
136f0 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20    /* 2 */.      
13700 7d 3b 0a 20 20 20 20 20 20 69 6e 74 20 61 64 64  };.      int add
13710 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
13720 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61  ddOpList(v, Arra
13730 79 53 69 7a 65 28 73 65 74 43 6f 6f 6b 69 65 29  ySize(setCookie)
13740 2c 20 73 65 74 43 6f 6f 6b 69 65 2c 20 30 29 3b  , setCookie, 0);
13750 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
13760 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64  beChangeP1(v, ad
13770 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  dr, iDb);.      
13780 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
13790 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c 20 73  eP1(v, addr+1, s
137a0 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68  qlite3Atoi(zRigh
137b0 74 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  t));.      sqlit
137c0 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
137d0 2c 20 61 64 64 72 2b 32 2c 20 69 44 62 29 3b 0a  , addr+2, iDb);.
137e0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
137f0 65 43 68 61 6e 67 65 50 32 28 76 2c 20 61 64 64  eChangeP2(v, add
13800 72 2b 32 2c 20 69 43 6f 6f 6b 69 65 29 3b 0a 20  r+2, iCookie);. 
13810 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
13820 2f 2a 20 52 65 61 64 20 74 68 65 20 73 70 65 63  /* Read the spec
13830 69 66 69 65 64 20 63 6f 6f 6b 69 65 20 76 61 6c  ified cookie val
13840 75 65 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74  ue */.      stat
13850 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c  ic const VdbeOpL
13860 69 73 74 20 72 65 61 64 43 6f 6f 6b 69 65 5b 5d  ist readCookie[]
13870 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f   = {.        { O
13880 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20  P_Transaction,  
13890 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 20 20     0,  0,  0},  
138a0 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20    /* 0 */.      
138b0 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69    { OP_ReadCooki
138c0 65 2c 20 20 20 20 20 20 30 2c 20 20 31 2c 20 20  e,      0,  1,  
138d0 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20  0},    /* 1 */. 
138e0 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75         { OP_Resu
138f0 6c 74 52 6f 77 2c 20 20 20 20 20 20 20 31 2c 20  ltRow,       1, 
13900 20 31 2c 20 20 30 7d 0a 20 20 20 20 20 20 7d 3b   1,  0}.      };
13910 0a 20 20 20 20 20 20 69 6e 74 20 61 64 64 72 20  .      int addr 
13920 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
13930 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53  OpList(v, ArrayS
13940 69 7a 65 28 72 65 61 64 43 6f 6f 6b 69 65 29 2c  ize(readCookie),
13950 20 72 65 61 64 43 6f 6f 6b 69 65 2c 20 30 29 3b   readCookie, 0);
13960 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
13970 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64  beChangeP1(v, ad
13980 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  dr, iDb);.      
13990 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
139a0 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c 20 69  eP1(v, addr+1, i
139b0 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Db);.      sqlit
139c0 65 33 56 64 62 65 43 68 61 6e 67 65 50 33 28 76  e3VdbeChangeP3(v
139d0 2c 20 61 64 64 72 2b 31 2c 20 69 43 6f 6f 6b 69  , addr+1, iCooki
139e0 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  e);.      sqlite
139f0 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
13a00 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  v, 1);.      sql
13a10 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
13a20 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
13a30 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c 20 53 51  _NAME, zLeft, SQ
13a40 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
13a50 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
13a60 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ak;.#endif /* SQ
13a70 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41  LITE_OMIT_SCHEMA
13a80 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53  _VERSION_PRAGMAS
13a90 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
13aa0 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45  ITE_OMIT_COMPILE
13ab0 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 20 20 2f  OPTION_DIAGS.  /
13ac0 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
13ad0 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 0a  compile_options.
13ae0 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
13af0 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 61 6c   the names of al
13b00 6c 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  l compile-time o
13b10 70 74 69 6f 6e 73 20 75 73 65 64 20 69 6e 20 74  ptions used in t
13b20 68 69 73 20 62 75 69 6c 64 2c 0a 20 20 2a 2a 20  his build,.  ** 
13b30 6f 6e 65 20 6f 70 74 69 6f 6e 20 70 65 72 20 72  one option per r
13b40 6f 77 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ow..  */.  case 
13b50 50 72 61 67 54 79 70 5f 43 4f 4d 50 49 4c 45 5f  PragTyp_COMPILE_
13b60 4f 50 54 49 4f 4e 53 3a 20 7b 0a 20 20 20 20 69  OPTIONS: {.    i
13b70 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20 20 63 6f  nt i = 0;.    co
13b80 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70 74 3b 0a  nst char *zOpt;.
13b90 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
13ba0 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
13bb0 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  .    pParse->nMe
13bc0 6d 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74  m = 1;.    sqlit
13bd0 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
13be0 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
13bf0 41 4d 45 2c 20 22 63 6f 6d 70 69 6c 65 5f 6f 70  AME, "compile_op
13c00 74 69 6f 6e 22 2c 20 53 51 4c 49 54 45 5f 53 54  tion", SQLITE_ST
13c10 41 54 49 43 29 3b 0a 20 20 20 20 77 68 69 6c 65  ATIC);.    while
13c20 28 20 28 7a 4f 70 74 20 3d 20 73 71 6c 69 74 65  ( (zOpt = sqlite
13c30 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f  3_compileoption_
13c40 67 65 74 28 69 2b 2b 29 29 21 3d 30 20 29 7b 0a  get(i++))!=0 ){.
13c50 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
13c60 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
13c70 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20  ring8, 0, 1, 0, 
13c80 7a 4f 70 74 2c 20 30 29 3b 0a 20 20 20 20 20 20  zOpt, 0);.      
13c90 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
13ca0 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
13cb0 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 7d 0a  w, 1, 1);.    }.
13cc0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
13cd0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
13ce0 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e  IT_COMPILEOPTION
13cf0 5f 44 49 41 47 53 20 2a 2f 0a 0a 23 69 66 6e 64  _DIAGS */..#ifnd
13d00 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
13d10 41 4c 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  AL.  /*.  **   P
13d20 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
13d30 5d 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e 74 20  ]wal_checkpoint 
13d40 3d 20 70 61 73 73 69 76 65 7c 66 75 6c 6c 7c 72  = passive|full|r
13d50 65 73 74 61 72 74 0a 20 20 2a 2a 0a 20 20 2a 2a  estart.  **.  **
13d60 20 43 68 65 63 6b 70 6f 69 6e 74 20 74 68 65 20   Checkpoint the 
13d70 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20  database..  */. 
13d80 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 57 41   case PragTyp_WA
13d90 4c 5f 43 48 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a  L_CHECKPOINT: {.
13da0 20 20 20 20 69 6e 74 20 69 42 74 20 3d 20 28 70      int iBt = (p
13db0 49 64 32 2d 3e 7a 3f 69 44 62 3a 53 51 4c 49 54  Id2->z?iDb:SQLIT
13dc0 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 29 3b  E_MAX_ATTACHED);
13dd0 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64 65 20 3d  .    int eMode =
13de0 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49   SQLITE_CHECKPOI
13df0 4e 54 5f 50 41 53 53 49 56 45 3b 0a 20 20 20 20  NT_PASSIVE;.    
13e00 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
13e10 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
13e20 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22  trICmp(zRight, "
13e30 66 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20  full")==0 ){.   
13e40 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c       eMode = SQL
13e50 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46  ITE_CHECKPOINT_F
13e60 55 4c 4c 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ULL;.      }else
13e70 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
13e80 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 72 65 73  Cmp(zRight, "res
13e90 74 61 72 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20  tart")==0 ){.   
13ea0 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c       eMode = SQL
13eb0 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52  ITE_CHECKPOINT_R
13ec0 45 53 54 41 52 54 3b 0a 20 20 20 20 20 20 7d 0a  ESTART;.      }.
13ed0 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
13ee0 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
13ef0 76 2c 20 33 29 3b 0a 20 20 20 20 70 50 61 72 73  v, 3);.    pPars
13f00 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20  e->nMem = 3;.   
13f10 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
13f20 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
13f30 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 62 75 73 79  NAME_NAME, "busy
13f40 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
13f50 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
13f60 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
13f70 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  1, COLNAME_NAME,
13f80 20 22 6c 6f 67 22 2c 20 53 51 4c 49 54 45 5f 53   "log", SQLITE_S
13f90 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69  TATIC);.    sqli
13fa0 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
13fb0 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 2, COLNAME_
13fc0 4e 41 4d 45 2c 20 22 63 68 65 63 6b 70 6f 69 6e  NAME, "checkpoin
13fd0 74 65 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ted", SQLITE_STA
13fe0 54 49 43 29 3b 0a 0a 20 20 20 20 73 71 6c 69 74  TIC);..    sqlit
13ff0 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
14000 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 2c 20 69  OP_Checkpoint, i
14010 42 74 2c 20 65 4d 6f 64 65 2c 20 31 29 3b 0a 20  Bt, eMode, 1);. 
14020 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
14030 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
14040 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 7d  tRow, 1, 3);.  }
14050 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 2f 2a 0a  .  break;..  /*.
14060 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 77 61    **   PRAGMA wa
14070 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74  l_autocheckpoint
14080 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 77  .  **   PRAGMA w
14090 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e  al_autocheckpoin
140a0 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  t = N.  **.  ** 
140b0 43 6f 6e 66 69 67 75 72 65 20 61 20 64 61 74 61  Configure a data
140c0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
140d0 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  to automatically
140e0 20 63 68 65 63 6b 70 6f 69 6e 74 20 61 20 64 61   checkpoint a da
140f0 74 61 62 61 73 65 0a 20 20 2a 2a 20 61 66 74 65  tabase.  ** afte
14100 72 20 61 63 63 75 6d 75 6c 61 74 69 6e 67 20 4e  r accumulating N
14110 20 66 72 61 6d 65 73 20 69 6e 20 74 68 65 20 6c   frames in the l
14120 6f 67 2e 20 4f 72 20 71 75 65 72 79 20 66 6f 72  og. Or query for
14130 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c   the current val
14140 75 65 0a 20 20 2a 2a 20 6f 66 20 4e 2e 0a 20 20  ue.  ** of N..  
14150 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
14160 70 5f 57 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50  p_WAL_AUTOCHECKP
14170 4f 49 4e 54 3a 20 7b 0a 20 20 20 20 69 66 28 20  OINT: {.    if( 
14180 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
14190 73 71 6c 69 74 65 33 5f 77 61 6c 5f 61 75 74 6f  sqlite3_wal_auto
141a0 63 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 73  checkpoint(db, s
141b0 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68  qlite3Atoi(zRigh
141c0 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  t));.    }.    r
141d0 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70  eturnSingleInt(p
141e0 50 61 72 73 65 2c 20 22 77 61 6c 5f 61 75 74 6f  Parse, "wal_auto
141f0 63 68 65 63 6b 70 6f 69 6e 74 22 2c 20 0a 20 20  checkpoint", .  
14200 20 20 20 20 20 64 62 2d 3e 78 57 61 6c 43 61 6c       db->xWalCal
14210 6c 62 61 63 6b 3d 3d 73 71 6c 69 74 65 33 57 61  lback==sqlite3Wa
14220 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 20 3f 20 0a  lDefaultHook ? .
14230 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
14240 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 64 62 2d  E_PTR_TO_INT(db-
14250 3e 70 57 61 6c 41 72 67 29 20 3a 20 30 29 3b 0a  >pWalArg) : 0);.
14260 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
14270 64 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  dif..  /*.  **  
14280 50 52 41 47 4d 41 20 73 68 72 69 6e 6b 5f 6d 65  PRAGMA shrink_me
14290 6d 6f 72 79 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  mory.  **.  ** T
142a0 68 69 73 20 70 72 61 67 6d 61 20 61 74 74 65 6d  his pragma attem
142b0 70 74 73 20 74 6f 20 66 72 65 65 20 61 73 20 6d  pts to free as m
142c0 75 63 68 20 6d 65 6d 6f 72 79 20 61 73 20 70 6f  uch memory as po
142d0 73 73 69 62 6c 65 20 66 72 6f 6d 20 74 68 65 0a  ssible from the.
142e0 20 20 2a 2a 20 63 75 72 72 65 6e 74 20 64 61 74    ** current dat
142f0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
14300 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
14310 61 67 54 79 70 5f 53 48 52 49 4e 4b 5f 4d 45 4d  agTyp_SHRINK_MEM
14320 4f 52 59 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74  ORY: {.    sqlit
14330 65 33 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65  e3_db_release_me
14340 6d 6f 72 79 28 64 62 29 3b 0a 20 20 20 20 62 72  mory(db);.    br
14350 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20  eak;.  }..  /*. 
14360 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 62 75 73   **   PRAGMA bus
14370 79 5f 74 69 6d 65 6f 75 74 0a 20 20 2a 2a 20 20  y_timeout.  **  
14380 20 50 52 41 47 4d 41 20 62 75 73 79 5f 74 69 6d   PRAGMA busy_tim
14390 65 6f 75 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20  eout = N.  **.  
143a0 2a 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65 33 5f  ** Call sqlite3_
143b0 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c  busy_timeout(db,
143c0 20 4e 29 2e 20 20 52 65 74 75 72 6e 20 74 68 65   N).  Return the
143d0 20 63 75 72 72 65 6e 74 20 74 69 6d 65 6f 75 74   current timeout
143e0 20 76 61 6c 75 65 0a 20 20 2a 2a 20 69 66 20 6f   value.  ** if o
143f0 6e 65 20 69 73 20 73 65 74 2e 20 20 49 66 20 6e  ne is set.  If n
14400 6f 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20 6f  o busy handler o
14410 72 20 61 20 64 69 66 66 65 72 65 6e 74 20 62 75  r a different bu
14420 73 79 20 68 61 6e 64 6c 65 72 20 69 73 20 73 65  sy handler is se
14430 74 0a 20 20 2a 2a 20 74 68 65 6e 20 30 20 69 73  t.  ** then 0 is
14440 20 72 65 74 75 72 6e 65 64 2e 20 20 53 65 74 74   returned.  Sett
14450 69 6e 67 20 74 68 65 20 62 75 73 79 5f 74 69 6d  ing the busy_tim
14460 65 6f 75 74 20 74 6f 20 30 20 6f 72 20 6e 65 67  eout to 0 or neg
14470 61 74 69 76 65 0a 20 20 2a 2a 20 64 69 73 61 62  ative.  ** disab
14480 6c 65 73 20 74 68 65 20 74 69 6d 65 6f 75 74 2e  les the timeout.
14490 0a 20 20 2a 2f 0a 20 20 2f 2a 63 61 73 65 20 50  .  */.  /*case P
144a0 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45  ragTyp_BUSY_TIME
144b0 4f 55 54 2a 2f 20 64 65 66 61 75 6c 74 3a 20 7b  OUT*/ default: {
144c0 0a 20 20 20 20 61 73 73 65 72 74 28 20 61 50 72  .    assert( aPr
144d0 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 65  agmaNames[mid].e
144e0 50 72 61 67 54 79 70 3d 3d 50 72 61 67 54 79 70  PragTyp==PragTyp
144f0 5f 42 55 53 59 5f 54 49 4d 45 4f 55 54 20 29 3b  _BUSY_TIMEOUT );
14500 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
14510 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
14520 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64 62  _busy_timeout(db
14530 2c 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52  , sqlite3Atoi(zR
14540 69 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20  ight));.    }.  
14550 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
14560 74 28 70 50 61 72 73 65 2c 20 22 74 69 6d 65 6f  t(pParse, "timeo
14570 75 74 22 2c 20 20 64 62 2d 3e 62 75 73 79 54 69  ut",  db->busyTi
14580 6d 65 6f 75 74 29 3b 0a 20 20 20 20 62 72 65 61  meout);.    brea
14590 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
145a0 2a 20 20 20 50 52 41 47 4d 41 20 73 6f 66 74 5f  *   PRAGMA soft_
145b0 68 65 61 70 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20  heap_limit.  ** 
145c0 20 20 50 52 41 47 4d 41 20 73 6f 66 74 5f 68 65    PRAGMA soft_he
145d0 61 70 5f 6c 69 6d 69 74 20 3d 20 4e 0a 20 20 2a  ap_limit = N.  *
145e0 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20 73 71 6c 69  *.  ** Call sqli
145f0 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69  te3_soft_heap_li
14600 6d 69 74 36 34 28 4e 29 2e 20 20 52 65 74 75 72  mit64(N).  Retur
14610 6e 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20 49  n the result.  I
14620 66 20 4e 20 69 73 20 6f 6d 69 74 74 65 64 2c 0a  f N is omitted,.
14630 20 20 2a 2a 20 75 73 65 20 2d 31 2e 0a 20 20 2a    ** use -1..  *
14640 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
14650 5f 53 4f 46 54 5f 48 45 41 50 5f 4c 49 4d 49 54  _SOFT_HEAP_LIMIT
14660 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  : {.    sqlite3_
14670 69 6e 74 36 34 20 4e 3b 0a 20 20 20 20 69 66 28  int64 N;.    if(
14680 20 7a 52 69 67 68 74 20 26 26 20 73 71 6c 69 74   zRight && sqlit
14690 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28  e3DecOrHexToI64(
146a0 7a 52 69 67 68 74 2c 20 26 4e 29 3d 3d 53 51 4c  zRight, &N)==SQL
146b0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
146c0 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61  sqlite3_soft_hea
146d0 70 5f 6c 69 6d 69 74 36 34 28 4e 29 3b 0a 20 20  p_limit64(N);.  
146e0 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69    }.    returnSi
146f0 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20  ngleInt(pParse, 
14700 22 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74  "soft_heap_limit
14710 22 2c 20 20 73 71 6c 69 74 65 33 5f 73 6f 66 74  ",  sqlite3_soft
14720 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 2d 31  _heap_limit64(-1
14730 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  ));.    break;. 
14740 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20   }..  /*.  **   
14750 50 52 41 47 4d 41 20 74 68 72 65 61 64 73 0a 20  PRAGMA threads. 
14760 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 68 72   **   PRAGMA thr
14770 65 61 64 73 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20  eads = N.  **.  
14780 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20 74 68 65  ** Configure the
14790 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
147a0 6f 66 20 77 6f 72 6b 65 72 20 74 68 72 65 61 64  of worker thread
147b0 73 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 6e  s.  Return the n
147c0 65 77 0a 20 20 2a 2a 20 6d 61 78 69 6d 75 6d 2c  ew.  ** maximum,
147d0 20 77 68 69 63 68 20 6d 69 67 68 74 20 62 65 20   which might be 
147e0 6c 65 73 73 20 74 68 61 6e 20 72 65 71 75 65 73  less than reques
147f0 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ted..  */.  case
14800 20 50 72 61 67 54 79 70 5f 54 48 52 45 41 44 53   PragTyp_THREADS
14810 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  : {.    sqlite3_
14820 69 6e 74 36 34 20 4e 3b 0a 20 20 20 20 69 66 28  int64 N;.    if(
14830 20 7a 52 69 67 68 74 0a 20 20 20 20 20 26 26 20   zRight.     && 
14840 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54  sqlite3DecOrHexT
14850 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26 4e 29  oI64(zRight, &N)
14860 3d 3d 53 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20  ==SQLITE_OK.    
14870 20 26 26 20 4e 3e 3d 30 0a 20 20 20 20 29 7b 0a   && N>=0.    ){.
14880 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6c 69        sqlite3_li
14890 6d 69 74 28 64 62 2c 20 53 51 4c 49 54 45 5f 4c  mit(db, SQLITE_L
148a0 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45  IMIT_WORKER_THRE
148b0 41 44 53 2c 20 28 69 6e 74 29 28 4e 26 30 78 37  ADS, (int)(N&0x7
148c0 66 66 66 66 66 66 66 29 29 3b 0a 20 20 20 20 7d  fffffff));.    }
148d0 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c  .    returnSingl
148e0 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 74 68  eInt(pParse, "th
148f0 72 65 61 64 73 22 2c 0a 20 20 20 20 20 20 20 20  reads",.        
14900 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
14910 74 65 33 5f 6c 69 6d 69 74 28 64 62 2c 20 53 51  te3_limit(db, SQ
14920 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45  LITE_LIMIT_WORKE
14930 52 5f 54 48 52 45 41 44 53 2c 20 2d 31 29 29 3b  R_THREADS, -1));
14940 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
14950 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
14960 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64 65  ITE_DEBUG) || de
14970 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45 53  fined(SQLITE_TES
14980 54 29 0a 20 20 2f 2a 0a 20 20 2a 2a 20 52 65 70  T).  /*.  ** Rep
14990 6f 72 74 20 74 68 65 20 63 75 72 72 65 6e 74 20  ort the current 
149a0 73 74 61 74 65 20 6f 66 20 66 69 6c 65 20 6c 6f  state of file lo
149b0 67 73 20 66 6f 72 20 61 6c 6c 20 64 61 74 61 62  gs for all datab
149c0 61 73 65 73 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ases.  */.  case
149d0 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 53 54   PragTyp_LOCK_ST
149e0 41 54 55 53 3a 20 7b 0a 20 20 20 20 73 74 61 74  ATUS: {.    stat
149f0 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63  ic const char *c
14a00 6f 6e 73 74 20 61 7a 4c 6f 63 6b 4e 61 6d 65 5b  onst azLockName[
14a10 5d 20 3d 20 7b 0a 20 20 20 20 20 20 22 75 6e 6c  ] = {.      "unl
14a20 6f 63 6b 65 64 22 2c 20 22 73 68 61 72 65 64 22  ocked", "shared"
14a30 2c 20 22 72 65 73 65 72 76 65 64 22 2c 20 22 70  , "reserved", "p
14a40 65 6e 64 69 6e 67 22 2c 20 22 65 78 63 6c 75 73  ending", "exclus
14a50 69 76 65 22 0a 20 20 20 20 7d 3b 0a 20 20 20 20  ive".    };.    
14a60 69 6e 74 20 69 3b 0a 20 20 20 20 73 71 6c 69 74  int i;.    sqlit
14a70 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
14a80 28 76 2c 20 32 29 3b 0a 20 20 20 20 70 50 61 72  (v, 2);.    pPar
14a90 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 20 20  se->nMem = 2;.  
14aa0 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
14ab0 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
14ac0 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 64 61 74  LNAME_NAME, "dat
14ad0 61 62 61 73 65 22 2c 20 53 51 4c 49 54 45 5f 53  abase", SQLITE_S
14ae0 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69  TATIC);.    sqli
14af0 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
14b00 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 1, COLNAME_
14b10 4e 41 4d 45 2c 20 22 73 74 61 74 75 73 22 2c 20  NAME, "status", 
14b20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
14b30 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64      for(i=0; i<d
14b40 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20  b->nDb; i++){.  
14b50 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 3b 0a      Btree *pBt;.
14b60 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72        const char
14b70 20 2a 7a 53 74 61 74 65 20 3d 20 22 75 6e 6b 6e   *zState = "unkn
14b80 6f 77 6e 22 3b 0a 20 20 20 20 20 20 69 6e 74 20  own";.      int 
14b90 6a 3b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d  j;.      if( db-
14ba0 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 3d 3d 30  >aDb[i].zName==0
14bb0 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
14bc0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
14bd0 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
14be0 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 64 62 2d  g8, 0, 1, 0, db-
14bf0 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 50  >aDb[i].zName, P
14c00 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  4_STATIC);.     
14c10 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69   pBt = db->aDb[i
14c20 5d 2e 70 42 74 3b 0a 20 20 20 20 20 20 69 66 28  ].pBt;.      if(
14c30 20 70 42 74 3d 3d 30 20 7c 7c 20 73 71 6c 69 74   pBt==0 || sqlit
14c40 65 33 42 74 72 65 65 50 61 67 65 72 28 70 42 74  e3BtreePager(pBt
14c50 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
14c60 7a 53 74 61 74 65 20 3d 20 22 63 6c 6f 73 65 64  zState = "closed
14c70 22 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  ";.      }else i
14c80 66 28 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f  f( sqlite3_file_
14c90 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 69 20 3f 20  control(db, i ? 
14ca0 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65  db->aDb[i].zName
14cb0 20 3a 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20   : 0, .         
14cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cd0 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49              SQLI
14ce0 54 45 5f 46 43 4e 54 4c 5f 4c 4f 43 4b 53 54 41  TE_FCNTL_LOCKSTA
14cf0 54 45 2c 20 26 6a 29 3d 3d 53 51 4c 49 54 45 5f  TE, &j)==SQLITE_
14d00 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20 7a  OK ){.         z
14d10 53 74 61 74 65 20 3d 20 61 7a 4c 6f 63 6b 4e 61  State = azLockNa
14d20 6d 65 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d 0a 20  me[j];.      }. 
14d30 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
14d40 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
14d50 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 7a  ing8, 0, 2, 0, z
14d60 53 74 61 74 65 2c 20 50 34 5f 53 54 41 54 49 43  State, P4_STATIC
14d70 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
14d80 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
14d90 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 32  _ResultRow, 1, 2
14da0 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65  );.    }.    bre
14db0 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  ak;.  }.#endif..
14dc0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41  #ifdef SQLITE_HA
14dd0 53 5f 43 4f 44 45 43 0a 20 20 63 61 73 65 20 50  S_CODEC.  case P
14de0 72 61 67 54 79 70 5f 4b 45 59 3a 20 7b 0a 20 20  ragTyp_KEY: {.  
14df0 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 20 73    if( zRight ) s
14e00 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28 64 62  qlite3_key_v2(db
14e10 2c 20 7a 44 62 2c 20 7a 52 69 67 68 74 2c 20 73  , zDb, zRight, s
14e20 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
14e30 52 69 67 68 74 29 29 3b 0a 20 20 20 20 62 72 65  Right));.    bre
14e40 61 6b 3b 0a 20 20 7d 0a 20 20 63 61 73 65 20 50  ak;.  }.  case P
14e50 72 61 67 54 79 70 5f 52 45 4b 45 59 3a 20 7b 0a  ragTyp_REKEY: {.
14e60 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
14e70 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 5f 76   sqlite3_rekey_v
14e80 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69 67 68  2(db, zDb, zRigh
14e90 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  t, sqlite3Strlen
14ea0 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20  30(zRight));.   
14eb0 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 63 61   break;.  }.  ca
14ec0 73 65 20 50 72 61 67 54 79 70 5f 48 45 58 4b 45  se PragTyp_HEXKE
14ed0 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  Y: {.    if( zRi
14ee0 67 68 74 20 29 7b 0a 20 20 20 20 20 20 75 38 20  ght ){.      u8 
14ef0 69 42 79 74 65 3b 0a 20 20 20 20 20 20 69 6e 74  iByte;.      int
14f00 20 69 3b 0a 20 20 20 20 20 20 63 68 61 72 20 7a   i;.      char z
14f10 4b 65 79 5b 34 30 5d 3b 0a 20 20 20 20 20 20 66  Key[40];.      f
14f20 6f 72 28 69 3d 30 2c 20 69 42 79 74 65 3d 30 3b  or(i=0, iByte=0;
14f30 20 69 3c 73 69 7a 65 6f 66 28 7a 4b 65 79 29 2a   i<sizeof(zKey)*
14f40 32 20 26 26 20 73 71 6c 69 74 65 33 49 73 78 64  2 && sqlite3Isxd
14f50 69 67 69 74 28 7a 52 69 67 68 74 5b 69 5d 29 3b  igit(zRight[i]);
14f60 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69   i++){.        i
14f70 42 79 74 65 20 3d 20 28 69 42 79 74 65 3c 3c 34  Byte = (iByte<<4
14f80 29 20 2b 20 73 71 6c 69 74 65 33 48 65 78 54 6f  ) + sqlite3HexTo
14f90 49 6e 74 28 7a 52 69 67 68 74 5b 69 5d 29 3b 0a  Int(zRight[i]);.
14fa0 20 20 20 20 20 20 20 20 69 66 28 20 28 69 26 31          if( (i&1
14fb0 29 21 3d 30 20 29 20 7a 4b 65 79 5b 69 2f 32 5d  )!=0 ) zKey[i/2]
14fc0 20 3d 20 69 42 79 74 65 3b 0a 20 20 20 20 20 20   = iByte;.      
14fd0 7d 0a 20 20 20 20 20 20 69 66 28 20 28 7a 4c 65  }.      if( (zLe
14fe0 66 74 5b 33 5d 20 26 20 30 78 66 29 3d 3d 30 78  ft[3] & 0xf)==0x
14ff0 62 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  b ){.        sql
15000 69 74 65 33 5f 6b 65 79 5f 76 32 28 64 62 2c 20  ite3_key_v2(db, 
15010 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29 3b  zDb, zKey, i/2);
15020 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
15030 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72 65        sqlite3_re
15040 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20  key_v2(db, zDb, 
15050 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20 20 20 20  zKey, i/2);.    
15060 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72    }.    }.    br
15070 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  eak;.  }.#endif.
15080 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
15090 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 20 7c 7c  TE_HAS_CODEC) ||
150a0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
150b0 45 4e 41 42 4c 45 5f 43 45 52 4f 44 29 0a 20 20  ENABLE_CEROD).  
150c0 63 61 73 65 20 50 72 61 67 54 79 70 5f 41 43 54  case PragTyp_ACT
150d0 49 56 41 54 45 5f 45 58 54 45 4e 53 49 4f 4e 53  IVATE_EXTENSIONS
150e0 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a  : if( zRight ){.
150f0 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48 41  #ifdef SQLITE_HA
15100 53 5f 43 4f 44 45 43 0a 20 20 20 20 69 66 28 20  S_CODEC.    if( 
15110 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28  sqlite3StrNICmp(
15120 7a 52 69 67 68 74 2c 20 22 73 65 65 2d 22 2c 20  zRight, "see-", 
15130 34 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  4)==0 ){.      s
15140 71 6c 69 74 65 33 5f 61 63 74 69 76 61 74 65 5f  qlite3_activate_
15150 73 65 65 28 26 7a 52 69 67 68 74 5b 34 5d 29 3b  see(&zRight[4]);
15160 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69  .    }.#endif.#i
15170 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42  fdef SQLITE_ENAB
15180 4c 45 5f 43 45 52 4f 44 0a 20 20 20 20 69 66 28  LE_CEROD.    if(
15190 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
151a0 28 7a 52 69 67 68 74 2c 20 22 63 65 72 6f 64 2d  (zRight, "cerod-
151b0 22 2c 20 36 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", 6)==0 ){.    
151c0 20 20 73 71 6c 69 74 65 33 5f 61 63 74 69 76 61    sqlite3_activa
151d0 74 65 5f 63 65 72 6f 64 28 26 7a 52 69 67 68 74  te_cerod(&zRight
151e0 5b 36 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  [6]);.    }.#end
151f0 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  if.  }.  break;.
15200 23 65 6e 64 69 66 0a 0a 20 20 7d 20 2f 2a 20 45  #endif..  } /* E
15210 6e 64 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41  nd of the PRAGMA
15220 20 73 77 69 74 63 68 20 2a 2f 0a 0a 70 72 61 67   switch */..prag
15230 6d 61 5f 6f 75 74 3a 0a 20 20 73 71 6c 69 74 65  ma_out:.  sqlite
15240 33 44 62 46 72 65 65 28 64 62 2c 20 7a 4c 65 66  3DbFree(db, zLef
15250 74 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62 46  t);.  sqlite3DbF
15260 72 65 65 28 64 62 2c 20 7a 52 69 67 68 74 29 3b  ree(db, zRight);
15270 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  .}..#endif /* SQ
15280 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41  LITE_OMIT_PRAGMA
15290 20 2a 2f 0a                                       */.