/ Hex Artifact Content
Login

Artifact 26fc55619109828c9b7add4cfa8a961b6f4c456d:


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 23 64 65 66         0x01.#def
0c60: 69 6e 65 20 50 72 61 67 46 6c 61 67 5f 52 65 61  ine PragFlag_Rea
0c70: 64 4f 6e 6c 79 20 20 20 20 20 20 20 20 20 20 20  dOnly           
0c80: 20 20 30 78 30 32 0a 73 74 61 74 69 63 20 63 6f    0x02.static co
0c90: 6e 73 74 20 73 74 72 75 63 74 20 73 50 72 61 67  nst struct sPrag
0ca0: 6d 61 4e 61 6d 65 73 20 7b 0a 20 20 63 6f 6e 73  maNames {.  cons
0cb0: 74 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 7a 4e  t char *const zN
0cc0: 61 6d 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66  ame;  /* Name of
0cd0: 20 70 72 61 67 6d 61 20 2a 2f 0a 20 20 75 38 20   pragma */.  u8 
0ce0: 65 50 72 61 67 54 79 70 3b 20 20 20 20 20 20 20  ePragTyp;       
0cf0: 20 20 20 20 20 20 20 2f 2a 20 50 72 61 67 54 79         /* PragTy
0d00: 70 5f 58 58 58 20 76 61 6c 75 65 20 2a 2f 0a 20  p_XXX value */. 
0d10: 20 75 38 20 6d 50 72 61 67 46 6c 61 67 3b 20 20   u8 mPragFlag;  
0d20: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65             /* Ze
0d30: 72 6f 20 6f 72 20 6d 6f 72 65 20 50 72 61 67 46  ro or more PragF
0d40: 6c 61 67 5f 58 58 58 20 76 61 6c 75 65 73 20 2a  lag_XXX values *
0d50: 2f 0a 20 20 75 33 32 20 69 41 72 67 3b 20 20 20  /.  u32 iArg;   
0d60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
0d70: 20 45 78 74 72 61 20 61 72 67 75 6d 65 6e 74 20   Extra argument 
0d80: 2a 2f 0a 7d 20 61 50 72 61 67 6d 61 4e 61 6d 65  */.} aPragmaName
0d90: 73 5b 5d 20 3d 20 7b 0a 23 69 66 20 64 65 66 69  s[] = {.#if defi
0da0: 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 53 5f 43  ned(SQLITE_HAS_C
0db0: 4f 44 45 43 29 20 7c 7c 20 64 65 66 69 6e 65 64  ODEC) || defined
0dc0: 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43  (SQLITE_ENABLE_C
0dd0: 45 52 4f 44 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  EROD).  { /* zNa
0de0: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 61 63 74 69  me:     */ "acti
0df0: 76 61 74 65 5f 65 78 74 65 6e 73 69 6f 6e 73 22  vate_extensions"
0e00: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
0e10: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 41  p:  */ PragTyp_A
0e20: 43 54 49 56 41 54 45 5f 45 58 54 45 4e 53 49 4f  CTIVATE_EXTENSIO
0e30: 4e 53 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  NS,.    /* ePrag
0e40: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
0e50: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
0e60: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
0e70: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
0e80: 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52  _OMIT_SCHEMA_VER
0e90: 53 49 4f 4e 5f 50 52 41 47 4d 41 53 29 0a 20 20  SION_PRAGMAS).  
0ea0: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
0eb0: 2a 2f 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 5f  */ "application_
0ec0: 69 64 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  id",.    /* ePra
0ed0: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
0ee0: 70 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 2c 0a  p_HEADER_VALUE,.
0ef0: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
0f00: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
0f10: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 42 54 52  Arg:      */ BTR
0f20: 45 45 5f 41 50 50 4c 49 43 41 54 49 4f 4e 5f 49  EE_APPLICATION_I
0f30: 44 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  D },.#endif.#if 
0f40: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
0f50: 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29  OMIT_AUTOVACUUM)
0f60: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
0f70: 20 20 20 2a 2f 20 22 61 75 74 6f 5f 76 61 63 75     */ "auto_vacu
0f80: 75 6d 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  um",.    /* ePra
0f90: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
0fa0: 70 5f 41 55 54 4f 5f 56 41 43 55 55 4d 2c 0a 20  p_AUTO_VACUUM,. 
0fb0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
0fc0: 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65   */ PragFlag_Nee
0fd0: 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20  dSchema,.    /* 
0fe0: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
0ff0: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
1000: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1010: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29  IT_FLAG_PRAGMAS)
1020: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1030: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 4d 41  LITE_OMIT_AUTOMA
1040: 54 49 43 5f 49 4e 44 45 58 29 0a 20 20 7b 20 2f  TIC_INDEX).  { /
1050: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
1060: 22 61 75 74 6f 6d 61 74 69 63 5f 69 6e 64 65 78  "automatic_index
1070: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
1080: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
1090: 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72  FLAG,.    /* ePr
10a0: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
10b0: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
10c0: 2a 2f 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e  */ SQLITE_AutoIn
10d0: 64 65 78 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65  dex },.#endif.#e
10e0: 6e 64 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  ndif.  { /* zNam
10f0: 65 3a 20 20 20 20 20 2a 2f 20 22 62 75 73 79 5f  e:     */ "busy_
1100: 74 69 6d 65 6f 75 74 22 2c 0a 20 20 20 20 2f 2a  timeout",.    /*
1110: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
1120: 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45  ragTyp_BUSY_TIME
1130: 4f 55 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  OUT,.    /* ePra
1140: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
1150: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
1160: 2f 20 30 20 7d 2c 0a 23 69 66 20 21 64 65 66 69  / 0 },.#if !defi
1170: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
1180: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a 20  PAGER_PRAGMAS). 
1190: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
11a0: 20 2a 2f 20 22 63 61 63 68 65 5f 73 69 7a 65 22   */ "cache_size"
11b0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
11c0: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 43  p:  */ PragTyp_C
11d0: 41 43 48 45 5f 53 49 5a 45 2c 0a 20 20 20 20 2f  ACHE_SIZE,.    /
11e0: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
11f0: 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68  PragFlag_NeedSch
1200: 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  ema,.    /* iArg
1210: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
1220: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
1230: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
1240: 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  LAG_PRAGMAS).  {
1250: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
1260: 2f 20 22 63 61 63 68 65 5f 73 70 69 6c 6c 22 2c  / "cache_spill",
1270: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
1280: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
1290: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
12a0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
12b0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
12c0: 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69   SQLITE_CacheSpi
12d0: 6c 6c 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7b  ll },.#endif.  {
12e0: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
12f0: 2f 20 22 63 61 73 65 5f 73 65 6e 73 69 74 69 76  / "case_sensitiv
1300: 65 5f 6c 69 6b 65 22 2c 0a 20 20 20 20 2f 2a 20  e_like",.    /* 
1310: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
1320: 61 67 54 79 70 5f 43 41 53 45 5f 53 45 4e 53 49  agTyp_CASE_SENSI
1330: 54 49 56 45 5f 4c 49 4b 45 2c 0a 20 20 20 20 2f  TIVE_LIKE,.    /
1340: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
1350: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
1360: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 69 66       */ 0 },.#if
1370: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1380: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
1390: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
13a0: 3a 20 20 20 20 20 2a 2f 20 22 63 68 65 63 6b 70  :     */ "checkp
13b0: 6f 69 6e 74 5f 66 75 6c 6c 66 73 79 6e 63 22 2c  oint_fullfsync",
13c0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
13d0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
13e0: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
13f0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1400: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1410: 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c   SQLITE_CkptFull
1420: 46 53 79 6e 63 20 7d 2c 0a 23 65 6e 64 69 66 0a  FSync },.#endif.
1430: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1440: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
1450: 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20  PRAGMAS).  { /* 
1460: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 63  zName:     */ "c
1470: 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 22 2c 0a  ollation_list",.
1480: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1490: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 43 4f 4c    */ PragTyp_COL
14a0: 4c 41 54 49 4f 4e 5f 4c 49 53 54 2c 0a 20 20 20  LATION_LIST,.   
14b0: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
14c0: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
14d0: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
14e0: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
14f0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ed(SQLITE_OMIT_C
1500: 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41  OMPILEOPTION_DIA
1510: 47 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  GS).  { /* zName
1520: 3a 20 20 20 20 20 2a 2f 20 22 63 6f 6d 70 69 6c  :     */ "compil
1530: 65 5f 6f 70 74 69 6f 6e 73 22 2c 0a 20 20 20 20  e_options",.    
1540: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
1550: 20 50 72 61 67 54 79 70 5f 43 4f 4d 50 49 4c 45   PragTyp_COMPILE
1560: 5f 4f 50 54 49 4f 4e 53 2c 0a 20 20 20 20 2f 2a  _OPTIONS,.    /*
1570: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
1580: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
1590: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
15a0: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
15b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47  SQLITE_OMIT_FLAG
15c0: 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a  _PRAGMAS).  { /*
15d0: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
15e0: 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 22 2c 0a  count_changes",.
15f0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1600: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
1610: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
1620: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
1630: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
1640: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
1650: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
1660: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1670: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
1680: 53 29 20 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f  S) && SQLITE_OS_
1690: 57 49 4e 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  WIN.  { /* zName
16a0: 3a 20 20 20 20 20 2a 2f 20 22 64 61 74 61 5f 73  :     */ "data_s
16b0: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 22 2c  tore_directory",
16c0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
16d0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 44 41  :  */ PragTyp_DA
16e0: 54 41 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f  TA_STORE_DIRECTO
16f0: 52 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  RY,.    /* ePrag
1700: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1710: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1720: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
1730: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1740: 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52  _OMIT_SCHEMA_VER
1750: 53 49 4f 4e 5f 50 52 41 47 4d 41 53 29 0a 20 20  SION_PRAGMAS).  
1760: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
1770: 2a 2f 20 22 64 61 74 61 5f 76 65 72 73 69 6f 6e  */ "data_version
1780: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
1790: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
17a0: 48 45 41 44 45 52 5f 56 41 4c 55 45 2c 0a 20 20  HEADER_VALUE,.  
17b0: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
17c0: 2a 2f 20 50 72 61 67 46 6c 61 67 5f 52 65 61 64  */ PragFlag_Read
17d0: 4f 6e 6c 79 2c 0a 20 20 20 20 2f 2a 20 69 41 72  Only,.    /* iAr
17e0: 67 3a 20 20 20 20 20 20 2a 2f 20 42 54 52 45 45  g:      */ BTREE
17f0: 5f 44 41 54 41 5f 56 45 52 53 49 4f 4e 20 7d 2c  _DATA_VERSION },
1800: 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66  .#endif.#if !def
1810: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1820: 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d 41 53 29  _SCHEMA_PRAGMAS)
1830: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
1840: 20 20 20 2a 2f 20 22 64 61 74 61 62 61 73 65 5f     */ "database_
1850: 6c 69 73 74 22 2c 0a 20 20 20 20 2f 2a 20 65 50  list",.    /* eP
1860: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
1870: 54 79 70 5f 44 41 54 41 42 41 53 45 5f 4c 49 53  Typ_DATABASE_LIS
1880: 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  T,.    /* ePragF
1890: 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67  lag: */ PragFlag
18a0: 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20  _NeedSchema,.   
18b0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
18c0: 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  / 0 },.#endif.#i
18d0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
18e0: 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
18f0: 47 4d 41 53 29 20 26 26 20 21 64 65 66 69 6e 65  GMAS) && !define
1900: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45  d(SQLITE_OMIT_DE
1910: 50 52 45 43 41 54 45 44 29 0a 20 20 7b 20 2f 2a  PRECATED).  { /*
1920: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
1930: 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69  default_cache_si
1940: 7a 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ze",.    /* ePra
1950: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
1960: 70 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f  p_DEFAULT_CACHE_
1970: 53 49 5a 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72  SIZE,.    /* ePr
1980: 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46  agFlag: */ PragF
1990: 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a  lag_NeedSchema,.
19a0: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
19b0: 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66    */ 0 },.#endif
19c0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
19d0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50  LITE_OMIT_FLAG_P
19e0: 52 41 47 4d 41 53 29 0a 23 69 66 20 21 64 65 66  RAGMAS).#if !def
19f0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1a00: 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26  _FOREIGN_KEY) &&
1a10: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1a20: 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20  _OMIT_TRIGGER). 
1a30: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
1a40: 20 2a 2f 20 22 64 65 66 65 72 5f 66 6f 72 65 69   */ "defer_forei
1a50: 67 6e 5f 6b 65 79 73 22 2c 0a 20 20 20 20 2f 2a  gn_keys",.    /*
1a60: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
1a70: 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20  ragTyp_FLAG,.   
1a80: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
1a90: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
1aa0: 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45  :      */ SQLITE
1ab0: 5f 44 65 66 65 72 46 4b 73 20 7d 2c 0a 23 65 6e  _DeferFKs },.#en
1ac0: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 21  dif.#endif.#if !
1ad0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1ae0: 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53  MIT_FLAG_PRAGMAS
1af0: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
1b00: 20 20 20 20 2a 2f 20 22 65 6d 70 74 79 5f 72 65      */ "empty_re
1b10: 73 75 6c 74 5f 63 61 6c 6c 62 61 63 6b 73 22 2c  sult_callbacks",
1b20: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
1b30: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
1b40: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
1b50: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1b60: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1b70: 20 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c   SQLITE_NullCall
1b80: 62 61 63 6b 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  back },.#endif.#
1b90: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
1ba0: 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 29 0a 20  TE_OMIT_UTF16). 
1bb0: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
1bc0: 20 2a 2f 20 22 65 6e 63 6f 64 69 6e 67 22 2c 0a   */ "encoding",.
1bd0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1be0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 45 4e 43    */ PragTyp_ENC
1bf0: 4f 44 49 4e 47 2c 0a 20 20 20 20 2f 2a 20 65 50  ODING,.    /* eP
1c00: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
1c10: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
1c20: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
1c30: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1c40: 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
1c50: 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65  _KEY) && !define
1c60: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  d(SQLITE_OMIT_TR
1c70: 49 47 47 45 52 29 0a 20 20 7b 20 2f 2a 20 7a 4e  IGGER).  { /* zN
1c80: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66 6f 72  ame:     */ "for
1c90: 65 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 22 2c  eign_key_check",
1ca0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
1cb0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4f  :  */ PragTyp_FO
1cc0: 52 45 49 47 4e 5f 4b 45 59 5f 43 48 45 43 4b 2c  REIGN_KEY_CHECK,
1cd0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
1ce0: 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e  g: */ PragFlag_N
1cf0: 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f  eedSchema,.    /
1d00: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
1d10: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
1d20: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1d30: 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
1d40: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
1d50: 20 20 20 20 2a 2f 20 22 66 6f 72 65 69 67 6e 5f      */ "foreign_
1d60: 6b 65 79 5f 6c 69 73 74 22 2c 0a 20 20 20 20 2f  key_list",.    /
1d70: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
1d80: 50 72 61 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f  PragTyp_FOREIGN_
1d90: 4b 45 59 5f 4c 49 53 54 2c 0a 20 20 20 20 2f 2a  KEY_LIST,.    /*
1da0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50   ePragFlag: */ P
1db0: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
1dc0: 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a  ma,.    /* iArg:
1dd0: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
1de0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
1df0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  d(SQLITE_OMIT_FL
1e00: 41 47 5f 50 52 41 47 4d 41 53 29 0a 23 69 66 20  AG_PRAGMAS).#if 
1e10: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1e20: 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
1e30: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
1e40: 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
1e50: 52 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  R).  { /* zName:
1e60: 20 20 20 20 20 2a 2f 20 22 66 6f 72 65 69 67 6e       */ "foreign
1e70: 5f 6b 65 79 73 22 2c 0a 20 20 20 20 2f 2a 20 65  _keys",.    /* e
1e80: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
1e90: 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f  gTyp_FLAG,.    /
1ea0: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
1eb0: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
1ec0: 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 46       */ SQLITE_F
1ed0: 6f 72 65 69 67 6e 4b 65 79 73 20 7d 2c 0a 23 65  oreignKeys },.#e
1ee0: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 20  ndif.#endif.#if 
1ef0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1f00: 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53  OMIT_SCHEMA_VERS
1f10: 49 4f 4e 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  ION_PRAGMAS).  {
1f20: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
1f30: 2f 20 22 66 72 65 65 6c 69 73 74 5f 63 6f 75 6e  / "freelist_coun
1f40: 74 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  t",.    /* ePrag
1f50: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
1f60: 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 2c 0a 20  _HEADER_VALUE,. 
1f70: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
1f80: 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 52 65 61   */ PragFlag_Rea
1f90: 64 4f 6e 6c 79 2c 0a 20 20 20 20 2f 2a 20 69 41  dOnly,.    /* iA
1fa0: 72 67 3a 20 20 20 20 20 20 2a 2f 20 42 54 52 45  rg:      */ BTRE
1fb0: 45 5f 46 52 45 45 5f 50 41 47 45 5f 43 4f 55 4e  E_FREE_PAGE_COUN
1fc0: 54 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  T },.#endif.#if 
1fd0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1fe0: 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41  OMIT_FLAG_PRAGMA
1ff0: 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  S).  { /* zName:
2000: 20 20 20 20 20 2a 2f 20 22 66 75 6c 6c 5f 63 6f       */ "full_co
2010: 6c 75 6d 6e 5f 6e 61 6d 65 73 22 2c 0a 20 20 20  lumn_names",.   
2020: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
2030: 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a  / PragTyp_FLAG,.
2040: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
2050: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
2060: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c  Arg:      */ SQL
2070: 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73  ITE_FullColNames
2080: 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65   },.  { /* zName
2090: 3a 20 20 20 20 20 2a 2f 20 22 66 75 6c 6c 66 73  :     */ "fullfs
20a0: 79 6e 63 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ync",.    /* ePr
20b0: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
20c0: 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20  yp_FLAG,.    /* 
20d0: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
20e0: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
20f0: 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 46 75 6c     */ SQLITE_Ful
2100: 6c 46 53 79 6e 63 20 7d 2c 0a 23 65 6e 64 69 66  lFSync },.#endif
2110: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
2120: 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 0a 20  ITE_HAS_CODEC). 
2130: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
2140: 20 2a 2f 20 22 68 65 78 6b 65 79 22 2c 0a 20 20   */ "hexkey",.  
2150: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
2160: 2a 2f 20 50 72 61 67 54 79 70 5f 48 45 58 4b 45  */ PragTyp_HEXKE
2170: 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  Y,.    /* ePragF
2180: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
2190: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
21a0: 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  0 },.  { /* zNam
21b0: 65 3a 20 20 20 20 20 2a 2f 20 22 68 65 78 72 65  e:     */ "hexre
21c0: 6b 65 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  key",.    /* ePr
21d0: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
21e0: 79 70 5f 48 45 58 4b 45 59 2c 0a 20 20 20 20 2f  yp_HEXKEY,.    /
21f0: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
2200: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
2210: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
2220: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
2230: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41  (SQLITE_OMIT_FLA
2240: 47 5f 50 52 41 47 4d 41 53 29 0a 23 69 66 20 21  G_PRAGMAS).#if !
2250: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2260: 4d 49 54 5f 43 48 45 43 4b 29 0a 20 20 7b 20 2f  MIT_CHECK).  { /
2270: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
2280: 22 69 67 6e 6f 72 65 5f 63 68 65 63 6b 5f 63 6f  "ignore_check_co
2290: 6e 73 74 72 61 69 6e 74 73 22 2c 0a 20 20 20 20  nstraints",.    
22a0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
22b0: 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20   PragTyp_FLAG,. 
22c0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
22d0: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
22e0: 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49  rg:      */ SQLI
22f0: 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20  TE_IgnoreChecks 
2300: 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66  },.#endif.#endif
2310: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
2320: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
2330: 43 55 55 4d 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  CUUM).  { /* zNa
2340: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e 63 72  me:     */ "incr
2350: 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 22 2c  emental_vacuum",
2360: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
2370: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 49 4e  :  */ PragTyp_IN
2380: 43 52 45 4d 45 4e 54 41 4c 5f 56 41 43 55 55 4d  CREMENTAL_VACUUM
2390: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
23a0: 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f  ag: */ PragFlag_
23b0: 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20  NeedSchema,.    
23c0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
23d0: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
23e0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
23f0: 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41  _OMIT_SCHEMA_PRA
2400: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
2410: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e 64 65  me:     */ "inde
2420: 78 5f 69 6e 66 6f 22 2c 0a 20 20 20 20 2f 2a 20  x_info",.    /* 
2430: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
2440: 61 67 54 79 70 5f 49 4e 44 45 58 5f 49 4e 46 4f  agTyp_INDEX_INFO
2450: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
2460: 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f  ag: */ PragFlag_
2470: 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20  NeedSchema,.    
2480: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
2490: 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61   0 },.  { /* zNa
24a0: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e 64 65  me:     */ "inde
24b0: 78 5f 6c 69 73 74 22 2c 0a 20 20 20 20 2f 2a 20  x_list",.    /* 
24c0: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
24d0: 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c 49 53 54  agTyp_INDEX_LIST
24e0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
24f0: 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f  ag: */ PragFlag_
2500: 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20  NeedSchema,.    
2510: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
2520: 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61   0 },.  { /* zNa
2530: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e 64 65  me:     */ "inde
2540: 78 5f 78 69 6e 66 6f 22 2c 0a 20 20 20 20 2f 2a  x_xinfo",.    /*
2550: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
2560: 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 49 4e 46  ragTyp_INDEX_INF
2570: 4f 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  O,.    /* ePragF
2580: 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67  lag: */ PragFlag
2590: 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20  _NeedSchema,.   
25a0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
25b0: 2f 20 31 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  / 1 },.#endif.#i
25c0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
25d0: 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
25e0: 5f 43 48 45 43 4b 29 0a 20 20 7b 20 2f 2a 20 7a  _CHECK).  { /* z
25f0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e  Name:     */ "in
2600: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 0a  tegrity_check",.
2610: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2620: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 49 4e 54    */ PragTyp_INT
2630: 45 47 52 49 54 59 5f 43 48 45 43 4b 2c 0a 20 20  EGRITY_CHECK,.  
2640: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
2650: 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64  */ PragFlag_Need
2660: 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69  Schema,.    /* i
2670: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
2680: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ,.#endif.#if !de
2690: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
26a0: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29  T_PAGER_PRAGMAS)
26b0: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
26c0: 20 20 20 2a 2f 20 22 6a 6f 75 72 6e 61 6c 5f 6d     */ "journal_m
26d0: 6f 64 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ode",.    /* ePr
26e0: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
26f0: 79 70 5f 4a 4f 55 52 4e 41 4c 5f 4d 4f 44 45 2c  yp_JOURNAL_MODE,
2700: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
2710: 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e  g: */ PragFlag_N
2720: 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f  eedSchema,.    /
2730: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
2740: 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  0 },.  { /* zNam
2750: 65 3a 20 20 20 20 20 2a 2f 20 22 6a 6f 75 72 6e  e:     */ "journ
2760: 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 22 2c 0a  al_size_limit",.
2770: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2780: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 4a 4f 55    */ PragTyp_JOU
2790: 52 4e 41 4c 5f 53 49 5a 45 5f 4c 49 4d 49 54 2c  RNAL_SIZE_LIMIT,
27a0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
27b0: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
27c0: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
27d0: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  },.#endif.#if de
27e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 53  fined(SQLITE_HAS
27f0: 5f 43 4f 44 45 43 29 0a 20 20 7b 20 2f 2a 20 7a  _CODEC).  { /* z
2800: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6b 65  Name:     */ "ke
2810: 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  y",.    /* ePrag
2820: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
2830: 5f 4b 45 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72  _KEY,.    /* ePr
2840: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
2850: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2860: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
2870: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2880: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
2890: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
28a0: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 65 67 61  me:     */ "lega
28b0: 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 22 2c  cy_file_format",
28c0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
28d0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
28e0: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
28f0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
2900: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
2910: 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69   SQLITE_LegacyFi
2920: 6c 65 46 6d 74 20 7d 2c 0a 23 65 6e 64 69 66 0a  leFmt },.#endif.
2930: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2940: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
2950: 52 41 47 4d 41 53 29 20 26 26 20 53 51 4c 49 54  RAGMAS) && SQLIT
2960: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
2970: 5f 53 54 59 4c 45 0a 20 20 7b 20 2f 2a 20 7a 4e  _STYLE.  { /* zN
2980: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 6f 63  ame:     */ "loc
2990: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 22 2c 0a 20  k_proxy_file",. 
29a0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
29b0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b   */ PragTyp_LOCK
29c0: 5f 50 52 4f 58 59 5f 46 49 4c 45 2c 0a 20 20 20  _PROXY_FILE,.   
29d0: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
29e0: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
29f0: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
2a00: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
2a10: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
2a20: 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
2a30: 45 5f 54 45 53 54 29 0a 20 20 7b 20 2f 2a 20 7a  E_TEST).  { /* z
2a40: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 6f  Name:     */ "lo
2a50: 63 6b 5f 73 74 61 74 75 73 22 2c 0a 20 20 20 20  ck_status",.    
2a60: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2a70: 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 53 54   PragTyp_LOCK_ST
2a80: 41 54 55 53 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ATUS,.    /* ePr
2a90: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
2aa0: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2ab0: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
2ac0: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2ad0: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
2ae0: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
2af0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 6f 63  ame:     */ "loc
2b00: 6b 69 6e 67 5f 6d 6f 64 65 22 2c 0a 20 20 20 20  king_mode",.    
2b10: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2b20: 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49 4e 47   PragTyp_LOCKING
2b30: 5f 4d 4f 44 45 2c 0a 20 20 20 20 2f 2a 20 65 50  _MODE,.    /* eP
2b40: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
2b50: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2b60: 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20   */ 0 },.  { /* 
2b70: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6d  zName:     */ "m
2b80: 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 22 2c 0a  ax_page_count",.
2b90: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2ba0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 50 41 47    */ PragTyp_PAG
2bb0: 45 5f 43 4f 55 4e 54 2c 0a 20 20 20 20 2f 2a 20  E_COUNT,.    /* 
2bc0: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72  ePragFlag: */ Pr
2bd0: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
2be0: 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  a,.    /* iArg: 
2bf0: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b       */ 0 },.  {
2c00: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
2c10: 2f 20 22 6d 6d 61 70 5f 73 69 7a 65 22 2c 0a 20  / "mmap_size",. 
2c20: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2c30: 20 2a 2f 20 50 72 61 67 54 79 70 5f 4d 4d 41 50   */ PragTyp_MMAP
2c40: 5f 53 49 5a 45 2c 0a 20 20 20 20 2f 2a 20 65 50  _SIZE,.    /* eP
2c50: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
2c60: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2c70: 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20   */ 0 },.  { /* 
2c80: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 70  zName:     */ "p
2c90: 61 67 65 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20  age_count",.    
2ca0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2cb0: 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 43 4f   PragTyp_PAGE_CO
2cc0: 55 4e 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  UNT,.    /* ePra
2cd0: 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c  gFlag: */ PragFl
2ce0: 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20  ag_NeedSchema,. 
2cf0: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2d00: 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20   */ 0 },.  { /* 
2d10: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 70  zName:     */ "p
2d20: 61 67 65 5f 73 69 7a 65 22 2c 0a 20 20 20 20 2f  age_size",.    /
2d30: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
2d40: 50 72 61 67 54 79 70 5f 50 41 47 45 5f 53 49 5a  PragTyp_PAGE_SIZ
2d50: 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  E,.    /* ePragF
2d60: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
2d70: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
2d80: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
2d90: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45  defined(SQLITE_E
2da0: 4e 41 42 4c 45 5f 4f 54 41 29 0a 20 20 7b 20 2f  NABLE_OTA).  { /
2db0: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
2dc0: 22 70 61 67 65 72 5f 6f 74 61 5f 6d 6f 64 65 22  "pager_ota_mode"
2dd0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
2de0: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 50  p:  */ PragTyp_P
2df0: 41 47 45 52 5f 4f 54 41 5f 4d 4f 44 45 2c 0a 20  AGER_OTA_MODE,. 
2e00: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
2e10: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
2e20: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
2e30: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
2e40: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
2e50: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
2e60: 20 20 20 20 2a 2f 20 22 70 61 72 73 65 72 5f 74      */ "parser_t
2e70: 72 61 63 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50  race",.    /* eP
2e80: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
2e90: 54 79 70 5f 50 41 52 53 45 52 5f 54 52 41 43 45  Typ_PARSER_TRACE
2ea0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
2eb0: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
2ec0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
2ed0: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
2ee0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2ef0: 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53  MIT_FLAG_PRAGMAS
2f00: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
2f10: 20 20 20 20 2a 2f 20 22 71 75 65 72 79 5f 6f 6e      */ "query_on
2f20: 6c 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ly",.    /* ePra
2f30: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
2f40: 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65  p_FLAG,.    /* e
2f50: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
2f60: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
2f70: 20 20 2a 2f 20 53 51 4c 49 54 45 5f 51 75 65 72    */ SQLITE_Quer
2f80: 79 4f 6e 6c 79 20 7d 2c 0a 23 65 6e 64 69 66 0a  yOnly },.#endif.
2f90: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2fa0: 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
2fb0: 54 59 5f 43 48 45 43 4b 29 0a 20 20 7b 20 2f 2a  TY_CHECK).  { /*
2fc0: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
2fd0: 71 75 69 63 6b 5f 63 68 65 63 6b 22 2c 0a 20 20  quick_check",.  
2fe0: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
2ff0: 2a 2f 20 50 72 61 67 54 79 70 5f 49 4e 54 45 47  */ PragTyp_INTEG
3000: 52 49 54 59 5f 43 48 45 43 4b 2c 0a 20 20 20 20  RITY_CHECK,.    
3010: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
3020: 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63   PragFlag_NeedSc
3030: 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72  hema,.    /* iAr
3040: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
3050: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
3060: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
3070: 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20  FLAG_PRAGMAS).  
3080: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
3090: 2a 2f 20 22 72 65 61 64 5f 75 6e 63 6f 6d 6d 69  */ "read_uncommi
30a0: 74 74 65 64 22 2c 0a 20 20 20 20 2f 2a 20 65 50  tted",.    /* eP
30b0: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
30c0: 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a  Typ_FLAG,.    /*
30d0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
30e0: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
30f0: 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 52 65      */ SQLITE_Re
3100: 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20 7d 2c  adUncommitted },
3110: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
3120: 20 20 20 2a 2f 20 22 72 65 63 75 72 73 69 76 65     */ "recursive
3130: 5f 74 72 69 67 67 65 72 73 22 2c 0a 20 20 20 20  _triggers",.    
3140: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
3150: 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20   PragTyp_FLAG,. 
3160: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
3170: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
3180: 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49  rg:      */ SQLI
3190: 54 45 5f 52 65 63 54 72 69 67 67 65 72 73 20 7d  TE_RecTriggers }
31a0: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ,.#endif.#if def
31b0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 53 5f  ined(SQLITE_HAS_
31c0: 43 4f 44 45 43 29 0a 20 20 7b 20 2f 2a 20 7a 4e  CODEC).  { /* zN
31d0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 72 65 6b  ame:     */ "rek
31e0: 65 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ey",.    /* ePra
31f0: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
3200: 70 5f 52 45 4b 45 59 2c 0a 20 20 20 20 2f 2a 20  p_REKEY,.    /* 
3210: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
3220: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
3230: 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69     */ 0 },.#endi
3240: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
3250: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f  QLITE_OMIT_FLAG_
3260: 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20  PRAGMAS).  { /* 
3270: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 72  zName:     */ "r
3280: 65 76 65 72 73 65 5f 75 6e 6f 72 64 65 72 65 64  everse_unordered
3290: 5f 73 65 6c 65 63 74 73 22 2c 0a 20 20 20 20 2f  _selects",.    /
32a0: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
32b0: 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20  PragTyp_FLAG,.  
32c0: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
32d0: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
32e0: 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54  g:      */ SQLIT
32f0: 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72 20 7d  E_ReverseOrder }
3300: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ,.#endif.#if !de
3310: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
3320: 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  T_SCHEMA_VERSION
3330: 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a  _PRAGMAS).  { /*
3340: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
3350: 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22 2c  schema_version",
3360: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
3370: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 48 45  :  */ PragTyp_HE
3380: 41 44 45 52 5f 56 41 4c 55 45 2c 0a 20 20 20 20  ADER_VALUE,.    
3390: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
33a0: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
33b0: 20 20 20 20 20 20 2a 2f 20 42 54 52 45 45 5f 53        */ BTREE_S
33c0: 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20 7d 2c  CHEMA_VERSION },
33d0: 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66  .#endif.#if !def
33e0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
33f0: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a  _PAGER_PRAGMAS).
3400: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
3410: 20 20 2a 2f 20 22 73 65 63 75 72 65 5f 64 65 6c    */ "secure_del
3420: 65 74 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ete",.    /* ePr
3430: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
3440: 79 70 5f 53 45 43 55 52 45 5f 44 45 4c 45 54 45  yp_SECURE_DELETE
3450: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
3460: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
3470: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
3480: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
3490: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
34a0: 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53  MIT_FLAG_PRAGMAS
34b0: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
34c0: 20 20 20 20 2a 2f 20 22 73 68 6f 72 74 5f 63 6f      */ "short_co
34d0: 6c 75 6d 6e 5f 6e 61 6d 65 73 22 2c 0a 20 20 20  lumn_names",.   
34e0: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
34f0: 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a  / PragTyp_FLAG,.
3500: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
3510: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
3520: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c  Arg:      */ SQL
3530: 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d 65  ITE_ShortColName
3540: 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7b 20  s },.#endif.  { 
3550: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
3560: 20 22 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79 22   "shrink_memory"
3570: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
3580: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 53  p:  */ PragTyp_S
3590: 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59 2c 0a 20 20  HRINK_MEMORY,.  
35a0: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
35b0: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
35c0: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
35d0: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
35e0: 20 20 2a 2f 20 22 73 6f 66 74 5f 68 65 61 70 5f    */ "soft_heap_
35f0: 6c 69 6d 69 74 22 2c 0a 20 20 20 20 2f 2a 20 65  limit",.    /* e
3600: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
3610: 67 54 79 70 5f 53 4f 46 54 5f 48 45 41 50 5f 4c  gTyp_SOFT_HEAP_L
3620: 49 4d 49 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72  IMIT,.    /* ePr
3630: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
3640: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
3650: 2a 2f 20 30 20 7d 2c 0a 23 69 66 20 21 64 65 66  */ 0 },.#if !def
3660: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
3670: 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 23  _FLAG_PRAGMAS).#
3680: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
3690: 45 5f 44 45 42 55 47 29 0a 20 20 7b 20 2f 2a 20  E_DEBUG).  { /* 
36a0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 73  zName:     */ "s
36b0: 71 6c 5f 74 72 61 63 65 22 2c 0a 20 20 20 20 2f  ql_trace",.    /
36c0: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
36d0: 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20  PragTyp_FLAG,.  
36e0: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
36f0: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
3700: 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54  g:      */ SQLIT
3710: 45 5f 53 71 6c 54 72 61 63 65 20 7d 2c 0a 23 65  E_SqlTrace },.#e
3720: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 20  ndif.#endif.#if 
3730: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3740: 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47  OMIT_SCHEMA_PRAG
3750: 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  MAS).  { /* zNam
3760: 65 3a 20 20 20 20 20 2a 2f 20 22 73 74 61 74 73  e:     */ "stats
3770: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
3780: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
3790: 53 54 41 54 53 2c 0a 20 20 20 20 2f 2a 20 65 50  STATS,.    /* eP
37a0: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67  ragFlag: */ Prag
37b0: 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c  Flag_NeedSchema,
37c0: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
37d0: 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69     */ 0 },.#endi
37e0: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
37f0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
3800: 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a  _PRAGMAS).  { /*
3810: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
3820: 73 79 6e 63 68 72 6f 6e 6f 75 73 22 2c 0a 20 20  synchronous",.  
3830: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
3840: 2a 2f 20 50 72 61 67 54 79 70 5f 53 59 4e 43 48  */ PragTyp_SYNCH
3850: 52 4f 4e 4f 55 53 2c 0a 20 20 20 20 2f 2a 20 65  RONOUS,.    /* e
3860: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61  PragFlag: */ Pra
3870: 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61  gFlag_NeedSchema
3880: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
3890: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
38a0: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
38b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
38c0: 4d 41 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20  MA_PRAGMAS).  { 
38d0: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
38e0: 20 22 74 61 62 6c 65 5f 69 6e 66 6f 22 2c 0a 20   "table_info",. 
38f0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
3900: 20 2a 2f 20 50 72 61 67 54 79 70 5f 54 41 42 4c   */ PragTyp_TABL
3910: 45 5f 49 4e 46 4f 2c 0a 20 20 20 20 2f 2a 20 65  E_INFO,.    /* e
3920: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61  PragFlag: */ Pra
3930: 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61  gFlag_NeedSchema
3940: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
3950: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
3960: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
3970: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
3980: 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f  R_PRAGMAS).  { /
3990: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
39a0: 22 74 65 6d 70 5f 73 74 6f 72 65 22 2c 0a 20 20  "temp_store",.  
39b0: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
39c0: 2a 2f 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f  */ PragTyp_TEMP_
39d0: 53 54 4f 52 45 2c 0a 20 20 20 20 2f 2a 20 65 50  STORE,.    /* eP
39e0: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
39f0: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
3a00: 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20   */ 0 },.  { /* 
3a10: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 74  zName:     */ "t
3a20: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
3a30: 6f 72 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ory",.    /* ePr
3a40: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
3a50: 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 44 49  yp_TEMP_STORE_DI
3a60: 52 45 43 54 4f 52 59 2c 0a 20 20 20 20 2f 2a 20  RECTORY,.    /* 
3a70: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
3a80: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
3a90: 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69     */ 0 },.#endi
3aa0: 66 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  f.  { /* zName: 
3ab0: 20 20 20 20 2a 2f 20 22 74 68 72 65 61 64 73 22      */ "threads"
3ac0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
3ad0: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 54  p:  */ PragTyp_T
3ae0: 48 52 45 41 44 53 2c 0a 20 20 20 20 2f 2a 20 65  HREADS,.    /* e
3af0: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
3b00: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
3b10: 20 20 2a 2f 20 30 20 7d 2c 0a 23 69 66 20 21 64    */ 0 },.#if !d
3b20: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
3b30: 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  IT_SCHEMA_VERSIO
3b40: 4e 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f  N_PRAGMAS).  { /
3b50: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
3b60: 22 75 73 65 72 5f 76 65 72 73 69 6f 6e 22 2c 0a  "user_version",.
3b70: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
3b80: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 48 45 41    */ PragTyp_HEA
3b90: 44 45 52 5f 56 41 4c 55 45 2c 0a 20 20 20 20 2f  DER_VALUE,.    /
3ba0: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
3bb0: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
3bc0: 20 20 20 20 20 2a 2f 20 42 54 52 45 45 5f 55 53       */ BTREE_US
3bd0: 45 52 5f 56 45 52 53 49 4f 4e 20 7d 2c 0a 23 65  ER_VERSION },.#e
3be0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
3bf0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  d(SQLITE_OMIT_FL
3c00: 41 47 5f 50 52 41 47 4d 41 53 29 0a 23 69 66 20  AG_PRAGMAS).#if 
3c10: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
3c20: 45 42 55 47 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  EBUG).  { /* zNa
3c30: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76 64 62 65  me:     */ "vdbe
3c40: 5f 61 64 64 6f 70 74 72 61 63 65 22 2c 0a 20 20  _addoptrace",.  
3c50: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
3c60: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
3c70: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
3c80: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
3c90: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
3ca0: 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54 72  LITE_VdbeAddopTr
3cb0: 61 63 65 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e  ace },.  { /* zN
3cc0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76 64 62  ame:     */ "vdb
3cd0: 65 5f 64 65 62 75 67 22 2c 0a 20 20 20 20 2f 2a  e_debug",.    /*
3ce0: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
3cf0: 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20  ragTyp_FLAG,.   
3d00: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
3d10: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
3d20: 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45  :      */ SQLITE
3d30: 5f 53 71 6c 54 72 61 63 65 7c 53 51 4c 49 54 45  _SqlTrace|SQLITE
3d40: 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c 53 51 4c  _VdbeListing|SQL
3d50: 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 7d 2c  ITE_VdbeTrace },
3d60: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
3d70: 20 20 20 2a 2f 20 22 76 64 62 65 5f 65 71 70 22     */ "vdbe_eqp"
3d80: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
3d90: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46  p:  */ PragTyp_F
3da0: 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  LAG,.    /* ePra
3db0: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
3dc0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
3dd0: 2f 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51 50  / SQLITE_VdbeEQP
3de0: 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65   },.  { /* zName
3df0: 3a 20 20 20 20 20 2a 2f 20 22 76 64 62 65 5f 6c  :     */ "vdbe_l
3e00: 69 73 74 69 6e 67 22 2c 0a 20 20 20 20 2f 2a 20  isting",.    /* 
3e10: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
3e20: 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20  agTyp_FLAG,.    
3e30: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
3e40: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
3e50: 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f        */ SQLITE_
3e60: 56 64 62 65 4c 69 73 74 69 6e 67 20 7d 2c 0a 20  VdbeListing },. 
3e70: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
3e80: 20 2a 2f 20 22 76 64 62 65 5f 74 72 61 63 65 22   */ "vdbe_trace"
3e90: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
3ea0: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46  p:  */ PragTyp_F
3eb0: 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  LAG,.    /* ePra
3ec0: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
3ed0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
3ee0: 2f 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61  / SQLITE_VdbeTra
3ef0: 63 65 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e  ce },.#endif.#en
3f00: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
3f10: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c  (SQLITE_OMIT_WAL
3f20: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
3f30: 20 20 20 20 2a 2f 20 22 77 61 6c 5f 61 75 74 6f      */ "wal_auto
3f40: 63 68 65 63 6b 70 6f 69 6e 74 22 2c 0a 20 20 20  checkpoint",.   
3f50: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
3f60: 2f 20 50 72 61 67 54 79 70 5f 57 41 4c 5f 41 55  / PragTyp_WAL_AU
3f70: 54 4f 43 48 45 43 4b 50 4f 49 4e 54 2c 0a 20 20  TOCHECKPOINT,.  
3f80: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
3f90: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
3fa0: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
3fb0: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
3fc0: 20 20 2a 2f 20 22 77 61 6c 5f 63 68 65 63 6b 70    */ "wal_checkp
3fd0: 6f 69 6e 74 22 2c 0a 20 20 20 20 2f 2a 20 65 50  oint",.    /* eP
3fe0: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
3ff0: 54 79 70 5f 57 41 4c 5f 43 48 45 43 4b 50 4f 49  Typ_WAL_CHECKPOI
4000: 4e 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  NT,.    /* ePrag
4010: 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61  Flag: */ PragFla
4020: 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20  g_NeedSchema,.  
4030: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
4040: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
4050: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
4060: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
4070: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
4080: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 77 72 69 74  me:     */ "writ
4090: 61 62 6c 65 5f 73 63 68 65 6d 61 22 2c 0a 20 20  able_schema",.  
40a0: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
40b0: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
40c0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
40d0: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
40e0: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
40f0: 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d 61  LITE_WriteSchema
4100: 7c 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72 79  |SQLITE_Recovery
4110: 4d 6f 64 65 20 7d 2c 0a 23 65 6e 64 69 66 0a 7d  Mode },.#endif.}
4120: 3b 0a 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20 70  ;./* Number of p
4130: 72 61 67 6d 61 73 3a 20 35 39 20 6f 6e 20 62 79  ragmas: 59 on by
4140: 20 64 65 66 61 75 6c 74 2c 20 37 33 20 74 6f 74   default, 73 tot
4150: 61 6c 2e 20 2a 2f 0a 2f 2a 20 45 6e 64 20 6f 66  al. */./* End of
4160: 20 74 68 65 20 61 75 74 6f 6d 61 74 69 63 61 6c   the automatical
4170: 6c 79 20 67 65 6e 65 72 61 74 65 64 20 70 72 61  ly generated pra
4180: 67 6d 61 20 74 61 62 6c 65 2e 0a 2a 2a 2a 2a 2a  gma table..*****
4190: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
41a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
41b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
41c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
41d0: 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 49  ******/../*.** I
41e0: 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69 76  nterpret the giv
41f0: 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20 73  en string as a s
4200: 61 66 65 74 79 20 6c 65 76 65 6c 2e 20 20 52 65  afety level.  Re
4210: 74 75 72 6e 20 30 20 66 6f 72 20 4f 46 46 2c 0a  turn 0 for OFF,.
4220: 2a 2a 20 31 20 66 6f 72 20 4f 4e 20 6f 72 20 4e  ** 1 for ON or N
4230: 4f 52 4d 41 4c 20 61 6e 64 20 32 20 66 6f 72 20  ORMAL and 2 for 
4240: 46 55 4c 4c 2e 20 20 52 65 74 75 72 6e 20 31 20  FULL.  Return 1 
4250: 66 6f 72 20 61 6e 20 65 6d 70 74 79 20 6f 72 20  for an empty or 
4260: 0a 2a 2a 20 75 6e 72 65 63 6f 67 6e 69 7a 65 64  .** unrecognized
4270: 20 73 74 72 69 6e 67 20 61 72 67 75 6d 65 6e 74   string argument
4280: 2e 20 20 54 68 65 20 46 55 4c 4c 20 6f 70 74 69  .  The FULL opti
4290: 6f 6e 20 69 73 20 64 69 73 61 6c 6c 6f 77 65 64  on is disallowed
42a0: 0a 2a 2a 20 69 66 20 74 68 65 20 6f 6d 69 74 46  .** if the omitF
42b0: 75 6c 6c 20 70 61 72 61 6d 65 74 65 72 20 69 74  ull parameter it
42c0: 20 31 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20 74   1..**.** Note t
42d0: 68 61 74 20 74 68 65 20 76 61 6c 75 65 73 20 72  hat the values r
42e0: 65 74 75 72 6e 65 64 20 61 72 65 20 6f 6e 65 20  eturned are one 
42f0: 6c 65 73 73 20 74 68 61 74 20 74 68 65 20 76 61  less that the va
4300: 6c 75 65 73 20 74 68 61 74 0a 2a 2a 20 73 68 6f  lues that.** sho
4310: 75 6c 64 20 62 65 20 70 61 73 73 65 64 20 69 6e  uld be passed in
4320: 74 6f 20 73 71 6c 69 74 65 33 42 74 72 65 65 53  to sqlite3BtreeS
4330: 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 29 2e  etSafetyLevel().
4340: 20 20 54 68 65 20 69 73 20 64 6f 6e 65 0a 2a 2a    The is done.**
4350: 20 74 6f 20 73 75 70 70 6f 72 74 20 6c 65 67 61   to support lega
4360: 63 79 20 53 51 4c 20 63 6f 64 65 2e 20 20 54 68  cy SQL code.  Th
4370: 65 20 73 61 66 65 74 79 20 6c 65 76 65 6c 20 75  e safety level u
4380: 73 65 64 20 74 6f 20 62 65 20 62 6f 6f 6c 65 61  sed to be boolea
4390: 6e 0a 2a 2a 20 61 6e 64 20 6f 6c 64 65 72 20 73  n.** and older s
43a0: 63 72 69 70 74 73 20 6d 61 79 20 68 61 76 65 20  cripts may have 
43b0: 75 73 65 64 20 6e 75 6d 62 65 72 73 20 30 20 66  used numbers 0 f
43c0: 6f 72 20 4f 46 46 20 61 6e 64 20 31 20 66 6f 72  or OFF and 1 for
43d0: 20 4f 4e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 75   ON..*/.static u
43e0: 38 20 67 65 74 53 61 66 65 74 79 4c 65 76 65 6c  8 getSafetyLevel
43f0: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c 20  (const char *z, 
4400: 69 6e 74 20 6f 6d 69 74 46 75 6c 6c 2c 20 75 38  int omitFull, u8
4410: 20 64 66 6c 74 29 7b 0a 20 20 20 20 20 20 20 20   dflt){.        
4420: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4430: 20 20 20 20 20 2f 2a 20 31 32 33 34 35 36 37 38       /* 12345678
4440: 39 20 31 32 33 34 35 36 37 38 39 20 2a 2f 0a 20  9 123456789 */. 
4450: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
4460: 61 72 20 7a 54 65 78 74 5b 5d 20 3d 20 22 6f 6e  ar zText[] = "on
4470: 6f 66 66 61 6c 73 65 79 65 73 74 72 75 65 66 75  offalseyestruefu
4480: 6c 6c 22 3b 0a 20 20 73 74 61 74 69 63 20 63 6f  ll";.  static co
4490: 6e 73 74 20 75 38 20 69 4f 66 66 73 65 74 5b 5d  nst u8 iOffset[]
44a0: 20 3d 20 7b 30 2c 20 31 2c 20 32 2c 20 34 2c 20   = {0, 1, 2, 4, 
44b0: 39 2c 20 31 32 2c 20 31 36 7d 3b 0a 20 20 73 74  9, 12, 16};.  st
44c0: 61 74 69 63 20 63 6f 6e 73 74 20 75 38 20 69 4c  atic const u8 iL
44d0: 65 6e 67 74 68 5b 5d 20 3d 20 7b 32 2c 20 32 2c  ength[] = {2, 2,
44e0: 20 33 2c 20 35 2c 20 33 2c 20 34 2c 20 34 7d 3b   3, 5, 3, 4, 4};
44f0: 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
4500: 75 38 20 69 56 61 6c 75 65 5b 5d 20 3d 20 20 7b  u8 iValue[] =  {
4510: 31 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20 31  1, 0, 0, 0, 1, 1
4520: 2c 20 32 7d 3b 0a 20 20 69 6e 74 20 69 2c 20 6e  , 2};.  int i, n
4530: 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33 49  ;.  if( sqlite3I
4540: 73 64 69 67 69 74 28 2a 7a 29 20 29 7b 0a 20 20  sdigit(*z) ){.  
4550: 20 20 72 65 74 75 72 6e 20 28 75 38 29 73 71 6c    return (u8)sql
4560: 69 74 65 33 41 74 6f 69 28 7a 29 3b 0a 20 20 7d  ite3Atoi(z);.  }
4570: 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 53 74  .  n = sqlite3St
4580: 72 6c 65 6e 33 30 28 7a 29 3b 0a 20 20 66 6f 72  rlen30(z);.  for
4590: 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53 69 7a  (i=0; i<ArraySiz
45a0: 65 28 69 4c 65 6e 67 74 68 29 2d 6f 6d 69 74 46  e(iLength)-omitF
45b0: 75 6c 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 69  ull; i++){.    i
45c0: 66 28 20 69 4c 65 6e 67 74 68 5b 69 5d 3d 3d 6e  f( iLength[i]==n
45d0: 20 26 26 20 73 71 6c 69 74 65 33 53 74 72 4e 49   && sqlite3StrNI
45e0: 43 6d 70 28 26 7a 54 65 78 74 5b 69 4f 66 66 73  Cmp(&zText[iOffs
45f0: 65 74 5b 69 5d 5d 2c 7a 2c 6e 29 3d 3d 30 20 29  et[i]],z,n)==0 )
4600: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20 69  {.      return i
4610: 56 61 6c 75 65 5b 69 5d 3b 0a 20 20 20 20 7d 0a  Value[i];.    }.
4620: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 64 66 6c    }.  return dfl
4630: 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  t;.}../*.** Inte
4640: 72 70 72 65 74 20 74 68 65 20 67 69 76 65 6e 20  rpret the given 
4650: 73 74 72 69 6e 67 20 61 73 20 61 20 62 6f 6f 6c  string as a bool
4660: 65 61 6e 20 76 61 6c 75 65 2e 0a 2a 2f 0a 75 38  ean value..*/.u8
4670: 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
4680: 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  an(const char *z
4690: 2c 20 75 38 20 64 66 6c 74 29 7b 0a 20 20 72 65  , u8 dflt){.  re
46a0: 74 75 72 6e 20 67 65 74 53 61 66 65 74 79 4c 65  turn getSafetyLe
46b0: 76 65 6c 28 7a 2c 31 2c 64 66 6c 74 29 21 3d 30  vel(z,1,dflt)!=0
46c0: 3b 0a 7d 0a 0a 2f 2a 20 54 68 65 20 73 71 6c 69  ;.}../* The sqli
46d0: 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 29 20  te3GetBoolean() 
46e0: 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65 64  function is used
46f0: 20 62 79 20 6f 74 68 65 72 20 6d 6f 64 75 6c 65   by other module
4700: 73 20 62 75 74 20 74 68 65 0a 2a 2a 20 72 65 6d  s but the.** rem
4710: 61 69 6e 64 65 72 20 6f 66 20 74 68 69 73 20 66  ainder of this f
4720: 69 6c 65 20 69 73 20 73 70 65 63 69 66 69 63 20  ile is specific 
4730: 74 6f 20 50 52 41 47 4d 41 20 70 72 6f 63 65 73  to PRAGMA proces
4740: 73 69 6e 67 2e 20 20 53 6f 20 6f 6d 69 74 0a 2a  sing.  So omit.*
4750: 2a 20 74 68 65 20 72 65 73 74 20 6f 66 20 74 68  * the rest of th
4760: 65 20 66 69 6c 65 20 69 66 20 50 52 41 47 4d 41  e file if PRAGMA
4770: 73 20 61 72 65 20 6f 6d 69 74 74 65 64 20 66 72  s are omitted fr
4780: 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a 2f  om the build..*/
4790: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
47a0: 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41  LITE_OMIT_PRAGMA
47b0: 29 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72  )../*.** Interpr
47c0: 65 74 20 74 68 65 20 67 69 76 65 6e 20 73 74 72  et the given str
47d0: 69 6e 67 20 61 73 20 61 20 6c 6f 63 6b 69 6e 67  ing as a locking
47e0: 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a 2a 2f 0a   mode value..*/.
47f0: 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 4c 6f  static int getLo
4800: 63 6b 69 6e 67 4d 6f 64 65 28 63 6f 6e 73 74 20  ckingMode(const 
4810: 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 66 28 20  char *z){.  if( 
4820: 7a 20 29 7b 0a 20 20 20 20 69 66 28 20 30 3d 3d  z ){.    if( 0==
4830: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
4840: 2c 20 22 65 78 63 6c 75 73 69 76 65 22 29 20 29  , "exclusive") )
4850: 20 72 65 74 75 72 6e 20 50 41 47 45 52 5f 4c 4f   return PAGER_LO
4860: 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53  CKINGMODE_EXCLUS
4870: 49 56 45 3b 0a 20 20 20 20 69 66 28 20 30 3d 3d  IVE;.    if( 0==
4880: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
4890: 2c 20 22 6e 6f 72 6d 61 6c 22 29 20 29 20 72 65  , "normal") ) re
48a0: 74 75 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49  turn PAGER_LOCKI
48b0: 4e 47 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 3b 0a 20  NGMODE_NORMAL;. 
48c0: 20 7d 0a 20 20 72 65 74 75 72 6e 20 50 41 47 45   }.  return PAGE
48d0: 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 51 55  R_LOCKINGMODE_QU
48e0: 45 52 59 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66 20  ERY;.}..#ifndef 
48f0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
4900: 56 41 43 55 55 4d 0a 2f 2a 0a 2a 2a 20 49 6e 74  VACUUM./*.** Int
4910: 65 72 70 72 65 74 20 74 68 65 20 67 69 76 65 6e  erpret the given
4920: 20 73 74 72 69 6e 67 20 61 73 20 61 6e 20 61 75   string as an au
4930: 74 6f 2d 76 61 63 75 75 6d 20 6d 6f 64 65 20 76  to-vacuum mode v
4940: 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65 20  alue..**.** The 
4950: 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 69 6e 67  following string
4960: 73 2c 20 22 6e 6f 6e 65 22 2c 20 22 66 75 6c 6c  s, "none", "full
4970: 22 20 61 6e 64 20 22 69 6e 63 72 65 6d 65 6e 74  " and "increment
4980: 61 6c 22 20 61 72 65 20 0a 2a 2a 20 61 63 63 65  al" are .** acce
4990: 70 74 61 62 6c 65 2c 20 61 73 20 61 72 65 20 74  ptable, as are t
49a0: 68 65 69 72 20 6e 75 6d 65 72 69 63 20 65 71 75  heir numeric equ
49b0: 69 76 61 6c 65 6e 74 73 3a 20 30 2c 20 31 20 61  ivalents: 0, 1 a
49c0: 6e 64 20 32 20 72 65 73 70 65 63 74 69 76 65 6c  nd 2 respectivel
49d0: 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  y..*/.static int
49e0: 20 67 65 74 41 75 74 6f 56 61 63 75 75 6d 28 63   getAutoVacuum(c
49f0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20  onst char *z){. 
4a00: 20 69 6e 74 20 69 3b 0a 20 20 69 66 28 20 30 3d   int i;.  if( 0=
4a10: 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28  =sqlite3StrICmp(
4a20: 7a 2c 20 22 6e 6f 6e 65 22 29 20 29 20 72 65 74  z, "none") ) ret
4a30: 75 72 6e 20 42 54 52 45 45 5f 41 55 54 4f 56 41  urn BTREE_AUTOVA
4a40: 43 55 55 4d 5f 4e 4f 4e 45 3b 0a 20 20 69 66 28  CUUM_NONE;.  if(
4a50: 20 30 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43   0==sqlite3StrIC
4a60: 6d 70 28 7a 2c 20 22 66 75 6c 6c 22 29 20 29 20  mp(z, "full") ) 
4a70: 72 65 74 75 72 6e 20 42 54 52 45 45 5f 41 55 54  return BTREE_AUT
4a80: 4f 56 41 43 55 55 4d 5f 46 55 4c 4c 3b 0a 20 20  OVACUUM_FULL;.  
4a90: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
4aa0: 72 49 43 6d 70 28 7a 2c 20 22 69 6e 63 72 65 6d  rICmp(z, "increm
4ab0: 65 6e 74 61 6c 22 29 20 29 20 72 65 74 75 72 6e  ental") ) return
4ac0: 20 42 54 52 45 45 5f 41 55 54 4f 56 41 43 55 55   BTREE_AUTOVACUU
4ad0: 4d 5f 49 4e 43 52 3b 0a 20 20 69 20 3d 20 73 71  M_INCR;.  i = sq
4ae0: 6c 69 74 65 33 41 74 6f 69 28 7a 29 3b 0a 20 20  lite3Atoi(z);.  
4af0: 72 65 74 75 72 6e 20 28 75 38 29 28 28 69 3e 3d  return (u8)((i>=
4b00: 30 26 26 69 3c 3d 32 29 3f 69 3a 30 29 3b 0a 7d  0&&i<=2)?i:0);.}
4b10: 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64 65  .#endif /* ifnde
4b20: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
4b30: 54 4f 56 41 43 55 55 4d 20 2a 2f 0a 0a 23 69 66  TOVACUUM */..#if
4b40: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
4b50: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
4b60: 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
4b70: 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20  he given string 
4b80: 61 73 20 61 20 74 65 6d 70 20 64 62 20 6c 6f 63  as a temp db loc
4b90: 61 74 69 6f 6e 2e 20 52 65 74 75 72 6e 20 31 20  ation. Return 1 
4ba0: 66 6f 72 20 66 69 6c 65 0a 2a 2a 20 62 61 63 6b  for file.** back
4bb0: 65 64 20 74 65 6d 70 6f 72 61 72 79 20 64 61 74  ed temporary dat
4bc0: 61 62 61 73 65 73 2c 20 32 20 66 6f 72 20 74 68  abases, 2 for th
4bd0: 65 20 52 65 64 2d 42 6c 61 63 6b 20 74 72 65 65  e Red-Black tree
4be0: 20 69 6e 20 6d 65 6d 6f 72 79 20 64 61 74 61 62   in memory datab
4bf0: 61 73 65 0a 2a 2a 20 61 6e 64 20 30 20 74 6f 20  ase.** and 0 to 
4c00: 75 73 65 20 74 68 65 20 63 6f 6d 70 69 6c 65 2d  use the compile-
4c10: 74 69 6d 65 20 64 65 66 61 75 6c 74 2e 0a 2a 2f  time default..*/
4c20: 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 54  .static int getT
4c30: 65 6d 70 53 74 6f 72 65 28 63 6f 6e 73 74 20 63  empStore(const c
4c40: 68 61 72 20 2a 7a 29 7b 0a 20 20 69 66 28 20 7a  har *z){.  if( z
4c50: 5b 30 5d 3e 3d 27 30 27 20 26 26 20 7a 5b 30 5d  [0]>='0' && z[0]
4c60: 3c 3d 27 32 27 20 29 7b 0a 20 20 20 20 72 65 74  <='2' ){.    ret
4c70: 75 72 6e 20 7a 5b 30 5d 20 2d 20 27 30 27 3b 0a  urn z[0] - '0';.
4c80: 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69    }else if( sqli
4c90: 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 66  te3StrICmp(z, "f
4ca0: 69 6c 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ile")==0 ){.    
4cb0: 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 65 6c 73  return 1;.  }els
4cc0: 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
4cd0: 49 43 6d 70 28 7a 2c 20 22 6d 65 6d 6f 72 79 22  ICmp(z, "memory"
4ce0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75  )==0 ){.    retu
4cf0: 72 6e 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20  rn 2;.  }else{. 
4d00: 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 7d     return 0;.  }
4d10: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
4d20: 49 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  ITE_PAGER_PRAGMA
4d30: 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  S */..#ifndef SQ
4d40: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
4d50: 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 6e  PRAGMAS./*.** In
4d60: 76 61 6c 69 64 61 74 65 20 74 65 6d 70 20 73 74  validate temp st
4d70: 6f 72 61 67 65 2c 20 65 69 74 68 65 72 20 77 68  orage, either wh
4d80: 65 6e 20 74 68 65 20 74 65 6d 70 20 73 74 6f 72  en the temp stor
4d90: 61 67 65 20 69 73 20 63 68 61 6e 67 65 64 0a 2a  age is changed.*
4da0: 2a 20 66 72 6f 6d 20 64 65 66 61 75 6c 74 2c 20  * from default, 
4db0: 6f 72 20 77 68 65 6e 20 27 66 69 6c 65 27 20 61  or when 'file' a
4dc0: 6e 64 20 74 68 65 20 74 65 6d 70 5f 73 74 6f 72  nd the temp_stor
4dd0: 65 5f 64 69 72 65 63 74 6f 72 79 20 68 61 73 20  e_directory has 
4de0: 63 68 61 6e 67 65 64 0a 2a 2f 0a 73 74 61 74 69  changed.*/.stati
4df0: 63 20 69 6e 74 20 69 6e 76 61 6c 69 64 61 74 65  c int invalidate
4e00: 54 65 6d 70 53 74 6f 72 61 67 65 28 50 61 72 73  TempStorage(Pars
4e10: 65 20 2a 70 50 61 72 73 65 29 7b 0a 20 20 73 71  e *pParse){.  sq
4e20: 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 50 61 72  lite3 *db = pPar
4e30: 73 65 2d 3e 64 62 3b 0a 20 20 69 66 28 20 64 62  se->db;.  if( db
4e40: 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 21 3d 30 20  ->aDb[1].pBt!=0 
4e50: 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62 2d 3e  ){.    if( !db->
4e60: 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 73 71  autoCommit || sq
4e70: 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 52 65  lite3BtreeIsInRe
4e80: 61 64 54 72 61 6e 73 28 64 62 2d 3e 61 44 62 5b  adTrans(db->aDb[
4e90: 31 5d 2e 70 42 74 29 20 29 7b 0a 20 20 20 20 20  1].pBt) ){.     
4ea0: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
4eb0: 28 70 50 61 72 73 65 2c 20 22 74 65 6d 70 6f 72  (pParse, "tempor
4ec0: 61 72 79 20 73 74 6f 72 61 67 65 20 63 61 6e 6e  ary storage cann
4ed0: 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20 22 0a  ot be changed ".
4ee0: 20 20 20 20 20 20 20 20 22 66 72 6f 6d 20 77 69          "from wi
4ef0: 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74 69  thin a transacti
4f00: 6f 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74 75  on");.      retu
4f10: 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52 3b  rn SQLITE_ERROR;
4f20: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
4f30: 65 33 42 74 72 65 65 43 6c 6f 73 65 28 64 62 2d  e3BtreeClose(db-
4f40: 3e 61 44 62 5b 31 5d 2e 70 42 74 29 3b 0a 20 20  >aDb[1].pBt);.  
4f50: 20 20 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74    db->aDb[1].pBt
4f60: 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 0;.    sqlite
4f70: 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61 73  3ResetAllSchemas
4f80: 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62 29  OfConnection(db)
4f90: 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 53  ;.  }.  return S
4fa0: 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64  QLITE_OK;.}.#end
4fb0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41 47  if /* SQLITE_PAG
4fc0: 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23  ER_PRAGMAS */..#
4fd0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
4fe0: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
4ff0: 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 54 45  ./*.** If the TE
5000: 4d 50 20 64 61 74 61 62 61 73 65 20 69 73 20 6f  MP database is o
5010: 70 65 6e 2c 20 63 6c 6f 73 65 20 69 74 20 61 6e  pen, close it an
5020: 64 20 6d 61 72 6b 20 74 68 65 20 64 61 74 61 62  d mark the datab
5030: 61 73 65 20 73 63 68 65 6d 61 0a 2a 2a 20 61 73  ase schema.** as
5040: 20 6e 65 65 64 69 6e 67 20 72 65 6c 6f 61 64 69   needing reloadi
5050: 6e 67 2e 20 20 54 68 69 73 20 6d 75 73 74 20 62  ng.  This must b
5060: 65 20 64 6f 6e 65 20 77 68 65 6e 20 75 73 69 6e  e done when usin
5070: 67 20 74 68 65 20 53 51 4c 49 54 45 5f 54 45 4d  g the SQLITE_TEM
5080: 50 5f 53 54 4f 52 45 0a 2a 2a 20 6f 72 20 44 45  P_STORE.** or DE
5090: 46 41 55 4c 54 5f 54 45 4d 50 5f 53 54 4f 52 45  FAULT_TEMP_STORE
50a0: 20 70 72 61 67 6d 61 73 2e 0a 2a 2f 0a 73 74 61   pragmas..*/.sta
50b0: 74 69 63 20 69 6e 74 20 63 68 61 6e 67 65 54 65  tic int changeTe
50c0: 6d 70 53 74 6f 72 61 67 65 28 50 61 72 73 65 20  mpStorage(Parse 
50d0: 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
50e0: 68 61 72 20 2a 7a 53 74 6f 72 61 67 65 54 79 70  har *zStorageTyp
50f0: 65 29 7b 0a 20 20 69 6e 74 20 74 73 20 3d 20 67  e){.  int ts = g
5100: 65 74 54 65 6d 70 53 74 6f 72 65 28 7a 53 74 6f  etTempStore(zSto
5110: 72 61 67 65 54 79 70 65 29 3b 0a 20 20 73 71 6c  rageType);.  sql
5120: 69 74 65 33 20 2a 64 62 20 3d 20 70 50 61 72 73  ite3 *db = pPars
5130: 65 2d 3e 64 62 3b 0a 20 20 69 66 28 20 64 62 2d  e->db;.  if( db-
5140: 3e 74 65 6d 70 5f 73 74 6f 72 65 3d 3d 74 73 20  >temp_store==ts 
5150: 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f  ) return SQLITE_
5160: 4f 4b 3b 0a 20 20 69 66 28 20 69 6e 76 61 6c 69  OK;.  if( invali
5170: 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65 28  dateTempStorage(
5180: 20 70 50 61 72 73 65 20 29 20 21 3d 20 53 51 4c   pParse ) != SQL
5190: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72 65  ITE_OK ){.    re
51a0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
51b0: 52 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 74 65 6d  R;.  }.  db->tem
51c0: 70 5f 73 74 6f 72 65 20 3d 20 28 75 38 29 74 73  p_store = (u8)ts
51d0: 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54  ;.  return SQLIT
51e0: 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  E_OK;.}.#endif /
51f0: 2a 20 53 51 4c 49 54 45 5f 50 41 47 45 52 5f 50  * SQLITE_PAGER_P
5200: 52 41 47 4d 41 53 20 2a 2f 0a 0a 2f 2a 0a 2a 2a  RAGMAS */../*.**
5210: 20 47 65 6e 65 72 61 74 65 20 63 6f 64 65 20 74   Generate code t
5220: 6f 20 72 65 74 75 72 6e 20 61 20 73 69 6e 67 6c  o return a singl
5230: 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65 2e  e integer value.
5240: 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64 20  .*/.static void 
5250: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
5260: 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63  Parse *pParse, c
5270: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 61 62 65  onst char *zLabe
5280: 6c 2c 20 69 36 34 20 76 61 6c 75 65 29 7b 0a 20  l, i64 value){. 
5290: 20 56 64 62 65 20 2a 76 20 3d 20 73 71 6c 69 74   Vdbe *v = sqlit
52a0: 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65  e3GetVdbe(pParse
52b0: 29 3b 0a 20 20 69 6e 74 20 6d 65 6d 20 3d 20 2b  );.  int mem = +
52c0: 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20  +pParse->nMem;. 
52d0: 20 69 36 34 20 2a 70 49 36 34 20 3d 20 73 71 6c   i64 *pI64 = sql
52e0: 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77 28  ite3DbMallocRaw(
52f0: 70 50 61 72 73 65 2d 3e 64 62 2c 20 73 69 7a 65  pParse->db, size
5300: 6f 66 28 76 61 6c 75 65 29 29 3b 0a 20 20 69 66  of(value));.  if
5310: 28 20 70 49 36 34 20 29 7b 0a 20 20 20 20 6d 65  ( pI64 ){.    me
5320: 6d 63 70 79 28 70 49 36 34 2c 20 26 76 61 6c 75  mcpy(pI64, &valu
5330: 65 2c 20 73 69 7a 65 6f 66 28 76 61 6c 75 65 29  e, sizeof(value)
5340: 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65 33  );.  }.  sqlite3
5350: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
5360: 5f 49 6e 74 36 34 2c 20 30 2c 20 6d 65 6d 2c 20  _Int64, 0, mem, 
5370: 30 2c 20 28 63 68 61 72 2a 29 70 49 36 34 2c 20  0, (char*)pI64, 
5380: 50 34 5f 49 4e 54 36 34 29 3b 0a 20 20 73 71 6c  P4_INT64);.  sql
5390: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
53a0: 6c 73 28 76 2c 20 31 29 3b 0a 20 20 73 71 6c 69  ls(v, 1);.  sqli
53b0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
53c0: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
53d0: 4e 41 4d 45 2c 20 7a 4c 61 62 65 6c 2c 20 53 51  NAME, zLabel, SQ
53e0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
53f0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
5400: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
5410: 77 2c 20 6d 65 6d 2c 20 31 29 3b 0a 7d 0a 0a 0a  w, mem, 1);.}...
5420: 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 73 61  /*.** Set the sa
5430: 66 65 74 79 5f 6c 65 76 65 6c 20 61 6e 64 20 70  fety_level and p
5440: 61 67 65 72 20 66 6c 61 67 73 20 66 6f 72 20 70  ager flags for p
5450: 61 67 65 72 20 69 44 62 2e 20 20 4f 72 20 69 66  ager iDb.  Or if
5460: 20 69 44 62 3c 30 0a 2a 2a 20 73 65 74 20 74 68   iDb<0.** set th
5470: 65 73 65 20 76 61 6c 75 65 73 20 66 6f 72 20 61  ese values for a
5480: 6c 6c 20 70 61 67 65 72 73 2e 0a 2a 2f 0a 23 69  ll pagers..*/.#i
5490: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
54a0: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a  T_PAGER_PRAGMAS.
54b0: 73 74 61 74 69 63 20 76 6f 69 64 20 73 65 74 41  static void setA
54c0: 6c 6c 50 61 67 65 72 46 6c 61 67 73 28 73 71 6c  llPagerFlags(sql
54d0: 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 66 28  ite3 *db){.  if(
54e0: 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20   db->autoCommit 
54f0: 29 7b 0a 20 20 20 20 44 62 20 2a 70 44 62 20 3d  ){.    Db *pDb =
5500: 20 64 62 2d 3e 61 44 62 3b 0a 20 20 20 20 69 6e   db->aDb;.    in
5510: 74 20 6e 20 3d 20 64 62 2d 3e 6e 44 62 3b 0a 20  t n = db->nDb;. 
5520: 20 20 20 61 73 73 65 72 74 28 20 53 51 4c 49 54     assert( SQLIT
5530: 45 5f 46 75 6c 6c 46 53 79 6e 63 3d 3d 50 41 47  E_FullFSync==PAG
5540: 45 52 5f 46 55 4c 4c 46 53 59 4e 43 20 29 3b 0a  ER_FULLFSYNC );.
5550: 20 20 20 20 61 73 73 65 72 74 28 20 53 51 4c 49      assert( SQLI
5560: 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e 63  TE_CkptFullFSync
5570: 3d 3d 50 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c  ==PAGER_CKPT_FUL
5580: 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20 20 61 73  LFSYNC );.    as
5590: 73 65 72 74 28 20 53 51 4c 49 54 45 5f 43 61 63  sert( SQLITE_Cac
55a0: 68 65 53 70 69 6c 6c 3d 3d 50 41 47 45 52 5f 43  heSpill==PAGER_C
55b0: 41 43 48 45 53 50 49 4c 4c 20 29 3b 0a 20 20 20  ACHESPILL );.   
55c0: 20 61 73 73 65 72 74 28 20 28 50 41 47 45 52 5f   assert( (PAGER_
55d0: 46 55 4c 4c 46 53 59 4e 43 20 7c 20 50 41 47 45  FULLFSYNC | PAGE
55e0: 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43  R_CKPT_FULLFSYNC
55f0: 20 7c 20 50 41 47 45 52 5f 43 41 43 48 45 53 50   | PAGER_CACHESP
5600: 49 4c 4c 29 0a 20 20 20 20 20 20 20 20 20 20 20  ILL).           
5610: 20 20 3d 3d 20 20 50 41 47 45 52 5f 46 4c 41 47    ==  PAGER_FLAG
5620: 53 5f 4d 41 53 4b 20 29 3b 0a 20 20 20 20 61 73  S_MASK );.    as
5630: 73 65 72 74 28 20 28 70 44 62 2d 3e 73 61 66 65  sert( (pDb->safe
5640: 74 79 5f 6c 65 76 65 6c 20 26 20 50 41 47 45 52  ty_level & PAGER
5650: 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 4d 41 53  _SYNCHRONOUS_MAS
5660: 4b 29 3d 3d 70 44 62 2d 3e 73 61 66 65 74 79 5f  K)==pDb->safety_
5670: 6c 65 76 65 6c 20 29 3b 0a 20 20 20 20 77 68 69  level );.    whi
5680: 6c 65 28 20 28 6e 2d 2d 29 20 3e 20 30 20 29 7b  le( (n--) > 0 ){
5690: 0a 20 20 20 20 20 20 69 66 28 20 70 44 62 2d 3e  .      if( pDb->
56a0: 70 42 74 20 29 7b 0a 20 20 20 20 20 20 20 20 73  pBt ){.        s
56b0: 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 50 61  qlite3BtreeSetPa
56c0: 67 65 72 46 6c 61 67 73 28 70 44 62 2d 3e 70 42  gerFlags(pDb->pB
56d0: 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  t,.             
56e0: 20 20 20 20 70 44 62 2d 3e 73 61 66 65 74 79 5f      pDb->safety_
56f0: 6c 65 76 65 6c 20 7c 20 28 64 62 2d 3e 66 6c 61  level | (db->fla
5700: 67 73 20 26 20 50 41 47 45 52 5f 46 4c 41 47 53  gs & PAGER_FLAGS
5710: 5f 4d 41 53 4b 29 20 29 3b 0a 20 20 20 20 20 20  _MASK) );.      
5720: 7d 0a 20 20 20 20 20 20 70 44 62 2b 2b 3b 0a 20  }.      pDb++;. 
5730: 20 20 20 7d 0a 20 20 7d 0a 7d 0a 23 65 6c 73 65     }.  }.}.#else
5740: 0a 23 20 64 65 66 69 6e 65 20 73 65 74 41 6c 6c  .# define setAll
5750: 50 61 67 65 72 46 6c 61 67 73 28 58 29 20 20 2f  PagerFlags(X)  /
5760: 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64 69  * no-op */.#endi
5770: 66 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72 6e  f.../*.** Return
5780: 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62 6c   a human-readabl
5790: 65 20 6e 61 6d 65 20 66 6f 72 20 61 20 63 6f 6e  e name for a con
57a0: 73 74 72 61 69 6e 74 20 72 65 73 6f 6c 75 74 69  straint resoluti
57b0: 6f 6e 20 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 23 69  on action..*/.#i
57c0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
57d0: 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 73 74  T_FOREIGN_KEY.st
57e0: 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20  atic const char 
57f0: 2a 61 63 74 69 6f 6e 4e 61 6d 65 28 75 38 20 61  *actionName(u8 a
5800: 63 74 69 6f 6e 29 7b 0a 20 20 63 6f 6e 73 74 20  ction){.  const 
5810: 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 73  char *zName;.  s
5820: 77 69 74 63 68 28 20 61 63 74 69 6f 6e 20 29 7b  witch( action ){
5830: 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 53 65 74  .    case OE_Set
5840: 4e 75 6c 6c 3a 20 20 7a 4e 61 6d 65 20 3d 20 22  Null:  zName = "
5850: 53 45 54 20 4e 55 4c 4c 22 3b 20 20 20 20 20 20  SET NULL";      
5860: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
5870: 65 20 4f 45 5f 53 65 74 44 66 6c 74 3a 20 20 7a  e OE_SetDflt:  z
5880: 4e 61 6d 65 20 3d 20 22 53 45 54 20 44 45 46 41  Name = "SET DEFA
5890: 55 4c 54 22 3b 20 20 20 20 20 62 72 65 61 6b 3b  ULT";     break;
58a0: 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 43 61 73  .    case OE_Cas
58b0: 63 61 64 65 3a 20 20 7a 4e 61 6d 65 20 3d 20 22  cade:  zName = "
58c0: 43 41 53 43 41 44 45 22 3b 20 20 20 20 20 20 20  CASCADE";       
58d0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73    break;.    cas
58e0: 65 20 4f 45 5f 52 65 73 74 72 69 63 74 3a 20 7a  e OE_Restrict: z
58f0: 4e 61 6d 65 20 3d 20 22 52 45 53 54 52 49 43 54  Name = "RESTRICT
5900: 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b  ";        break;
5910: 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20 20  .    default:   
5920: 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20 22         zName = "
5930: 4e 4f 20 41 43 54 49 4f 4e 22 3b 20 20 0a 20 20  NO ACTION";  .  
5940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5950: 20 20 20 20 61 73 73 65 72 74 28 20 61 63 74 69      assert( acti
5960: 6f 6e 3d 3d 4f 45 5f 4e 6f 6e 65 20 29 3b 20 62  on==OE_None ); b
5970: 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 72 65 74 75  reak;.  }.  retu
5980: 72 6e 20 7a 4e 61 6d 65 3b 0a 7d 0a 23 65 6e 64  rn zName;.}.#end
5990: 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 50 61 72 61 6d  if.../*.** Param
59a0: 65 74 65 72 20 65 4d 6f 64 65 20 6d 75 73 74 20  eter eMode must 
59b0: 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 50 41  be one of the PA
59c0: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
59d0: 58 58 58 20 63 6f 6e 73 74 61 6e 74 73 0a 2a 2a  XXX constants.**
59e0: 20 64 65 66 69 6e 65 64 20 69 6e 20 70 61 67 65   defined in page
59f0: 72 2e 68 2e 20 54 68 69 73 20 66 75 6e 63 74 69  r.h. This functi
5a00: 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20 61  on returns the a
5a10: 73 73 6f 63 69 61 74 65 64 20 6c 6f 77 65 72 63  ssociated lowerc
5a20: 61 73 65 0a 2a 2a 20 6a 6f 75 72 6e 61 6c 2d 6d  ase.** journal-m
5a30: 6f 64 65 20 6e 61 6d 65 2e 0a 2a 2f 0a 63 6f 6e  ode name..*/.con
5a40: 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65 33  st char *sqlite3
5a50: 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28  JournalModename(
5a60: 69 6e 74 20 65 4d 6f 64 65 29 7b 0a 20 20 73 74  int eMode){.  st
5a70: 61 74 69 63 20 63 68 61 72 20 2a 20 63 6f 6e 73  atic char * cons
5a80: 74 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b 5d 20 3d  t azModeName[] =
5a90: 20 7b 0a 20 20 20 20 22 64 65 6c 65 74 65 22 2c   {.    "delete",
5aa0: 20 22 70 65 72 73 69 73 74 22 2c 20 22 6f 66 66   "persist", "off
5ab0: 22 2c 20 22 74 72 75 6e 63 61 74 65 22 2c 20 22  ", "truncate", "
5ac0: 6d 65 6d 6f 72 79 22 0a 23 69 66 6e 64 65 66 20  memory".#ifndef 
5ad0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c 0a  SQLITE_OMIT_WAL.
5ae0: 20 20 20 20 20 2c 20 22 77 61 6c 22 0a 23 65 6e       , "wal".#en
5af0: 64 69 66 0a 20 20 7d 3b 0a 20 20 61 73 73 65 72  dif.  };.  asser
5b00: 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  t( PAGER_JOURNAL
5b10: 4d 4f 44 45 5f 44 45 4c 45 54 45 3d 3d 30 20 29  MODE_DELETE==0 )
5b20: 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47 45  ;.  assert( PAGE
5b30: 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50 45  R_JOURNALMODE_PE
5b40: 52 53 49 53 54 3d 3d 31 20 29 3b 0a 20 20 61 73  RSIST==1 );.  as
5b50: 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52  sert( PAGER_JOUR
5b60: 4e 41 4c 4d 4f 44 45 5f 4f 46 46 3d 3d 32 20 29  NALMODE_OFF==2 )
5b70: 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47 45  ;.  assert( PAGE
5b80: 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54 52  R_JOURNALMODE_TR
5b90: 55 4e 43 41 54 45 3d 3d 33 20 29 3b 0a 20 20 61  UNCATE==3 );.  a
5ba0: 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55  ssert( PAGER_JOU
5bb0: 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59 3d  RNALMODE_MEMORY=
5bc0: 3d 34 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =4 );.  assert( 
5bd0: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
5be0: 45 5f 57 41 4c 3d 3d 35 20 29 3b 0a 20 20 61 73  E_WAL==5 );.  as
5bf0: 73 65 72 74 28 20 65 4d 6f 64 65 3e 3d 30 20 26  sert( eMode>=0 &
5c00: 26 20 65 4d 6f 64 65 3c 3d 41 72 72 61 79 53 69  & eMode<=ArraySi
5c10: 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29 20 29  ze(azModeName) )
5c20: 3b 0a 0a 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d  ;..  if( eMode==
5c30: 41 72 72 61 79 53 69 7a 65 28 61 7a 4d 6f 64 65  ArraySize(azMode
5c40: 4e 61 6d 65 29 20 29 20 72 65 74 75 72 6e 20 30  Name) ) return 0
5c50: 3b 0a 20 20 72 65 74 75 72 6e 20 61 7a 4d 6f 64  ;.  return azMod
5c60: 65 4e 61 6d 65 5b 65 4d 6f 64 65 5d 3b 0a 7d 0a  eName[eMode];.}.
5c70: 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 20 61  ./*.** Process a
5c80: 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65 6e   pragma statemen
5c90: 74 2e 20 20 0a 2a 2a 0a 2a 2a 20 50 72 61 67 6d  t.  .**.** Pragm
5ca0: 61 73 20 61 72 65 20 6f 66 20 74 68 69 73 20 66  as are of this f
5cb0: 6f 72 6d 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20 20  orm:.**.**      
5cc0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
5cd0: 2e 5d 69 64 20 5b 3d 20 76 61 6c 75 65 5d 0a 2a  .]id [= value].*
5ce0: 2a 0a 2a 2a 20 54 68 65 20 69 64 65 6e 74 69 66  *.** The identif
5cf0: 69 65 72 20 6d 69 67 68 74 20 61 6c 73 6f 20 62  ier might also b
5d00: 65 20 61 20 73 74 72 69 6e 67 2e 20 20 54 68 65  e a string.  The
5d10: 20 76 61 6c 75 65 20 69 73 20 61 20 73 74 72 69   value is a stri
5d20: 6e 67 2c 20 61 6e 64 0a 2a 2a 20 69 64 65 6e 74  ng, and.** ident
5d30: 69 66 69 65 72 2c 20 6f 72 20 61 20 6e 75 6d 62  ifier, or a numb
5d40: 65 72 2e 20 20 49 66 20 6d 69 6e 75 73 46 6c 61  er.  If minusFla
5d50: 67 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e 20  g is true, then 
5d60: 74 68 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a 20  the value is.** 
5d70: 61 20 6e 75 6d 62 65 72 20 74 68 61 74 20 77 61  a number that wa
5d80: 73 20 70 72 65 63 65 64 65 64 20 62 79 20 61 20  s preceded by a 
5d90: 6d 69 6e 75 73 20 73 69 67 6e 2e 0a 2a 2a 0a 2a  minus sign..**.*
5da0: 2a 20 49 66 20 74 68 65 20 6c 65 66 74 20 73 69  * If the left si
5db0: 64 65 20 69 73 20 22 64 61 74 61 62 61 73 65 2e  de is "database.
5dc0: 69 64 22 20 74 68 65 6e 20 70 49 64 31 20 69 73  id" then pId1 is
5dd0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6e 61   the database na
5de0: 6d 65 0a 2a 2a 20 61 6e 64 20 70 49 64 32 20 69  me.** and pId2 i
5df0: 73 20 74 68 65 20 69 64 2e 20 20 49 66 20 74 68  s the id.  If th
5e00: 65 20 6c 65 66 74 20 73 69 64 65 20 69 73 20 6a  e left side is j
5e10: 75 73 74 20 22 69 64 22 20 74 68 65 6e 20 70 49  ust "id" then pI
5e20: 64 31 20 69 73 20 74 68 65 0a 2a 2a 20 69 64 20  d1 is the.** id 
5e30: 61 6e 64 20 70 49 64 32 20 69 73 20 61 6e 79 20  and pId2 is any 
5e40: 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0a 2a 2f  empty string..*/
5e50: 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72 61  .void sqlite3Pra
5e60: 67 6d 61 28 0a 20 20 50 61 72 73 65 20 2a 70 50  gma(.  Parse *pP
5e70: 61 72 73 65 2c 20 0a 20 20 54 6f 6b 65 6e 20 2a  arse, .  Token *
5e80: 70 49 64 31 2c 20 20 20 20 20 20 20 20 2f 2a 20  pId1,        /* 
5e90: 46 69 72 73 74 20 70 61 72 74 20 6f 66 20 5b 64  First part of [d
5ea0: 61 74 61 62 61 73 65 2e 5d 69 64 20 66 69 65 6c  atabase.]id fiel
5eb0: 64 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 49  d */.  Token *pI
5ec0: 64 32 2c 20 20 20 20 20 20 20 20 2f 2a 20 53 65  d2,        /* Se
5ed0: 63 6f 6e 64 20 70 61 72 74 20 6f 66 20 5b 64 61  cond part of [da
5ee0: 74 61 62 61 73 65 2e 5d 69 64 20 66 69 65 6c 64  tabase.]id field
5ef0: 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 54  , or NULL */.  T
5f00: 6f 6b 65 6e 20 2a 70 56 61 6c 75 65 2c 20 20 20  oken *pValue,   
5f10: 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 66 6f 72 20     /* Token for 
5f20: 3c 76 61 6c 75 65 3e 2c 20 6f 72 20 4e 55 4c 4c  <value>, or NULL
5f30: 20 2a 2f 0a 20 20 69 6e 74 20 6d 69 6e 75 73 46   */.  int minusF
5f40: 6c 61 67 20 20 20 20 20 20 20 2f 2a 20 54 72 75  lag       /* Tru
5f50: 65 20 69 66 20 61 20 27 2d 27 20 73 69 67 6e 20  e if a '-' sign 
5f60: 70 72 65 63 65 64 65 64 20 3c 76 61 6c 75 65 3e  preceded <value>
5f70: 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 2a 7a   */.){.  char *z
5f80: 4c 65 66 74 20 3d 20 30 3b 20 20 20 20 20 20 20  Left = 0;       
5f90: 2f 2a 20 4e 75 6c 2d 74 65 72 6d 69 6e 61 74 65  /* Nul-terminate
5fa0: 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 3c  d UTF-8 string <
5fb0: 69 64 3e 20 2a 2f 0a 20 20 63 68 61 72 20 2a 7a  id> */.  char *z
5fc0: 52 69 67 68 74 20 3d 20 30 3b 20 20 20 20 20 20  Right = 0;      
5fd0: 2f 2a 20 4e 75 6c 2d 74 65 72 6d 69 6e 61 74 65  /* Nul-terminate
5fe0: 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20 3c  d UTF-8 string <
5ff0: 76 61 6c 75 65 3e 2c 20 6f 72 20 4e 55 4c 4c 20  value>, or NULL 
6000: 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20  */.  const char 
6010: 2a 7a 44 62 20 3d 20 30 3b 20 20 20 2f 2a 20 54  *zDb = 0;   /* T
6020: 68 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  he database name
6030: 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64   */.  Token *pId
6040: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
6050: 50 6f 69 6e 74 65 72 20 74 6f 20 3c 69 64 3e 20  Pointer to <id> 
6060: 74 6f 6b 65 6e 20 2a 2f 0a 20 20 63 68 61 72 20  token */.  char 
6070: 2a 61 46 63 6e 74 6c 5b 34 5d 3b 20 20 20 20 20  *aFcntl[4];     
6080: 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74 6f    /* Argument to
6090: 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50 52   SQLITE_FCNTL_PR
60a0: 41 47 4d 41 20 2a 2f 0a 20 20 69 6e 74 20 69 44  AGMA */.  int iD
60b0: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
60c0: 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 6e 64   /* Database ind
60d0: 65 78 20 66 6f 72 20 3c 64 61 74 61 62 61 73 65  ex for <database
60e0: 3e 20 2a 2f 0a 20 20 69 6e 74 20 6c 77 72 2c 20  > */.  int lwr, 
60f0: 75 70 72 2c 20 6d 69 64 20 3d 20 30 3b 20 20 20  upr, mid = 0;   
6100: 20 20 20 20 2f 2a 20 42 69 6e 61 72 79 20 73 65      /* Binary se
6110: 61 72 63 68 20 62 6f 75 6e 64 73 20 2a 2f 0a 20  arch bounds */. 
6120: 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20 20   int rc;        
6130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
6140: 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 66 6f   return value fo
6150: 72 6d 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f  rm SQLITE_FCNTL_
6160: 50 52 41 47 4d 41 20 2a 2f 0a 20 20 73 71 6c 69  PRAGMA */.  sqli
6170: 74 65 33 20 2a 64 62 20 3d 20 70 50 61 72 73 65  te3 *db = pParse
6180: 2d 3e 64 62 3b 20 20 20 20 2f 2a 20 54 68 65 20  ->db;    /* The 
6190: 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
61a0: 69 6f 6e 20 2a 2f 0a 20 20 44 62 20 2a 70 44 62  ion */.  Db *pDb
61b0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
61c0: 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 70 65        /* The spe
61d0: 63 69 66 69 63 20 64 61 74 61 62 61 73 65 20 62  cific database b
61e0: 65 69 6e 67 20 70 72 61 67 6d 61 65 64 20 2a 2f  eing pragmaed */
61f0: 0a 20 20 56 64 62 65 20 2a 76 20 3d 20 73 71 6c  .  Vdbe *v = sql
6200: 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72  ite3GetVdbe(pPar
6210: 73 65 29 3b 20 20 2f 2a 20 50 72 65 70 61 72 65  se);  /* Prepare
6220: 64 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a 20  d statement */. 
6230: 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 73 50   const struct sP
6240: 72 61 67 6d 61 4e 61 6d 65 73 20 2a 70 50 72 61  ragmaNames *pPra
6250: 67 6d 61 3b 0a 0a 20 20 69 66 28 20 76 3d 3d 30  gma;..  if( v==0
6260: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 73 71 6c   ) return;.  sql
6270: 69 74 65 33 56 64 62 65 52 75 6e 4f 6e 6c 79 4f  ite3VdbeRunOnlyO
6280: 6e 63 65 28 76 29 3b 0a 20 20 70 50 61 72 73 65  nce(v);.  pParse
6290: 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 0a 20 20 2f  ->nMem = 2;..  /
62a0: 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
62b0: 5b 64 61 74 61 62 61 73 65 2e 5d 20 70 61 72 74  [database.] part
62c0: 20 6f 66 20 74 68 65 20 70 72 61 67 6d 61 20 73   of the pragma s
62d0: 74 61 74 65 6d 65 6e 74 2e 20 69 44 62 20 69 73  tatement. iDb is
62e0: 20 74 68 65 0a 20 20 2a 2a 20 69 6e 64 65 78 20   the.  ** index 
62f0: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
6300: 74 68 69 73 20 70 72 61 67 6d 61 20 69 73 20 62  this pragma is b
6310: 65 69 6e 67 20 61 70 70 6c 69 65 64 20 74 6f 20  eing applied to 
6320: 69 6e 20 64 62 2e 61 44 62 5b 5d 2e 20 2a 2f 0a  in db.aDb[]. */.
6330: 20 20 69 44 62 20 3d 20 73 71 6c 69 74 65 33 54    iDb = sqlite3T
6340: 77 6f 50 61 72 74 4e 61 6d 65 28 70 50 61 72 73  woPartName(pPars
6350: 65 2c 20 70 49 64 31 2c 20 70 49 64 32 2c 20 26  e, pId1, pId2, &
6360: 70 49 64 29 3b 0a 20 20 69 66 28 20 69 44 62 3c  pId);.  if( iDb<
6370: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 70 44  0 ) return;.  pD
6380: 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62  b = &db->aDb[iDb
6390: 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  ];..  /* If the 
63a0: 74 65 6d 70 20 64 61 74 61 62 61 73 65 20 68 61  temp database ha
63b0: 73 20 62 65 65 6e 20 65 78 70 6c 69 63 69 74 6c  s been explicitl
63c0: 79 20 6e 61 6d 65 64 20 61 73 20 70 61 72 74 20  y named as part 
63d0: 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 70 72 61  of the .  ** pra
63e0: 67 6d 61 2c 20 6d 61 6b 65 20 73 75 72 65 20 69  gma, make sure i
63f0: 74 20 69 73 20 6f 70 65 6e 2e 20 0a 20 20 2a 2f  t is open. .  */
6400: 0a 20 20 69 66 28 20 69 44 62 3d 3d 31 20 26 26  .  if( iDb==1 &&
6410: 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70   sqlite3OpenTemp
6420: 44 61 74 61 62 61 73 65 28 70 50 61 72 73 65 29  Database(pParse)
6430: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a   ){.    return;.
6440: 20 20 7d 0a 0a 20 20 7a 4c 65 66 74 20 3d 20 73    }..  zLeft = s
6450: 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f  qlite3NameFromTo
6460: 6b 65 6e 28 64 62 2c 20 70 49 64 29 3b 0a 20 20  ken(db, pId);.  
6470: 69 66 28 20 21 7a 4c 65 66 74 20 29 20 72 65 74  if( !zLeft ) ret
6480: 75 72 6e 3b 0a 20 20 69 66 28 20 6d 69 6e 75 73  urn;.  if( minus
6490: 46 6c 61 67 20 29 7b 0a 20 20 20 20 7a 52 69 67  Flag ){.    zRig
64a0: 68 74 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69  ht = sqlite3MPri
64b0: 6e 74 66 28 64 62 2c 20 22 2d 25 54 22 2c 20 70  ntf(db, "-%T", p
64c0: 56 61 6c 75 65 29 3b 0a 20 20 7d 65 6c 73 65 7b  Value);.  }else{
64d0: 0a 20 20 20 20 7a 52 69 67 68 74 20 3d 20 73 71  .    zRight = sq
64e0: 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b  lite3NameFromTok
64f0: 65 6e 28 64 62 2c 20 70 56 61 6c 75 65 29 3b 0a  en(db, pValue);.
6500: 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70    }..  assert( p
6510: 49 64 32 20 29 3b 0a 20 20 7a 44 62 20 3d 20 70  Id2 );.  zDb = p
6520: 49 64 32 2d 3e 6e 3e 30 20 3f 20 70 44 62 2d 3e  Id2->n>0 ? pDb->
6530: 7a 4e 61 6d 65 20 3a 20 30 3b 0a 20 20 69 66 28  zName : 0;.  if(
6540: 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63   sqlite3AuthChec
6550: 6b 28 70 50 61 72 73 65 2c 20 53 51 4c 49 54 45  k(pParse, SQLITE
6560: 5f 50 52 41 47 4d 41 2c 20 7a 4c 65 66 74 2c 20  _PRAGMA, zLeft, 
6570: 7a 52 69 67 68 74 2c 20 7a 44 62 29 20 29 7b 0a  zRight, zDb) ){.
6580: 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f      goto pragma_
6590: 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 53  out;.  }..  /* S
65a0: 65 6e 64 20 61 6e 20 53 51 4c 49 54 45 5f 46 43  end an SQLITE_FC
65b0: 4e 54 4c 5f 50 52 41 47 4d 41 20 66 69 6c 65 2d  NTL_PRAGMA file-
65c0: 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 75  control to the u
65d0: 6e 64 65 72 6c 79 69 6e 67 20 56 46 53 0a 20 20  nderlying VFS.  
65e0: 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  ** connection.  
65f0: 49 66 20 69 74 20 72 65 74 75 72 6e 73 20 53 51  If it returns SQ
6600: 4c 49 54 45 5f 4f 4b 2c 20 74 68 65 6e 20 61 73  LITE_OK, then as
6610: 73 75 6d 65 20 74 68 61 74 20 74 68 65 20 56 46  sume that the VF
6620: 53 0a 20 20 2a 2a 20 68 61 6e 64 6c 65 64 20 74  S.  ** handled t
6630: 68 65 20 70 72 61 67 6d 61 20 61 6e 64 20 67 65  he pragma and ge
6640: 6e 65 72 61 74 65 20 61 20 6e 6f 2d 6f 70 20 70  nerate a no-op p
6650: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
6660: 74 2e 0a 20 20 2a 2f 0a 20 20 61 46 63 6e 74 6c  t..  */.  aFcntl
6670: 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 46 63 6e 74  [0] = 0;.  aFcnt
6680: 6c 5b 31 5d 20 3d 20 7a 4c 65 66 74 3b 0a 20 20  l[1] = zLeft;.  
6690: 61 46 63 6e 74 6c 5b 32 5d 20 3d 20 7a 52 69 67  aFcntl[2] = zRig
66a0: 68 74 3b 0a 20 20 61 46 63 6e 74 6c 5b 33 5d 20  ht;.  aFcntl[3] 
66b0: 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48  = 0;.  db->busyH
66c0: 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30  andler.nBusy = 0
66d0: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
66e0: 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62  _file_control(db
66f0: 2c 20 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46 43  , zDb, SQLITE_FC
6700: 4e 54 4c 5f 50 52 41 47 4d 41 2c 20 28 76 6f 69  NTL_PRAGMA, (voi
6710: 64 2a 29 61 46 63 6e 74 6c 29 3b 0a 20 20 69 66  d*)aFcntl);.  if
6720: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
6730: 29 7b 0a 20 20 20 20 69 66 28 20 61 46 63 6e 74  ){.    if( aFcnt
6740: 6c 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 69 6e  l[0] ){.      in
6750: 74 20 6d 65 6d 20 3d 20 2b 2b 70 50 61 72 73 65  t mem = ++pParse
6760: 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 20 20 73 71  ->nMem;.      sq
6770: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
6780: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
6790: 2c 20 6d 65 6d 2c 20 30 2c 20 61 46 63 6e 74 6c  , mem, 0, aFcntl
67a0: 5b 30 5d 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  [0], 0);.      s
67b0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
67c0: 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20  Cols(v, 1);.    
67d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
67e0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
67f0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 72 65 73  LNAME_NAME, "res
6800: 75 6c 74 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ult", SQLITE_STA
6810: 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
6820: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
6830: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 6d   OP_ResultRow, m
6840: 65 6d 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71  em, 1);.      sq
6850: 6c 69 74 65 33 5f 66 72 65 65 28 61 46 63 6e 74  lite3_free(aFcnt
6860: 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20  l[0]);.    }.   
6870: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
6880: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 21 3d  ;.  }.  if( rc!=
6890: 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20  SQLITE_NOTFOUND 
68a0: 29 7b 0a 20 20 20 20 69 66 28 20 61 46 63 6e 74  ){.    if( aFcnt
68b0: 6c 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 73 71  l[0] ){.      sq
68c0: 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50  lite3ErrorMsg(pP
68d0: 61 72 73 65 2c 20 22 25 73 22 2c 20 61 46 63 6e  arse, "%s", aFcn
68e0: 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 20 20 73 71  tl[0]);.      sq
68f0: 6c 69 74 65 33 5f 66 72 65 65 28 61 46 63 6e 74  lite3_free(aFcnt
6900: 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20  l[0]);.    }.   
6910: 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b   pParse->nErr++;
6920: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 72 63 20  .    pParse->rc 
6930: 3d 20 72 63 3b 0a 20 20 20 20 67 6f 74 6f 20 70  = rc;.    goto p
6940: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a  ragma_out;.  }..
6950: 20 20 2f 2a 20 4c 6f 63 61 74 65 20 74 68 65 20    /* Locate the 
6960: 70 72 61 67 6d 61 20 69 6e 20 74 68 65 20 6c 6f  pragma in the lo
6970: 6f 6b 75 70 20 74 61 62 6c 65 20 2a 2f 0a 20 20  okup table */.  
6980: 6c 77 72 20 3d 20 30 3b 0a 20 20 75 70 72 20 3d  lwr = 0;.  upr =
6990: 20 41 72 72 61 79 53 69 7a 65 28 61 50 72 61 67   ArraySize(aPrag
69a0: 6d 61 4e 61 6d 65 73 29 2d 31 3b 0a 20 20 77 68  maNames)-1;.  wh
69b0: 69 6c 65 28 20 6c 77 72 3c 3d 75 70 72 20 29 7b  ile( lwr<=upr ){
69c0: 0a 20 20 20 20 6d 69 64 20 3d 20 28 6c 77 72 2b  .    mid = (lwr+
69d0: 75 70 72 29 2f 32 3b 0a 20 20 20 20 72 63 20 3d  upr)/2;.    rc =
69e0: 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70   sqlite3_stricmp
69f0: 28 7a 4c 65 66 74 2c 20 61 50 72 61 67 6d 61 4e  (zLeft, aPragmaN
6a00: 61 6d 65 73 5b 6d 69 64 5d 2e 7a 4e 61 6d 65 29  ames[mid].zName)
6a10: 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 30 20  ;.    if( rc==0 
6a20: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 69 66 28  ) break;.    if(
6a30: 20 72 63 3c 30 20 29 7b 0a 20 20 20 20 20 20 75   rc<0 ){.      u
6a40: 70 72 20 3d 20 6d 69 64 20 2d 20 31 3b 0a 20 20  pr = mid - 1;.  
6a50: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6c    }else{.      l
6a60: 77 72 20 3d 20 6d 69 64 20 2b 20 31 3b 0a 20 20  wr = mid + 1;.  
6a70: 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 6c 77    }.  }.  if( lw
6a80: 72 3e 75 70 72 20 29 20 67 6f 74 6f 20 70 72 61  r>upr ) goto pra
6a90: 67 6d 61 5f 6f 75 74 3b 0a 20 20 70 50 72 61 67  gma_out;.  pPrag
6aa0: 6d 61 20 3d 20 26 61 50 72 61 67 6d 61 4e 61 6d  ma = &aPragmaNam
6ab0: 65 73 5b 6d 69 64 5d 3b 0a 0a 20 20 2f 2a 20 4d  es[mid];..  /* M
6ac0: 61 6b 65 20 73 75 72 65 20 74 68 65 20 64 61 74  ake sure the dat
6ad0: 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
6ae0: 6c 6f 61 64 65 64 20 69 66 20 74 68 65 20 70 72  loaded if the pr
6af0: 61 67 6d 61 20 72 65 71 75 69 72 65 73 20 74 68  agma requires th
6b00: 61 74 20 2a 2f 0a 20 20 69 66 28 20 28 70 50 72  at */.  if( (pPr
6b10: 61 67 6d 61 2d 3e 6d 50 72 61 67 46 6c 61 67 20  agma->mPragFlag 
6b20: 26 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53  & PragFlag_NeedS
6b30: 63 68 65 6d 61 29 21 3d 30 20 29 7b 0a 20 20 20  chema)!=0 ){.   
6b40: 20 69 66 28 20 73 71 6c 69 74 65 33 52 65 61 64   if( sqlite3Read
6b50: 53 63 68 65 6d 61 28 70 50 61 72 73 65 29 20 29  Schema(pParse) )
6b60: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
6b70: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 4a 75 6d 70  ;.  }..  /* Jump
6b80: 20 74 6f 20 74 68 65 20 61 70 70 72 6f 70 72 69   to the appropri
6b90: 61 74 65 20 70 72 61 67 6d 61 20 68 61 6e 64 6c  ate pragma handl
6ba0: 65 72 20 2a 2f 0a 20 20 73 77 69 74 63 68 28 20  er */.  switch( 
6bb0: 70 50 72 61 67 6d 61 2d 3e 65 50 72 61 67 54 79  pPragma->ePragTy
6bc0: 70 20 29 7b 0a 20 20 0a 23 69 66 20 21 64 65 66  p ){.  .#if !def
6bd0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
6be0: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29 20  _PAGER_PRAGMAS) 
6bf0: 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  && !defined(SQLI
6c00: 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54  TE_OMIT_DEPRECAT
6c10: 45 44 29 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50  ED).  /*.  **  P
6c20: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
6c30: 5d 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73  ]default_cache_s
6c40: 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  ize.  **  PRAGMA
6c50: 20 5b 64 61 74 61 62 61 73 65 2e 5d 64 65 66 61   [database.]defa
6c60: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 3d 4e  ult_cache_size=N
6c70: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66  .  **.  ** The f
6c80: 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74  irst form report
6c90: 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 70 65  s the current pe
6ca0: 72 73 69 73 74 65 6e 74 20 73 65 74 74 69 6e 67  rsistent setting
6cb0: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70 61   for the.  ** pa
6cc0: 67 65 20 63 61 63 68 65 20 73 69 7a 65 2e 20 20  ge cache size.  
6cd0: 54 68 65 20 76 61 6c 75 65 20 72 65 74 75 72 6e  The value return
6ce0: 65 64 20 69 73 20 74 68 65 20 6d 61 78 69 6d 75  ed is the maximu
6cf0: 6d 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a  m number of.  **
6d00: 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 70 61   pages in the pa
6d10: 67 65 20 63 61 63 68 65 2e 20 20 54 68 65 20 73  ge cache.  The s
6d20: 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65 74 73 20  econd form sets 
6d30: 62 6f 74 68 20 74 68 65 20 63 75 72 72 65 6e 74  both the current
6d40: 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65  .  ** page cache
6d50: 20 73 69 7a 65 20 76 61 6c 75 65 20 61 6e 64 20   size value and 
6d60: 74 68 65 20 70 65 72 73 69 73 74 65 6e 74 20 70  the persistent p
6d70: 61 67 65 20 63 61 63 68 65 20 73 69 7a 65 20 76  age cache size v
6d80: 61 6c 75 65 0a 20 20 2a 2a 20 73 74 6f 72 65 64  alue.  ** stored
6d90: 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65   in the database
6da0: 20 66 69 6c 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a   file..  **.  **
6db0: 20 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e 73 20   Older versions 
6dc0: 6f 66 20 53 51 4c 69 74 65 20 77 6f 75 6c 64 20  of SQLite would 
6dd0: 73 65 74 20 74 68 65 20 64 65 66 61 75 6c 74 20  set the default 
6de0: 63 61 63 68 65 20 73 69 7a 65 20 74 6f 20 61 0a  cache size to a.
6df0: 20 20 2a 2a 20 6e 65 67 61 74 69 76 65 20 6e 75    ** negative nu
6e00: 6d 62 65 72 20 74 6f 20 69 6e 64 69 63 61 74 65  mber to indicate
6e10: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46 46   synchronous=OFF
6e20: 2e 20 20 54 68 65 73 65 20 64 61 79 73 2c 20 73  .  These days, s
6e30: 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20  ynchronous.  ** 
6e40: 69 73 20 61 6c 77 61 79 73 20 6f 6e 20 62 79 20  is always on by 
6e50: 64 65 66 61 75 6c 74 20 72 65 67 61 72 64 6c 65  default regardle
6e60: 73 73 20 6f 66 20 74 68 65 20 73 69 67 6e 20 6f  ss of the sign o
6e70: 66 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 61  f the default ca
6e80: 63 68 65 0a 20 20 2a 2a 20 73 69 7a 65 2e 20 20  che.  ** size.  
6e90: 42 75 74 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20  But continue to 
6ea0: 74 61 6b 65 20 74 68 65 20 61 62 73 6f 6c 75 74  take the absolut
6eb0: 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64  e value of the d
6ec0: 65 66 61 75 6c 74 20 63 61 63 68 65 0a 20 20 2a  efault cache.  *
6ed0: 2a 20 73 69 7a 65 20 6f 66 20 68 69 73 74 6f 72  * size of histor
6ee0: 69 63 61 6c 20 63 6f 6d 70 61 74 69 62 69 6c 69  ical compatibili
6ef0: 74 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ty..  */.  case 
6f00: 50 72 61 67 54 79 70 5f 44 45 46 41 55 4c 54 5f  PragTyp_DEFAULT_
6f10: 43 41 43 48 45 5f 53 49 5a 45 3a 20 7b 0a 20 20  CACHE_SIZE: {.  
6f20: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69    static const i
6f30: 6e 74 20 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46  nt iLn = VDBE_OF
6f40: 46 53 45 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a  FSET_LINENO(2);.
6f50: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
6f60: 20 56 64 62 65 4f 70 4c 69 73 74 20 67 65 74 43   VdbeOpList getC
6f70: 61 63 68 65 53 69 7a 65 5b 5d 20 3d 20 7b 0a 20  acheSize[] = {. 
6f80: 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61       { OP_Transa
6f90: 63 74 69 6f 6e 2c 20 30 2c 20 30 2c 20 20 20 20  ction, 0, 0,    
6fa0: 20 20 20 20 30 7d 2c 20 20 20 20 20 20 20 20 20      0},         
6fb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6fc0: 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 7b 20  /* 0 */.      { 
6fd0: 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20  OP_ReadCookie,  
6fe0: 30 2c 20 31 2c 20 20 20 20 20 20 20 20 42 54 52  0, 1,        BTR
6ff0: 45 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45  EE_DEFAULT_CACHE
7000: 5f 53 49 5a 45 7d 2c 20 20 2f 2a 20 31 20 2a 2f  _SIZE},  /* 1 */
7010: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 50 6f  .      { OP_IfPo
7020: 73 2c 20 20 20 20 20 20 20 31 2c 20 38 2c 20 20  s,       1, 8,  
7030: 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20        0},.      
7040: 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20  { OP_Integer,   
7050: 20 20 30 2c 20 32 2c 20 20 20 20 20 20 20 20 30    0, 2,        0
7060: 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 53 75  },.      { OP_Su
7070: 62 74 72 61 63 74 2c 20 20 20 20 31 2c 20 32 2c  btract,    1, 2,
7080: 20 20 20 20 20 20 20 20 31 7d 2c 0a 20 20 20 20          1},.    
7090: 20 20 7b 20 4f 50 5f 49 66 50 6f 73 2c 20 20 20    { OP_IfPos,   
70a0: 20 20 20 20 31 2c 20 38 2c 20 20 20 20 20 20 20      1, 8,       
70b0: 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f   0},.      { OP_
70c0: 49 6e 74 65 67 65 72 2c 20 20 20 20 20 30 2c 20  Integer,     0, 
70d0: 31 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20  1,        0},   
70e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
70f0: 20 20 20 20 20 20 2f 2a 20 36 20 2a 2f 0a 20 20        /* 6 */.  
7100: 20 20 20 20 7b 20 4f 50 5f 4e 6f 6f 70 2c 20 20      { OP_Noop,  
7110: 20 20 20 20 20 20 30 2c 20 30 2c 20 20 20 20 20        0, 0,     
7120: 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     0},.      { O
7130: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20 20 31  P_ResultRow,   1
7140: 2c 20 31 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 1,        0},.
7150: 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20 61      };.    int a
7160: 64 64 72 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  ddr;.    sqlite3
7170: 56 64 62 65 55 73 65 73 42 74 72 65 65 28 76 2c  VdbeUsesBtree(v,
7180: 20 69 44 62 29 3b 0a 20 20 20 20 69 66 28 20 21   iDb);.    if( !
7190: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
71a0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
71b0: 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20  mCols(v, 1);.   
71c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
71d0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
71e0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 61  OLNAME_NAME, "ca
71f0: 63 68 65 5f 73 69 7a 65 22 2c 20 53 51 4c 49 54  che_size", SQLIT
7200: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
7210: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b 3d   pParse->nMem +=
7220: 20 32 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d   2;.      addr =
7230: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
7240: 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69  pList(v, ArraySi
7250: 7a 65 28 67 65 74 43 61 63 68 65 53 69 7a 65 29  ze(getCacheSize)
7260: 2c 20 67 65 74 43 61 63 68 65 53 69 7a 65 2c 69  , getCacheSize,i
7270: 4c 6e 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Ln);.      sqlit
7280: 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
7290: 2c 20 61 64 64 72 2c 20 69 44 62 29 3b 0a 20 20  , addr, iDb);.  
72a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
72b0: 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b  hangeP1(v, addr+
72c0: 31 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73  1, iDb);.      s
72d0: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
72e0: 50 31 28 76 2c 20 61 64 64 72 2b 36 2c 20 53 51  P1(v, addr+6, SQ
72f0: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 43 41 43  LITE_DEFAULT_CAC
7300: 48 45 5f 53 49 5a 45 29 3b 0a 20 20 20 20 7d 65  HE_SIZE);.    }e
7310: 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 73  lse{.      int s
7320: 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 62 73  ize = sqlite3Abs
7330: 49 6e 74 33 32 28 73 71 6c 69 74 65 33 41 74 6f  Int32(sqlite3Ato
7340: 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20  i(zRight));.    
7350: 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72    sqlite3BeginWr
7360: 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 70 50 61  iteOperation(pPa
7370: 72 73 65 2c 20 30 2c 20 69 44 62 29 3b 0a 20 20  rse, 0, iDb);.  
7380: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
7390: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
73a0: 67 65 72 2c 20 73 69 7a 65 2c 20 31 29 3b 0a 20  ger, size, 1);. 
73b0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
73c0: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 53 65 74  AddOp3(v, OP_Set
73d0: 43 6f 6f 6b 69 65 2c 20 69 44 62 2c 20 42 54 52  Cookie, iDb, BTR
73e0: 45 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45  EE_DEFAULT_CACHE
73f0: 5f 53 49 5a 45 2c 20 31 29 3b 0a 20 20 20 20 20  _SIZE, 1);.     
7400: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
7410: 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
7420: 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20  db, iDb, 0) );. 
7430: 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d       pDb->pSchem
7440: 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20  a->cache_size = 
7450: 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  size;.      sqli
7460: 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65  te3BtreeSetCache
7470: 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70  Size(pDb->pBt, p
7480: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63  Db->pSchema->cac
7490: 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a  he_size);.    }.
74a0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
74b0: 65 6e 64 69 66 20 2f 2a 20 21 53 51 4c 49 54 45  endif /* !SQLITE
74c0: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
74d0: 4d 41 53 20 26 26 20 21 53 51 4c 49 54 45 5f 4f  MAS && !SQLITE_O
74e0: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a  MIT_DEPRECATED *
74f0: 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  /..  /*.  **  PR
7500: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
7510: 70 61 67 65 72 5f 6f 74 61 5f 6d 6f 64 65 3d 5b  pager_ota_mode=[
7520: 30 31 5d 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  01].  **.  ** Th
7530: 69 73 20 70 72 61 67 6d 61 20 73 65 74 73 20 61  is pragma sets a
7540: 20 66 6c 61 67 20 6f 6e 20 74 68 65 20 70 61 67   flag on the pag
7550: 65 72 20 61 73 73 6f 63 69 61 74 65 64 20 77 69  er associated wi
7560: 74 68 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  th the main data
7570: 62 61 73 65 0a 20 20 2a 2a 20 6f 6e 6c 79 2e 20  base.  ** only. 
7580: 54 68 65 20 66 6c 61 67 20 63 61 6e 20 6f 6e 6c  The flag can onl
7590: 79 20 62 65 20 73 65 74 20 77 68 65 6e 20 74 68  y be set when th
75a0: 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e 20 74  ere is no open t
75b0: 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64 20 0a  ransaction and .
75c0: 20 20 2a 2a 20 74 68 65 20 70 61 67 65 72 20 64    ** the pager d
75d0: 6f 65 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20  oes not already 
75e0: 68 61 76 65 20 61 6e 20 6f 70 65 6e 20 57 41 4c  have an open WAL
75f0: 20 66 69 6c 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a   file..  **.  **
7600: 20 4f 6e 63 65 20 74 68 65 20 66 6c 61 67 20 68   Once the flag h
7610: 61 73 20 62 65 65 6e 20 73 65 74 2c 20 69 74 20  as been set, it 
7620: 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c 65 20  is not possible 
7630: 74 6f 20 6f 70 65 6e 20 61 20 72 65 67 75 6c 61  to open a regula
7640: 72 20 57 41 4c 0a 20 20 2a 2a 20 66 69 6c 65 2e  r WAL.  ** file.
7650: 20 49 66 2c 20 77 68 65 6e 20 74 68 65 20 6e 65   If, when the ne
7660: 78 74 20 72 65 61 64 2d 74 72 61 6e 73 61 63 74  xt read-transact
7670: 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 2c 20 61  ion is opened, a
7680: 20 2a 2d 77 61 6c 20 66 69 6c 65 20 69 73 20 0a   *-wal file is .
7690: 20 20 2a 2a 20 66 6f 75 6e 64 20 6f 72 20 74 68    ** found or th
76a0: 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64 65  e database heade
76b0: 72 20 66 6c 61 67 73 20 69 6e 64 69 63 61 74 65  r flags indicate
76c0: 20 74 68 61 74 20 69 74 20 69 73 20 61 20 77 61   that it is a wa
76d0: 6c 2d 6d 6f 64 65 20 0a 20 20 2a 2a 20 64 61 74  l-mode .  ** dat
76e0: 61 62 61 73 65 2c 20 53 51 4c 49 54 45 5f 43 41  abase, SQLITE_CA
76f0: 4e 54 4f 50 45 4e 20 69 73 20 72 65 74 75 72 6e  NTOPEN is return
7700: 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4f 74  ed..  **.  ** Ot
7710: 68 65 72 77 69 73 65 2c 20 69 66 20 6e 6f 20 57  herwise, if no W
7720: 41 4c 20 66 69 6c 65 20 6f 72 20 66 6c 61 67 73  AL file or flags
7730: 20 61 72 65 20 66 6f 75 6e 64 2c 20 74 68 65 20   are found, the 
7740: 70 61 67 65 72 20 6f 70 65 6e 73 20 74 68 65 20  pager opens the 
7750: 2a 2d 6f 61 6c 0a 20 20 2a 2a 20 66 69 6c 65 20  *-oal.  ** file 
7760: 61 6e 64 20 75 73 65 73 20 69 74 20 61 73 20 61  and uses it as a
7770: 20 77 72 69 74 65 2d 61 68 65 61 64 2d 6c 6f 67   write-ahead-log
7780: 20 77 69 74 68 20 74 68 65 20 2a 2d 73 68 6d 20   with the *-shm 
7790: 64 61 74 61 20 73 74 6f 72 65 64 20 69 6e 0a 20  data stored in. 
77a0: 20 2a 2a 20 68 65 61 70 2d 6d 65 6d 6f 72 79 2e   ** heap-memory.
77b0: 20 49 66 20 74 68 65 20 2a 2d 6f 61 6c 20 66 69   If the *-oal fi
77c0: 6c 65 20 61 6c 72 65 61 64 79 20 65 78 69 73 74  le already exist
77d0: 73 20 62 75 74 20 74 68 65 20 64 61 74 61 62 61  s but the databa
77e0: 73 65 20 66 69 6c 65 20 68 61 73 0a 20 20 2a 2a  se file has.  **
77f0: 20 62 65 65 6e 20 6d 6f 64 69 66 69 65 64 20 73   been modified s
7800: 69 6e 63 65 20 69 74 20 77 61 73 20 63 72 65 61  ince it was crea
7810: 74 65 64 2c 20 61 6e 20 53 51 4c 49 54 45 5f 42  ted, an SQLITE_B
7820: 55 53 59 5f 53 4e 41 50 53 48 4f 54 20 65 72 72  USY_SNAPSHOT err
7830: 6f 72 20 69 73 0a 20 20 2a 2a 20 72 65 74 75 72  or is.  ** retur
7840: 6e 65 64 20 61 6e 64 20 74 68 65 20 72 65 61 64  ned and the read
7850: 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 63 61 6e  -transaction can
7860: 6e 6f 74 20 62 65 20 6f 70 65 6e 65 64 2e 0a 20  not be opened.. 
7870: 20 2a 2a 0a 20 20 2a 2a 20 4f 74 68 65 72 20 63   **.  ** Other c
7880: 6c 69 65 6e 74 73 20 73 65 65 20 61 20 72 6f 6c  lients see a rol
7890: 6c 62 61 63 6b 2d 6d 6f 64 65 20 64 61 74 61 62  lback-mode datab
78a0: 61 73 65 20 6f 6e 20 77 68 69 63 68 20 74 68 65  ase on which the
78b0: 20 70 61 67 65 72 5f 6f 74 61 5f 6d 6f 64 65 0a   pager_ota_mode.
78c0: 20 20 2a 2a 20 63 6c 69 65 6e 74 20 69 73 20 68    ** client is h
78d0: 6f 6c 64 69 6e 67 20 61 20 53 48 41 52 45 44 20  olding a SHARED 
78e0: 6c 6f 63 6b 2e 0a 20 20 2a 2f 0a 23 69 66 64 65  lock..  */.#ifde
78f0: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
7900: 4f 54 41 0a 20 20 63 61 73 65 20 50 72 61 67 54  OTA.  case PragT
7910: 79 70 5f 50 41 47 45 52 5f 4f 54 41 5f 4d 4f 44  yp_PAGER_OTA_MOD
7920: 45 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20 2a  E: {.    Btree *
7930: 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a  pBt = pDb->pBt;.
7940: 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74 21      assert( pBt!
7950: 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52  =0 );.    if( zR
7960: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 6e  ight ){.      in
7970: 74 20 69 41 72 67 20 3d 20 73 71 6c 69 74 65 33  t iArg = sqlite3
7980: 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20  Atoi(zRight);.  
7990: 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65      Pager *pPage
79a0: 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  r = sqlite3Btree
79b0: 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20 20 20  Pager(pBt);.    
79c0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 42 74 72    if( sqlite3Btr
79d0: 65 65 49 73 49 6e 52 65 61 64 54 72 61 6e 73 28  eeIsInReadTrans(
79e0: 70 42 74 29 20 29 7b 0a 20 20 20 20 20 20 20 20  pBt) ){.        
79f0: 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
7a00: 70 50 61 72 73 65 2c 20 0a 20 20 20 20 20 20 20  pParse, .       
7a10: 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 73 65 74       "cannot set
7a20: 20 70 61 67 65 72 5f 6f 74 61 5f 6d 6f 64 65 20   pager_ota_mode 
7a30: 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e 73 61  with open transa
7a40: 63 74 69 6f 6e 22 0a 20 20 20 20 20 20 20 20 29  ction".        )
7a50: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
7a60: 28 20 73 71 6c 69 74 65 33 50 61 67 65 72 57 61  ( sqlite3PagerWa
7a70: 6c 53 75 70 70 6f 72 74 65 64 28 70 50 61 67 65  lSupported(pPage
7a80: 72 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  r)==0 ){.       
7a90: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
7aa0: 28 70 50 61 72 73 65 2c 0a 20 20 20 20 20 20 20  (pParse,.       
7ab0: 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 73 65 74       "cannot set
7ac0: 20 70 61 67 65 72 5f 6f 74 61 5f 6d 6f 64 65 20   pager_ota_mode 
7ad0: 77 69 74 68 6f 75 74 20 77 61 6c 20 73 75 70 70  without wal supp
7ae0: 6f 72 74 22 0a 20 20 20 20 20 20 20 20 29 3b 0a  ort".        );.
7af0: 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
7b00: 73 71 6c 69 74 65 33 50 61 67 65 72 53 65 74 4f  sqlite3PagerSetO
7b10: 74 61 4d 6f 64 65 28 73 71 6c 69 74 65 33 42 74  taMode(sqlite3Bt
7b20: 72 65 65 50 61 67 65 72 28 70 42 74 29 2c 20 69  reePager(pBt), i
7b30: 41 72 67 29 20 29 7b 0a 20 20 20 20 20 20 20 20  Arg) ){.        
7b40: 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
7b50: 70 50 61 72 73 65 2c 20 22 63 61 6e 6e 6f 74 20  pParse, "cannot 
7b60: 73 65 74 20 70 61 67 65 72 5f 6f 74 61 5f 6d 6f  set pager_ota_mo
7b70: 64 65 20 69 6e 20 77 61 6c 20 6d 6f 64 65 22 29  de in wal mode")
7b80: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
7b90: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
7ba0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
7bb0: 45 4e 41 42 4c 45 5f 4f 54 41 20 2a 2f 0a 0a 23  ENABLE_OTA */..#
7bc0: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
7bd0: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
7be0: 41 47 4d 41 53 29 0a 20 20 2f 2a 0a 20 20 2a 2a  AGMAS).  /*.  **
7bf0: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
7c00: 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65 0a 20 20  se.]page_size.  
7c10: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
7c20: 62 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65 3d  base.]page_size=
7c30: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  N.  **.  ** The 
7c40: 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72  first form repor
7c50: 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  ts the current s
7c60: 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20  etting for the. 
7c70: 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61 67   ** database pag
7c80: 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73 2e  e size in bytes.
7c90: 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72    The second for
7ca0: 6d 20 73 65 74 73 20 74 68 65 0a 20 20 2a 2a 20  m sets the.  ** 
7cb0: 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73 69  database page si
7cc0: 7a 65 20 76 61 6c 75 65 2e 20 20 54 68 65 20 76  ze value.  The v
7cd0: 61 6c 75 65 20 63 61 6e 20 6f 6e 6c 79 20 62 65  alue can only be
7ce0: 20 73 65 74 20 69 66 0a 20 20 2a 2a 20 74 68 65   set if.  ** the
7cf0: 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f   database has no
7d00: 74 20 79 65 74 20 62 65 65 6e 20 63 72 65 61 74  t yet been creat
7d10: 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ed..  */.  case 
7d20: 50 72 61 67 54 79 70 5f 50 41 47 45 5f 53 49 5a  PragTyp_PAGE_SIZ
7d30: 45 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20 2a  E: {.    Btree *
7d40: 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a  pBt = pDb->pBt;.
7d50: 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74 21      assert( pBt!
7d60: 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a  =0 );.    if( !z
7d70: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69  Right ){.      i
7d80: 6e 74 20 73 69 7a 65 20 3d 20 41 4c 57 41 59 53  nt size = ALWAYS
7d90: 28 70 42 74 29 20 3f 20 73 71 6c 69 74 65 33 42  (pBt) ? sqlite3B
7da0: 74 72 65 65 47 65 74 50 61 67 65 53 69 7a 65 28  treeGetPageSize(
7db0: 70 42 74 29 20 3a 20 30 3b 0a 20 20 20 20 20 20  pBt) : 0;.      
7dc0: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
7dd0: 70 50 61 72 73 65 2c 20 22 70 61 67 65 5f 73 69  pParse, "page_si
7de0: 7a 65 22 2c 20 73 69 7a 65 29 3b 0a 20 20 20 20  ze", size);.    
7df0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a 20  }else{.      /* 
7e00: 4d 61 6c 6c 6f 63 20 6d 61 79 20 66 61 69 6c 20  Malloc may fail 
7e10: 77 68 65 6e 20 73 65 74 74 69 6e 67 20 74 68 65  when setting the
7e20: 20 70 61 67 65 2d 73 69 7a 65 2c 20 61 73 20 74   page-size, as t
7e30: 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65 72  here is an inter
7e40: 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 62 75 66  nal.      ** buf
7e50: 66 65 72 20 74 68 61 74 20 74 68 65 20 70 61 67  fer that the pag
7e60: 65 72 20 6d 6f 64 75 6c 65 20 72 65 73 69 7a 65  er module resize
7e70: 73 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33 5f  s using sqlite3_
7e80: 72 65 61 6c 6c 6f 63 28 29 2e 0a 20 20 20 20 20  realloc()..     
7e90: 20 2a 2f 0a 20 20 20 20 20 20 64 62 2d 3e 6e 65   */.      db->ne
7ea0: 78 74 50 61 67 65 73 69 7a 65 20 3d 20 73 71 6c  xtPagesize = sql
7eb0: 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29  ite3Atoi(zRight)
7ec0: 3b 0a 20 20 20 20 20 20 69 66 28 20 53 51 4c 49  ;.      if( SQLI
7ed0: 54 45 5f 4e 4f 4d 45 4d 3d 3d 73 71 6c 69 74 65  TE_NOMEM==sqlite
7ee0: 33 42 74 72 65 65 53 65 74 50 61 67 65 53 69 7a  3BtreeSetPageSiz
7ef0: 65 28 70 42 74 2c 20 64 62 2d 3e 6e 65 78 74 50  e(pBt, db->nextP
7f00: 61 67 65 73 69 7a 65 2c 2d 31 2c 30 29 20 29 7b  agesize,-1,0) ){
7f10: 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6d 61 6c  .        db->mal
7f20: 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a 20  locFailed = 1;. 
7f30: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
7f40: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
7f50: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
7f60: 64 61 74 61 62 61 73 65 2e 5d 73 65 63 75 72 65  database.]secure
7f70: 5f 64 65 6c 65 74 65 0a 20 20 2a 2a 20 20 50 52  _delete.  **  PR
7f80: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
7f90: 73 65 63 75 72 65 5f 64 65 6c 65 74 65 3d 4f 4e  secure_delete=ON
7fa0: 2f 4f 46 46 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  /OFF.  **.  ** T
7fb0: 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65  he first form re
7fc0: 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  ports the curren
7fd0: 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68  t setting for th
7fe0: 65 0a 20 20 2a 2a 20 73 65 63 75 72 65 5f 64 65  e.  ** secure_de
7ff0: 6c 65 74 65 20 66 6c 61 67 2e 20 20 54 68 65 20  lete flag.  The 
8000: 73 65 63 6f 6e 64 20 66 6f 72 6d 20 63 68 61 6e  second form chan
8010: 67 65 73 20 74 68 65 20 73 65 63 75 72 65 5f 64  ges the secure_d
8020: 65 6c 65 74 65 0a 20 20 2a 2a 20 66 6c 61 67 20  elete.  ** flag 
8030: 73 65 74 74 69 6e 67 20 61 6e 64 20 72 65 70 6f  setting and repo
8040: 72 74 73 20 74 68 65 6e 65 77 20 76 61 6c 75 65  rts thenew value
8050: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
8060: 61 67 54 79 70 5f 53 45 43 55 52 45 5f 44 45 4c  agTyp_SECURE_DEL
8070: 45 54 45 3a 20 7b 0a 20 20 20 20 42 74 72 65 65  ETE: {.    Btree
8080: 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74   *pBt = pDb->pBt
8090: 3b 0a 20 20 20 20 69 6e 74 20 62 20 3d 20 2d 31  ;.    int b = -1
80a0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 42  ;.    assert( pB
80b0: 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20  t!=0 );.    if( 
80c0: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
80d0: 62 20 3d 20 73 71 6c 69 74 65 33 47 65 74 42 6f  b = sqlite3GetBo
80e0: 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29  olean(zRight, 0)
80f0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28 20  ;.    }.    if( 
8100: 70 49 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 62 3e  pId2->n==0 && b>
8110: 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  =0 ){.      int 
8120: 69 69 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 69  ii;.      for(ii
8130: 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20  =0; ii<db->nDb; 
8140: 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73  ii++){.        s
8150: 71 6c 69 74 65 33 42 74 72 65 65 53 65 63 75 72  qlite3BtreeSecur
8160: 65 44 65 6c 65 74 65 28 64 62 2d 3e 61 44 62 5b  eDelete(db->aDb[
8170: 69 69 5d 2e 70 42 74 2c 20 62 29 3b 0a 20 20 20  ii].pBt, b);.   
8180: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62     }.    }.    b
8190: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53   = sqlite3BtreeS
81a0: 65 63 75 72 65 44 65 6c 65 74 65 28 70 42 74 2c  ecureDelete(pBt,
81b0: 20 62 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 53   b);.    returnS
81c0: 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c  ingleInt(pParse,
81d0: 20 22 73 65 63 75 72 65 5f 64 65 6c 65 74 65 22   "secure_delete"
81e0: 2c 20 62 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  , b);.    break;
81f0: 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
8200: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
8210: 65 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e  e.]max_page_coun
8220: 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  t.  **  PRAGMA [
8230: 64 61 74 61 62 61 73 65 2e 5d 6d 61 78 5f 70 61  database.]max_pa
8240: 67 65 5f 63 6f 75 6e 74 3d 4e 0a 20 20 2a 2a 0a  ge_count=N.  **.
8250: 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66    ** The first f
8260: 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20  orm reports the 
8270: 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67 20  current setting 
8280: 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6d 61 78  for the.  ** max
8290: 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20 70  imum number of p
82a0: 61 67 65 73 20 69 6e 20 74 68 65 20 64 61 74 61  ages in the data
82b0: 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65 20  base file.  The 
82c0: 0a 20 20 2a 2a 20 73 65 63 6f 6e 64 20 66 6f 72  .  ** second for
82d0: 6d 20 61 74 74 65 6d 70 74 73 20 74 6f 20 63 68  m attempts to ch
82e0: 61 6e 67 65 20 74 68 69 73 20 73 65 74 74 69 6e  ange this settin
82f0: 67 2e 20 20 42 6f 74 68 0a 20 20 2a 2a 20 66 6f  g.  Both.  ** fo
8300: 72 6d 73 20 72 65 74 75 72 6e 20 74 68 65 20 63  rms return the c
8310: 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67 2e 0a  urrent setting..
8320: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 61 62    **.  ** The ab
8330: 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20  solute value of 
8340: 4e 20 69 73 20 75 73 65 64 2e 20 20 54 68 69 73  N is used.  This
8350: 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65 64   is undocumented
8360: 20 61 6e 64 20 6d 69 67 68 74 0a 20 20 2a 2a 20   and might.  ** 
8370: 63 68 61 6e 67 65 2e 20 20 54 68 65 20 6f 6e 6c  change.  The onl
8380: 79 20 70 75 72 70 6f 73 65 20 69 73 20 74 6f 20  y purpose is to 
8390: 70 72 6f 76 69 64 65 20 61 6e 20 65 61 73 79 20  provide an easy 
83a0: 77 61 79 20 74 6f 20 74 65 73 74 0a 20 20 2a 2a  way to test.  **
83b0: 20 74 68 65 20 73 71 6c 69 74 65 33 41 62 73 49   the sqlite3AbsI
83c0: 6e 74 33 32 28 29 20 66 75 6e 63 74 69 6f 6e 2e  nt32() function.
83d0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  **.  **  PRAG
83e0: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 70 61  MA [database.]pa
83f0: 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a 0a 20 20  ge_count.  **.  
8400: 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e 75  ** Return the nu
8410: 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e  mber of pages in
8420: 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 64   the specified d
8430: 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20 20  atabase..  */.  
8440: 63 61 73 65 20 50 72 61 67 54 79 70 5f 50 41 47  case PragTyp_PAG
8450: 45 5f 43 4f 55 4e 54 3a 20 7b 0a 20 20 20 20 69  E_COUNT: {.    i
8460: 6e 74 20 69 52 65 67 3b 0a 20 20 20 20 73 71 6c  nt iReg;.    sql
8470: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
8480: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
8490: 29 3b 0a 20 20 20 20 69 52 65 67 20 3d 20 2b 2b  );.    iReg = ++
84a0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20  pParse->nMem;.  
84b0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 6f 6c    if( sqlite3Tol
84c0: 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d  ower(zLeft[0])==
84d0: 27 70 27 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  'p' ){.      sql
84e0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
84f0: 2c 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 2c 20  , OP_Pagecount, 
8500: 69 44 62 2c 20 69 52 65 67 29 3b 0a 20 20 20 20  iDb, iReg);.    
8510: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71 6c  }else{.      sql
8520: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
8530: 2c 20 4f 50 5f 4d 61 78 50 67 63 6e 74 2c 20 69  , OP_MaxPgcnt, i
8540: 44 62 2c 20 69 52 65 67 2c 20 0a 20 20 20 20 20  Db, iReg, .     
8550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8560: 20 20 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74     sqlite3AbsInt
8570: 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  32(sqlite3Atoi(z
8580: 52 69 67 68 74 29 29 29 3b 0a 20 20 20 20 7d 0a  Right)));.    }.
8590: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
85a0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
85b0: 6c 74 52 6f 77 2c 20 69 52 65 67 2c 20 31 29 3b  ltRow, iReg, 1);
85c0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
85d0: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
85e0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
85f0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
8600: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
8610: 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f 54 52  zLeft, SQLITE_TR
8620: 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 62 72  ANSIENT);.    br
8630: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20  eak;.  }..  /*. 
8640: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
8650: 61 62 61 73 65 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d  abase.]locking_m
8660: 6f 64 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  ode.  **  PRAGMA
8670: 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f 63 6b   [database.]lock
8680: 69 6e 67 5f 6d 6f 64 65 20 3d 20 28 6e 6f 72 6d  ing_mode = (norm
8690: 61 6c 7c 65 78 63 6c 75 73 69 76 65 29 0a 20 20  al|exclusive).  
86a0: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
86b0: 70 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f 44 45 3a 20  p_LOCKING_MODE: 
86c0: 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72  {.    const char
86d0: 20 2a 7a 52 65 74 20 3d 20 22 6e 6f 72 6d 61 6c   *zRet = "normal
86e0: 22 3b 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64 65  ";.    int eMode
86f0: 20 3d 20 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f 64   = getLockingMod
8700: 65 28 7a 52 69 67 68 74 29 3b 0a 0a 20 20 20 20  e(zRight);..    
8710: 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 26  if( pId2->n==0 &
8720: 26 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c  & eMode==PAGER_L
8730: 4f 43 4b 49 4e 47 4d 4f 44 45 5f 51 55 45 52 59  OCKINGMODE_QUERY
8740: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 53 69 6d   ){.      /* Sim
8750: 70 6c 65 20 22 50 52 41 47 4d 41 20 6c 6f 63 6b  ple "PRAGMA lock
8760: 69 6e 67 5f 6d 6f 64 65 3b 22 20 73 74 61 74 65  ing_mode;" state
8770: 6d 65 6e 74 2e 20 54 68 69 73 20 69 73 20 61 20  ment. This is a 
8780: 71 75 65 72 79 20 66 6f 72 0a 20 20 20 20 20 20  query for.      
8790: 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74 20 64  ** the current d
87a0: 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 20 6d  efault locking m
87b0: 6f 64 65 20 28 77 68 69 63 68 20 6d 61 79 20 62  ode (which may b
87c0: 65 20 64 69 66 66 65 72 65 6e 74 20 74 6f 0a 20  e different to. 
87d0: 20 20 20 20 20 2a 2a 20 74 68 65 20 6c 6f 63 6b       ** the lock
87e0: 69 6e 67 2d 6d 6f 64 65 20 6f 66 20 74 68 65 20  ing-mode of the 
87f0: 6d 61 69 6e 20 64 61 74 61 62 61 73 65 29 2e 0a  main database)..
8800: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 65        */.      e
8810: 4d 6f 64 65 20 3d 20 64 62 2d 3e 64 66 6c 74 4c  Mode = db->dfltL
8820: 6f 63 6b 4d 6f 64 65 3b 0a 20 20 20 20 7d 65 6c  ockMode;.    }el
8830: 73 65 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20  se{.      Pager 
8840: 2a 70 50 61 67 65 72 3b 0a 20 20 20 20 20 20 69  *pPager;.      i
8850: 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b  f( pId2->n==0 ){
8860: 0a 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69 73  .        /* This
8870: 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74 20   indicates that 
8880: 6e 6f 20 64 61 74 61 62 61 73 65 20 6e 61 6d 65  no database name
8890: 20 77 61 73 20 73 70 65 63 69 66 69 65 64 20 61   was specified a
88a0: 73 20 70 61 72 74 0a 20 20 20 20 20 20 20 20 2a  s part.        *
88b0: 2a 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20  * of the PRAGMA 
88c0: 63 6f 6d 6d 61 6e 64 2e 20 49 6e 20 74 68 69 73  command. In this
88d0: 20 63 61 73 65 20 74 68 65 20 6c 6f 63 6b 69 6e   case the lockin
88e0: 67 2d 6d 6f 64 65 20 6d 75 73 74 20 62 65 0a 20  g-mode must be. 
88f0: 20 20 20 20 20 20 20 2a 2a 20 73 65 74 20 6f 6e         ** set on
8900: 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64 61   all attached da
8910: 74 61 62 61 73 65 73 2c 20 61 73 20 77 65 6c 6c  tabases, as well
8920: 20 61 73 20 74 68 65 20 6d 61 69 6e 20 64 62 20   as the main db 
8930: 66 69 6c 65 2e 0a 20 20 20 20 20 20 20 20 2a 2a  file..        **
8940: 0a 20 20 20 20 20 20 20 20 2a 2a 20 41 6c 73 6f  .        ** Also
8950: 2c 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64 66  , the sqlite3.df
8960: 6c 74 4c 6f 63 6b 4d 6f 64 65 20 76 61 72 69 61  ltLockMode varia
8970: 62 6c 65 20 69 73 20 73 65 74 20 73 6f 20 74 68  ble is set so th
8980: 61 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 61 6e  at.        ** an
8990: 79 20 73 75 62 73 65 71 75 65 6e 74 6c 79 20 61  y subsequently a
89a0: 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
89b0: 73 20 61 6c 73 6f 20 75 73 65 20 74 68 65 20 73  s also use the s
89c0: 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20 20  pecified.       
89d0: 20 2a 2a 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65   ** locking mode
89e0: 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20  ..        */.   
89f0: 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20       int ii;.   
8a00: 20 20 20 20 20 61 73 73 65 72 74 28 70 44 62 3d       assert(pDb=
8a10: 3d 26 64 62 2d 3e 61 44 62 5b 30 5d 29 3b 0a 20  =&db->aDb[0]);. 
8a20: 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 32 3b         for(ii=2;
8a30: 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69 2b   ii<db->nDb; ii+
8a40: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70 50  +){.          pP
8a50: 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74  ager = sqlite3Bt
8a60: 72 65 65 50 61 67 65 72 28 64 62 2d 3e 61 44 62  reePager(db->aDb
8a70: 5b 69 69 5d 2e 70 42 74 29 3b 0a 20 20 20 20 20  [ii].pBt);.     
8a80: 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67 65       sqlite3Page
8a90: 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70 50 61  rLockingMode(pPa
8aa0: 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20 20 20  ger, eMode);.   
8ab0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 64       }.        d
8ac0: 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 20  b->dfltLockMode 
8ad0: 3d 20 28 75 38 29 65 4d 6f 64 65 3b 0a 20 20 20  = (u8)eMode;.   
8ae0: 20 20 20 7d 0a 20 20 20 20 20 20 70 50 61 67 65     }.      pPage
8af0: 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  r = sqlite3Btree
8b00: 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b  Pager(pDb->pBt);
8b10: 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 73  .      eMode = s
8b20: 71 6c 69 74 65 33 50 61 67 65 72 4c 6f 63 6b 69  qlite3PagerLocki
8b30: 6e 67 4d 6f 64 65 28 70 50 61 67 65 72 2c 20 65  ngMode(pPager, e
8b40: 4d 6f 64 65 29 3b 0a 20 20 20 20 7d 0a 0a 20 20  Mode);.    }..  
8b50: 20 20 61 73 73 65 72 74 28 20 65 4d 6f 64 65 3d    assert( eMode=
8b60: 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f  =PAGER_LOCKINGMO
8b70: 44 45 5f 4e 4f 52 4d 41 4c 0a 20 20 20 20 20 20  DE_NORMAL.      
8b80: 20 20 20 20 20 20 7c 7c 20 65 4d 6f 64 65 3d 3d        || eMode==
8b90: 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44  PAGER_LOCKINGMOD
8ba0: 45 5f 45 58 43 4c 55 53 49 56 45 20 29 3b 0a 20  E_EXCLUSIVE );. 
8bb0: 20 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 50 41     if( eMode==PA
8bc0: 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f  GER_LOCKINGMODE_
8bd0: 45 58 43 4c 55 53 49 56 45 20 29 7b 0a 20 20 20  EXCLUSIVE ){.   
8be0: 20 20 20 7a 52 65 74 20 3d 20 22 65 78 63 6c 75     zRet = "exclu
8bf0: 73 69 76 65 22 3b 0a 20 20 20 20 7d 0a 20 20 20  sive";.    }.   
8c00: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
8c10: 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
8c20: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
8c30: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
8c40: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6c 6f 63  LNAME_NAME, "loc
8c50: 6b 69 6e 67 5f 6d 6f 64 65 22 2c 20 53 51 4c 49  king_mode", SQLI
8c60: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
8c70: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
8c80: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
8c90: 20 30 2c 20 31 2c 20 30 2c 20 7a 52 65 74 2c 20   0, 1, 0, zRet, 
8ca0: 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  0);.    sqlite3V
8cb0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
8cc0: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29  ResultRow, 1, 1)
8cd0: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
8ce0: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
8cf0: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a  GMA [database.]j
8d00: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20 2a 2a  ournal_mode.  **
8d10: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
8d20: 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  se.]journal_mode
8d30: 20 3d 0a 20 20 2a 2a 20 20 20 20 20 20 20 20 20   =.  **         
8d40: 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64 65               (de
8d50: 6c 65 74 65 7c 70 65 72 73 69 73 74 7c 6f 66 66  lete|persist|off
8d60: 7c 74 72 75 6e 63 61 74 65 7c 6d 65 6d 6f 72 79  |truncate|memory
8d70: 7c 77 61 6c 7c 6f 66 66 29 0a 20 20 2a 2f 0a 20  |wal|off).  */. 
8d80: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4a 4f   case PragTyp_JO
8d90: 55 52 4e 41 4c 5f 4d 4f 44 45 3a 20 7b 0a 20 20  URNAL_MODE: {.  
8da0: 20 20 69 6e 74 20 65 4d 6f 64 65 3b 20 20 20 20    int eMode;    
8db0: 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74 68      /* One of th
8dc0: 65 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  e PAGER_JOURNALM
8dd0: 4f 44 45 5f 58 58 58 20 73 79 6d 62 6f 6c 73 20  ODE_XXX symbols 
8de0: 2a 2f 0a 20 20 20 20 69 6e 74 20 69 69 3b 20 20  */.    int ii;  
8df0: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
8e00: 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 0a 20 20 20   counter */..   
8e10: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
8e20: 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
8e30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
8e40: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
8e50: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6a 6f 75  LNAME_NAME, "jou
8e60: 72 6e 61 6c 5f 6d 6f 64 65 22 2c 20 53 51 4c 49  rnal_mode", SQLI
8e70: 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20 20  TE_STATIC);..   
8e80: 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20 29   if( zRight==0 )
8e90: 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74 68  {.      /* If th
8ea0: 65 72 65 20 69 73 20 6e 6f 20 22 3d 4d 4f 44 45  ere is no "=MODE
8eb0: 22 20 70 61 72 74 20 6f 66 20 74 68 65 20 70 72  " part of the pr
8ec0: 61 67 6d 61 2c 20 64 6f 20 61 20 71 75 65 72 79  agma, do a query
8ed0: 20 66 6f 72 20 74 68 65 0a 20 20 20 20 20 20 2a   for the.      *
8ee0: 2a 20 63 75 72 72 65 6e 74 20 6d 6f 64 65 20 2a  * current mode *
8ef0: 2f 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20  /.      eMode = 
8f00: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
8f10: 45 5f 51 55 45 52 59 3b 0a 20 20 20 20 7d 65 6c  E_QUERY;.    }el
8f20: 73 65 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  se{.      const 
8f30: 63 68 61 72 20 2a 7a 4d 6f 64 65 3b 0a 20 20 20  char *zMode;.   
8f40: 20 20 20 69 6e 74 20 6e 20 3d 20 73 71 6c 69 74     int n = sqlit
8f50: 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68  e3Strlen30(zRigh
8f60: 74 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 65 4d  t);.      for(eM
8f70: 6f 64 65 3d 30 3b 20 28 7a 4d 6f 64 65 20 3d 20  ode=0; (zMode = 
8f80: 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f  sqlite3JournalMo
8f90: 64 65 6e 61 6d 65 28 65 4d 6f 64 65 29 29 21 3d  dename(eMode))!=
8fa0: 30 3b 20 65 4d 6f 64 65 2b 2b 29 7b 0a 20 20 20  0; eMode++){.   
8fb0: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
8fc0: 53 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c  StrNICmp(zRight,
8fd0: 20 7a 4d 6f 64 65 2c 20 6e 29 3d 3d 30 20 29 20   zMode, n)==0 ) 
8fe0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a 20  break;.      }. 
8ff0: 20 20 20 20 20 69 66 28 20 21 7a 4d 6f 64 65 20       if( !zMode 
9000: 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49 66  ){.        /* If
9010: 20 74 68 65 20 22 3d 4d 4f 44 45 22 20 70 61 72   the "=MODE" par
9020: 74 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63 68  t does not match
9030: 20 61 6e 79 20 6b 6e 6f 77 6e 20 6a 6f 75 72 6e   any known journ
9040: 61 6c 20 6d 6f 64 65 2c 0a 20 20 20 20 20 20 20  al mode,.       
9050: 20 2a 2a 20 74 68 65 6e 20 64 6f 20 61 20 71 75   ** then do a qu
9060: 65 72 79 20 2a 2f 0a 20 20 20 20 20 20 20 20 65  ery */.        e
9070: 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f 55  Mode = PAGER_JOU
9080: 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b 0a  RNALMODE_QUERY;.
9090: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
90a0: 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 50 41 47    if( eMode==PAG
90b0: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51  ER_JOURNALMODE_Q
90c0: 55 45 52 59 20 26 26 20 70 49 64 32 2d 3e 6e 3d  UERY && pId2->n=
90d0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 43  =0 ){.      /* C
90e0: 6f 6e 76 65 72 74 20 22 50 52 41 47 4d 41 20 6a  onvert "PRAGMA j
90f0: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 69 6e 74  ournal_mode" int
9100: 6f 20 22 50 52 41 47 4d 41 20 6d 61 69 6e 2e 6a  o "PRAGMA main.j
9110: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 2a 2f 0a  ournal_mode" */.
9120: 20 20 20 20 20 20 69 44 62 20 3d 20 30 3b 0a 20        iDb = 0;. 
9130: 20 20 20 20 20 70 49 64 32 2d 3e 6e 20 3d 20 31       pId2->n = 1
9140: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72 28  ;.    }.    for(
9150: 69 69 3d 64 62 2d 3e 6e 44 62 2d 31 3b 20 69 69  ii=db->nDb-1; ii
9160: 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a 20 20 20 20  >=0; ii--){.    
9170: 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 69    if( db->aDb[ii
9180: 5d 2e 70 42 74 20 26 26 20 28 69 69 3d 3d 69 44  ].pBt && (ii==iD
9190: 62 20 7c 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30 29  b || pId2->n==0)
91a0: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
91b0: 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65 65  te3VdbeUsesBtree
91c0: 28 76 2c 20 69 69 29 3b 0a 20 20 20 20 20 20 20  (v, ii);.       
91d0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
91e0: 70 33 28 76 2c 20 4f 50 5f 4a 6f 75 72 6e 61 6c  p3(v, OP_Journal
91f0: 4d 6f 64 65 2c 20 69 69 2c 20 31 2c 20 65 4d 6f  Mode, ii, 1, eMo
9200: 64 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  de);.      }.   
9210: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
9220: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
9230: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b  esultRow, 1, 1);
9240: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
9250: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
9260: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a 6f  MA [database.]jo
9270: 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74  urnal_size_limit
9280: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
9290: 61 74 61 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c  atabase.]journal
92a0: 5f 73 69 7a 65 5f 6c 69 6d 69 74 3d 4e 0a 20 20  _size_limit=N.  
92b0: 2a 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72 20 73  **.  ** Get or s
92c0: 65 74 20 74 68 65 20 73 69 7a 65 20 6c 69 6d 69  et the size limi
92d0: 74 20 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20 6a 6f  t on rollback jo
92e0: 75 72 6e 61 6c 20 66 69 6c 65 73 2e 0a 20 20 2a  urnal files..  *
92f0: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
9300: 5f 4a 4f 55 52 4e 41 4c 5f 53 49 5a 45 5f 4c 49  _JOURNAL_SIZE_LI
9310: 4d 49 54 3a 20 7b 0a 20 20 20 20 50 61 67 65 72  MIT: {.    Pager
9320: 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74   *pPager = sqlit
9330: 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44 62  e3BtreePager(pDb
9340: 2d 3e 70 42 74 29 3b 0a 20 20 20 20 69 36 34 20  ->pBt);.    i64 
9350: 69 4c 69 6d 69 74 20 3d 20 2d 32 3b 0a 20 20 20  iLimit = -2;.   
9360: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
9370: 20 20 20 20 20 73 71 6c 69 74 65 33 44 65 63 4f       sqlite3DecO
9380: 72 48 65 78 54 6f 49 36 34 28 7a 52 69 67 68 74  rHexToI64(zRight
9390: 2c 20 26 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20  , &iLimit);.    
93a0: 20 20 69 66 28 20 69 4c 69 6d 69 74 3c 2d 31 20    if( iLimit<-1 
93b0: 29 20 69 4c 69 6d 69 74 20 3d 20 2d 31 3b 0a 20  ) iLimit = -1;. 
93c0: 20 20 20 7d 0a 20 20 20 20 69 4c 69 6d 69 74 20     }.    iLimit 
93d0: 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 4a 6f  = sqlite3PagerJo
93e0: 75 72 6e 61 6c 53 69 7a 65 4c 69 6d 69 74 28 70  urnalSizeLimit(p
93f0: 50 61 67 65 72 2c 20 69 4c 69 6d 69 74 29 3b 0a  Pager, iLimit);.
9400: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
9410: 49 6e 74 28 70 50 61 72 73 65 2c 20 22 6a 6f 75  Int(pParse, "jou
9420: 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 22  rnal_size_limit"
9430: 2c 20 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20 62  , iLimit);.    b
9440: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 65 6e 64 69  reak;.  }..#endi
9450: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
9460: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a  _PAGER_PRAGMAS *
9470: 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  /..  /*.  **  PR
9480: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
9490: 61 75 74 6f 5f 76 61 63 75 75 6d 0a 20 20 2a 2a  auto_vacuum.  **
94a0: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
94b0: 73 65 2e 5d 61 75 74 6f 5f 76 61 63 75 75 6d 3d  se.]auto_vacuum=
94c0: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20  N.  **.  ** Get 
94d0: 6f 72 20 73 65 74 20 74 68 65 20 76 61 6c 75 65  or set the value
94e0: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
94f0: 20 27 61 75 74 6f 2d 76 61 63 75 75 6d 27 20 70   'auto-vacuum' p
9500: 61 72 61 6d 65 74 65 72 2e 0a 20 20 2a 2a 20 54  arameter..  ** T
9510: 68 65 20 76 61 6c 75 65 20 69 73 20 6f 6e 65 20  he value is one 
9520: 6f 66 3a 20 20 30 20 4e 4f 4e 45 20 31 20 46 55  of:  0 NONE 1 FU
9530: 4c 4c 20 32 20 49 4e 43 52 45 4d 45 4e 54 41 4c  LL 2 INCREMENTAL
9540: 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  .  */.#ifndef SQ
9550: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
9560: 43 55 55 4d 0a 20 20 63 61 73 65 20 50 72 61 67  CUUM.  case Prag
9570: 54 79 70 5f 41 55 54 4f 5f 56 41 43 55 55 4d 3a  Typ_AUTO_VACUUM:
9580: 20 7b 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42   {.    Btree *pB
9590: 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20  t = pDb->pBt;.  
95a0: 20 20 61 73 73 65 72 74 28 20 70 42 74 21 3d 30    assert( pBt!=0
95b0: 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69   );.    if( !zRi
95c0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ght ){.      ret
95d0: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
95e0: 72 73 65 2c 20 22 61 75 74 6f 5f 76 61 63 75 75  rse, "auto_vacuu
95f0: 6d 22 2c 20 73 71 6c 69 74 65 33 42 74 72 65 65  m", sqlite3Btree
9600: 47 65 74 41 75 74 6f 56 61 63 75 75 6d 28 70 42  GetAutoVacuum(pB
9610: 74 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  t));.    }else{.
9620: 20 20 20 20 20 20 69 6e 74 20 65 41 75 74 6f 20        int eAuto 
9630: 3d 20 67 65 74 41 75 74 6f 56 61 63 75 75 6d 28  = getAutoVacuum(
9640: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 61  zRight);.      a
9650: 73 73 65 72 74 28 20 65 41 75 74 6f 3e 3d 30 20  ssert( eAuto>=0 
9660: 26 26 20 65 41 75 74 6f 3c 3d 32 20 29 3b 0a 20  && eAuto<=2 );. 
9670: 20 20 20 20 20 64 62 2d 3e 6e 65 78 74 41 75 74       db->nextAut
9680: 6f 76 61 63 20 3d 20 28 75 38 29 65 41 75 74 6f  ovac = (u8)eAuto
9690: 3b 0a 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 20  ;.      /* Call 
96a0: 53 65 74 41 75 74 6f 56 61 63 75 75 6d 28 29 20  SetAutoVacuum() 
96b0: 74 6f 20 73 65 74 20 69 6e 69 74 69 61 6c 69 7a  to set initializ
96c0: 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 61  e the internal a
96d0: 75 74 6f 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a  uto and.      **
96e0: 20 69 6e 63 72 2d 76 61 63 75 75 6d 20 66 6c 61   incr-vacuum fla
96f0: 67 73 2e 20 54 68 69 73 20 69 73 20 72 65 71 75  gs. This is requ
9700: 69 72 65 64 20 69 6e 20 63 61 73 65 20 74 68 69  ired in case thi
9710: 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 20 20 20  s connection.   
9720: 20 20 20 2a 2a 20 63 72 65 61 74 65 73 20 74 68     ** creates th
9730: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
9740: 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74   It is important
9750: 20 74 68 61 74 20 69 74 20 69 73 20 63 72 65 61   that it is crea
9760: 74 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20  ted.      ** as 
9770: 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 63  an auto-vacuum c
9780: 61 70 61 62 6c 65 20 64 62 2e 0a 20 20 20 20 20  apable db..     
9790: 20 2a 2f 0a 20 20 20 20 20 20 72 63 20 3d 20 73   */.      rc = s
97a0: 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 41 75  qlite3BtreeSetAu
97b0: 74 6f 56 61 63 75 75 6d 28 70 42 74 2c 20 65 41  toVacuum(pBt, eA
97c0: 75 74 6f 29 3b 0a 20 20 20 20 20 20 69 66 28 20  uto);.      if( 
97d0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
97e0: 20 28 65 41 75 74 6f 3d 3d 31 20 7c 7c 20 65 41   (eAuto==1 || eA
97f0: 75 74 6f 3d 3d 32 29 20 29 7b 0a 20 20 20 20 20  uto==2) ){.     
9800: 20 20 20 2f 2a 20 57 68 65 6e 20 73 65 74 74 69     /* When setti
9810: 6e 67 20 74 68 65 20 61 75 74 6f 5f 76 61 63 75  ng the auto_vacu
9820: 75 6d 20 6d 6f 64 65 20 74 6f 20 65 69 74 68 65  um mode to eithe
9830: 72 20 22 66 75 6c 6c 22 20 6f 72 20 0a 20 20 20  r "full" or .   
9840: 20 20 20 20 20 2a 2a 20 22 69 6e 63 72 65 6d 65       ** "increme
9850: 6e 74 61 6c 22 2c 20 77 72 69 74 65 20 74 68 65  ntal", write the
9860: 20 76 61 6c 75 65 20 6f 66 20 6d 65 74 61 5b 36   value of meta[6
9870: 5d 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  ] in the databas
9880: 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c  e.        ** fil
9890: 65 2e 20 42 65 66 6f 72 65 20 77 72 69 74 69 6e  e. Before writin
98a0: 67 20 74 6f 20 6d 65 74 61 5b 36 5d 2c 20 63 68  g to meta[6], ch
98b0: 65 63 6b 20 74 68 61 74 20 6d 65 74 61 5b 33 5d  eck that meta[3]
98c0: 20 69 6e 64 69 63 61 74 65 73 0a 20 20 20 20 20   indicates.     
98d0: 20 20 20 2a 2a 20 74 68 61 74 20 74 68 69 73 20     ** that this 
98e0: 72 65 61 6c 6c 79 20 69 73 20 61 6e 20 61 75 74  really is an aut
98f0: 6f 2d 76 61 63 75 75 6d 20 63 61 70 61 62 6c 65  o-vacuum capable
9900: 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20 20   database..     
9910: 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 74     */.        st
9920: 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20 69  atic const int i
9930: 4c 6e 20 3d 20 56 44 42 45 5f 4f 46 46 53 45 54  Ln = VDBE_OFFSET
9940: 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20 20 20 20  _LINENO(2);.    
9950: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
9960: 20 56 64 62 65 4f 70 4c 69 73 74 20 73 65 74 4d   VdbeOpList setM
9970: 65 74 61 36 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  eta6[] = {.     
9980: 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61       { OP_Transa
9990: 63 74 69 6f 6e 2c 20 20 20 20 30 2c 20 20 20 20  ction,    0,    
99a0: 20 20 20 20 20 31 2c 20 20 20 20 20 20 20 20 20       1,         
99b0: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f          0},    /
99c0: 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  * 0 */.         
99d0: 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65   { OP_ReadCookie
99e0: 2c 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20  ,     0,        
99f0: 20 31 2c 20 20 20 20 20 20 20 20 20 42 54 52 45   1,         BTRE
9a00: 45 5f 4c 41 52 47 45 53 54 5f 52 4f 4f 54 5f 50  E_LARGEST_ROOT_P
9a10: 41 47 45 7d 2c 0a 20 20 20 20 20 20 20 20 20 20  AGE},.          
9a20: 7b 20 4f 50 5f 49 66 2c 20 20 20 20 20 20 20 20  { OP_If,        
9a30: 20 20 20 20 20 31 2c 20 20 20 20 20 20 20 20 20       1,         
9a40: 30 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20  0,              
9a50: 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 32 20 2a     0},    /* 2 *
9a60: 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50  /.          { OP
9a70: 5f 48 61 6c 74 2c 20 20 20 20 20 20 20 20 20 20  _Halt,          
9a80: 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 4f 45 5f 41   SQLITE_OK, OE_A
9a90: 62 6f 72 74 2c 20 20 20 20 20 20 20 20 20 20 30  bort,          0
9aa0: 7d 2c 20 20 20 20 2f 2a 20 33 20 2a 2f 0a 20 20  },    /* 3 */.  
9ab0: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74          { OP_Int
9ac0: 65 67 65 72 2c 20 20 20 20 20 20 20 20 30 2c 20  eger,        0, 
9ad0: 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20 20          1,      
9ae0: 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20             0},  
9af0: 20 20 2f 2a 20 34 20 2a 2f 0a 20 20 20 20 20 20    /* 4 */.      
9b00: 20 20 20 20 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b      { OP_SetCook
9b10: 69 65 2c 20 20 20 20 20 20 30 2c 20 20 20 20 20  ie,      0,     
9b20: 20 20 20 20 42 54 52 45 45 5f 49 4e 43 52 5f 56      BTREE_INCR_V
9b30: 41 43 55 55 4d 2c 20 31 7d 2c 20 20 20 20 2f 2a  ACUUM, 1},    /*
9b40: 20 35 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 3b   5 */.        };
9b50: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 41 64  .        int iAd
9b60: 64 72 3b 0a 20 20 20 20 20 20 20 20 69 41 64 64  dr;.        iAdd
9b70: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
9b80: 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61  ddOpList(v, Arra
9b90: 79 53 69 7a 65 28 73 65 74 4d 65 74 61 36 29 2c  ySize(setMeta6),
9ba0: 20 73 65 74 4d 65 74 61 36 2c 20 69 4c 6e 29 3b   setMeta6, iLn);
9bb0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
9bc0: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
9bd0: 69 41 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20  iAddr, iDb);.   
9be0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9bf0: 43 68 61 6e 67 65 50 31 28 76 2c 20 69 41 64 64  ChangeP1(v, iAdd
9c00: 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  r+1, iDb);.     
9c10: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
9c20: 61 6e 67 65 50 32 28 76 2c 20 69 41 64 64 72 2b  angeP2(v, iAddr+
9c30: 32 2c 20 69 41 64 64 72 2b 34 29 3b 0a 20 20 20  2, iAddr+4);.   
9c40: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9c50: 43 68 61 6e 67 65 50 31 28 76 2c 20 69 41 64 64  ChangeP1(v, iAdd
9c60: 72 2b 34 2c 20 65 41 75 74 6f 2d 31 29 3b 0a 20  r+4, eAuto-1);. 
9c70: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
9c80: 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 69 41  beChangeP1(v, iA
9c90: 64 64 72 2b 35 2c 20 69 44 62 29 3b 0a 20 20 20  ddr+5, iDb);.   
9ca0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9cb0: 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 44 62  UsesBtree(v, iDb
9cc0: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
9cd0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
9ce0: 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a  #endif..  /*.  *
9cf0: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
9d00: 61 73 65 2e 5d 69 6e 63 72 65 6d 65 6e 74 61 6c  ase.]incremental
9d10: 5f 76 61 63 75 75 6d 28 4e 29 0a 20 20 2a 2a 0a  _vacuum(N).  **.
9d20: 20 20 2a 2a 20 44 6f 20 4e 20 73 74 65 70 73 20    ** Do N steps 
9d30: 6f 66 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20 76  of incremental v
9d40: 61 63 75 75 6d 69 6e 67 20 6f 6e 20 61 20 64 61  acuuming on a da
9d50: 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 23 69 66  tabase..  */.#if
9d60: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
9d70: 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 63 61  _AUTOVACUUM.  ca
9d80: 73 65 20 50 72 61 67 54 79 70 5f 49 4e 43 52 45  se PragTyp_INCRE
9d90: 4d 45 4e 54 41 4c 5f 56 41 43 55 55 4d 3a 20 7b  MENTAL_VACUUM: {
9da0: 0a 20 20 20 20 69 6e 74 20 69 4c 69 6d 69 74 2c  .    int iLimit,
9db0: 20 61 64 64 72 3b 0a 20 20 20 20 69 66 28 20 7a   addr;.    if( z
9dc0: 52 69 67 68 74 3d 3d 30 20 7c 7c 20 21 73 71 6c  Right==0 || !sql
9dd0: 69 74 65 33 47 65 74 49 6e 74 33 32 28 7a 52 69  ite3GetInt32(zRi
9de0: 67 68 74 2c 20 26 69 4c 69 6d 69 74 29 20 7c 7c  ght, &iLimit) ||
9df0: 20 69 4c 69 6d 69 74 3c 3d 30 20 29 7b 0a 20 20   iLimit<=0 ){.  
9e00: 20 20 20 20 69 4c 69 6d 69 74 20 3d 20 30 78 37      iLimit = 0x7
9e10: 66 66 66 66 66 66 66 3b 0a 20 20 20 20 7d 0a 20  fffffff;.    }. 
9e20: 20 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57     sqlite3BeginW
9e30: 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 70 50  riteOperation(pP
9e40: 61 72 73 65 2c 20 30 2c 20 69 44 62 29 3b 0a 20  arse, 0, iDb);. 
9e50: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
9e60: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
9e70: 65 72 2c 20 69 4c 69 6d 69 74 2c 20 31 29 3b 0a  er, iLimit, 1);.
9e80: 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74      addr = sqlit
9e90: 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20  e3VdbeAddOp1(v, 
9ea0: 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 2c 20 69  OP_IncrVacuum, i
9eb0: 44 62 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  Db); VdbeCoverag
9ec0: 65 28 76 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  e(v);.    sqlite
9ed0: 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
9ee0: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 29 3b  P_ResultRow, 1);
9ef0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
9f00: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64  AddOp2(v, OP_Add
9f10: 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 0a 20 20 20  Imm, 1, -1);.   
9f20: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
9f30: 70 32 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20  p2(v, OP_IfPos, 
9f40: 31 2c 20 61 64 64 72 29 3b 20 56 64 62 65 43 6f  1, addr); VdbeCo
9f50: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 73  verage(v);.    s
9f60: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
9f70: 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20 20 20  re(v, addr);.   
9f80: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
9f90: 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
9fa0: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
9fb0: 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20  AGMAS.  /*.  ** 
9fc0: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
9fd0: 65 2e 5d 63 61 63 68 65 5f 73 69 7a 65 0a 20 20  e.]cache_size.  
9fe0: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
9ff0: 62 61 73 65 2e 5d 63 61 63 68 65 5f 73 69 7a 65  base.]cache_size
a000: 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  =N.  **.  ** The
a010: 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f   first form repo
a020: 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
a030: 6c 6f 63 61 6c 20 73 65 74 74 69 6e 67 20 66 6f  local setting fo
a040: 72 20 74 68 65 0a 20 20 2a 2a 20 70 61 67 65 20  r the.  ** page 
a050: 63 61 63 68 65 20 73 69 7a 65 2e 20 54 68 65 20  cache size. The 
a060: 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65 74 73  second form sets
a070: 20 74 68 65 20 6c 6f 63 61 6c 0a 20 20 2a 2a 20   the local.  ** 
a080: 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65 20  page cache size 
a090: 76 61 6c 75 65 2e 20 20 49 66 20 4e 20 69 73 20  value.  If N is 
a0a0: 70 6f 73 69 74 69 76 65 20 74 68 65 6e 20 74 68  positive then th
a0b0: 61 74 20 69 73 20 74 68 65 0a 20 20 2a 2a 20 6e  at is the.  ** n
a0c0: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
a0d0: 6e 20 74 68 65 20 63 61 63 68 65 2e 20 20 49 66  n the cache.  If
a0e0: 20 4e 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20   N is negative, 
a0f0: 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20 6e 75  then the.  ** nu
a100: 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69 73  mber of pages is
a110: 20 61 64 6a 75 73 74 65 64 20 73 6f 20 74 68 61   adjusted so tha
a120: 74 20 74 68 65 20 63 61 63 68 65 20 75 73 65 73  t the cache uses
a130: 20 2d 4e 20 6b 69 62 69 62 79 74 65 73 0a 20 20   -N kibibytes.  
a140: 2a 2a 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a 20 20  ** of memory..  
a150: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
a160: 70 5f 43 41 43 48 45 5f 53 49 5a 45 3a 20 7b 0a  p_CACHE_SIZE: {.
a170: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
a180: 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65  te3SchemaMutexHe
a190: 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29  ld(db, iDb, 0) )
a1a0: 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  ;.    if( !zRigh
a1b0: 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72  t ){.      retur
a1c0: 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73  nSingleInt(pPars
a1d0: 65 2c 20 22 63 61 63 68 65 5f 73 69 7a 65 22 2c  e, "cache_size",
a1e0: 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63   pDb->pSchema->c
a1f0: 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20  ache_size);.    
a200: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74  }else{.      int
a210: 20 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41   size = sqlite3A
a220: 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20 20  toi(zRight);.   
a230: 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d     pDb->pSchema-
a240: 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69  >cache_size = si
a250: 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ze;.      sqlite
a260: 33 42 74 72 65 65 53 65 74 43 61 63 68 65 53 69  3BtreeSetCacheSi
a270: 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62  ze(pDb->pBt, pDb
a280: 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65  ->pSchema->cache
a290: 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20  _size);.    }.  
a2a0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
a2b0: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
a2c0: 5b 64 61 74 61 62 61 73 65 2e 5d 6d 6d 61 70 5f  [database.]mmap_
a2d0: 73 69 7a 65 28 4e 29 0a 20 20 2a 2a 0a 20 20 2a  size(N).  **.  *
a2e0: 2a 20 55 73 65 64 20 74 6f 20 73 65 74 20 6d 61  * Used to set ma
a2f0: 70 70 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69 74  pping size limit
a300: 2e 20 54 68 65 20 6d 61 70 70 69 6e 67 20 73 69  . The mapping si
a310: 7a 65 20 6c 69 6d 69 74 20 69 73 0a 20 20 2a 2a  ze limit is.  **
a320: 20 75 73 65 64 20 74 6f 20 6c 69 6d 69 74 20 74   used to limit t
a330: 68 65 20 61 67 67 72 65 67 61 74 65 20 73 69 7a  he aggregate siz
a340: 65 20 6f 66 20 61 6c 6c 20 6d 65 6d 6f 72 79 20  e of all memory 
a350: 6d 61 70 70 65 64 20 72 65 67 69 6f 6e 73 20 6f  mapped regions o
a360: 66 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62  f the.  ** datab
a370: 61 73 65 20 66 69 6c 65 2e 20 49 66 20 74 68 69  ase file. If thi
a380: 73 20 70 61 72 61 6d 65 74 65 72 20 69 73 20 73  s parameter is s
a390: 65 74 20 74 6f 20 7a 65 72 6f 2c 20 74 68 65 6e  et to zero, then
a3a0: 20 6d 65 6d 6f 72 79 20 6d 61 70 70 69 6e 67 0a   memory mapping.
a3b0: 20 20 2a 2a 20 69 73 20 6e 6f 74 20 75 73 65 64    ** is not used
a3c0: 20 61 74 20 61 6c 6c 2e 20 20 49 66 20 4e 20 69   at all.  If N i
a3d0: 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65 6e  s negative, then
a3e0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 6d 65 6d   the default mem
a3f0: 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20 6c 69 6d  ory map.  ** lim
a400: 69 74 20 64 65 74 65 72 6d 69 6e 65 64 20 62 79  it determined by
a410: 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67 28   sqlite3_config(
a420: 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d 4d  SQLITE_CONFIG_MM
a430: 41 50 5f 53 49 5a 45 29 20 69 73 20 73 65 74 2e  AP_SIZE) is set.
a440: 0a 20 20 2a 2a 20 54 68 65 20 70 61 72 61 6d 65  .  ** The parame
a450: 74 65 72 20 4e 20 69 73 20 6d 65 61 73 75 72 65  ter N is measure
a460: 64 20 69 6e 20 62 79 74 65 73 2e 0a 20 20 2a 2a  d in bytes..  **
a470: 0a 20 20 2a 2a 20 54 68 69 73 20 76 61 6c 75 65  .  ** This value
a480: 20 69 73 20 61 64 76 69 73 6f 72 79 2e 20 20 54   is advisory.  T
a490: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 56 46  he underlying VF
a4a0: 53 20 69 73 20 66 72 65 65 20 74 6f 20 6d 65 6d  S is free to mem
a4b0: 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20 61 73 20  ory map.  ** as 
a4c0: 6c 69 74 74 6c 65 20 6f 72 20 61 73 20 6d 75 63  little or as muc
a4d0: 68 20 61 73 20 69 74 20 77 61 6e 74 73 2e 20 20  h as it wants.  
a4e0: 45 78 63 65 70 74 2c 20 69 66 20 4e 20 69 73 20  Except, if N is 
a4f0: 73 65 74 20 74 6f 20 30 20 74 68 65 6e 20 74 68  set to 0 then th
a500: 65 0a 20 20 2a 2a 20 75 70 70 65 72 20 6c 61 79  e.  ** upper lay
a510: 65 72 73 20 77 69 6c 6c 20 6e 65 76 65 72 20 69  ers will never i
a520: 6e 76 6f 6b 65 20 74 68 65 20 78 46 65 74 63 68  nvoke the xFetch
a530: 20 69 6e 74 65 72 66 61 63 65 73 20 74 6f 20 74   interfaces to t
a540: 68 65 20 56 46 53 2e 0a 20 20 2a 2f 0a 20 20 63  he VFS..  */.  c
a550: 61 73 65 20 50 72 61 67 54 79 70 5f 4d 4d 41 50  ase PragTyp_MMAP
a560: 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 73 71 6c  _SIZE: {.    sql
a570: 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 3b 0a 23  ite3_int64 sz;.#
a580: 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d 4d  if SQLITE_MAX_MM
a590: 41 50 5f 53 49 5a 45 3e 30 0a 20 20 20 20 61 73  AP_SIZE>0.    as
a5a0: 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
a5b0: 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
a5c0: 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20   iDb, 0) );.    
a5d0: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
a5e0: 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20      int ii;.    
a5f0: 20 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65    sqlite3DecOrHe
a600: 78 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26  xToI64(zRight, &
a610: 73 7a 29 3b 0a 20 20 20 20 20 20 69 66 28 20 73  sz);.      if( s
a620: 7a 3c 30 20 29 20 73 7a 20 3d 20 73 71 6c 69 74  z<0 ) sz = sqlit
a630: 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e 73  e3GlobalConfig.s
a640: 7a 4d 6d 61 70 3b 0a 20 20 20 20 20 20 69 66 28  zMmap;.      if(
a650: 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 20 64 62   pId2->n==0 ) db
a660: 2d 3e 73 7a 4d 6d 61 70 20 3d 20 73 7a 3b 0a 20  ->szMmap = sz;. 
a670: 20 20 20 20 20 66 6f 72 28 69 69 3d 64 62 2d 3e       for(ii=db->
a680: 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69 69  nDb-1; ii>=0; ii
a690: 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  --){.        if(
a6a0: 20 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74   db->aDb[ii].pBt
a6b0: 20 26 26 20 28 69 69 3d 3d 69 44 62 20 7c 7c 20   && (ii==iDb || 
a6c0: 70 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20  pId2->n==0) ){. 
a6d0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
a6e0: 42 74 72 65 65 53 65 74 4d 6d 61 70 4c 69 6d 69  BtreeSetMmapLimi
a6f0: 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  t(db->aDb[ii].pB
a700: 74 2c 20 73 7a 29 3b 0a 20 20 20 20 20 20 20 20  t, sz);.        
a710: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
a720: 20 20 20 20 73 7a 20 3d 20 2d 31 3b 0a 20 20 20      sz = -1;.   
a730: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69   rc = sqlite3_fi
a740: 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a  le_control(db, z
a750: 44 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c  Db, SQLITE_FCNTL
a760: 5f 4d 4d 41 50 5f 53 49 5a 45 2c 20 26 73 7a 29  _MMAP_SIZE, &sz)
a770: 3b 0a 23 65 6c 73 65 0a 20 20 20 20 73 7a 20 3d  ;.#else.    sz =
a780: 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 53 51 4c   0;.    rc = SQL
a790: 49 54 45 5f 4f 4b 3b 0a 23 65 6e 64 69 66 0a 20  ITE_OK;.#endif. 
a7a0: 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
a7b0: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72 65  E_OK ){.      re
a7c0: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50  turnSingleInt(pP
a7d0: 61 72 73 65 2c 20 22 6d 6d 61 70 5f 73 69 7a 65  arse, "mmap_size
a7e0: 22 2c 20 73 7a 29 3b 0a 20 20 20 20 7d 65 6c 73  ", sz);.    }els
a7f0: 65 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45  e if( rc!=SQLITE
a800: 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a 20 20 20  _NOTFOUND ){.   
a810: 20 20 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b     pParse->nErr+
a820: 2b 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d  +;.      pParse-
a830: 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 7d 0a  >rc = rc;.    }.
a840: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
a850: 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
a860: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20  MA temp_store.  
a870: 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70  **   PRAGMA temp
a880: 5f 73 74 6f 72 65 20 3d 20 22 64 65 66 61 75 6c  _store = "defaul
a890: 74 22 7c 22 6d 65 6d 6f 72 79 22 7c 22 66 69 6c  t"|"memory"|"fil
a8a0: 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  e".  **.  ** Ret
a8b0: 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c  urn or set the l
a8c0: 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68  ocal value of th
a8d0: 65 20 74 65 6d 70 5f 73 74 6f 72 65 20 66 6c 61  e temp_store fla
a8e0: 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a  g.  Changing.  *
a8f0: 2a 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75  * the local valu
a900: 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 20  e does not make 
a910: 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64  changes to the d
a920: 69 73 6b 20 66 69 6c 65 20 61 6e 64 20 74 68 65  isk file and the
a930: 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20 76 61   default.  ** va
a940: 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65 73 74  lue will be rest
a950: 6f 72 65 64 20 74 68 65 20 6e 65 78 74 20 74 69  ored the next ti
a960: 6d 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  me the database 
a970: 69 73 20 6f 70 65 6e 65 64 2e 0a 20 20 2a 2a 0a  is opened..  **.
a980: 20 20 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20 69    ** Note that i
a990: 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 66 6f  t is possible fo
a9a0: 72 20 74 68 65 20 6c 69 62 72 61 72 79 20 63 6f  r the library co
a9b0: 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69 6f  mpile-time optio
a9c0: 6e 73 20 74 6f 0a 20 20 2a 2a 20 6f 76 65 72 72  ns to.  ** overr
a9d0: 69 64 65 20 74 68 69 73 20 73 65 74 74 69 6e 67  ide this setting
a9e0: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
a9f0: 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45 3a  gTyp_TEMP_STORE:
aa00: 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67   {.    if( !zRig
aa10: 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75  ht ){.      retu
aa20: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72  rnSingleInt(pPar
aa30: 73 65 2c 20 22 74 65 6d 70 5f 73 74 6f 72 65 22  se, "temp_store"
aa40: 2c 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65  , db->temp_store
aa50: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
aa60: 20 20 20 20 63 68 61 6e 67 65 54 65 6d 70 53 74      changeTempSt
aa70: 6f 72 61 67 65 28 70 50 61 72 73 65 2c 20 7a 52  orage(pParse, zR
aa80: 69 67 68 74 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ight);.    }.   
aa90: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
aaa0: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
aab0: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
aac0: 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52 41 47  tory.  **   PRAG
aad0: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69  MA temp_store_di
aae0: 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22 64 69  rectory = ""|"di
aaf0: 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a 20 20  rectory_name".  
ab00: 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f  **.  ** Return o
ab10: 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c 20  r set the local 
ab20: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 74 65 6d  value of the tem
ab30: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
ab40: 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e  y flag.  Changin
ab50: 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65  g.  ** the value
ab60: 20 73 65 74 73 20 61 20 73 70 65 63 69 66 69 63   sets a specific
ab70: 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20 62 65   directory to be
ab80: 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f 72   used for tempor
ab90: 61 72 79 20 66 69 6c 65 73 2e 0a 20 20 2a 2a 20  ary files..  ** 
aba0: 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e 75 6c  Setting to a nul
abb0: 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72 74 73  l string reverts
abc0: 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c 74 20   to the default 
abd0: 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63 74  temporary direct
abe0: 6f 72 79 20 73 65 61 72 63 68 2e 0a 20 20 2a 2a  ory search..  **
abf0: 20 49 66 20 74 65 6d 70 6f 72 61 72 79 20 64 69   If temporary di
ac00: 72 65 63 74 6f 72 79 20 69 73 20 63 68 61 6e 67  rectory is chang
ac10: 65 64 2c 20 74 68 65 6e 20 69 6e 76 61 6c 69 64  ed, then invalid
ac20: 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65 2e 0a  ateTempStorage..
ac30: 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65    **.  */.  case
ac40: 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f 53 54   PragTyp_TEMP_ST
ac50: 4f 52 45 5f 44 49 52 45 43 54 4f 52 59 3a 20 7b  ORE_DIRECTORY: {
ac60: 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
ac70: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71   ){.      if( sq
ac80: 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63  lite3_temp_direc
ac90: 74 6f 72 79 20 29 7b 0a 20 20 20 20 20 20 20 20  tory ){.        
aca0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
acb0: 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20  mCols(v, 1);.   
acc0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
acd0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
ace0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 0a   COLNAME_NAME, .
acf0: 20 20 20 20 20 20 20 20 20 20 20 20 22 74 65 6d              "tem
ad00: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
ad10: 79 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  y", SQLITE_STATI
ad20: 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  C);.        sqli
ad30: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
ad40: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
ad50: 31 2c 20 30 2c 20 73 71 6c 69 74 65 33 5f 74 65  1, 0, sqlite3_te
ad60: 6d 70 5f 64 69 72 65 63 74 6f 72 79 2c 20 30 29  mp_directory, 0)
ad70: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
ad80: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
ad90: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
ada0: 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  1);.      }.    
adb0: 7d 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66 20 53  }else{.#ifndef S
adc0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20  QLITE_OMIT_WSD. 
add0: 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b       if( zRight[
ade0: 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e  0] ){.        in
adf0: 74 20 72 65 73 3b 0a 20 20 20 20 20 20 20 20 72  t res;.        r
ae00: 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41 63 63  c = sqlite3OsAcc
ae10: 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20 7a 52  ess(db->pVfs, zR
ae20: 69 67 68 74 2c 20 53 51 4c 49 54 45 5f 41 43 43  ight, SQLITE_ACC
ae30: 45 53 53 5f 52 45 41 44 57 52 49 54 45 2c 20 26  ESS_READWRITE, &
ae40: 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66  res);.        if
ae50: 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc!=SQLITE_OK 
ae60: 7c 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20  || res==0 ){.   
ae70: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72         sqlite3Er
ae80: 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22  rorMsg(pParse, "
ae90: 6e 6f 74 20 61 20 77 72 69 74 61 62 6c 65 20 64  not a writable d
aea0: 69 72 65 63 74 6f 72 79 22 29 3b 0a 20 20 20 20  irectory");.    
aeb0: 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d        goto pragm
aec0: 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 7d  a_out;.        }
aed0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
aee0: 66 28 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53  f( SQLITE_TEMP_S
aef0: 54 4f 52 45 3d 3d 30 0a 20 20 20 20 20 20 20 7c  TORE==0.       |
af00: 7c 20 28 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53  | (SQLITE_TEMP_S
af10: 54 4f 52 45 3d 3d 31 20 26 26 20 64 62 2d 3e 74  TORE==1 && db->t
af20: 65 6d 70 5f 73 74 6f 72 65 3c 3d 31 29 0a 20 20  emp_store<=1).  
af30: 20 20 20 20 20 7c 7c 20 28 53 51 4c 49 54 45 5f       || (SQLITE_
af40: 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 32 20 26 26  TEMP_STORE==2 &&
af50: 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3d   db->temp_store=
af60: 3d 31 29 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  =1).      ){.   
af70: 20 20 20 20 20 69 6e 76 61 6c 69 64 61 74 65 54       invalidateT
af80: 65 6d 70 53 74 6f 72 61 67 65 28 70 50 61 72 73  empStorage(pPars
af90: 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  e);.      }.    
afa0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 73    sqlite3_free(s
afb0: 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65  qlite3_temp_dire
afc0: 63 74 6f 72 79 29 3b 0a 20 20 20 20 20 20 69 66  ctory);.      if
afd0: 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20  ( zRight[0] ){. 
afe0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 74         sqlite3_t
aff0: 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 3d 20  emp_directory = 
b000: 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66 28  sqlite3_mprintf(
b010: 22 25 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20  "%s", zRight);. 
b020: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
b030: 20 20 20 20 73 71 6c 69 74 65 33 5f 74 65 6d 70      sqlite3_temp
b040: 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 30 3b 0a  _directory = 0;.
b050: 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 20 2f        }.#endif /
b060: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53  * SQLITE_OMIT_WS
b070: 44 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20 62  D */.    }.    b
b080: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66 20 53  reak;.  }..#if S
b090: 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 0a 20 20 2f  QLITE_OS_WIN.  /
b0a0: 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
b0b0: 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63  data_store_direc
b0c0: 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52 41 47  tory.  **   PRAG
b0d0: 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69  MA data_store_di
b0e0: 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22 64 69  rectory = ""|"di
b0f0: 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a 20 20  rectory_name".  
b100: 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f  **.  ** Return o
b110: 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c 20  r set the local 
b120: 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74  value of the dat
b130: 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  a_store_director
b140: 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e  y flag.  Changin
b150: 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65  g.  ** the value
b160: 20 73 65 74 73 20 61 20 73 70 65 63 69 66 69 63   sets a specific
b170: 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20 62 65   directory to be
b180: 20 75 73 65 64 20 66 6f 72 20 64 61 74 61 62 61   used for databa
b190: 73 65 20 66 69 6c 65 73 20 74 68 61 74 0a 20 20  se files that.  
b1a0: 2a 2a 20 77 65 72 65 20 73 70 65 63 69 66 69 65  ** were specifie
b1b0: 64 20 77 69 74 68 20 61 20 72 65 6c 61 74 69 76  d with a relativ
b1c0: 65 20 70 61 74 68 6e 61 6d 65 2e 20 20 53 65 74  e pathname.  Set
b1d0: 74 69 6e 67 20 74 6f 20 61 20 6e 75 6c 6c 20 73  ting to a null s
b1e0: 74 72 69 6e 67 20 72 65 76 65 72 74 73 0a 20 20  tring reverts.  
b1f0: 2a 2a 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c  ** to the defaul
b200: 74 20 64 61 74 61 62 61 73 65 20 64 69 72 65 63  t database direc
b210: 74 6f 72 79 2c 20 77 68 69 63 68 20 66 6f 72 20  tory, which for 
b220: 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 73  database files s
b230: 70 65 63 69 66 69 65 64 20 77 69 74 68 0a 20 20  pecified with.  
b240: 2a 2a 20 61 20 72 65 6c 61 74 69 76 65 20 70 61  ** a relative pa
b250: 74 68 20 77 69 6c 6c 20 70 72 6f 62 61 62 6c 79  th will probably
b260: 20 62 65 20 62 61 73 65 64 20 6f 6e 20 74 68 65   be based on the
b270: 20 63 75 72 72 65 6e 74 20 64 69 72 65 63 74 6f   current directo
b280: 72 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  ry for the.  ** 
b290: 70 72 6f 63 65 73 73 2e 20 20 44 61 74 61 62 61  process.  Databa
b2a0: 73 65 20 66 69 6c 65 20 73 70 65 63 69 66 69 65  se file specifie
b2b0: 64 20 77 69 74 68 20 61 6e 20 61 62 73 6f 6c 75  d with an absolu
b2c0: 74 65 20 70 61 74 68 20 61 72 65 20 6e 6f 74 20  te path are not 
b2d0: 69 6d 70 61 63 74 65 64 0a 20 20 2a 2a 20 62 79  impacted.  ** by
b2e0: 20 74 68 69 73 20 73 65 74 74 69 6e 67 2c 20 72   this setting, r
b2f0: 65 67 61 72 64 6c 65 73 73 20 6f 66 20 69 74 73  egardless of its
b300: 20 76 61 6c 75 65 2e 0a 20 20 2a 2a 0a 20 20 2a   value..  **.  *
b310: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
b320: 5f 44 41 54 41 5f 53 54 4f 52 45 5f 44 49 52 45  _DATA_STORE_DIRE
b330: 43 54 4f 52 59 3a 20 7b 0a 20 20 20 20 69 66 28  CTORY: {.    if(
b340: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
b350: 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 64 61    if( sqlite3_da
b360: 74 61 5f 64 69 72 65 63 74 6f 72 79 20 29 7b 0a  ta_directory ){.
b370: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
b380: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
b390: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   1);.        sql
b3a0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
b3b0: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
b3c0: 5f 4e 41 4d 45 2c 20 0a 20 20 20 20 20 20 20 20  _NAME, .        
b3d0: 20 20 20 20 22 64 61 74 61 5f 73 74 6f 72 65 5f      "data_store_
b3e0: 64 69 72 65 63 74 6f 72 79 22 2c 20 53 51 4c 49  directory", SQLI
b3f0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
b400: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
b410: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
b420: 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 73 71  ng8, 0, 1, 0, sq
b430: 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63  lite3_data_direc
b440: 74 6f 72 79 2c 20 30 29 3b 0a 20 20 20 20 20 20  tory, 0);.      
b450: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
b460: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
b470: 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20  Row, 1, 1);.    
b480: 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23    }.    }else{.#
b490: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
b4a0: 49 54 5f 57 53 44 0a 20 20 20 20 20 20 69 66 28  IT_WSD.      if(
b4b0: 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20   zRight[0] ){.  
b4c0: 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20        int res;. 
b4d0: 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69         rc = sqli
b4e0: 74 65 33 4f 73 41 63 63 65 73 73 28 64 62 2d 3e  te3OsAccess(db->
b4f0: 70 56 66 73 2c 20 7a 52 69 67 68 74 2c 20 53 51  pVfs, zRight, SQ
b500: 4c 49 54 45 5f 41 43 43 45 53 53 5f 52 45 41 44  LITE_ACCESS_READ
b510: 57 52 49 54 45 2c 20 26 72 65 73 29 3b 0a 20 20  WRITE, &res);.  
b520: 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51        if( rc!=SQ
b530: 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d  LITE_OK || res==
b540: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  0 ){.          s
b550: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
b560: 50 61 72 73 65 2c 20 22 6e 6f 74 20 61 20 77 72  Parse, "not a wr
b570: 69 74 61 62 6c 65 20 64 69 72 65 63 74 6f 72 79  itable directory
b580: 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f  ");.          go
b590: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
b5a0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
b5b0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
b5c0: 72 65 65 28 73 71 6c 69 74 65 33 5f 64 61 74 61  ree(sqlite3_data
b5d0: 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20  _directory);.   
b5e0: 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d     if( zRight[0]
b5f0: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
b600: 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f  te3_data_directo
b610: 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ry = sqlite3_mpr
b620: 69 6e 74 66 28 22 25 73 22 2c 20 7a 52 69 67 68  intf("%s", zRigh
b630: 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  t);.      }else{
b640: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
b650: 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79 20  _data_directory 
b660: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e  = 0;.      }.#en
b670: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
b680: 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a  IT_WSD */.    }.
b690: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
b6a0: 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49 54  endif..#if SQLIT
b6b0: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
b6c0: 5f 53 54 59 4c 45 0a 20 20 2f 2a 0a 20 20 2a 2a  _STYLE.  /*.  **
b6d0: 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
b6e0: 61 73 65 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f  ase.]lock_proxy_
b6f0: 66 69 6c 65 0a 20 20 2a 2a 20 20 20 50 52 41 47  file.  **   PRAG
b700: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f  MA [database.]lo
b710: 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 20 3d 20  ck_proxy_file = 
b720: 22 3a 61 75 74 6f 3a 22 7c 22 6c 6f 63 6b 5f 66  ":auto:"|"lock_f
b730: 69 6c 65 5f 70 61 74 68 22 0a 20 20 2a 2a 0a 20  ile_path".  **. 
b740: 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65   ** Return or se
b750: 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 74  t the value of t
b760: 68 65 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  he lock_proxy_fi
b770: 6c 65 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69  le flag.  Changi
b780: 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75  ng.  ** the valu
b790: 65 20 73 65 74 73 20 61 20 73 70 65 63 69 66 69  e sets a specifi
b7a0: 63 20 66 69 6c 65 20 74 6f 20 62 65 20 75 73 65  c file to be use
b7b0: 64 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 61  d for database a
b7c0: 63 63 65 73 73 20 6c 6f 63 6b 73 2e 0a 20 20 2a  ccess locks..  *
b7d0: 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  *.  */.  case Pr
b7e0: 61 67 54 79 70 5f 4c 4f 43 4b 5f 50 52 4f 58 59  agTyp_LOCK_PROXY
b7f0: 5f 46 49 4c 45 3a 20 7b 0a 20 20 20 20 69 66 28  _FILE: {.    if(
b800: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
b810: 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 20    Pager *pPager 
b820: 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
b830: 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20  ger(pDb->pBt);. 
b840: 20 20 20 20 20 63 68 61 72 20 2a 70 72 6f 78 79       char *proxy
b850: 5f 66 69 6c 65 5f 70 61 74 68 20 3d 20 4e 55 4c  _file_path = NUL
b860: 4c 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  L;.      sqlite3
b870: 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20 3d 20 73  _file *pFile = s
b880: 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65 28  qlite3PagerFile(
b890: 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20 73  pPager);.      s
b8a0: 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74  qlite3OsFileCont
b8b0: 72 6f 6c 48 69 6e 74 28 70 46 69 6c 65 2c 20 53  rolHint(pFile, S
b8c0: 51 4c 49 54 45 5f 47 45 54 5f 4c 4f 43 4b 50 52  QLITE_GET_LOCKPR
b8d0: 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20 20  OXYFILE, .      
b8e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b8f0: 20 20 20 20 20 26 70 72 6f 78 79 5f 66 69 6c 65       &proxy_file
b900: 5f 70 61 74 68 29 3b 0a 20 20 20 20 20 20 0a 20  _path);.      . 
b910: 20 20 20 20 20 69 66 28 20 70 72 6f 78 79 5f 66       if( proxy_f
b920: 69 6c 65 5f 70 61 74 68 20 29 7b 0a 20 20 20 20  ile_path ){.    
b930: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
b940: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
b950: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
b960: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
b970: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
b980: 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  E, .            
b990: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9a0: 20 20 22 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69    "lock_proxy_fi
b9b0: 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  le", SQLITE_STAT
b9c0: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  IC);.        sql
b9d0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
b9e0: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
b9f0: 20 31 2c 20 30 2c 20 70 72 6f 78 79 5f 66 69 6c   1, 0, proxy_fil
ba00: 65 5f 70 61 74 68 2c 20 30 29 3b 0a 20 20 20 20  e_path, 0);.    
ba10: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
ba20: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
ba30: 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20  ltRow, 1, 1);.  
ba40: 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
ba50: 0a 20 20 20 20 20 20 50 61 67 65 72 20 2a 70 50  .      Pager *pP
ba60: 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74  ager = sqlite3Bt
ba70: 72 65 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42  reePager(pDb->pB
ba80: 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  t);.      sqlite
ba90: 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20 3d 20  3_file *pFile = 
baa0: 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65  sqlite3PagerFile
bab0: 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20  (pPager);.      
bac0: 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20 20 69  int res;.      i
bad0: 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a  f( zRight[0] ){.
bae0: 20 20 20 20 20 20 20 20 72 65 73 3d 73 71 6c 69          res=sqli
baf0: 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72 6f 6c  te3OsFileControl
bb00: 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f 53  (pFile, SQLITE_S
bb10: 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45  ET_LOCKPROXYFILE
bb20: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
bb30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bb40: 20 20 20 20 20 20 20 20 7a 52 69 67 68 74 29 3b          zRight);
bb50: 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b 0a  .      } else {.
bb60: 20 20 20 20 20 20 20 20 72 65 73 3d 73 71 6c 69          res=sqli
bb70: 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72 6f 6c  te3OsFileControl
bb80: 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f 53  (pFile, SQLITE_S
bb90: 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45  ET_LOCKPROXYFILE
bba0: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
bbb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
bbc0: 20 20 20 20 20 20 20 20 4e 55 4c 4c 29 3b 0a 20          NULL);. 
bbd0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
bbe0: 20 72 65 73 21 3d 53 51 4c 49 54 45 5f 4f 4b 20   res!=SQLITE_OK 
bbf0: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
bc00: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
bc10: 65 2c 20 22 66 61 69 6c 65 64 20 74 6f 20 73 65  e, "failed to se
bc20: 74 20 6c 6f 63 6b 20 70 72 6f 78 79 20 66 69 6c  t lock proxy fil
bc30: 65 22 29 3b 0a 20 20 20 20 20 20 20 20 67 6f 74  e");.        got
bc40: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
bc50: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
bc60: 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69  break;.  }.#endi
bc70: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41 42  f /* SQLITE_ENAB
bc80: 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45  LE_LOCKING_STYLE
bc90: 20 2a 2f 20 20 20 20 20 20 0a 20 20 20 20 0a 20   */      .    . 
bca0: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
bcb0: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 79 6e  A [database.]syn
bcc0: 63 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20 20 20  chronous.  **   
bcd0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
bce0: 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46  .]synchronous=OF
bcf0: 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c 7c 46 55 4c 4c  F|ON|NORMAL|FULL
bd00: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72  .  **.  ** Retur
bd10: 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63  n or set the loc
bd20: 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  al value of the 
bd30: 73 79 6e 63 68 72 6f 6e 6f 75 73 20 66 6c 61 67  synchronous flag
bd40: 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a  .  Changing.  **
bd50: 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65   the local value
bd60: 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 20 63   does not make c
bd70: 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64 69  hanges to the di
bd80: 73 6b 20 66 69 6c 65 20 61 6e 64 20 74 68 65 0a  sk file and the.
bd90: 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 76 61 6c    ** default val
bda0: 75 65 20 77 69 6c 6c 20 62 65 20 72 65 73 74 6f  ue will be resto
bdb0: 72 65 64 20 74 68 65 20 6e 65 78 74 20 74 69 6d  red the next tim
bdc0: 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  e the database i
bdd0: 73 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 2e 0a 20  s.  ** opened.. 
bde0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
bdf0: 79 70 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3a 20  yp_SYNCHRONOUS: 
be00: 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  {.    if( !zRigh
be10: 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72  t ){.      retur
be20: 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73  nSingleInt(pPars
be30: 65 2c 20 22 73 79 6e 63 68 72 6f 6e 6f 75 73 22  e, "synchronous"
be40: 2c 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65  , pDb->safety_le
be50: 76 65 6c 2d 31 29 3b 0a 20 20 20 20 7d 65 6c 73  vel-1);.    }els
be60: 65 7b 0a 20 20 20 20 20 20 69 66 28 20 21 64 62  e{.      if( !db
be70: 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a  ->autoCommit ){.
be80: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
be90: 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20  rrorMsg(pParse, 
bea0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 53 61  .            "Sa
beb0: 66 65 74 79 20 6c 65 76 65 6c 20 6d 61 79 20 6e  fety level may n
bec0: 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20 69 6e  ot be changed in
bed0: 73 69 64 65 20 61 20 74 72 61 6e 73 61 63 74 69  side a transacti
bee0: 6f 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  on");.      }els
bef0: 65 7b 0a 20 20 20 20 20 20 20 20 70 44 62 2d 3e  e{.        pDb->
bf00: 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 67  safety_level = g
bf10: 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 7a 52  etSafetyLevel(zR
bf20: 69 67 68 74 2c 30 2c 31 29 2b 31 3b 0a 20 20 20  ight,0,1)+1;.   
bf30: 20 20 20 20 20 73 65 74 41 6c 6c 50 61 67 65 72       setAllPager
bf40: 46 6c 61 67 73 28 64 62 29 3b 0a 20 20 20 20 20  Flags(db);.     
bf50: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65   }.    }.    bre
bf60: 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f  ak;.  }.#endif /
bf70: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  * SQLITE_OMIT_PA
bf80: 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  GER_PRAGMAS */..
bf90: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
bfa0: 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53  MIT_FLAG_PRAGMAS
bfb0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
bfc0: 46 4c 41 47 3a 20 7b 0a 20 20 20 20 69 66 28 20  FLAG: {.    if( 
bfd0: 7a 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20  zRight==0 ){.   
bfe0: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
bff0: 6e 74 28 70 50 61 72 73 65 2c 20 70 50 72 61 67  nt(pParse, pPrag
c000: 6d 61 2d 3e 7a 4e 61 6d 65 2c 20 28 64 62 2d 3e  ma->zName, (db->
c010: 66 6c 61 67 73 20 26 20 70 50 72 61 67 6d 61 2d  flags & pPragma-
c020: 3e 69 41 72 67 29 21 3d 30 20 29 3b 0a 20 20 20  >iArg)!=0 );.   
c030: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e   }else{.      in
c040: 74 20 6d 61 73 6b 20 3d 20 70 50 72 61 67 6d 61  t mask = pPragma
c050: 2d 3e 69 41 72 67 3b 20 20 20 20 2f 2a 20 4d 61  ->iArg;    /* Ma
c060: 73 6b 20 6f 66 20 62 69 74 73 20 74 6f 20 73 65  sk of bits to se
c070: 74 20 6f 72 20 63 6c 65 61 72 2e 20 2a 2f 0a 20  t or clear. */. 
c080: 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74       if( db->aut
c090: 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 7b 0a 20 20  oCommit==0 ){.  
c0a0: 20 20 20 20 20 20 2f 2a 20 46 6f 72 65 69 67 6e        /* Foreign
c0b0: 20 6b 65 79 20 73 75 70 70 6f 72 74 20 6d 61 79   key support may
c0c0: 20 6e 6f 74 20 62 65 20 65 6e 61 62 6c 65 64 20   not be enabled 
c0d0: 6f 72 20 64 69 73 61 62 6c 65 64 20 77 68 69 6c  or disabled whil
c0e0: 65 20 6e 6f 74 0a 20 20 20 20 20 20 20 20 2a 2a  e not.        **
c0f0: 20 69 6e 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20   in auto-commit 
c100: 6d 6f 64 65 2e 20 20 2a 2f 0a 20 20 20 20 20 20  mode.  */.      
c110: 20 20 6d 61 73 6b 20 26 3d 20 7e 28 53 51 4c 49    mask &= ~(SQLI
c120: 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 29 3b  TE_ForeignKeys);
c130: 0a 20 20 20 20 20 20 7d 0a 23 69 66 20 53 51 4c  .      }.#if SQL
c140: 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54  ITE_USER_AUTHENT
c150: 49 43 41 54 49 4f 4e 0a 20 20 20 20 20 20 69 66  ICATION.      if
c160: 28 20 64 62 2d 3e 61 75 74 68 2e 61 75 74 68 4c  ( db->auth.authL
c170: 65 76 65 6c 3d 3d 55 41 55 54 48 5f 55 73 65 72  evel==UAUTH_User
c180: 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 44   ){.        /* D
c190: 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 6e 6f 6e 2d  o not allow non-
c1a0: 61 64 6d 69 6e 20 75 73 65 72 73 20 74 6f 20 6d  admin users to m
c1b0: 6f 64 69 66 79 20 74 68 65 20 73 63 68 65 6d 61  odify the schema
c1c0: 20 61 72 62 69 74 72 61 72 69 6c 79 20 2a 2f 0a   arbitrarily */.
c1d0: 20 20 20 20 20 20 20 20 6d 61 73 6b 20 26 3d 20          mask &= 
c1e0: 7e 28 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63  ~(SQLITE_WriteSc
c1f0: 68 65 6d 61 29 3b 0a 20 20 20 20 20 20 7d 0a 23  hema);.      }.#
c200: 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 69 66 28  endif..      if(
c210: 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
c220: 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 20 29 7b  an(zRight, 0) ){
c230: 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61  .        db->fla
c240: 67 73 20 7c 3d 20 6d 61 73 6b 3b 0a 20 20 20 20  gs |= mask;.    
c250: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
c260: 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 6d   db->flags &= ~m
c270: 61 73 6b 3b 0a 20 20 20 20 20 20 20 20 69 66 28  ask;.        if(
c280: 20 6d 61 73 6b 3d 3d 53 51 4c 49 54 45 5f 44 65   mask==SQLITE_De
c290: 66 65 72 46 4b 73 20 29 20 64 62 2d 3e 6e 44 65  ferFKs ) db->nDe
c2a0: 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20  ferredImmCons = 
c2b0: 30 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  0;.      }..    
c2c0: 20 20 2f 2a 20 4d 61 6e 79 20 6f 66 20 74 68 65    /* Many of the
c2d0: 20 66 6c 61 67 2d 70 72 61 67 6d 61 73 20 6d 6f   flag-pragmas mo
c2e0: 64 69 66 79 20 74 68 65 20 63 6f 64 65 20 67 65  dify the code ge
c2f0: 6e 65 72 61 74 65 64 20 62 79 20 74 68 65 20 53  nerated by the S
c300: 51 4c 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d  QL .      ** com
c310: 70 69 6c 65 72 20 28 65 67 2e 20 63 6f 75 6e 74  piler (eg. count
c320: 5f 63 68 61 6e 67 65 73 29 2e 20 53 6f 20 61 64  _changes). So ad
c330: 64 20 61 6e 20 6f 70 63 6f 64 65 20 74 6f 20 65  d an opcode to e
c340: 78 70 69 72 65 20 61 6c 6c 0a 20 20 20 20 20 20  xpire all.      
c350: 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20  ** compiled SQL 
c360: 73 74 61 74 65 6d 65 6e 74 73 20 61 66 74 65 72  statements after
c370: 20 6d 6f 64 69 66 79 69 6e 67 20 61 20 70 72 61   modifying a pra
c380: 67 6d 61 20 76 61 6c 75 65 2e 0a 20 20 20 20 20  gma value..     
c390: 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
c3a0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
c3b0: 50 5f 45 78 70 69 72 65 2c 20 30 2c 20 30 29 3b  P_Expire, 0, 0);
c3c0: 0a 20 20 20 20 20 20 73 65 74 41 6c 6c 50 61 67  .      setAllPag
c3d0: 65 72 46 6c 61 67 73 28 64 62 29 3b 0a 20 20 20  erFlags(db);.   
c3e0: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
c3f0: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
c400: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
c410: 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GMAS */..#ifndef
c420: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48   SQLITE_OMIT_SCH
c430: 45 4d 41 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a  EMA_PRAGMAS.  /*
c440: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74  .  **   PRAGMA t
c450: 61 62 6c 65 5f 69 6e 66 6f 28 3c 74 61 62 6c 65  able_info(<table
c460: 3e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  >).  **.  ** Ret
c470: 75 72 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77  urn a single row
c480: 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e   for each column
c490: 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61   of the named ta
c4a0: 62 6c 65 2e 20 54 68 65 20 63 6f 6c 75 6d 6e 73  ble. The columns
c4b0: 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 72 65 74   of.  ** the ret
c4c0: 75 72 6e 65 64 20 64 61 74 61 20 73 65 74 20 61  urned data set a
c4d0: 72 65 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 63 69  re:.  **.  ** ci
c4e0: 64 3a 20 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e  d:        Column
c4f0: 20 69 64 20 28 6e 75 6d 62 65 72 65 64 20 66 72   id (numbered fr
c500: 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74  om left to right
c510: 2c 20 73 74 61 72 74 69 6e 67 20 61 74 20 30 29  , starting at 0)
c520: 0a 20 20 2a 2a 20 6e 61 6d 65 3a 20 20 20 20 20  .  ** name:     
c530: 20 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 20 20    Column name.  
c540: 2a 2a 20 74 79 70 65 3a 20 20 20 20 20 20 20 43  ** type:       C
c550: 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f  olumn declaratio
c560: 6e 20 74 79 70 65 2e 0a 20 20 2a 2a 20 6e 6f 74  n type..  ** not
c570: 6e 75 6c 6c 3a 20 20 20 20 54 72 75 65 20 69 66  null:    True if
c580: 20 27 4e 4f 54 20 4e 55 4c 4c 27 20 69 73 20 70   'NOT NULL' is p
c590: 61 72 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64 65  art of column de
c5a0: 63 6c 61 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 64  claration.  ** d
c5b0: 66 6c 74 5f 76 61 6c 75 65 3a 20 54 68 65 20 64  flt_value: The d
c5c0: 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72  efault value for
c5d0: 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 69 66 20   the column, if 
c5e0: 61 6e 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  any..  */.  case
c5f0: 20 50 72 61 67 54 79 70 5f 54 41 42 4c 45 5f 49   PragTyp_TABLE_I
c600: 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67 68 74 20  NFO: if( zRight 
c610: 29 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  ){.    Table *pT
c620: 61 62 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73  ab;.    pTab = s
c630: 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28  qlite3FindTable(
c640: 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29  db, zRight, zDb)
c650: 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62 20 29  ;.    if( pTab )
c660: 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 2c 20 6b  {.      int i, k
c670: 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 48 69 64  ;.      int nHid
c680: 64 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 43  den = 0;.      C
c690: 6f 6c 75 6d 6e 20 2a 70 43 6f 6c 3b 0a 20 20 20  olumn *pCol;.   
c6a0: 20 20 20 49 6e 64 65 78 20 2a 70 50 6b 20 3d 20     Index *pPk = 
c6b0: 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65  sqlite3PrimaryKe
c6c0: 79 49 6e 64 65 78 28 70 54 61 62 29 3b 0a 20 20  yIndex(pTab);.  
c6d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
c6e0: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 36 29 3b  etNumCols(v, 6);
c6f0: 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  .      pParse->n
c700: 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 20 20 73  Mem = 6;.      s
c710: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
c720: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
c730: 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Db);.      sqlit
c740: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
c750: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
c760: 41 4d 45 2c 20 22 63 69 64 22 2c 20 53 51 4c 49  AME, "cid", SQLI
c770: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
c780: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
c790: 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f  ColName(v, 1, CO
c7a0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d  LNAME_NAME, "nam
c7b0: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
c7c0: 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
c7d0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
c7e0: 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 2, COLNAME_NA
c7f0: 4d 45 2c 20 22 74 79 70 65 22 2c 20 53 51 4c 49  ME, "type", SQLI
c800: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
c810: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
c820: 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f  ColName(v, 3, CO
c830: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 6f 74  LNAME_NAME, "not
c840: 6e 75 6c 6c 22 2c 20 53 51 4c 49 54 45 5f 53 54  null", SQLITE_ST
c850: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
c860: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
c870: 6d 65 28 76 2c 20 34 2c 20 43 4f 4c 4e 41 4d 45  me(v, 4, COLNAME
c880: 5f 4e 41 4d 45 2c 20 22 64 66 6c 74 5f 76 61 6c  _NAME, "dflt_val
c890: 75 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ue", SQLITE_STAT
c8a0: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
c8b0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
c8c0: 28 76 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 5, COLNAME_N
c8d0: 41 4d 45 2c 20 22 70 6b 22 2c 20 53 51 4c 49 54  AME, "pk", SQLIT
c8e0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
c8f0: 20 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43   sqlite3ViewGetC
c900: 6f 6c 75 6d 6e 4e 61 6d 65 73 28 70 50 61 72 73  olumnNames(pPars
c910: 65 2c 20 70 54 61 62 29 3b 0a 20 20 20 20 20 20  e, pTab);.      
c920: 66 6f 72 28 69 3d 30 2c 20 70 43 6f 6c 3d 70 54  for(i=0, pCol=pT
c930: 61 62 2d 3e 61 43 6f 6c 3b 20 69 3c 70 54 61 62  ab->aCol; i<pTab
c940: 2d 3e 6e 43 6f 6c 3b 20 69 2b 2b 2c 20 70 43 6f  ->nCol; i++, pCo
c950: 6c 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66  l++){.        if
c960: 28 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e  ( IsHiddenColumn
c970: 28 70 43 6f 6c 29 20 29 7b 0a 20 20 20 20 20 20  (pCol) ){.      
c980: 20 20 20 20 6e 48 69 64 64 65 6e 2b 2b 3b 0a 20      nHidden++;. 
c990: 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75           continu
c9a0: 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  e;.        }.   
c9b0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c9c0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
c9d0: 65 67 65 72 2c 20 69 2d 6e 48 69 64 64 65 6e 2c  eger, i-nHidden,
c9e0: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   1);.        sql
c9f0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
ca00: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
ca10: 20 32 2c 20 30 2c 20 70 43 6f 6c 2d 3e 7a 4e 61   2, 0, pCol->zNa
ca20: 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  me, 0);.        
ca30: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
ca40: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
ca50: 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20   0, 3, 0,.      
ca60: 20 20 20 20 20 70 43 6f 6c 2d 3e 7a 54 79 70 65       pCol->zType
ca70: 20 3f 20 70 43 6f 6c 2d 3e 7a 54 79 70 65 20 3a   ? pCol->zType :
ca80: 20 22 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20   "", 0);.       
ca90: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
caa0: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
cab0: 2c 20 28 70 43 6f 6c 2d 3e 6e 6f 74 4e 75 6c 6c  , (pCol->notNull
cac0: 20 3f 20 31 20 3a 20 30 29 2c 20 34 29 3b 0a 20   ? 1 : 0), 4);. 
cad0: 20 20 20 20 20 20 20 69 66 28 20 70 43 6f 6c 2d         if( pCol-
cae0: 3e 7a 44 66 6c 74 20 29 7b 0a 20 20 20 20 20 20  >zDflt ){.      
caf0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
cb00: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
cb10: 6e 67 38 2c 20 30 2c 20 35 2c 20 30 2c 20 28 63  ng8, 0, 5, 0, (c
cb20: 68 61 72 2a 29 70 43 6f 6c 2d 3e 7a 44 66 6c 74  har*)pCol->zDflt
cb30: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 65  , 0);.        }e
cb40: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 73  lse{.          s
cb50: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
cb60: 28 76 2c 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20  (v, OP_Null, 0, 
cb70: 35 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  5);.        }.  
cb80: 20 20 20 20 20 20 69 66 28 20 28 70 43 6f 6c 2d        if( (pCol-
cb90: 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46  >colFlags & COLF
cba0: 4c 41 47 5f 50 52 49 4d 4b 45 59 29 3d 3d 30 20  LAG_PRIMKEY)==0 
cbb0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d  ){.          k =
cbc0: 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73   0;.        }els
cbd0: 65 20 69 66 28 20 70 50 6b 3d 3d 30 20 29 7b 0a  e if( pPk==0 ){.
cbe0: 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20 31 3b            k = 1;
cbf0: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
cc00: 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6b 3d            for(k=
cc10: 31 3b 20 41 4c 57 41 59 53 28 6b 3c 3d 70 54 61  1; ALWAYS(k<=pTa
cc20: 62 2d 3e 6e 43 6f 6c 29 20 26 26 20 70 50 6b 2d  b->nCol) && pPk-
cc30: 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 2d 31 5d 21 3d  >aiColumn[k-1]!=
cc40: 69 3b 20 6b 2b 2b 29 7b 7d 0a 20 20 20 20 20 20  i; k++){}.      
cc50: 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69    }.        sqli
cc60: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
cc70: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6b 2c 20   OP_Integer, k, 
cc80: 36 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  6);.        sqli
cc90: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
cca0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
ccb0: 2c 20 36 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 6);.      }.  
ccc0: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
ccd0: 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  ..  case PragTyp
cce0: 5f 53 54 41 54 53 3a 20 7b 0a 20 20 20 20 49 6e  _STATS: {.    In
ccf0: 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 48  dex *pIdx;.    H
cd00: 61 73 68 45 6c 65 6d 20 2a 69 3b 0a 20 20 20 20  ashElem *i;.    
cd10: 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64  v = sqlite3GetVd
cd20: 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20  be(pParse);.    
cd30: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
cd40: 6d 43 6f 6c 73 28 76 2c 20 34 29 3b 0a 20 20 20  mCols(v, 4);.   
cd50: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
cd60: 34 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f  4;.    sqlite3Co
cd70: 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70  deVerifySchema(p
cd80: 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20  Parse, iDb);.   
cd90: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
cda0: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
cdb0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 61 62 6c  NAME_NAME, "tabl
cdc0: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
cdd0: 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  C);.    sqlite3V
cde0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
cdf0: 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   1, COLNAME_NAME
ce00: 2c 20 22 69 6e 64 65 78 22 2c 20 53 51 4c 49 54  , "index", SQLIT
ce10: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
ce20: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
ce30: 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41  Name(v, 2, COLNA
ce40: 4d 45 5f 4e 41 4d 45 2c 20 22 77 69 64 74 68 22  ME_NAME, "width"
ce50: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
ce60: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
ce70: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33  eSetColName(v, 3
ce80: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
ce90: 22 68 65 69 67 68 74 22 2c 20 53 51 4c 49 54 45  "height", SQLITE
cea0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 66 6f  _STATIC);.    fo
ceb0: 72 28 69 3d 73 71 6c 69 74 65 48 61 73 68 46 69  r(i=sqliteHashFi
cec0: 72 73 74 28 26 70 44 62 2d 3e 70 53 63 68 65 6d  rst(&pDb->pSchem
ced0: 61 2d 3e 74 62 6c 48 61 73 68 29 3b 20 69 3b 20  a->tblHash); i; 
cee0: 69 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74  i=sqliteHashNext
cef0: 28 69 29 29 7b 0a 20 20 20 20 20 20 54 61 62 6c  (i)){.      Tabl
cf00: 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65  e *pTab = sqlite
cf10: 48 61 73 68 44 61 74 61 28 69 29 3b 0a 20 20 20  HashData(i);.   
cf20: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
cf30: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
cf40: 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 70 54 61  g8, 0, 1, 0, pTa
cf50: 62 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20  b->zName, 0);.  
cf60: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
cf70: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 75 6c 6c  ddOp2(v, OP_Null
cf80: 2c 20 30 2c 20 32 29 3b 0a 20 20 20 20 20 20 73  , 0, 2);.      s
cf90: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
cfa0: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 0a  (v, OP_Integer,.
cfb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cfc0: 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29             (int)
cfd0: 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49  sqlite3LogEstToI
cfe0: 6e 74 28 70 54 61 62 2d 3e 73 7a 54 61 62 52 6f  nt(pTab->szTabRo
cff0: 77 29 2c 20 33 29 3b 0a 20 20 20 20 20 20 73 71  w), 3);.      sq
d000: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
d010: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 0a  v, OP_Integer, .
d020: 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 73            (int)s
d030: 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e  qlite3LogEstToIn
d040: 74 28 70 54 61 62 2d 3e 6e 52 6f 77 4c 6f 67 45  t(pTab->nRowLogE
d050: 73 74 29 2c 20 34 29 3b 0a 20 20 20 20 20 20 73  st), 4);.      s
d060: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
d070: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
d080: 2c 20 31 2c 20 34 29 3b 0a 20 20 20 20 20 20 66  , 1, 4);.      f
d090: 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49  or(pIdx=pTab->pI
d0a0: 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78  ndex; pIdx; pIdx
d0b0: 3d 70 49 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20  =pIdx->pNext){. 
d0c0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d0d0: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
d0e0: 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c  tring8, 0, 2, 0,
d0f0: 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 30 29   pIdx->zName, 0)
d100: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
d110: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
d120: 50 5f 49 6e 74 65 67 65 72 2c 0a 20 20 20 20 20  P_Integer,.     
d130: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d140: 20 20 20 20 20 20 20 20 28 69 6e 74 29 73 71 6c          (int)sql
d150: 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28  ite3LogEstToInt(
d160: 70 49 64 78 2d 3e 73 7a 49 64 78 52 6f 77 29 2c  pIdx->szIdxRow),
d170: 20 33 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   3);.        sql
d180: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
d190: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 0a 20  , OP_Integer, . 
d1a0: 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29             (int)
d1b0: 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49  sqlite3LogEstToI
d1c0: 6e 74 28 70 49 64 78 2d 3e 61 69 52 6f 77 4c 6f  nt(pIdx->aiRowLo
d1d0: 67 45 73 74 5b 30 5d 29 2c 20 34 29 3b 0a 20 20  gEst[0]), 4);.  
d1e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d1f0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
d200: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29 3b 0a  sultRow, 1, 4);.
d210: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
d220: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61  }.  break;..  ca
d230: 73 65 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58  se PragTyp_INDEX
d240: 5f 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67 68  _INFO: if( zRigh
d250: 74 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a  t ){.    Index *
d260: 70 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20  pIdx;.    Table 
d270: 2a 70 54 61 62 3b 0a 20 20 20 20 70 49 64 78 20  *pTab;.    pIdx 
d280: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64  = sqlite3FindInd
d290: 65 78 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a  ex(db, zRight, z
d2a0: 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64  Db);.    if( pId
d2b0: 78 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69  x ){.      int i
d2c0: 3b 0a 20 20 20 20 20 20 69 6e 74 20 6d 78 20 3d  ;.      int mx =
d2d0: 20 70 50 72 61 67 6d 61 2d 3e 69 41 72 67 20 3f   pPragma->iArg ?
d2e0: 20 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 20 3a   pIdx->nColumn :
d2f0: 20 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 0a   pIdx->nKeyCol;.
d300: 20 20 20 20 20 20 70 54 61 62 20 3d 20 70 49 64        pTab = pId
d310: 78 2d 3e 70 54 61 62 6c 65 3b 0a 20 20 20 20 20  x->pTable;.     
d320: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
d330: 75 6d 43 6f 6c 73 28 76 2c 20 36 29 3b 0a 20 20  umCols(v, 6);.  
d340: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
d350: 20 3d 20 36 3b 0a 20 20 20 20 20 20 73 71 6c 69   = 6;.      sqli
d360: 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
d370: 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29  ema(pParse, iDb)
d380: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
d390: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
d3a0: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
d3b0: 2c 20 22 73 65 71 6e 6f 22 2c 20 53 51 4c 49 54  , "seqno", SQLIT
d3c0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
d3d0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
d3e0: 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c  olName(v, 1, COL
d3f0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 69 64 22  NAME_NAME, "cid"
d400: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
d410: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
d420: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
d430: 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   2, COLNAME_NAME
d440: 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45  , "name", SQLITE
d450: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
d460: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
d470: 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e  lName(v, 3, COLN
d480: 41 4d 45 5f 4e 41 4d 45 2c 20 22 64 65 73 63 22  AME_NAME, "desc"
d490: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
d4a0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
d4b0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
d4c0: 20 34 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   4, COLNAME_NAME
d4d0: 2c 20 22 63 6f 6c 6c 22 2c 20 53 51 4c 49 54 45  , "coll", SQLITE
d4e0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
d4f0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
d500: 6c 4e 61 6d 65 28 76 2c 20 35 2c 20 43 4f 4c 4e  lName(v, 5, COLN
d510: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6b 65 79 22 2c  AME_NAME, "key",
d520: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
d530: 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  .      for(i=0; 
d540: 69 3c 6d 78 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  i<mx; i++){.    
d550: 20 20 20 20 69 31 36 20 63 6e 75 6d 20 3d 20 70      i16 cnum = p
d560: 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 69 5d  Idx->aiColumn[i]
d570: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
d580: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
d590: 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 31 29  P_Integer, i, 1)
d5a0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
d5b0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
d5c0: 50 5f 49 6e 74 65 67 65 72 2c 20 63 6e 75 6d 2c  P_Integer, cnum,
d5d0: 20 32 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28   2);.        if(
d5e0: 20 63 6e 75 6d 3c 30 20 29 7b 0a 20 20 20 20 20   cnum<0 ){.     
d5f0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d600: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 75 6c  AddOp2(v, OP_Nul
d610: 6c 2c 20 30 2c 20 33 29 3b 0a 20 20 20 20 20 20  l, 0, 3);.      
d620: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
d630: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d640: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
d650: 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 70 54 61  g8, 0, 3, 0, pTa
d660: 62 2d 3e 61 43 6f 6c 5b 63 6e 75 6d 5d 2e 7a 4e  b->aCol[cnum].zN
d670: 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  ame, 0);.       
d680: 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74   }.        sqlit
d690: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
d6a0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 49 64 78  OP_Integer, pIdx
d6b0: 2d 3e 61 53 6f 72 74 4f 72 64 65 72 5b 69 5d 2c  ->aSortOrder[i],
d6c0: 20 34 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   4);.        sql
d6d0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
d6e0: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
d6f0: 20 35 2c 20 30 2c 20 70 49 64 78 2d 3e 61 7a 43   5, 0, pIdx->azC
d700: 6f 6c 6c 5b 69 5d 2c 20 30 29 3b 0a 20 20 20 20  oll[i], 0);.    
d710: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d720: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
d730: 67 65 72 2c 20 69 3c 70 49 64 78 2d 3e 6e 4b 65  ger, i<pIdx->nKe
d740: 79 43 6f 6c 2c 20 36 29 3b 0a 20 20 20 20 20 20  yCol, 6);.      
d750: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d760: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
d770: 52 6f 77 2c 20 31 2c 20 36 29 3b 0a 20 20 20 20  Row, 1, 6);.    
d780: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
d790: 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50  break;..  case P
d7a0: 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c 49 53  ragTyp_INDEX_LIS
d7b0: 54 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b  T: if( zRight ){
d7c0: 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78  .    Index *pIdx
d7d0: 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  ;.    Table *pTa
d7e0: 62 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  b;.    int i;.  
d7f0: 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33    pTab = sqlite3
d800: 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 52  FindTable(db, zR
d810: 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20  ight, zDb);.    
d820: 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20  if( pTab ){.    
d830: 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74    v = sqlite3Get
d840: 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20  Vdbe(pParse);.  
d850: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
d860: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 35 29 3b  etNumCols(v, 5);
d870: 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  .      pParse->n
d880: 4d 65 6d 20 3d 20 35 3b 0a 20 20 20 20 20 20 73  Mem = 5;.      s
d890: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
d8a0: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
d8b0: 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Db);.      sqlit
d8c0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
d8d0: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
d8e0: 41 4d 45 2c 20 22 73 65 71 22 2c 20 53 51 4c 49  AME, "seq", SQLI
d8f0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
d900: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
d910: 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f  ColName(v, 1, CO
d920: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d  LNAME_NAME, "nam
d930: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
d940: 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
d950: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
d960: 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 2, COLNAME_NA
d970: 4d 45 2c 20 22 75 6e 69 71 75 65 22 2c 20 53 51  ME, "unique", SQ
d980: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
d990: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
d9a0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20  etColName(v, 3, 
d9b0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6f  COLNAME_NAME, "o
d9c0: 72 69 67 69 6e 22 2c 20 53 51 4c 49 54 45 5f 53  rigin", SQLITE_S
d9d0: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
d9e0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
d9f0: 61 6d 65 28 76 2c 20 34 2c 20 43 4f 4c 4e 41 4d  ame(v, 4, COLNAM
da00: 45 5f 4e 41 4d 45 2c 20 22 70 61 72 74 69 61 6c  E_NAME, "partial
da10: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
da20: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 70 49 64  );.      for(pId
da30: 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 2c 20  x=pTab->pIndex, 
da40: 69 3d 30 3b 20 70 49 64 78 3b 20 70 49 64 78 3d  i=0; pIdx; pIdx=
da50: 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 69 2b 2b  pIdx->pNext, i++
da60: 29 7b 0a 20 20 20 20 20 20 20 20 63 6f 6e 73 74  ){.        const
da70: 20 63 68 61 72 20 2a 61 7a 4f 72 69 67 69 6e 5b   char *azOrigin[
da80: 5d 20 3d 20 7b 20 22 63 22 2c 20 22 75 22 2c 20  ] = { "c", "u", 
da90: 22 70 6b 22 20 7d 3b 0a 20 20 20 20 20 20 20 20  "pk" };.        
daa0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
dab0: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
dac0: 20 69 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20   i, 1);.        
dad0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
dae0: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
daf0: 20 30 2c 20 32 2c 20 30 2c 20 70 49 64 78 2d 3e   0, 2, 0, pIdx->
db00: 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20  zName, 0);.     
db10: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
db20: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
db30: 65 72 2c 20 49 73 55 6e 69 71 75 65 49 6e 64 65  er, IsUniqueInde
db40: 78 28 70 49 64 78 29 2c 20 33 29 3b 0a 20 20 20  x(pIdx), 3);.   
db50: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
db60: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
db70: 69 6e 67 38 2c 20 30 2c 20 34 2c 20 30 2c 20 61  ing8, 0, 4, 0, a
db80: 7a 4f 72 69 67 69 6e 5b 70 49 64 78 2d 3e 69 64  zOrigin[pIdx->id
db90: 78 54 79 70 65 5d 2c 20 30 29 3b 0a 20 20 20 20  xType], 0);.    
dba0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
dbb0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
dbc0: 67 65 72 2c 20 70 49 64 78 2d 3e 70 50 61 72 74  ger, pIdx->pPart
dbd0: 49 64 78 57 68 65 72 65 21 3d 30 2c 20 35 29 3b  IdxWhere!=0, 5);
dbe0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
dbf0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
dc00: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 35  _ResultRow, 1, 5
dc10: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
dc20: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20  .  }.  break;.. 
dc30: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 44 41   case PragTyp_DA
dc40: 54 41 42 41 53 45 5f 4c 49 53 54 3a 20 7b 0a 20  TABASE_LIST: {. 
dc50: 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 73 71     int i;.    sq
dc60: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
dc70: 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20 20 70  ols(v, 3);.    p
dc80: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b  Parse->nMem = 3;
dc90: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
dca0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
dcb0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
dcc0: 73 65 71 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  seq", SQLITE_STA
dcd0: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
dce0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
dcf0: 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 1, COLNAME_NA
dd00: 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49  ME, "name", SQLI
dd10: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
dd20: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
dd30: 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e  lName(v, 2, COLN
dd40: 41 4d 45 5f 4e 41 4d 45 2c 20 22 66 69 6c 65 22  AME_NAME, "file"
dd50: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
dd60: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  ;.    for(i=0; i
dd70: 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a  <db->nDb; i++){.
dd80: 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44        if( db->aD
dd90: 62 5b 69 5d 2e 70 42 74 3d 3d 30 20 29 20 63 6f  b[i].pBt==0 ) co
dda0: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 61 73  ntinue;.      as
ddb0: 73 65 72 74 28 20 64 62 2d 3e 61 44 62 5b 69 5d  sert( db->aDb[i]
ddc0: 2e 7a 4e 61 6d 65 21 3d 30 20 29 3b 0a 20 20 20  .zName!=0 );.   
ddd0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
dde0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
ddf0: 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20 20 20  er, i, 1);.     
de00: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
de10: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
de20: 2c 20 30 2c 20 32 2c 20 30 2c 20 64 62 2d 3e 61  , 0, 2, 0, db->a
de30: 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b  Db[i].zName, 0);
de40: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
de50: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
de60: 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c  tring8, 0, 3, 0,
de70: 0a 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  .           sqli
de80: 74 65 33 42 74 72 65 65 47 65 74 46 69 6c 65 6e  te3BtreeGetFilen
de90: 61 6d 65 28 64 62 2d 3e 61 44 62 5b 69 5d 2e 70  ame(db->aDb[i].p
dea0: 42 74 29 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  Bt), 0);.      s
deb0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
dec0: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
ded0: 2c 20 31 2c 20 33 29 3b 0a 20 20 20 20 7d 0a 20  , 1, 3);.    }. 
dee0: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63   }.  break;..  c
def0: 61 73 65 20 50 72 61 67 54 79 70 5f 43 4f 4c 4c  ase PragTyp_COLL
df00: 41 54 49 4f 4e 5f 4c 49 53 54 3a 20 7b 0a 20 20  ATION_LIST: {.  
df10: 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20    int i = 0;.   
df20: 20 48 61 73 68 45 6c 65 6d 20 2a 70 3b 0a 20 20   HashElem *p;.  
df30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
df40: 4e 75 6d 43 6f 6c 73 28 76 2c 20 32 29 3b 0a 20  NumCols(v, 2);. 
df50: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
df60: 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 2;.    sqlite3
df70: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
df80: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
df90: 45 2c 20 22 73 65 71 22 2c 20 53 51 4c 49 54 45  E, "seq", SQLITE
dfa0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71  _STATIC);.    sq
dfb0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
dfc0: 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d  ame(v, 1, COLNAM
dfd0: 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20  E_NAME, "name", 
dfe0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
dff0: 20 20 20 20 66 6f 72 28 70 3d 73 71 6c 69 74 65      for(p=sqlite
e000: 48 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61  HashFirst(&db->a
e010: 43 6f 6c 6c 53 65 71 29 3b 20 70 3b 20 70 3d 73  CollSeq); p; p=s
e020: 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28 70 29  qliteHashNext(p)
e030: 29 7b 0a 20 20 20 20 20 20 43 6f 6c 6c 53 65 71  ){.      CollSeq
e040: 20 2a 70 43 6f 6c 6c 20 3d 20 28 43 6f 6c 6c 53   *pColl = (CollS
e050: 65 71 20 2a 29 73 71 6c 69 74 65 48 61 73 68 44  eq *)sqliteHashD
e060: 61 74 61 28 70 29 3b 0a 20 20 20 20 20 20 73 71  ata(p);.      sq
e070: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
e080: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69  v, OP_Integer, i
e090: 2b 2b 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71  ++, 1);.      sq
e0a0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
e0b0: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
e0c0: 2c 20 32 2c 20 30 2c 20 70 43 6f 6c 6c 2d 3e 7a  , 2, 0, pColl->z
e0d0: 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  Name, 0);.      
e0e0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e0f0: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
e100: 77 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a  w, 1, 2);.    }.
e110: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
e120: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
e130: 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d 41  IT_SCHEMA_PRAGMA
e140: 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  S */..#ifndef SQ
e150: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
e160: 4e 5f 4b 45 59 0a 20 20 63 61 73 65 20 50 72 61  N_KEY.  case Pra
e170: 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  gTyp_FOREIGN_KEY
e180: 5f 4c 49 53 54 3a 20 69 66 28 20 7a 52 69 67 68  _LIST: if( zRigh
e190: 74 20 29 7b 0a 20 20 20 20 46 4b 65 79 20 2a 70  t ){.    FKey *p
e1a0: 46 4b 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70  FK;.    Table *p
e1b0: 54 61 62 3b 0a 20 20 20 20 70 54 61 62 20 3d 20  Tab;.    pTab = 
e1c0: 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65  sqlite3FindTable
e1d0: 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62  (db, zRight, zDb
e1e0: 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62 20  );.    if( pTab 
e1f0: 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c  ){.      v = sql
e200: 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72  ite3GetVdbe(pPar
e210: 73 65 29 3b 0a 20 20 20 20 20 20 70 46 4b 20 3d  se);.      pFK =
e220: 20 70 54 61 62 2d 3e 70 46 4b 65 79 3b 0a 20 20   pTab->pFKey;.  
e230: 20 20 20 20 69 66 28 20 70 46 4b 20 29 7b 0a 20      if( pFK ){. 
e240: 20 20 20 20 20 20 20 69 6e 74 20 69 20 3d 20 30         int i = 0
e250: 3b 20 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ; .        sqlit
e260: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
e270: 28 76 2c 20 38 29 3b 0a 20 20 20 20 20 20 20 20  (v, 8);.        
e280: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 38  pParse->nMem = 8
e290: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
e2a0: 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
e2b0: 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a  a(pParse, iDb);.
e2c0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
e2d0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
e2e0: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
e2f0: 2c 20 22 69 64 22 2c 20 53 51 4c 49 54 45 5f 53  , "id", SQLITE_S
e300: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
e310: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
e320: 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e  lName(v, 1, COLN
e330: 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c  AME_NAME, "seq",
e340: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
e350: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
e360: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
e370: 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 2, COLNAME_NAM
e380: 45 2c 20 22 74 61 62 6c 65 22 2c 20 53 51 4c 49  E, "table", SQLI
e390: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
e3a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
e3b0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20  etColName(v, 3, 
e3c0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 66  COLNAME_NAME, "f
e3d0: 72 6f 6d 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  rom", SQLITE_STA
e3e0: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71  TIC);.        sq
e3f0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
e400: 61 6d 65 28 76 2c 20 34 2c 20 43 4f 4c 4e 41 4d  ame(v, 4, COLNAM
e410: 45 5f 4e 41 4d 45 2c 20 22 74 6f 22 2c 20 53 51  E_NAME, "to", SQ
e420: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
e430: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
e440: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 35  eSetColName(v, 5
e450: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
e460: 22 6f 6e 5f 75 70 64 61 74 65 22 2c 20 53 51 4c  "on_update", SQL
e470: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
e480: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
e490: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 36 2c  SetColName(v, 6,
e4a0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
e4b0: 6f 6e 5f 64 65 6c 65 74 65 22 2c 20 53 51 4c 49  on_delete", SQLI
e4c0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
e4d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
e4e0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 37 2c 20  etColName(v, 7, 
e4f0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6d  COLNAME_NAME, "m
e500: 61 74 63 68 22 2c 20 53 51 4c 49 54 45 5f 53 54  atch", SQLITE_ST
e510: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 77  ATIC);.        w
e520: 68 69 6c 65 28 70 46 4b 29 7b 0a 20 20 20 20 20  hile(pFK){.     
e530: 20 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20       int j;.    
e540: 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a        for(j=0; j
e550: 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29  <pFK->nCol; j++)
e560: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 68  {.            ch
e570: 61 72 20 2a 7a 43 6f 6c 20 3d 20 70 46 4b 2d 3e  ar *zCol = pFK->
e580: 61 43 6f 6c 5b 6a 5d 2e 7a 43 6f 6c 3b 0a 20 20  aCol[j].zCol;.  
e590: 20 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a            char *
e5a0: 7a 4f 6e 44 65 6c 65 74 65 20 3d 20 28 63 68 61  zOnDelete = (cha
e5b0: 72 20 2a 29 61 63 74 69 6f 6e 4e 61 6d 65 28 70  r *)actionName(p
e5c0: 46 4b 2d 3e 61 41 63 74 69 6f 6e 5b 30 5d 29 3b  FK->aAction[0]);
e5d0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61  .            cha
e5e0: 72 20 2a 7a 4f 6e 55 70 64 61 74 65 20 3d 20 28  r *zOnUpdate = (
e5f0: 63 68 61 72 20 2a 29 61 63 74 69 6f 6e 4e 61 6d  char *)actionNam
e600: 65 28 70 46 4b 2d 3e 61 41 63 74 69 6f 6e 5b 31  e(pFK->aAction[1
e610: 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ]);.            
e620: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e630: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
e640: 20 69 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20   i, 1);.        
e650: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
e660: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
e670: 67 65 72 2c 20 6a 2c 20 32 29 3b 0a 20 20 20 20  ger, j, 2);.    
e680: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
e690: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
e6a0: 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30  String8, 0, 3, 0
e6b0: 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 30 29 3b 0a  , pFK->zTo, 0);.
e6c0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
e6d0: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
e6e0: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
e6f0: 34 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20  4, 0,.          
e700: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e710: 20 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 70      pTab->aCol[p
e720: 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f  FK->aCol[j].iFro
e730: 6d 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20  m].zName, 0);.  
e740: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
e750: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 7a  3VdbeAddOp4(v, z
e760: 43 6f 6c 20 3f 20 4f 50 5f 53 74 72 69 6e 67 38  Col ? OP_String8
e770: 20 3a 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20 35   : OP_Null, 0, 5
e780: 2c 20 30 2c 20 7a 43 6f 6c 2c 20 30 29 3b 0a 20  , 0, zCol, 0);. 
e790: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
e7a0: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
e7b0: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 36  OP_String8, 0, 6
e7c0: 2c 20 30 2c 20 7a 4f 6e 55 70 64 61 74 65 2c 20  , 0, zOnUpdate, 
e7d0: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0);.            
e7e0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e7f0: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
e800: 20 30 2c 20 37 2c 20 30 2c 20 7a 4f 6e 44 65 6c   0, 7, 0, zOnDel
e810: 65 74 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  ete, 0);.       
e820: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
e830: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
e840: 69 6e 67 38 2c 20 30 2c 20 38 2c 20 30 2c 20 22  ing8, 0, 8, 0, "
e850: 4e 4f 4e 45 22 2c 20 30 29 3b 0a 20 20 20 20 20  NONE", 0);.     
e860: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
e870: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
e880: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 38 29 3b  esultRow, 1, 8);
e890: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
e8a0: 20 20 20 20 20 20 20 2b 2b 69 3b 0a 20 20 20 20         ++i;.    
e8b0: 20 20 20 20 20 20 70 46 4b 20 3d 20 70 46 4b 2d        pFK = pFK-
e8c0: 3e 70 4e 65 78 74 46 72 6f 6d 3b 0a 20 20 20 20  >pNextFrom;.    
e8d0: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
e8e0: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
e8f0: 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69  .#endif /* !defi
e900: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
e910: 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a  FOREIGN_KEY) */.
e920: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
e930: 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
e940: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
e950: 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a 20 20 63  OMIT_TRIGGER.  c
e960: 61 73 65 20 50 72 61 67 54 79 70 5f 46 4f 52 45  ase PragTyp_FORE
e970: 49 47 4e 5f 4b 45 59 5f 43 48 45 43 4b 3a 20 7b  IGN_KEY_CHECK: {
e980: 0a 20 20 20 20 46 4b 65 79 20 2a 70 46 4b 3b 20  .    FKey *pFK; 
e990: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 41              /* A
e9a0: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 63 6f 6e   foreign key con
e9b0: 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20 20 20 54  straint */.    T
e9c0: 61 62 6c 65 20 2a 70 54 61 62 3b 20 20 20 20 20  able *pTab;     
e9d0: 20 20 20 20 20 20 2f 2a 20 43 68 69 6c 64 20 74        /* Child t
e9e0: 61 62 6c 65 20 63 6f 6e 74 61 69 6e 20 22 52 45  able contain "RE
e9f0: 46 45 52 45 4e 43 45 53 22 20 6b 65 79 77 6f 72  FERENCES" keywor
ea00: 64 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a  d */.    Table *
ea10: 70 50 61 72 65 6e 74 3b 20 20 20 20 20 20 20 20  pParent;        
ea20: 2f 2a 20 50 61 72 65 6e 74 20 74 61 62 6c 65 20  /* Parent table 
ea30: 74 68 61 74 20 63 68 69 6c 64 20 70 6f 69 6e 74  that child point
ea40: 73 20 74 6f 20 2a 2f 0a 20 20 20 20 49 6e 64 65  s to */.    Inde
ea50: 78 20 2a 70 49 64 78 3b 20 20 20 20 20 20 20 20  x *pIdx;        
ea60: 20 20 20 2f 2a 20 49 6e 64 65 78 20 69 6e 20 74     /* Index in t
ea70: 68 65 20 70 61 72 65 6e 74 20 74 61 62 6c 65 20  he parent table 
ea80: 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b 20 20 20  */.    int i;   
ea90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
eaa0: 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20   Loop counter:  
eab0: 46 6f 72 65 69 67 6e 20 6b 65 79 20 6e 75 6d 62  Foreign key numb
eac0: 65 72 20 66 6f 72 20 70 54 61 62 20 2a 2f 0a 20  er for pTab */. 
ead0: 20 20 20 69 6e 74 20 6a 3b 20 20 20 20 20 20 20     int j;       
eae0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
eaf0: 70 20 63 6f 75 6e 74 65 72 3a 20 20 46 69 65 6c  p counter:  Fiel
eb00: 64 20 6f 66 20 74 68 65 20 66 6f 72 65 69 67 6e  d of the foreign
eb10: 20 6b 65 79 20 2a 2f 0a 20 20 20 20 48 61 73 68   key */.    Hash
eb20: 45 6c 65 6d 20 2a 6b 3b 20 20 20 20 20 20 20 20  Elem *k;        
eb30: 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
eb40: 65 72 3a 20 20 4e 65 78 74 20 74 61 62 6c 65 20  er:  Next table 
eb50: 69 6e 20 73 63 68 65 6d 61 20 2a 2f 0a 20 20 20  in schema */.   
eb60: 20 69 6e 74 20 78 3b 20 20 20 20 20 20 20 20 20   int x;         
eb70: 20 20 20 20 20 20 20 20 2f 2a 20 72 65 73 75 6c          /* resul
eb80: 74 20 76 61 72 69 61 62 6c 65 20 2a 2f 0a 20 20  t variable */.  
eb90: 20 20 69 6e 74 20 72 65 67 52 65 73 75 6c 74 3b    int regResult;
eba0: 20 20 20 20 20 20 20 20 20 2f 2a 20 33 20 72 65           /* 3 re
ebb0: 67 69 73 74 65 72 73 20 74 6f 20 68 6f 6c 64 20  gisters to hold 
ebc0: 61 20 72 65 73 75 6c 74 20 72 6f 77 20 2a 2f 0a  a result row */.
ebd0: 20 20 20 20 69 6e 74 20 72 65 67 4b 65 79 3b 20      int regKey; 
ebe0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
ebf0: 67 69 73 74 65 72 20 74 6f 20 68 6f 6c 64 20 6b  gister to hold k
ec00: 65 79 20 66 6f 72 20 63 68 65 63 6b 69 6e 67 20  ey for checking 
ec10: 74 68 65 20 46 4b 20 2a 2f 0a 20 20 20 20 69 6e  the FK */.    in
ec20: 74 20 72 65 67 52 6f 77 3b 20 20 20 20 20 20 20  t regRow;       
ec30: 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
ec40: 73 20 74 6f 20 68 6f 6c 64 20 61 20 72 6f 77 20  s to hold a row 
ec50: 66 72 6f 6d 20 70 54 61 62 20 2a 2f 0a 20 20 20  from pTab */.   
ec60: 20 69 6e 74 20 61 64 64 72 54 6f 70 3b 20 20 20   int addrTop;   
ec70: 20 20 20 20 20 20 20 20 2f 2a 20 54 6f 70 20 6f          /* Top o
ec80: 66 20 61 20 6c 6f 6f 70 20 63 68 65 63 6b 69 6e  f a loop checkin
ec90: 67 20 66 6f 72 65 69 67 6e 20 6b 65 79 73 20 2a  g foreign keys *
eca0: 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72 4f 6b  /.    int addrOk
ecb0: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
ecc0: 4a 75 6d 70 20 68 65 72 65 20 69 66 20 74 68 65  Jump here if the
ecd0: 20 6b 65 79 20 69 73 20 4f 4b 20 2a 2f 0a 20 20   key is OK */.  
ece0: 20 20 69 6e 74 20 2a 61 69 43 6f 6c 73 3b 20 20    int *aiCols;  
ecf0: 20 20 20 20 20 20 20 20 20 2f 2a 20 63 68 69 6c           /* chil
ed00: 64 20 74 6f 20 70 61 72 65 6e 74 20 63 6f 6c 75  d to parent colu
ed10: 6d 6e 20 6d 61 70 70 69 6e 67 20 2a 2f 0a 0a 20  mn mapping */.. 
ed20: 20 20 20 72 65 67 52 65 73 75 6c 74 20 3d 20 70     regResult = p
ed30: 50 61 72 73 65 2d 3e 6e 4d 65 6d 2b 31 3b 0a 20  Parse->nMem+1;. 
ed40: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
ed50: 2b 3d 20 34 3b 0a 20 20 20 20 72 65 67 4b 65 79  += 4;.    regKey
ed60: 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65   = ++pParse->nMe
ed70: 6d 3b 0a 20 20 20 20 72 65 67 52 6f 77 20 3d 20  m;.    regRow = 
ed80: 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a  ++pParse->nMem;.
ed90: 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47      v = sqlite3G
eda0: 65 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a  etVdbe(pParse);.
edb0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
edc0: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 34 29 3b  etNumCols(v, 4);
edd0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
ede0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
edf0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
ee00: 74 61 62 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53  table", SQLITE_S
ee10: 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69  TATIC);.    sqli
ee20: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
ee30: 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 1, COLNAME_
ee40: 4e 41 4d 45 2c 20 22 72 6f 77 69 64 22 2c 20 53  NAME, "rowid", S
ee50: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
ee60: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
ee70: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43  tColName(v, 2, C
ee80: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 70 61  OLNAME_NAME, "pa
ee90: 72 65 6e 74 22 2c 20 53 51 4c 49 54 45 5f 53 54  rent", SQLITE_ST
eea0: 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
eeb0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
eec0: 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 3, COLNAME_N
eed0: 41 4d 45 2c 20 22 66 6b 69 64 22 2c 20 53 51 4c  AME, "fkid", SQL
eee0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
eef0: 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
ef00: 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c  fySchema(pParse,
ef10: 20 69 44 62 29 3b 0a 20 20 20 20 6b 20 3d 20 73   iDb);.    k = s
ef20: 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 26  qliteHashFirst(&
ef30: 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e 70 53 63  db->aDb[iDb].pSc
ef40: 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68 29 3b 0a  hema->tblHash);.
ef50: 20 20 20 20 77 68 69 6c 65 28 20 6b 20 29 7b 0a      while( k ){.
ef60: 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74        if( zRight
ef70: 20 29 7b 0a 20 20 20 20 20 20 20 20 70 54 61 62   ){.        pTab
ef80: 20 3d 20 73 71 6c 69 74 65 33 4c 6f 63 61 74 65   = sqlite3Locate
ef90: 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20 30 2c  Table(pParse, 0,
efa0: 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20   zRight, zDb);. 
efb0: 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20         k = 0;.  
efc0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
efd0: 20 20 20 70 54 61 62 20 3d 20 28 54 61 62 6c 65     pTab = (Table
efe0: 2a 29 73 71 6c 69 74 65 48 61 73 68 44 61 74 61  *)sqliteHashData
eff0: 28 6b 29 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d  (k);.        k =
f000: 20 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28   sqliteHashNext(
f010: 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  k);.      }.    
f020: 20 20 69 66 28 20 70 54 61 62 3d 3d 30 20 7c 7c    if( pTab==0 ||
f030: 20 70 54 61 62 2d 3e 70 46 4b 65 79 3d 3d 30 20   pTab->pFKey==0 
f040: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
f050: 20 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f    sqlite3TableLo
f060: 63 6b 28 70 50 61 72 73 65 2c 20 69 44 62 2c 20  ck(pParse, iDb, 
f070: 70 54 61 62 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70  pTab->tnum, 0, p
f080: 54 61 62 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20  Tab->zName);.   
f090: 20 20 20 69 66 28 20 70 54 61 62 2d 3e 6e 43 6f     if( pTab->nCo
f0a0: 6c 2b 72 65 67 52 6f 77 3e 70 50 61 72 73 65 2d  l+regRow>pParse-
f0b0: 3e 6e 4d 65 6d 20 29 20 70 50 61 72 73 65 2d 3e  >nMem ) pParse->
f0c0: 6e 4d 65 6d 20 3d 20 70 54 61 62 2d 3e 6e 43 6f  nMem = pTab->nCo
f0d0: 6c 20 2b 20 72 65 67 52 6f 77 3b 0a 20 20 20 20  l + regRow;.    
f0e0: 20 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62    sqlite3OpenTab
f0f0: 6c 65 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44  le(pParse, 0, iD
f100: 62 2c 20 70 54 61 62 2c 20 4f 50 5f 4f 70 65 6e  b, pTab, OP_Open
f110: 52 65 61 64 29 3b 0a 20 20 20 20 20 20 73 71 6c  Read);.      sql
f120: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
f130: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
f140: 20 72 65 67 52 65 73 75 6c 74 2c 20 30 2c 20 70   regResult, 0, p
f150: 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20  Tab->zName,.    
f160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f170: 20 20 20 20 50 34 5f 54 52 41 4e 53 49 45 4e 54      P4_TRANSIENT
f180: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31  );.      for(i=1
f190: 2c 20 70 46 4b 3d 70 54 61 62 2d 3e 70 46 4b 65  , pFK=pTab->pFKe
f1a0: 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20 70 46 4b  y; pFK; i++, pFK
f1b0: 3d 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 29  =pFK->pNextFrom)
f1c0: 7b 0a 20 20 20 20 20 20 20 20 70 50 61 72 65 6e  {.        pParen
f1d0: 74 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54  t = sqlite3FindT
f1e0: 61 62 6c 65 28 64 62 2c 20 70 46 4b 2d 3e 7a 54  able(db, pFK->zT
f1f0: 6f 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20  o, zDb);.       
f200: 20 69 66 28 20 70 50 61 72 65 6e 74 3d 3d 30 20   if( pParent==0 
f210: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
f220: 20 20 20 20 70 49 64 78 20 3d 20 30 3b 0a 20 20      pIdx = 0;.  
f230: 20 20 20 20 20 20 73 71 6c 69 74 65 33 54 61 62        sqlite3Tab
f240: 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65 2c 20 69  leLock(pParse, i
f250: 44 62 2c 20 70 50 61 72 65 6e 74 2d 3e 74 6e 75  Db, pParent->tnu
f260: 6d 2c 20 30 2c 20 70 50 61 72 65 6e 74 2d 3e 7a  m, 0, pParent->z
f270: 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 78  Name);.        x
f280: 20 3d 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63 61   = sqlite3FkLoca
f290: 74 65 49 6e 64 65 78 28 70 50 61 72 73 65 2c 20  teIndex(pParse, 
f2a0: 70 50 61 72 65 6e 74 2c 20 70 46 4b 2c 20 26 70  pParent, pFK, &p
f2b0: 49 64 78 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  Idx, 0);.       
f2c0: 20 69 66 28 20 78 3d 3d 30 20 29 7b 0a 20 20 20   if( x==0 ){.   
f2d0: 20 20 20 20 20 20 20 69 66 28 20 70 49 64 78 3d         if( pIdx=
f2e0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
f2f0: 20 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62    sqlite3OpenTab
f300: 6c 65 28 70 50 61 72 73 65 2c 20 69 2c 20 69 44  le(pParse, i, iD
f310: 62 2c 20 70 50 61 72 65 6e 74 2c 20 4f 50 5f 4f  b, pParent, OP_O
f320: 70 65 6e 52 65 61 64 29 3b 0a 20 20 20 20 20 20  penRead);.      
f330: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
f340: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
f350: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4f  beAddOp3(v, OP_O
f360: 70 65 6e 52 65 61 64 2c 20 69 2c 20 70 49 64 78  penRead, i, pIdx
f370: 2d 3e 74 6e 75 6d 2c 20 69 44 62 29 3b 0a 20 20  ->tnum, iDb);.  
f380: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
f390: 33 56 64 62 65 53 65 74 50 34 4b 65 79 49 6e 66  3VdbeSetP4KeyInf
f3a0: 6f 28 70 50 61 72 73 65 2c 20 70 49 64 78 29 3b  o(pParse, pIdx);
f3b0: 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
f3c0: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
f3d0: 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20        k = 0;.   
f3e0: 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
f3f0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
f400: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70 50        assert( pP
f410: 61 72 73 65 2d 3e 6e 45 72 72 3e 30 20 7c 7c 20  arse->nErr>0 || 
f420: 70 46 4b 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  pFK==0 );.      
f430: 69 66 28 20 70 46 4b 20 29 20 62 72 65 61 6b 3b  if( pFK ) break;
f440: 0a 20 20 20 20 20 20 69 66 28 20 70 50 61 72 73  .      if( pPars
f450: 65 2d 3e 6e 54 61 62 3c 69 20 29 20 70 50 61 72  e->nTab<i ) pPar
f460: 73 65 2d 3e 6e 54 61 62 20 3d 20 69 3b 0a 20 20  se->nTab = i;.  
f470: 20 20 20 20 61 64 64 72 54 6f 70 20 3d 20 73 71      addrTop = sq
f480: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
f490: 76 2c 20 4f 50 5f 52 65 77 69 6e 64 2c 20 30 29  v, OP_Rewind, 0)
f4a0: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
f4b0: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 31  );.      for(i=1
f4c0: 2c 20 70 46 4b 3d 70 54 61 62 2d 3e 70 46 4b 65  , pFK=pTab->pFKe
f4d0: 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20 70 46 4b  y; pFK; i++, pFK
f4e0: 3d 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 29  =pFK->pNextFrom)
f4f0: 7b 0a 20 20 20 20 20 20 20 20 70 50 61 72 65 6e  {.        pParen
f500: 74 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54  t = sqlite3FindT
f510: 61 62 6c 65 28 64 62 2c 20 70 46 4b 2d 3e 7a 54  able(db, pFK->zT
f520: 6f 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20  o, zDb);.       
f530: 20 70 49 64 78 20 3d 20 30 3b 0a 20 20 20 20 20   pIdx = 0;.     
f540: 20 20 20 61 69 43 6f 6c 73 20 3d 20 30 3b 0a 20     aiCols = 0;. 
f550: 20 20 20 20 20 20 20 69 66 28 20 70 50 61 72 65         if( pPare
f560: 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  nt ){.          
f570: 78 20 3d 20 73 71 6c 69 74 65 33 46 6b 4c 6f 63  x = sqlite3FkLoc
f580: 61 74 65 49 6e 64 65 78 28 70 50 61 72 73 65 2c  ateIndex(pParse,
f590: 20 70 50 61 72 65 6e 74 2c 20 70 46 4b 2c 20 26   pParent, pFK, &
f5a0: 70 49 64 78 2c 20 26 61 69 43 6f 6c 73 29 3b 0a  pIdx, &aiCols);.
f5b0: 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
f5c0: 28 20 78 3d 3d 30 20 29 3b 0a 20 20 20 20 20 20  ( x==0 );.      
f5d0: 20 20 7d 0a 20 20 20 20 20 20 20 20 61 64 64 72    }.        addr
f5e0: 4f 6b 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  Ok = sqlite3Vdbe
f5f0: 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20  MakeLabel(v);.  
f600: 20 20 20 20 20 20 69 66 28 20 70 50 61 72 65 6e        if( pParen
f610: 74 20 26 26 20 70 49 64 78 3d 3d 30 20 29 7b 0a  t && pIdx==0 ){.
f620: 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 69 4b            int iK
f630: 65 79 20 3d 20 70 46 4b 2d 3e 61 43 6f 6c 5b 30  ey = pFK->aCol[0
f640: 5d 2e 69 46 72 6f 6d 3b 0a 20 20 20 20 20 20 20  ].iFrom;.       
f650: 20 20 20 61 73 73 65 72 74 28 20 69 4b 65 79 3e     assert( iKey>
f660: 3d 30 20 26 26 20 69 4b 65 79 3c 70 54 61 62 2d  =0 && iKey<pTab-
f670: 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20 20 20 20 20  >nCol );.       
f680: 20 20 20 69 66 28 20 69 4b 65 79 21 3d 70 54 61     if( iKey!=pTa
f690: 62 2d 3e 69 50 4b 65 79 20 29 7b 0a 20 20 20 20  b->iPKey ){.    
f6a0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
f6b0: 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
f6c0: 43 6f 6c 75 6d 6e 2c 20 30 2c 20 69 4b 65 79 2c  Column, 0, iKey,
f6d0: 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20   regRow);.      
f6e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 6c        sqlite3Col
f6f0: 75 6d 6e 44 65 66 61 75 6c 74 28 76 2c 20 70 54  umnDefault(v, pT
f700: 61 62 2c 20 69 4b 65 79 2c 20 72 65 67 52 6f 77  ab, iKey, regRow
f710: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
f720: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
f730: 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72  (v, OP_IsNull, r
f740: 65 67 52 6f 77 2c 20 61 64 64 72 4f 6b 29 3b 20  egRow, addrOk); 
f750: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
f760: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
f770: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
f780: 2c 20 4f 50 5f 4d 75 73 74 42 65 49 6e 74 2c 20  , OP_MustBeInt, 
f790: 72 65 67 52 6f 77 2c 20 0a 20 20 20 20 20 20 20  regRow, .       
f7a0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
f7b0: 64 62 65 43 75 72 72 65 6e 74 41 64 64 72 28 76  dbeCurrentAddr(v
f7c0: 29 2b 33 29 3b 20 56 64 62 65 43 6f 76 65 72 61  )+3); VdbeCovera
f7d0: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
f7e0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
f7f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
f800: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 6f 77 69  ddOp2(v, OP_Rowi
f810: 64 2c 20 30 2c 20 72 65 67 52 6f 77 29 3b 0a 20  d, 0, regRow);. 
f820: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
f830: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
f840: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4e 6f 74  AddOp3(v, OP_Not
f850: 45 78 69 73 74 73 2c 20 69 2c 20 30 2c 20 72 65  Exists, i, 0, re
f860: 67 52 6f 77 29 3b 20 56 64 62 65 43 6f 76 65 72  gRow); VdbeCover
f870: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
f880: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
f890: 4f 70 32 28 76 2c 20 4f 50 5f 47 6f 74 6f 2c 20  Op2(v, OP_Goto, 
f8a0: 30 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20  0, addrOk);.    
f8b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
f8c0: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 73 71 6c  eJumpHere(v, sql
f8d0: 69 74 65 33 56 64 62 65 43 75 72 72 65 6e 74 41  ite3VdbeCurrentA
f8e0: 64 64 72 28 76 29 2d 32 29 3b 0a 20 20 20 20 20  ddr(v)-2);.     
f8f0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
f900: 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70      for(j=0; j<p
f910: 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a  FK->nCol; j++){.
f920: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
f930: 74 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f  te3ExprCodeGetCo
f940: 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 76 2c 20 70  lumnOfTable(v, p
f950: 54 61 62 2c 20 30 2c 0a 20 20 20 20 20 20 20 20  Tab, 0,.        
f960: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f970: 20 20 20 20 61 69 43 6f 6c 73 20 3f 20 61 69 43      aiCols ? aiC
f980: 6f 6c 73 5b 6a 5d 20 3a 20 70 46 4b 2d 3e 61 43  ols[j] : pFK->aC
f990: 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 2c 20 72 65 67  ol[j].iFrom, reg
f9a0: 52 6f 77 2b 6a 29 3b 0a 20 20 20 20 20 20 20 20  Row+j);.        
f9b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
f9c0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75  ddOp2(v, OP_IsNu
f9d0: 6c 6c 2c 20 72 65 67 52 6f 77 2b 6a 2c 20 61 64  ll, regRow+j, ad
f9e0: 64 72 4f 6b 29 3b 20 56 64 62 65 43 6f 76 65 72  drOk); VdbeCover
f9f0: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
fa00: 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 69 66    }.          if
fa10: 28 20 70 50 61 72 65 6e 74 20 29 7b 0a 20 20 20  ( pParent ){.   
fa20: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
fa30: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
fa40: 5f 4d 61 6b 65 52 65 63 6f 72 64 2c 20 72 65 67  _MakeRecord, reg
fa50: 52 6f 77 2c 20 70 46 4b 2d 3e 6e 43 6f 6c 2c 20  Row, pFK->nCol, 
fa60: 72 65 67 4b 65 79 2c 0a 20 20 20 20 20 20 20 20  regKey,.        
fa70: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fa80: 20 20 20 20 20 20 73 71 6c 69 74 65 33 49 6e 64        sqlite3Ind
fa90: 65 78 41 66 66 69 6e 69 74 79 53 74 72 28 76 2c  exAffinityStr(v,
faa0: 70 49 64 78 29 2c 20 70 46 4b 2d 3e 6e 43 6f 6c  pIdx), pFK->nCol
fab0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
fac0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
fad0: 49 6e 74 28 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c  Int(v, OP_Found,
fae0: 20 69 2c 20 61 64 64 72 4f 6b 2c 20 72 65 67 4b   i, addrOk, regK
faf0: 65 79 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  ey, 0);.        
fb00: 20 20 20 20 56 64 62 65 43 6f 76 65 72 61 67 65      VdbeCoverage
fb10: 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  (v);.          }
fb20: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
fb30: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
fb40: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 6f 77 69 64  dOp2(v, OP_Rowid
fb50: 2c 20 30 2c 20 72 65 67 52 65 73 75 6c 74 2b 31  , 0, regResult+1
fb60: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
fb70: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
fb80: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 72  OP_String8, 0, r
fb90: 65 67 52 65 73 75 6c 74 2b 32 2c 20 30 2c 20 0a  egResult+2, 0, .
fba0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
fbb0: 20 20 20 20 20 20 20 20 20 20 70 46 4b 2d 3e 7a            pFK->z
fbc0: 54 6f 2c 20 50 34 5f 54 52 41 4e 53 49 45 4e 54  To, P4_TRANSIENT
fbd0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
fbe0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
fbf0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2d 31 2c  OP_Integer, i-1,
fc00: 20 72 65 67 52 65 73 75 6c 74 2b 33 29 3b 0a 20   regResult+3);. 
fc10: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
fc20: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
fc30: 65 73 75 6c 74 52 6f 77 2c 20 72 65 67 52 65 73  esultRow, regRes
fc40: 75 6c 74 2c 20 34 29 3b 0a 20 20 20 20 20 20 20  ult, 4);.       
fc50: 20 73 71 6c 69 74 65 33 56 64 62 65 52 65 73 6f   sqlite3VdbeReso
fc60: 6c 76 65 4c 61 62 65 6c 28 76 2c 20 61 64 64 72  lveLabel(v, addr
fc70: 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  Ok);.        sql
fc80: 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 61  ite3DbFree(db, a
fc90: 69 43 6f 6c 73 29 3b 0a 20 20 20 20 20 20 7d 0a  iCols);.      }.
fca0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
fcb0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 65  eAddOp2(v, OP_Ne
fcc0: 78 74 2c 20 30 2c 20 61 64 64 72 54 6f 70 2b 31  xt, 0, addrTop+1
fcd0: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
fce0: 76 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  v);.      sqlite
fcf0: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
fd00: 20 61 64 64 72 54 6f 70 29 3b 0a 20 20 20 20 7d   addrTop);.    }
fd10: 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
fd20: 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
fd30: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
fd40: 47 47 45 52 29 20 2a 2f 0a 23 65 6e 64 69 66 20  GGER) */.#endif 
fd50: 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
fd60: 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
fd70: 4b 45 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  KEY) */..#ifndef
fd80: 20 4e 44 45 42 55 47 0a 20 20 63 61 73 65 20 50   NDEBUG.  case P
fd90: 72 61 67 54 79 70 5f 50 41 52 53 45 52 5f 54 52  ragTyp_PARSER_TR
fda0: 41 43 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a  ACE: {.    if( z
fdb0: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69  Right ){.      i
fdc0: 66 28 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  f( sqlite3GetBoo
fdd0: 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 20  lean(zRight, 0) 
fde0: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
fdf0: 65 33 50 61 72 73 65 72 54 72 61 63 65 28 73 74  e3ParserTrace(st
fe00: 64 65 72 72 2c 20 22 70 61 72 73 65 72 3a 20 22  derr, "parser: "
fe10: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
fe20: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50          sqlite3P
fe30: 61 72 73 65 72 54 72 61 63 65 28 30 2c 20 30 29  arserTrace(0, 0)
fe40: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
fe50: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
fe60: 64 69 66 0a 0a 20 20 2f 2a 20 52 65 69 6e 73 74  dif..  /* Reinst
fe70: 61 6c 6c 20 74 68 65 20 4c 49 4b 45 20 61 6e 64  all the LIKE and
fe80: 20 47 4c 4f 42 20 66 75 6e 63 74 69 6f 6e 73 2e   GLOB functions.
fe90: 20 20 54 68 65 20 76 61 72 69 61 6e 74 20 6f 66    The variant of
fea0: 20 4c 49 4b 45 0a 20 20 2a 2a 20 75 73 65 64 20   LIKE.  ** used 
feb0: 77 69 6c 6c 20 62 65 20 63 61 73 65 20 73 65 6e  will be case sen
fec0: 73 69 74 69 76 65 20 6f 72 20 6e 6f 74 20 64 65  sitive or not de
fed0: 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68 65 20 52  pending on the R
fee0: 48 53 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  HS..  */.  case 
fef0: 50 72 61 67 54 79 70 5f 43 41 53 45 5f 53 45 4e  PragTyp_CASE_SEN
ff00: 53 49 54 49 56 45 5f 4c 49 4b 45 3a 20 7b 0a 20  SITIVE_LIKE: {. 
ff10: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
ff20: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65  .      sqlite3Re
ff30: 67 69 73 74 65 72 4c 69 6b 65 46 75 6e 63 74 69  gisterLikeFuncti
ff40: 6f 6e 73 28 64 62 2c 20 73 71 6c 69 74 65 33 47  ons(db, sqlite3G
ff50: 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74  etBoolean(zRight
ff60: 2c 20 30 29 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  , 0));.    }.  }
ff70: 0a 20 20 62 72 65 61 6b 3b 0a 0a 23 69 66 6e 64  .  break;..#ifnd
ff80: 65 66 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52  ef SQLITE_INTEGR
ff90: 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f  ITY_CHECK_ERROR_
ffa0: 4d 41 58 0a 23 20 64 65 66 69 6e 65 20 53 51 4c  MAX.# define SQL
ffb0: 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  ITE_INTEGRITY_CH
ffc0: 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 20 31 30  ECK_ERROR_MAX 10
ffd0: 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  0.#endif..#ifnde
ffe0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e  f SQLITE_OMIT_IN
fff0: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 0a 20 20  TEGRITY_CHECK.  
10000 2f 2a 20 50 72 61 67 6d 61 20 22 71 75 69 63 6b  /* Pragma "quick
10010 5f 63 68 65 63 6b 22 20 69 73 20 72 65 64 75 63  _check" is reduc
10020 65 64 20 76 65 72 73 69 6f 6e 20 6f 66 20 0a 20  ed version of . 
10030 20 2a 2a 20 69 6e 74 65 67 72 69 74 79 5f 63 68   ** integrity_ch
10040 65 63 6b 20 64 65 73 69 67 6e 65 64 20 74 6f 20  eck designed to 
10050 64 65 74 65 63 74 20 6d 6f 73 74 20 64 61 74 61  detect most data
10060 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 0a  base corruption.
10070 20 20 2a 2a 20 77 69 74 68 6f 75 74 20 6d 6f 73    ** without mos
10080 74 20 6f 66 20 74 68 65 20 6f 76 65 72 68 65 61  t of the overhea
10090 64 20 6f 66 20 61 20 66 75 6c 6c 20 69 6e 74 65  d of a full inte
100a0 67 72 69 74 79 2d 63 68 65 63 6b 2e 0a 20 20 2a  grity-check..  *
100b0 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
100c0 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
100d0 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 2c 20 6a  : {.    int i, j
100e0 2c 20 61 64 64 72 2c 20 6d 78 45 72 72 3b 0a 0a  , addr, mxErr;..
100f0 20 20 20 20 2f 2a 20 43 6f 64 65 20 74 68 61 74      /* Code that
10100 20 61 70 70 65 61 72 73 20 61 74 20 74 68 65 20   appears at the 
10110 65 6e 64 20 6f 66 20 74 68 65 20 69 6e 74 65 67  end of the integ
10120 72 69 74 79 20 63 68 65 63 6b 2e 20 20 49 66 20  rity check.  If 
10130 6e 6f 20 65 72 72 6f 72 0a 20 20 20 20 2a 2a 20  no error.    ** 
10140 6d 65 73 73 61 67 65 73 20 68 61 76 65 20 62 65  messages have be
10150 65 6e 20 67 65 6e 65 72 61 74 65 64 2c 20 6f 75  en generated, ou
10160 74 70 75 74 20 4f 4b 2e 20 20 4f 74 68 65 72 77  tput OK.  Otherw
10170 69 73 65 20 6f 75 74 70 75 74 20 74 68 65 0a 20  ise output the. 
10180 20 20 20 2a 2a 20 65 72 72 6f 72 20 6d 65 73 73     ** error mess
10190 61 67 65 0a 20 20 20 20 2a 2f 0a 20 20 20 20 73  age.    */.    s
101a0 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20  tatic const int 
101b0 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46 46 53 45  iLn = VDBE_OFFSE
101c0 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20 20 20  T_LINENO(2);.   
101d0 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64   static const Vd
101e0 62 65 4f 70 4c 69 73 74 20 65 6e 64 43 6f 64 65  beOpList endCode
101f0 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20 4f  [] = {.      { O
10200 50 5f 49 66 4e 65 67 2c 20 20 20 20 20 20 20 31  P_IfNeg,       1
10210 2c 20 30 2c 20 20 20 20 20 20 20 20 30 7d 2c 20  , 0,        0}, 
10220 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20     /* 0 */.     
10230 20 7b 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 20   { OP_String8,  
10240 20 20 20 30 2c 20 33 2c 20 20 20 20 20 20 20 20     0, 3,        
10250 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20  0},    /* 1 */. 
10260 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c 74       { OP_Result
10270 52 6f 77 2c 20 20 20 33 2c 20 31 2c 20 20 20 20  Row,   3, 1,    
10280 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d 3b 0a 0a      0},.    };..
10290 20 20 20 20 69 6e 74 20 69 73 51 75 69 63 6b 20      int isQuick 
102a0 3d 20 28 73 71 6c 69 74 65 33 54 6f 6c 6f 77 65  = (sqlite3Tolowe
102b0 72 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d 27 71 27  r(zLeft[0])=='q'
102c0 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66 20 74 68  );..    /* If th
102d0 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64  e PRAGMA command
102e0 20 77 61 73 20 6f 66 20 74 68 65 20 66 6f 72 6d   was of the form
102f0 20 22 50 52 41 47 4d 41 20 3c 64 62 3e 2e 69 6e   "PRAGMA <db>.in
10300 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 0a  tegrity_check",.
10310 20 20 20 20 2a 2a 20 74 68 65 6e 20 69 44 62 20      ** then iDb 
10320 69 73 20 73 65 74 20 74 6f 20 74 68 65 20 69 6e  is set to the in
10330 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
10340 61 73 65 20 69 64 65 6e 74 69 66 69 65 64 20 62  ase identified b
10350 79 20 3c 64 62 3e 2e 0a 20 20 20 20 2a 2a 20 49  y <db>..    ** I
10360 6e 20 74 68 69 73 20 63 61 73 65 2c 20 74 68 65  n this case, the
10370 20 69 6e 74 65 67 72 69 74 79 20 6f 66 20 64 61   integrity of da
10380 74 61 62 61 73 65 20 69 44 62 20 6f 6e 6c 79 20  tabase iDb only 
10390 69 73 20 76 65 72 69 66 69 65 64 20 62 79 0a 20  is verified by. 
103a0 20 20 20 2a 2a 20 74 68 65 20 56 44 42 45 20 63     ** the VDBE c
103b0 72 65 61 74 65 64 20 62 65 6c 6f 77 2e 0a 20 20  reated below..  
103c0 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 4f 74 68 65    **.    ** Othe
103d0 72 77 69 73 65 2c 20 69 66 20 74 68 65 20 63 6f  rwise, if the co
103e0 6d 6d 61 6e 64 20 77 61 73 20 73 69 6d 70 6c 79  mmand was simply
103f0 20 22 50 52 41 47 4d 41 20 69 6e 74 65 67 72 69   "PRAGMA integri
10400 74 79 5f 63 68 65 63 6b 22 20 28 6f 72 0a 20 20  ty_check" (or.  
10410 20 20 2a 2a 20 22 50 52 41 47 4d 41 20 71 75 69    ** "PRAGMA qui
10420 63 6b 5f 63 68 65 63 6b 22 29 2c 20 74 68 65 6e  ck_check"), then
10430 20 69 44 62 20 69 73 20 73 65 74 20 74 6f 20 30   iDb is set to 0
10440 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20  . In this case, 
10450 73 65 74 20 69 44 62 0a 20 20 20 20 2a 2a 20 74  set iDb.    ** t
10460 6f 20 2d 31 20 68 65 72 65 2c 20 74 6f 20 69 6e  o -1 here, to in
10470 64 69 63 61 74 65 20 74 68 61 74 20 74 68 65 20  dicate that the 
10480 56 44 42 45 20 73 68 6f 75 6c 64 20 76 65 72 69  VDBE should veri
10490 66 79 20 74 68 65 20 69 6e 74 65 67 72 69 74 79  fy the integrity
104a0 0a 20 20 20 20 2a 2a 20 6f 66 20 61 6c 6c 20 61  .    ** of all a
104b0 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73 65  ttached database
104c0 73 2e 20 20 2a 2f 0a 20 20 20 20 61 73 73 65 72  s.  */.    asser
104d0 74 28 20 69 44 62 3e 3d 30 20 29 3b 0a 20 20 20  t( iDb>=0 );.   
104e0 20 61 73 73 65 72 74 28 20 69 44 62 3d 3d 30 20   assert( iDb==0 
104f0 7c 7c 20 70 49 64 32 2d 3e 7a 20 29 3b 0a 20 20  || pId2->z );.  
10500 20 20 69 66 28 20 70 49 64 32 2d 3e 7a 3d 3d 30    if( pId2->z==0
10510 20 29 20 69 44 62 20 3d 20 2d 31 3b 0a 0a 20 20   ) iDb = -1;..  
10520 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69 7a 65 20    /* Initialize 
10530 74 68 65 20 56 44 42 45 20 70 72 6f 67 72 61 6d  the VDBE program
10540 20 2a 2f 0a 20 20 20 20 70 50 61 72 73 65 2d 3e   */.    pParse->
10550 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 73 71  nMem = 6;.    sq
10560 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
10570 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 73  ols(v, 1);.    s
10580 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
10590 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
105a0 4d 45 5f 4e 41 4d 45 2c 20 22 69 6e 74 65 67 72  ME_NAME, "integr
105b0 69 74 79 5f 63 68 65 63 6b 22 2c 20 53 51 4c 49  ity_check", SQLI
105c0 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20 20  TE_STATIC);..   
105d0 20 2f 2a 20 53 65 74 20 74 68 65 20 6d 61 78 69   /* Set the maxi
105e0 6d 75 6d 20 65 72 72 6f 72 20 63 6f 75 6e 74 20  mum error count 
105f0 2a 2f 0a 20 20 20 20 6d 78 45 72 72 20 3d 20 53  */.    mxErr = S
10600 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f  QLITE_INTEGRITY_
10610 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b  CHECK_ERROR_MAX;
10620 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
10630 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
10640 47 65 74 49 6e 74 33 32 28 7a 52 69 67 68 74 2c  GetInt32(zRight,
10650 20 26 6d 78 45 72 72 29 3b 0a 20 20 20 20 20 20   &mxErr);.      
10660 69 66 28 20 6d 78 45 72 72 3c 3d 30 20 29 7b 0a  if( mxErr<=0 ){.
10670 20 20 20 20 20 20 20 20 6d 78 45 72 72 20 3d 20          mxErr = 
10680 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59  SQLITE_INTEGRITY
10690 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58  _CHECK_ERROR_MAX
106a0 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
106b0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
106c0 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
106d0 67 65 72 2c 20 6d 78 45 72 72 2c 20 31 29 3b 20  ger, mxErr, 1); 
106e0 20 2f 2a 20 72 65 67 5b 31 5d 20 68 6f 6c 64 73   /* reg[1] holds
106f0 20 65 72 72 6f 72 73 20 6c 65 66 74 20 2a 2f 0a   errors left */.
10700 0a 20 20 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e  .    /* Do an in
10710 74 65 67 72 69 74 79 20 63 68 65 63 6b 20 6f 6e  tegrity check on
10720 20 65 61 63 68 20 64 61 74 61 62 61 73 65 20 66   each database f
10730 69 6c 65 20 2a 2f 0a 20 20 20 20 66 6f 72 28 69  ile */.    for(i
10740 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
10750 2b 2b 29 7b 0a 20 20 20 20 20 20 48 61 73 68 45  ++){.      HashE
10760 6c 65 6d 20 2a 78 3b 0a 20 20 20 20 20 20 48 61  lem *x;.      Ha
10770 73 68 20 2a 70 54 62 6c 73 3b 0a 20 20 20 20 20  sh *pTbls;.     
10780 20 69 6e 74 20 63 6e 74 20 3d 20 30 3b 0a 0a 20   int cnt = 0;.. 
10790 20 20 20 20 20 69 66 28 20 4f 4d 49 54 5f 54 45       if( OMIT_TE
107a0 4d 50 44 42 20 26 26 20 69 3d 3d 31 20 29 20 63  MPDB && i==1 ) c
107b0 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 69  ontinue;.      i
107c0 66 28 20 69 44 62 3e 3d 30 20 26 26 20 69 21 3d  f( iDb>=0 && i!=
107d0 69 44 62 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  iDb ) continue;.
107e0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f  .      sqlite3Co
107f0 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70  deVerifySchema(p
10800 50 61 72 73 65 2c 20 69 29 3b 0a 20 20 20 20 20  Parse, i);.     
10810 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56   addr = sqlite3V
10820 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f  dbeAddOp1(v, OP_
10830 49 66 50 6f 73 2c 20 31 29 3b 20 2f 2a 20 48 61  IfPos, 1); /* Ha
10840 6c 74 20 69 66 20 6f 75 74 20 6f 66 20 65 72 72  lt if out of err
10850 6f 72 73 20 2a 2f 0a 20 20 20 20 20 20 56 64 62  ors */.      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 32 28 76 2c 20 4f 50 5f 48 61 6c 74  ddOp2(v, OP_Halt
10890 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  , 0, 0);.      s
108a0 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
108b0 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 0a 20 20  re(v, addr);..  
108c0 20 20 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74      /* Do an int
108d0 65 67 72 69 74 79 20 63 68 65 63 6b 20 6f 66 20  egrity check of 
108e0 74 68 65 20 42 2d 54 72 65 65 0a 20 20 20 20 20  the B-Tree.     
108f0 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 42 65 67   **.      ** Beg
10900 69 6e 20 62 79 20 66 69 6c 6c 69 6e 67 20 72 65  in by filling re
10910 67 69 73 74 65 72 73 20 32 2c 20 33 2c 20 2e 2e  gisters 2, 3, ..
10920 2e 20 77 69 74 68 20 74 68 65 20 72 6f 6f 74 20  . with the root 
10930 70 61 67 65 73 20 6e 75 6d 62 65 72 73 0a 20 20  pages numbers.  
10940 20 20 20 20 2a 2a 20 66 6f 72 20 61 6c 6c 20 74      ** for all t
10950 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65  ables and indice
10960 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  s in the databas
10970 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  e..      */.    
10980 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
10990 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
109a0 28 64 62 2c 20 69 2c 20 30 29 20 29 3b 0a 20 20  (db, i, 0) );.  
109b0 20 20 20 20 70 54 62 6c 73 20 3d 20 26 64 62 2d      pTbls = &db-
109c0 3e 61 44 62 5b 69 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[i].pSchema-
109d0 3e 74 62 6c 48 61 73 68 3b 0a 20 20 20 20 20 20  >tblHash;.      
109e0 66 6f 72 28 78 3d 73 71 6c 69 74 65 48 61 73 68  for(x=sqliteHash
109f0 46 69 72 73 74 28 70 54 62 6c 73 29 3b 20 78 3b  First(pTbls); x;
10a00 20 78 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78   x=sqliteHashNex
10a10 74 28 78 29 29 7b 0a 20 20 20 20 20 20 20 20 54  t(x)){.        T
10a20 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c  able *pTab = sql
10a30 69 74 65 48 61 73 68 44 61 74 61 28 78 29 3b 0a  iteHashData(x);.
10a40 20 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70          Index *p
10a50 49 64 78 3b 0a 20 20 20 20 20 20 20 20 69 66 28  Idx;.        if(
10a60 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20   HasRowid(pTab) 
10a70 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
10a80 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
10a90 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 54  , OP_Integer, pT
10aa0 61 62 2d 3e 74 6e 75 6d 2c 20 32 2b 63 6e 74 29  ab->tnum, 2+cnt)
10ab0 3b 0a 20 20 20 20 20 20 20 20 20 20 56 64 62 65  ;.          Vdbe
10ac0 43 6f 6d 6d 65 6e 74 28 28 76 2c 20 22 25 73 22  Comment((v, "%s"
10ad0 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 29 29 3b  , pTab->zName));
10ae0 0a 20 20 20 20 20 20 20 20 20 20 63 6e 74 2b 2b  .          cnt++
10af0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
10b00 20 20 20 20 66 6f 72 28 70 49 64 78 3d 70 54 61      for(pIdx=pTa
10b10 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b  b->pIndex; pIdx;
10b20 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78   pIdx=pIdx->pNex
10b30 74 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71  t){.          sq
10b40 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
10b50 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70  v, OP_Integer, p
10b60 49 64 78 2d 3e 74 6e 75 6d 2c 20 32 2b 63 6e 74  Idx->tnum, 2+cnt
10b70 29 3b 0a 20 20 20 20 20 20 20 20 20 20 56 64 62  );.          Vdb
10b80 65 43 6f 6d 6d 65 6e 74 28 28 76 2c 20 22 25 73  eComment((v, "%s
10b90 22 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 29 29  ", pIdx->zName))
10ba0 3b 0a 20 20 20 20 20 20 20 20 20 20 63 6e 74 2b  ;.          cnt+
10bb0 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  +;.        }.   
10bc0 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d     }..      /* M
10bd0 61 6b 65 20 73 75 72 65 20 73 75 66 66 69 63 69  ake sure suffici
10be0 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 72 65  ent number of re
10bf0 67 69 73 74 65 72 73 20 68 61 76 65 20 62 65 65  gisters have bee
10c00 6e 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20  n allocated */. 
10c10 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
10c20 6d 20 3d 20 4d 41 58 28 20 70 50 61 72 73 65 2d  m = MAX( pParse-
10c30 3e 6e 4d 65 6d 2c 20 63 6e 74 2b 38 20 29 3b 0a  >nMem, cnt+8 );.
10c40 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 74 68 65  .      /* Do the
10c50 20 62 2d 74 72 65 65 20 69 6e 74 65 67 72 69 74   b-tree integrit
10c60 79 20 63 68 65 63 6b 73 20 2a 2f 0a 20 20 20 20  y checks */.    
10c70 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
10c80 4f 70 33 28 76 2c 20 4f 50 5f 49 6e 74 65 67 72  Op3(v, OP_Integr
10c90 69 74 79 43 6b 2c 20 32 2c 20 63 6e 74 2c 20 31  ityCk, 2, cnt, 1
10ca0 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
10cb0 56 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c 20  VdbeChangeP5(v, 
10cc0 28 75 38 29 69 29 3b 0a 20 20 20 20 20 20 61 64  (u8)i);.      ad
10cd0 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
10ce0 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 73 4e  AddOp1(v, OP_IsN
10cf0 75 6c 6c 2c 20 32 29 3b 20 56 64 62 65 43 6f 76  ull, 2); VdbeCov
10d00 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
10d10 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
10d20 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
10d30 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20   0, 3, 0,.      
10d40 20 20 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74     sqlite3MPrint
10d50 66 28 64 62 2c 20 22 2a 2a 2a 20 69 6e 20 64 61  f(db, "*** in da
10d60 74 61 62 61 73 65 20 25 73 20 2a 2a 2a 5c 6e 22  tabase %s ***\n"
10d70 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61  , db->aDb[i].zNa
10d80 6d 65 29 2c 0a 20 20 20 20 20 20 20 20 20 50 34  me),.         P4
10d90 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20  _DYNAMIC);.     
10da0 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
10db0 70 33 28 76 2c 20 4f 50 5f 4d 6f 76 65 2c 20 32  p3(v, OP_Move, 2
10dc0 2c 20 34 2c 20 31 29 3b 0a 20 20 20 20 20 20 73  , 4, 1);.      s
10dd0 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
10de0 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34  (v, OP_Concat, 4
10df0 2c 20 33 2c 20 32 29 3b 0a 20 20 20 20 20 20 73  , 3, 2);.      s
10e00 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
10e10 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
10e20 2c 20 32 2c 20 31 29 3b 0a 20 20 20 20 20 20 73  , 2, 1);.      s
10e30 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
10e40 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 0a 20 20  re(v, addr);..  
10e50 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
10e60 20 61 6c 6c 20 74 68 65 20 69 6e 64 69 63 65 73   all the indices
10e70 20 61 72 65 20 63 6f 6e 73 74 72 75 63 74 65 64   are constructed
10e80 20 63 6f 72 72 65 63 74 6c 79 2e 0a 20 20 20 20   correctly..    
10e90 20 20 2a 2f 0a 20 20 20 20 20 20 66 6f 72 28 78    */.      for(x
10ea0 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74  =sqliteHashFirst
10eb0 28 70 54 62 6c 73 29 3b 20 78 20 26 26 20 21 69  (pTbls); x && !i
10ec0 73 51 75 69 63 6b 3b 20 78 3d 73 71 6c 69 74 65  sQuick; x=sqlite
10ed0 48 61 73 68 4e 65 78 74 28 78 29 29 7b 0a 20 20  HashNext(x)){.  
10ee0 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61        Table *pTa
10ef0 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61  b = sqliteHashDa
10f00 74 61 28 78 29 3b 0a 20 20 20 20 20 20 20 20 49  ta(x);.        I
10f10 6e 64 65 78 20 2a 70 49 64 78 2c 20 2a 70 50 6b  ndex *pIdx, *pPk
10f20 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78 20  ;.        Index 
10f30 2a 70 50 72 69 6f 72 20 3d 20 30 3b 0a 20 20 20  *pPrior = 0;.   
10f40 20 20 20 20 20 69 6e 74 20 6c 6f 6f 70 54 6f 70       int loopTop
10f50 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 44  ;.        int iD
10f60 61 74 61 43 75 72 2c 20 69 49 64 78 43 75 72 3b  ataCur, iIdxCur;
10f70 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72 31 20  .        int r1 
10f80 3d 20 2d 31 3b 0a 0a 20 20 20 20 20 20 20 20 69  = -1;..        i
10f90 66 28 20 70 54 61 62 2d 3e 70 49 6e 64 65 78 3d  f( pTab->pIndex=
10fa0 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =0 ) continue;. 
10fb0 20 20 20 20 20 20 20 70 50 6b 20 3d 20 48 61 73         pPk = Has
10fc0 52 6f 77 69 64 28 70 54 61 62 29 20 3f 20 30 20  Rowid(pTab) ? 0 
10fd0 3a 20 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79  : sqlite3Primary
10fe0 4b 65 79 49 6e 64 65 78 28 70 54 61 62 29 3b 0a  KeyIndex(pTab);.
10ff0 20 20 20 20 20 20 20 20 61 64 64 72 20 3d 20 73          addr = s
11000 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
11010 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29  (v, OP_IfPos, 1)
11020 3b 20 20 2f 2a 20 53 74 6f 70 20 69 66 20 6f 75  ;  /* Stop if ou
11030 74 20 6f 66 20 65 72 72 6f 72 73 20 2a 2f 0a 20  t of errors */. 
11040 20 20 20 20 20 20 20 56 64 62 65 43 6f 76 65 72         VdbeCover
11050 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
11060 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
11070 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c  2(v, OP_Halt, 0,
11080 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   0);.        sql
11090 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
110a0 28 76 2c 20 61 64 64 72 29 3b 0a 20 20 20 20 20  (v, addr);.     
110b0 20 20 20 73 71 6c 69 74 65 33 45 78 70 72 43 61     sqlite3ExprCa
110c0 63 68 65 43 6c 65 61 72 28 70 50 61 72 73 65 29  cheClear(pParse)
110d0 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
110e0 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64 49 6e 64  3OpenTableAndInd
110f0 69 63 65 73 28 70 50 61 72 73 65 2c 20 70 54 61  ices(pParse, pTa
11100 62 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 0a  b, OP_OpenRead,.
11110 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11120 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11130 20 20 20 31 2c 20 30 2c 20 26 69 44 61 74 61 43     1, 0, &iDataC
11140 75 72 2c 20 26 69 49 64 78 43 75 72 29 3b 0a 20  ur, &iIdxCur);. 
11150 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
11160 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
11170 6e 74 65 67 65 72 2c 20 30 2c 20 37 29 3b 0a 20  nteger, 0, 7);. 
11180 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20         for(j=0, 
11190 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65  pIdx=pTab->pInde
111a0 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49  x; pIdx; pIdx=pI
111b0 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b  dx->pNext, j++){
111c0 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
111d0 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
111e0 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20 38  OP_Integer, 0, 8
111f0 2b 6a 29 3b 20 2f 2a 20 69 6e 64 65 78 20 65 6e  +j); /* index en
11200 74 72 69 65 73 20 63 6f 75 6e 74 65 72 20 2a 2f  tries counter */
11210 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
11220 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
11230 3d 20 4d 41 58 28 70 50 61 72 73 65 2d 3e 6e 4d  = MAX(pParse->nM
11240 65 6d 2c 20 38 2b 6a 29 3b 0a 20 20 20 20 20 20  em, 8+j);.      
11250 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
11260 4f 70 32 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64  Op2(v, OP_Rewind
11270 2c 20 69 44 61 74 61 43 75 72 2c 20 30 29 3b 20  , iDataCur, 0); 
11280 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
11290 0a 20 20 20 20 20 20 20 20 6c 6f 6f 70 54 6f 70  .        loopTop
112a0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
112b0 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d  dOp2(v, OP_AddIm
112c0 6d 2c 20 37 2c 20 31 29 3b 0a 20 20 20 20 20 20  m, 7, 1);.      
112d0 20 20 2f 2a 20 56 65 72 69 66 79 20 74 68 61 74    /* Verify that
112e0 20 61 6c 6c 20 4e 4f 54 20 4e 55 4c 4c 20 63 6f   all NOT NULL co
112f0 6c 75 6d 6e 73 20 72 65 61 6c 6c 79 20 61 72 65  lumns really are
11300 20 4e 4f 54 20 4e 55 4c 4c 20 2a 2f 0a 20 20 20   NOT NULL */.   
11310 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c       for(j=0; j<
11320 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29  pTab->nCol; j++)
11330 7b 0a 20 20 20 20 20 20 20 20 20 20 63 68 61 72  {.          char
11340 20 2a 7a 45 72 72 3b 0a 20 20 20 20 20 20 20 20   *zErr;.        
11350 20 20 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70 33    int jmp2, jmp3
11360 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  ;.          if( 
11370 6a 3d 3d 70 54 61 62 2d 3e 69 50 4b 65 79 20 29  j==pTab->iPKey )
11380 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
11390 20 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e 61       if( pTab->a
113a0 43 6f 6c 5b 6a 5d 2e 6e 6f 74 4e 75 6c 6c 3d 3d  Col[j].notNull==
113b0 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  0 ) continue;.  
113c0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
113d0 78 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e  xprCodeGetColumn
113e0 4f 66 54 61 62 6c 65 28 76 2c 20 70 54 61 62 2c  OfTable(v, pTab,
113f0 20 69 44 61 74 61 43 75 72 2c 20 6a 2c 20 33 29   iDataCur, j, 3)
11400 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
11410 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 35 28  te3VdbeChangeP5(
11420 76 2c 20 4f 50 46 4c 41 47 5f 54 59 50 45 4f 46  v, OPFLAG_TYPEOF
11430 41 52 47 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ARG);.          
11440 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65 33 56 64  jmp2 = sqlite3Vd
11450 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 4e  beAddOp1(v, OP_N
11460 6f 74 4e 75 6c 6c 2c 20 33 29 3b 20 56 64 62 65  otNull, 3); Vdbe
11470 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
11480 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
11490 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41  beAddOp2(v, OP_A
114a0 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f  ddImm, 1, -1); /
114b0 2a 20 44 65 63 72 65 6d 65 6e 74 20 65 72 72 6f  * Decrement erro
114c0 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20 20 20  r limit */.     
114d0 20 20 20 20 20 7a 45 72 72 20 3d 20 73 71 6c 69       zErr = sqli
114e0 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 22  te3MPrintf(db, "
114f0 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e 20 25 73  NULL value in %s
11500 2e 25 73 22 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d  .%s", pTab->zNam
11510 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e,.             
11520 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11530 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a   pTab->aCol[j].z
11540 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 20 20 20  Name);.         
11550 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
11560 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
11570 2c 20 30 2c 20 33 2c 20 30 2c 20 7a 45 72 72 2c  , 0, 3, 0, zErr,
11580 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20   P4_DYNAMIC);.  
11590 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
115a0 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
115b0 52 65 73 75 6c 74 52 6f 77 2c 20 33 2c 20 31 29  ResultRow, 3, 1)
115c0 3b 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70 33  ;.          jmp3
115d0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
115e0 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73  dOp1(v, OP_IfPos
115f0 2c 20 31 29 3b 20 56 64 62 65 43 6f 76 65 72 61  , 1); VdbeCovera
11600 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
11610 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
11620 70 30 28 76 2c 20 4f 50 5f 48 61 6c 74 29 3b 0a  p0(v, OP_Halt);.
11630 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
11640 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
11650 20 6a 6d 70 32 29 3b 0a 20 20 20 20 20 20 20 20   jmp2);.        
11660 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
11670 70 48 65 72 65 28 76 2c 20 6a 6d 70 33 29 3b 0a  pHere(v, jmp3);.
11680 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
11690 20 20 2f 2a 20 56 61 6c 69 64 61 74 65 20 69 6e    /* Validate in
116a0 64 65 78 20 65 6e 74 72 69 65 73 20 66 6f 72 20  dex entries for 
116b0 74 68 65 20 63 75 72 72 65 6e 74 20 72 6f 77 20  the current row 
116c0 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a  */.        for(j
116d0 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70  =0, pIdx=pTab->p
116e0 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64  Index; pIdx; pId
116f0 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a  x=pIdx->pNext, j
11700 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  ++){.          i
11710 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70 33 2c 20 6a  nt jmp2, jmp3, j
11720 6d 70 34 2c 20 6a 6d 70 35 3b 0a 20 20 20 20 20  mp4, jmp5;.     
11730 20 20 20 20 20 69 6e 74 20 63 6b 55 6e 69 71 20       int ckUniq 
11740 3d 20 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b  = sqlite3VdbeMak
11750 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20 20 20 20  eLabel(v);.     
11760 20 20 20 20 20 69 66 28 20 70 50 6b 3d 3d 70 49       if( pPk==pI
11770 64 78 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  dx ) continue;. 
11780 20 20 20 20 20 20 20 20 20 72 31 20 3d 20 73 71           r1 = sq
11790 6c 69 74 65 33 47 65 6e 65 72 61 74 65 49 6e 64  lite3GenerateInd
117a0 65 78 4b 65 79 28 70 50 61 72 73 65 2c 20 70 49  exKey(pParse, pI
117b0 64 78 2c 20 69 44 61 74 61 43 75 72 2c 20 30 2c  dx, iDataCur, 0,
117c0 20 30 2c 20 26 6a 6d 70 33 2c 0a 20 20 20 20 20   0, &jmp3,.     
117d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
117f0 20 20 70 50 72 69 6f 72 2c 20 72 31 29 3b 0a 20    pPrior, r1);. 
11800 20 20 20 20 20 20 20 20 20 70 50 72 69 6f 72 20           pPrior 
11810 3d 20 70 49 64 78 3b 0a 20 20 20 20 20 20 20 20  = pIdx;.        
11820 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
11830 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d  Op2(v, OP_AddImm
11840 2c 20 38 2b 6a 2c 20 31 29 3b 20 20 2f 2a 20 69  , 8+j, 1);  /* i
11850 6e 63 72 65 6d 65 6e 74 20 65 6e 74 72 79 20 63  ncrement entry c
11860 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 20 20 20 20  ount */.        
11870 20 20 2f 2a 20 56 65 72 69 66 79 20 74 68 61 74    /* Verify that
11880 20 61 6e 20 69 6e 64 65 78 20 65 6e 74 72 79 20   an index entry 
11890 65 78 69 73 74 73 20 66 6f 72 20 74 68 65 20 63  exists for the c
118a0 75 72 72 65 6e 74 20 74 61 62 6c 65 20 72 6f 77  urrent table row
118b0 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 6a 6d   */.          jm
118c0 70 32 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  p2 = sqlite3Vdbe
118d0 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f  AddOp4Int(v, OP_
118e0 46 6f 75 6e 64 2c 20 69 49 64 78 43 75 72 2b 6a  Found, iIdxCur+j
118f0 2c 20 63 6b 55 6e 69 71 2c 20 72 31 2c 0a 20 20  , ckUniq, r1,.  
11900 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11910 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11920 20 20 20 20 70 49 64 78 2d 3e 6e 43 6f 6c 75 6d      pIdx->nColum
11930 6e 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  n); VdbeCoverage
11940 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  (v);.          s
11950 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
11960 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31  (v, OP_AddImm, 1
11970 2c 20 2d 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d  , -1); /* Decrem
11980 65 6e 74 20 65 72 72 6f 72 20 6c 69 6d 69 74 20  ent error limit 
11990 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  */.          sql
119a0 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
119b0 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
119c0 20 33 2c 20 30 2c 20 22 72 6f 77 20 22 2c 20 50   3, 0, "row ", P
119d0 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  4_STATIC);.     
119e0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
119f0 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e  AddOp3(v, OP_Con
11a00 63 61 74 2c 20 37 2c 20 33 2c 20 33 29 3b 0a 20  cat, 7, 3, 3);. 
11a10 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
11a20 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
11a30 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 34 2c 20  _String8, 0, 4, 
11a40 30 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  0, .            
11a50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11a60 22 20 6d 69 73 73 69 6e 67 20 66 72 6f 6d 20 69  " missing from i
11a70 6e 64 65 78 20 22 2c 20 50 34 5f 53 54 41 54 49  ndex ", P4_STATI
11a80 43 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  C);.          sq
11a90 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
11aa0 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c  v, OP_Concat, 4,
11ab0 20 33 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20   3, 3);.        
11ac0 20 20 6a 6d 70 35 20 3d 20 73 71 6c 69 74 65 33    jmp5 = sqlite3
11ad0 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
11ae0 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 34 2c 20  _String8, 0, 4, 
11af0 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  0,.             
11b00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b10 20 20 20 20 20 20 70 49 64 78 2d 3e 7a 4e 61 6d        pIdx->zNam
11b20 65 2c 20 50 34 5f 54 52 41 4e 53 49 45 4e 54 29  e, P4_TRANSIENT)
11b30 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
11b40 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
11b50 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33   OP_Concat, 4, 3
11b60 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 3);.          
11b70 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
11b80 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
11b90 77 2c 20 33 2c 20 31 29 3b 0a 20 20 20 20 20 20  w, 3, 1);.      
11ba0 20 20 20 20 6a 6d 70 34 20 3d 20 73 71 6c 69 74      jmp4 = sqlit
11bb0 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20  e3VdbeAddOp1(v, 
11bc0 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 56 64  OP_IfPos, 1); Vd
11bd0 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
11be0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
11bf0 56 64 62 65 41 64 64 4f 70 30 28 76 2c 20 4f 50  VdbeAddOp0(v, OP
11c00 5f 48 61 6c 74 29 3b 0a 20 20 20 20 20 20 20 20  _Halt);.        
11c10 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
11c20 70 48 65 72 65 28 76 2c 20 6a 6d 70 32 29 3b 0a  pHere(v, jmp2);.
11c30 20 20 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72            /* For
11c40 20 55 4e 49 51 55 45 20 69 6e 64 65 78 65 73 2c   UNIQUE indexes,
11c50 20 76 65 72 69 66 79 20 74 68 61 74 20 6f 6e 6c   verify that onl
11c60 79 20 6f 6e 65 20 65 6e 74 72 79 20 65 78 69 73  y one entry exis
11c70 74 73 20 77 69 74 68 20 74 68 65 0a 20 20 20 20  ts with the.    
11c80 20 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74        ** current
11c90 20 6b 65 79 2e 20 20 54 68 65 20 65 6e 74 72 79   key.  The entry
11ca0 20 69 73 20 75 6e 69 71 75 65 20 69 66 20 28 31   is unique if (1
11cb0 29 20 61 6e 79 20 63 6f 6c 75 6d 6e 20 69 73 20  ) any column is 
11cc0 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20 20 20 2a  NULL.          *
11cd0 2a 20 6f 72 20 28 32 29 20 74 68 65 20 6e 65 78  * or (2) the nex
11ce0 74 20 65 6e 74 72 79 20 68 61 73 20 61 20 64 69  t entry has a di
11cf0 66 66 65 72 65 6e 74 20 6b 65 79 20 2a 2f 0a 20  fferent key */. 
11d00 20 20 20 20 20 20 20 20 20 69 66 28 20 49 73 55           if( IsU
11d10 6e 69 71 75 65 49 6e 64 65 78 28 70 49 64 78 29  niqueIndex(pIdx)
11d20 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
11d30 69 6e 74 20 75 6e 69 71 4f 6b 20 3d 20 73 71 6c  int uniqOk = sql
11d40 69 74 65 33 56 64 62 65 4d 61 6b 65 4c 61 62 65  ite3VdbeMakeLabe
11d50 6c 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  l(v);.          
11d60 20 20 69 6e 74 20 6a 6d 70 36 3b 0a 20 20 20 20    int jmp6;.    
11d70 20 20 20 20 20 20 20 20 69 6e 74 20 6b 6b 3b 0a          int kk;.
11d80 20 20 20 20 20 20 20 20 20 20 20 20 66 6f 72 28              for(
11d90 6b 6b 3d 30 3b 20 6b 6b 3c 70 49 64 78 2d 3e 6e  kk=0; kk<pIdx->n
11da0 4b 65 79 43 6f 6c 3b 20 6b 6b 2b 2b 29 7b 0a 20  KeyCol; kk++){. 
11db0 20 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74               int
11dc0 20 69 43 6f 6c 20 3d 20 70 49 64 78 2d 3e 61 69   iCol = pIdx->ai
11dd0 43 6f 6c 75 6d 6e 5b 6b 6b 5d 3b 0a 20 20 20 20  Column[kk];.    
11de0 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
11df0 28 20 69 43 6f 6c 3e 3d 30 20 26 26 20 69 43 6f  ( iCol>=0 && iCo
11e00 6c 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a  l<pTab->nCol );.
11e10 20 20 20 20 20 20 20 20 20 20 20 20 20 20 69 66                if
11e20 28 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 69 43 6f  ( pTab->aCol[iCo
11e30 6c 5d 2e 6e 6f 74 4e 75 6c 6c 20 29 20 63 6f 6e  l].notNull ) con
11e40 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20  tinue;.         
11e50 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
11e60 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e  AddOp2(v, OP_IsN
11e70 75 6c 6c 2c 20 72 31 2b 6b 6b 2c 20 75 6e 69 71  ull, r1+kk, uniq
11e80 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  Ok);.           
11e90 20 20 20 56 64 62 65 43 6f 76 65 72 61 67 65 28     VdbeCoverage(
11ea0 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  v);.            
11eb0 7d 0a 20 20 20 20 20 20 20 20 20 20 20 20 6a 6d  }.            jm
11ec0 70 36 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  p6 = sqlite3Vdbe
11ed0 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 4e 65 78  AddOp1(v, OP_Nex
11ee0 74 2c 20 69 49 64 78 43 75 72 2b 6a 29 3b 20 56  t, iIdxCur+j); V
11ef0 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
11f00 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
11f10 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
11f20 20 4f 50 5f 47 6f 74 6f 2c 20 30 2c 20 75 6e 69   OP_Goto, 0, uni
11f30 71 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20  qOk);.          
11f40 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
11f50 70 48 65 72 65 28 76 2c 20 6a 6d 70 36 29 3b 0a  pHere(v, jmp6);.
11f60 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
11f70 74 65 33 56 64 62 65 41 64 64 4f 70 34 49 6e 74  te3VdbeAddOp4Int
11f80 28 76 2c 20 4f 50 5f 49 64 78 47 54 2c 20 69 49  (v, OP_IdxGT, iI
11f90 64 78 43 75 72 2b 6a 2c 20 75 6e 69 71 4f 6b 2c  dxCur+j, uniqOk,
11fa0 20 72 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20   r1,.           
11fb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11fc0 20 20 20 20 20 20 70 49 64 78 2d 3e 6e 4b 65 79        pIdx->nKey
11fd0 43 6f 6c 29 3b 20 56 64 62 65 43 6f 76 65 72 61  Col); VdbeCovera
11fe0 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
11ff0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
12000 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d  dOp2(v, OP_AddIm
12010 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44 65  m, 1, -1); /* De
12020 63 72 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c 69  crement error li
12030 6d 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  mit */.         
12040 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
12050 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
12060 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20  g8, 0, 3, 0,.   
12070 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12080 20 20 20 20 20 20 20 20 20 20 20 22 6e 6f 6e 2d             "non-
12090 75 6e 69 71 75 65 20 65 6e 74 72 79 20 69 6e 20  unique entry in 
120a0 69 6e 64 65 78 20 22 2c 20 50 34 5f 53 54 41 54  index ", P4_STAT
120b0 49 43 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  IC);.           
120c0 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
120d0 70 32 28 76 2c 20 4f 50 5f 47 6f 74 6f 2c 20 30  p2(v, OP_Goto, 0
120e0 2c 20 6a 6d 70 35 29 3b 0a 20 20 20 20 20 20 20  , jmp5);.       
120f0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
12100 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76 2c 20  ResolveLabel(v, 
12110 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20 20  uniqOk);.       
12120 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 73     }.          s
12130 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
12140 72 65 28 76 2c 20 6a 6d 70 34 29 3b 0a 20 20 20  re(v, jmp4);.   
12150 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 52 65         sqlite3Re
12160 73 6f 6c 76 65 50 61 72 74 49 64 78 4c 61 62 65  solvePartIdxLabe
12170 6c 28 70 50 61 72 73 65 2c 20 6a 6d 70 33 29 3b  l(pParse, jmp3);
12180 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
12190 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
121a0 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 65 78 74 2c  dOp2(v, OP_Next,
121b0 20 69 44 61 74 61 43 75 72 2c 20 6c 6f 6f 70 54   iDataCur, loopT
121c0 6f 70 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  op); VdbeCoverag
121d0 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 73 71  e(v);.        sq
121e0 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
121f0 65 28 76 2c 20 6c 6f 6f 70 54 6f 70 2d 31 29 3b  e(v, loopTop-1);
12200 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
12210 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a  OMIT_BTREECOUNT.
12220 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
12230 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
12240 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30  String8, 0, 2, 0
12250 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
12260 20 20 20 20 20 20 20 20 22 77 72 6f 6e 67 20 23          "wrong #
12270 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69   of entries in i
12280 6e 64 65 78 20 22 2c 20 50 34 5f 53 54 41 54 49  ndex ", P4_STATI
12290 43 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28  C);.        for(
122a0 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e  j=0, pIdx=pTab->
122b0 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49  pIndex; pIdx; pI
122c0 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20  dx=pIdx->pNext, 
122d0 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  j++){.          
122e0 69 66 28 20 70 50 6b 3d 3d 70 49 64 78 20 29 20  if( pPk==pIdx ) 
122f0 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
12300 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74      addr = sqlit
12310 65 33 56 64 62 65 43 75 72 72 65 6e 74 41 64 64  e3VdbeCurrentAdd
12320 72 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  r(v);.          
12330 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
12340 32 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31  2(v, OP_IfPos, 1
12350 2c 20 61 64 64 72 2b 32 29 3b 20 56 64 62 65 43  , addr+2); VdbeC
12360 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
12370 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
12380 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61  eAddOp2(v, OP_Ha
12390 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20  lt, 0, 0);.     
123a0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
123b0 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 43 6f 75  AddOp2(v, OP_Cou
123c0 6e 74 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20 33  nt, iIdxCur+j, 3
123d0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
123e0 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
123f0 2c 20 4f 50 5f 45 71 2c 20 38 2b 6a 2c 20 61 64  , OP_Eq, 8+j, ad
12400 64 72 2b 38 2c 20 33 29 3b 20 56 64 62 65 43 6f  dr+8, 3); VdbeCo
12410 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
12420 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
12430 43 68 61 6e 67 65 50 35 28 76 2c 20 53 51 4c 49  ChangeP5(v, SQLI
12440 54 45 5f 4e 4f 54 4e 55 4c 4c 29 3b 0a 20 20 20  TE_NOTNULL);.   
12450 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
12460 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41  beAddOp2(v, OP_A
12470 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 0a 20  ddImm, 1, -1);. 
12480 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
12490 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
124a0 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20  _String8, 0, 3, 
124b0 30 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20  0, pIdx->zName, 
124c0 50 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20  P4_TRANSIENT);. 
124d0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
124e0 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
124f0 5f 43 6f 6e 63 61 74 2c 20 33 2c 20 32 2c 20 37  _Concat, 3, 2, 7
12500 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
12510 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
12520 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
12530 37 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 7d  7, 1);.        }
12540 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
12550 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e  E_OMIT_BTREECOUN
12560 54 20 2a 2f 0a 20 20 20 20 20 20 7d 20 0a 20 20  T */.      } .  
12570 20 20 7d 0a 20 20 20 20 61 64 64 72 20 3d 20 73    }.    addr = s
12580 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c  qlite3VdbeAddOpL
12590 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65  ist(v, ArraySize
125a0 28 65 6e 64 43 6f 64 65 29 2c 20 65 6e 64 43 6f  (endCode), endCo
125b0 64 65 2c 20 69 4c 6e 29 3b 0a 20 20 20 20 73 71  de, iLn);.    sq
125c0 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
125d0 33 28 76 2c 20 61 64 64 72 2c 20 2d 6d 78 45 72  3(v, addr, -mxEr
125e0 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  r);.    sqlite3V
125f0 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61  dbeJumpHere(v, a
12600 64 64 72 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  ddr);.    sqlite
12610 33 56 64 62 65 43 68 61 6e 67 65 50 34 28 76 2c  3VdbeChangeP4(v,
12620 20 61 64 64 72 2b 31 2c 20 22 6f 6b 22 2c 20 50   addr+1, "ok", P
12630 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 7d 0a 20  4_STATIC);.  }. 
12640 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f   break;.#endif /
12650 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e  * SQLITE_OMIT_IN
12660 54 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f  TEGRITY_CHECK */
12670 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
12680 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 2f 2a  _OMIT_UTF16.  /*
12690 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 65  .  **   PRAGMA e
126a0 6e 63 6f 64 69 6e 67 0a 20 20 2a 2a 20 20 20 50  ncoding.  **   P
126b0 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d  RAGMA encoding =
126c0 20 22 75 74 66 2d 38 22 7c 22 75 74 66 2d 31 36   "utf-8"|"utf-16
126d0 22 7c 22 75 74 66 2d 31 36 6c 65 22 7c 22 75 74  "|"utf-16le"|"ut
126e0 66 2d 31 36 62 65 22 0a 20 20 2a 2a 0a 20 20 2a  f-16be".  **.  *
126f0 2a 20 49 6e 20 69 74 73 20 66 69 72 73 74 20 66  * In its first f
12700 6f 72 6d 2c 20 74 68 69 73 20 70 72 61 67 6d 61  orm, this pragma
12710 20 72 65 74 75 72 6e 73 20 74 68 65 20 65 6e 63   returns the enc
12720 6f 64 69 6e 67 20 6f 66 20 74 68 65 20 6d 61 69  oding of the mai
12730 6e 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 2e  n.  ** database.
12740 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65   If the database
12750 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 69   is not initiali
12760 7a 65 64 2c 20 69 74 20 69 73 20 69 6e 69 74 69  zed, it is initi
12770 61 6c 69 7a 65 64 20 6e 6f 77 2e 0a 20 20 2a 2a  alized now..  **
12780 0a 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64  .  ** The second
12790 20 66 6f 72 6d 20 6f 66 20 74 68 69 73 20 70 72   form of this pr
127a0 61 67 6d 61 20 69 73 20 61 20 6e 6f 2d 6f 70 20  agma is a no-op 
127b0 69 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  if the main data
127c0 62 61 73 65 20 66 69 6c 65 0a 20 20 2a 2a 20 68  base file.  ** h
127d0 61 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 62  as not already b
127e0 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e  een initialized.
127f0 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 69 74   In this case it
12800 20 73 65 74 73 20 74 68 65 20 64 65 66 61 75 6c   sets the defaul
12810 74 0a 20 20 2a 2a 20 65 6e 63 6f 64 69 6e 67 20  t.  ** encoding 
12820 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65  that will be use
12830 64 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64  d for the main d
12840 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
12850 61 20 6e 65 77 20 66 69 6c 65 0a 20 20 2a 2a 20  a new file.  ** 
12860 69 73 20 63 72 65 61 74 65 64 2e 20 49 66 20 61  is created. If a
12870 6e 20 65 78 69 73 74 69 6e 67 20 6d 61 69 6e 20  n existing main 
12880 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
12890 20 6f 70 65 6e 65 64 2c 20 74 68 65 6e 20 74 68   opened, then th
128a0 65 0a 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 74  e.  ** default t
128b0 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72  ext encoding for
128c0 20 74 68 65 20 65 78 69 73 74 69 6e 67 20 64 61   the existing da
128d0 74 61 62 61 73 65 20 69 73 20 75 73 65 64 2e 0a  tabase is used..
128e0 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 6e 20 61 6c    ** .  ** In al
128f0 6c 20 63 61 73 65 73 20 6e 65 77 20 64 61 74 61  l cases new data
12900 62 61 73 65 73 20 63 72 65 61 74 65 64 20 75 73  bases created us
12910 69 6e 67 20 74 68 65 20 41 54 54 41 43 48 20 63  ing the ATTACH c
12920 6f 6d 6d 61 6e 64 20 61 72 65 0a 20 20 2a 2a 20  ommand are.  ** 
12930 63 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74  created to use t
12940 68 65 20 73 61 6d 65 20 64 65 66 61 75 6c 74 20  he same default 
12950 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 61 73  text encoding as
12960 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
12970 73 65 2e 20 49 66 0a 20 20 2a 2a 20 74 68 65 20  se. If.  ** the 
12980 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 68 61  main database ha
12990 73 20 6e 6f 74 20 62 65 65 6e 20 69 6e 69 74 69  s not been initi
129a0 61 6c 69 7a 65 64 20 61 6e 64 2f 6f 72 20 63 72  alized and/or cr
129b0 65 61 74 65 64 20 77 68 65 6e 20 41 54 54 41 43  eated when ATTAC
129c0 48 0a 20 20 2a 2a 20 69 73 20 65 78 65 63 75 74  H.  ** is execut
129d0 65 64 2c 20 74 68 69 73 20 69 73 20 64 6f 6e 65  ed, this is done
129e0 20 62 65 66 6f 72 65 20 74 68 65 20 41 54 54 41   before the ATTA
129f0 43 48 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 20 20  CH operation..  
12a00 2a 2a 0a 20 20 2a 2a 20 49 6e 20 74 68 65 20 73  **.  ** In the s
12a10 65 63 6f 6e 64 20 66 6f 72 6d 20 74 68 69 73 20  econd form this 
12a20 70 72 61 67 6d 61 20 73 65 74 73 20 74 68 65 20  pragma sets the 
12a30 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 74 6f  text encoding to
12a40 20 62 65 20 75 73 65 64 20 69 6e 0a 20 20 2a 2a   be used in.  **
12a50 20 6e 65 77 20 64 61 74 61 62 61 73 65 20 66 69   new database fi
12a60 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  les created usin
12a70 67 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  g this database 
12a80 68 61 6e 64 6c 65 2e 20 49 74 20 69 73 20 6f 6e  handle. It is on
12a90 6c 79 0a 20 20 2a 2a 20 75 73 65 66 75 6c 20 69  ly.  ** useful i
12aa0 66 20 69 6e 76 6f 6b 65 64 20 69 6d 6d 65 64 69  f invoked immedi
12ab0 61 74 65 6c 79 20 61 66 74 65 72 20 74 68 65 20  ately after the 
12ac0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 0a  main database i.
12ad0 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
12ae0 54 79 70 5f 45 4e 43 4f 44 49 4e 47 3a 20 7b 0a  Typ_ENCODING: {.
12af0 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
12b00 20 73 74 72 75 63 74 20 45 6e 63 4e 61 6d 65 20   struct EncName 
12b10 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4e  {.      char *zN
12b20 61 6d 65 3b 0a 20 20 20 20 20 20 75 38 20 65 6e  ame;.      u8 en
12b30 63 3b 0a 20 20 20 20 7d 20 65 6e 63 6e 61 6d 65  c;.    } encname
12b40 73 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20  s[] = {.      { 
12b50 22 55 54 46 38 22 2c 20 20 20 20 20 53 51 4c 49  "UTF8",     SQLI
12b60 54 45 5f 55 54 46 38 20 20 20 20 20 20 20 20 7d  TE_UTF8        }
12b70 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 38  ,.      { "UTF-8
12b80 22 2c 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46  ",    SQLITE_UTF
12b90 38 20 20 20 20 20 20 20 20 7d 2c 20 20 2f 2a 20  8        },  /* 
12ba0 4d 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20  Must be element 
12bb0 5b 31 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22  [1] */.      { "
12bc0 55 54 46 2d 31 36 6c 65 22 2c 20 53 51 4c 49 54  UTF-16le", SQLIT
12bd0 45 5f 55 54 46 31 36 4c 45 20 20 20 20 20 7d 2c  E_UTF16LE     },
12be0 20 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65    /* Must be ele
12bf0 6d 65 6e 74 20 5b 32 5d 20 2a 2f 0a 20 20 20 20  ment [2] */.    
12c00 20 20 7b 20 22 55 54 46 2d 31 36 62 65 22 2c 20    { "UTF-16be", 
12c10 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 20  SQLITE_UTF16BE  
12c20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62     },  /* Must b
12c30 65 20 65 6c 65 6d 65 6e 74 20 5b 33 5d 20 2a 2f  e element [3] */
12c40 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 6c  .      { "UTF16l
12c50 65 22 2c 20 20 53 51 4c 49 54 45 5f 55 54 46 31  e",  SQLITE_UTF1
12c60 36 4c 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20  6LE     },.     
12c70 20 7b 20 22 55 54 46 31 36 62 65 22 2c 20 20 53   { "UTF16be",  S
12c80 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 20 20  QLITE_UTF16BE   
12c90 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54    },.      { "UT
12ca0 46 2d 31 36 22 2c 20 20 20 30 20 20 20 20 20 20  F-16",   0      
12cb0 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 20 2f              }, /
12cc0 2a 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  * SQLITE_UTF16NA
12cd0 54 49 56 45 20 2a 2f 0a 20 20 20 20 20 20 7b 20  TIVE */.      { 
12ce0 22 55 54 46 31 36 22 2c 20 20 20 20 30 20 20 20  "UTF16",    0   
12cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
12d00 2c 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 31  , /* SQLITE_UTF1
12d10 36 4e 41 54 49 56 45 20 2a 2f 0a 20 20 20 20 20  6NATIVE */.     
12d20 20 7b 20 30 2c 20 30 20 7d 0a 20 20 20 20 7d 3b   { 0, 0 }.    };
12d30 0a 20 20 20 20 63 6f 6e 73 74 20 73 74 72 75 63  .    const struc
12d40 74 20 45 6e 63 4e 61 6d 65 20 2a 70 45 6e 63 3b  t EncName *pEnc;
12d50 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
12d60 20 29 7b 20 20 20 20 2f 2a 20 22 50 52 41 47 4d   ){    /* "PRAGM
12d70 41 20 65 6e 63 6f 64 69 6e 67 22 20 2a 2f 0a 20  A encoding" */. 
12d80 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
12d90 52 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73  ReadSchema(pPars
12da0 65 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61  e) ) goto pragma
12db0 5f 6f 75 74 3b 0a 20 20 20 20 20 20 73 71 6c 69  _out;.      sqli
12dc0 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
12dd0 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73  s(v, 1);.      s
12de0 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
12df0 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
12e00 4d 45 5f 4e 41 4d 45 2c 20 22 65 6e 63 6f 64 69  ME_NAME, "encodi
12e10 6e 67 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ng", SQLITE_STAT
12e20 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
12e30 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
12e40 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31  OP_String8, 0, 1
12e50 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
12e60 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45   encnames[SQLITE
12e70 5f 55 54 46 38 5d 2e 65 6e 63 3d 3d 53 51 4c 49  _UTF8].enc==SQLI
12e80 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 20 20 20  TE_UTF8 );.     
12e90 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65   assert( encname
12ea0 73 5b 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  s[SQLITE_UTF16LE
12eb0 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ].enc==SQLITE_UT
12ec0 46 31 36 4c 45 20 29 3b 0a 20 20 20 20 20 20 61  F16LE );.      a
12ed0 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b  ssert( encnames[
12ee0 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 5d 2e  SQLITE_UTF16BE].
12ef0 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31  enc==SQLITE_UTF1
12f00 36 42 45 20 29 3b 0a 20 20 20 20 20 20 73 71 6c  6BE );.      sql
12f10 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 34  ite3VdbeChangeP4
12f20 28 76 2c 20 2d 31 2c 20 65 6e 63 6e 61 6d 65 73  (v, -1, encnames
12f30 5b 45 4e 43 28 70 50 61 72 73 65 2d 3e 64 62 29  [ENC(pParse->db)
12f40 5d 2e 7a 4e 61 6d 65 2c 20 50 34 5f 53 54 41 54  ].zName, P4_STAT
12f50 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
12f60 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
12f70 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
12f80 20 31 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 20   1);.    }else{ 
12f90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12fa0 20 20 20 20 20 20 20 2f 2a 20 22 50 52 41 47 4d         /* "PRAGM
12fb0 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20 58 58 58  A encoding = XXX
12fc0 22 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 4f 6e  " */.      /* On
12fd0 6c 79 20 63 68 61 6e 67 65 20 74 68 65 20 76 61  ly change the va
12fe0 6c 75 65 20 6f 66 20 73 71 6c 69 74 65 2e 65 6e  lue of sqlite.en
12ff0 63 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73  c if the databas
13000 65 20 68 61 6e 64 6c 65 20 69 73 20 6e 6f 74 0a  e handle is not.
13010 20 20 20 20 20 20 2a 2a 20 69 6e 69 74 69 61 6c        ** initial
13020 69 7a 65 64 2e 20 49 66 20 74 68 65 20 6d 61 69  ized. If the mai
13030 6e 20 64 61 74 61 62 61 73 65 20 65 78 69 73 74  n database exist
13040 73 2c 20 74 68 65 20 6e 65 77 20 73 71 6c 69 74  s, the new sqlit
13050 65 2e 65 6e 63 20 76 61 6c 75 65 0a 20 20 20 20  e.enc value.    
13060 20 20 2a 2a 20 77 69 6c 6c 20 62 65 20 6f 76 65    ** will be ove
13070 72 77 72 69 74 74 65 6e 20 77 68 65 6e 20 74 68  rwritten when th
13080 65 20 73 63 68 65 6d 61 20 69 73 20 6e 65 78 74  e schema is next
13090 20 6c 6f 61 64 65 64 2e 20 49 66 20 69 74 20 64   loaded. If it d
130a0 6f 65 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a  oes not.      **
130b0 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 2c   already exists,
130c0 20 69 74 20 77 69 6c 6c 20 62 65 20 63 72 65 61   it will be crea
130d0 74 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e  ted to use the n
130e0 65 77 20 65 6e 63 6f 64 69 6e 67 20 76 61 6c 75  ew encoding valu
130f0 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  e..      */.    
13100 20 20 69 66 28 20 0a 20 20 20 20 20 20 20 20 21    if( .        !
13110 28 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64  (DbHasProperty(d
13120 62 2c 20 30 2c 20 44 42 5f 53 63 68 65 6d 61 4c  b, 0, DB_SchemaL
13130 6f 61 64 65 64 29 29 20 7c 7c 20 0a 20 20 20 20  oaded)) || .    
13140 20 20 20 20 44 62 48 61 73 50 72 6f 70 65 72 74      DbHasPropert
13150 79 28 64 62 2c 20 30 2c 20 44 42 5f 45 6d 70 74  y(db, 0, DB_Empt
13160 79 29 20 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  y) .      ){.   
13170 20 20 20 20 20 66 6f 72 28 70 45 6e 63 3d 26 65       for(pEnc=&e
13180 6e 63 6e 61 6d 65 73 5b 30 5d 3b 20 70 45 6e 63  ncnames[0]; pEnc
13190 2d 3e 7a 4e 61 6d 65 3b 20 70 45 6e 63 2b 2b 29  ->zName; pEnc++)
131a0 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
131b0 30 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d  0==sqlite3StrICm
131c0 70 28 7a 52 69 67 68 74 2c 20 70 45 6e 63 2d 3e  p(zRight, pEnc->
131d0 7a 4e 61 6d 65 29 20 29 7b 0a 20 20 20 20 20 20  zName) ){.      
131e0 20 20 20 20 20 20 53 43 48 45 4d 41 5f 45 4e 43        SCHEMA_ENC
131f0 28 64 62 29 20 3d 20 45 4e 43 28 64 62 29 20 3d  (db) = ENC(db) =
13200 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
13210 20 70 45 6e 63 2d 3e 65 6e 63 20 3f 20 70 45 6e   pEnc->enc ? pEn
13220 63 2d 3e 65 6e 63 20 3a 20 53 51 4c 49 54 45 5f  c->enc : SQLITE_
13230 55 54 46 31 36 4e 41 54 49 56 45 3b 0a 20 20 20  UTF16NATIVE;.   
13240 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
13250 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
13260 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
13270 28 20 21 70 45 6e 63 2d 3e 7a 4e 61 6d 65 20 29  ( !pEnc->zName )
13280 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
13290 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72  te3ErrorMsg(pPar
132a0 73 65 2c 20 22 75 6e 73 75 70 70 6f 72 74 65 64  se, "unsupported
132b0 20 65 6e 63 6f 64 69 6e 67 3a 20 25 73 22 2c 20   encoding: %s", 
132c0 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 20  zRight);.       
132d0 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
132e0 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
132f0 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
13300 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 23 69  MIT_UTF16 */..#i
13310 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
13320 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  T_SCHEMA_VERSION
13330 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20  _PRAGMAS.  /*.  
13340 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74  **   PRAGMA [dat
13350 61 62 61 73 65 2e 5d 73 63 68 65 6d 61 5f 76 65  abase.]schema_ve
13360 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41  rsion.  **   PRA
13370 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73  GMA [database.]s
13380 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20  chema_version = 
13390 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20  <integer>.  **. 
133a0 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61   **   PRAGMA [da
133b0 74 61 62 61 73 65 2e 5d 75 73 65 72 5f 76 65 72  tabase.]user_ver
133c0 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41 47  sion.  **   PRAG
133d0 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 75 73  MA [database.]us
133e0 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69 6e  er_version = <in
133f0 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a  teger>.  **.  **
13400 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
13410 61 73 65 2e 5d 66 72 65 65 6c 69 73 74 5f 63 6f  ase.]freelist_co
13420 75 6e 74 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a  unt = <integer>.
13430 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    **.  **   PRAG
13440 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 61 70  MA [database.]ap
13450 70 6c 69 63 61 74 69 6f 6e 5f 69 64 0a 20 20 2a  plication_id.  *
13460 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  *   PRAGMA [data
13470 62 61 73 65 2e 5d 61 70 70 6c 69 63 61 74 69 6f  base.]applicatio
13480 6e 5f 69 64 20 3d 20 3c 69 6e 74 65 67 65 72 3e  n_id = <integer>
13490 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 70  .  **.  ** The p
134a0 72 61 67 6d 61 27 73 20 73 63 68 65 6d 61 5f 76  ragma's schema_v
134b0 65 72 73 69 6f 6e 20 61 6e 64 20 75 73 65 72 5f  ersion and user_
134c0 76 65 72 73 69 6f 6e 20 61 72 65 20 75 73 65 64  version are used
134d0 20 74 6f 20 73 65 74 20 6f 72 20 67 65 74 0a 20   to set or get. 
134e0 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66   ** the value of
134f0 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73   the schema-vers
13500 69 6f 6e 20 61 6e 64 20 75 73 65 72 2d 76 65 72  ion and user-ver
13510 73 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65  sion, respective
13520 6c 79 2e 20 42 6f 74 68 0a 20 20 2a 2a 20 74 68  ly. Both.  ** th
13530 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e  e schema-version
13540 20 61 6e 64 20 74 68 65 20 75 73 65 72 2d 76 65   and the user-ve
13550 72 73 69 6f 6e 20 61 72 65 20 33 32 2d 62 69 74  rsion are 32-bit
13560 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73   signed integers
13570 0a 20 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20  .  ** stored in 
13580 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61  the database hea
13590 64 65 72 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  der..  **.  ** T
135a0 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65  he schema-cookie
135b0 20 69 73 20 75 73 75 61 6c 6c 79 20 6f 6e 6c 79   is usually only
135c0 20 6d 61 6e 69 70 75 6c 61 74 65 64 20 69 6e 74   manipulated int
135d0 65 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74  ernally by SQLit
135e0 65 2e 20 49 74 0a 20 20 2a 2a 20 69 73 20 69 6e  e. It.  ** is in
135f0 63 72 65 6d 65 6e 74 65 64 20 62 79 20 53 51 4c  cremented by SQL
13600 69 74 65 20 77 68 65 6e 65 76 65 72 20 74 68 65  ite whenever the
13610 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
13620 20 69 73 20 6d 6f 64 69 66 69 65 64 20 28 62 79   is modified (by
13630 0a 20 20 2a 2a 20 63 72 65 61 74 69 6e 67 20 6f  .  ** creating o
13640 72 20 64 72 6f 70 70 69 6e 67 20 61 20 74 61 62  r dropping a tab
13650 6c 65 20 6f 72 20 69 6e 64 65 78 29 2e 20 54 68  le or index). Th
13660 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
13670 20 69 73 20 75 73 65 64 20 62 79 0a 20 20 2a 2a   is used by.  **
13680 20 53 51 4c 69 74 65 20 65 61 63 68 20 74 69 6d   SQLite each tim
13690 65 20 61 20 71 75 65 72 79 20 69 73 20 65 78 65  e a query is exe
136a0 63 75 74 65 64 20 74 6f 20 65 6e 73 75 72 65 20  cuted to ensure 
136b0 74 68 61 74 20 74 68 65 20 69 6e 74 65 72 6e 61  that the interna
136c0 6c 20 63 61 63 68 65 0a 20 20 2a 2a 20 6f 66 20  l cache.  ** of 
136d0 74 68 65 20 73 63 68 65 6d 61 20 75 73 65 64 20  the schema used 
136e0 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74  when compiling t
136f0 68 65 20 53 51 4c 20 71 75 65 72 79 20 6d 61 74  he SQL query mat
13700 63 68 65 73 20 74 68 65 20 73 63 68 65 6d 61 20  ches the schema 
13710 6f 66 0a 20 20 2a 2a 20 74 68 65 20 64 61 74 61  of.  ** the data
13720 62 61 73 65 20 61 67 61 69 6e 73 74 20 77 68 69  base against whi
13730 63 68 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20  ch the compiled 
13740 71 75 65 72 79 20 69 73 20 61 63 74 75 61 6c 6c  query is actuall
13750 79 20 65 78 65 63 75 74 65 64 2e 0a 20 20 2a 2a  y executed..  **
13760 20 53 75 62 76 65 72 74 69 6e 67 20 74 68 69 73   Subverting this
13770 20 6d 65 63 68 61 6e 69 73 6d 20 62 79 20 75 73   mechanism by us
13780 69 6e 67 20 22 50 52 41 47 4d 41 20 73 63 68 65  ing "PRAGMA sche
13790 6d 61 5f 76 65 72 73 69 6f 6e 22 20 74 6f 20 6d  ma_version" to m
137a0 6f 64 69 66 79 0a 20 20 2a 2a 20 74 68 65 20 73  odify.  ** the s
137b0 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 69 73  chema-version is
137c0 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20 64 61 6e   potentially dan
137d0 67 65 72 6f 75 73 20 61 6e 64 20 6d 61 79 20 6c  gerous and may l
137e0 65 61 64 20 74 6f 20 70 72 6f 67 72 61 6d 0a 20  ead to program. 
137f0 20 2a 2a 20 63 72 61 73 68 65 73 20 6f 72 20 64   ** crashes or d
13800 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69  atabase corrupti
13810 6f 6e 2e 20 55 73 65 20 77 69 74 68 20 63 61 75  on. Use with cau
13820 74 69 6f 6e 21 0a 20 20 2a 2a 0a 20 20 2a 2a 20  tion!.  **.  ** 
13830 54 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e  The user-version
13840 20 69 73 20 6e 6f 74 20 75 73 65 64 20 69 6e 74   is not used int
13850 65 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74  ernally by SQLit
13860 65 2e 20 49 74 20 6d 61 79 20 62 65 20 75 73 65  e. It may be use
13870 64 20 62 79 0a 20 20 2a 2a 20 61 70 70 6c 69 63  d by.  ** applic
13880 61 74 69 6f 6e 73 20 66 6f 72 20 61 6e 79 20 70  ations for any p
13890 75 72 70 6f 73 65 2e 0a 20 20 2a 2f 0a 20 20 63  urpose..  */.  c
138a0 61 73 65 20 50 72 61 67 54 79 70 5f 48 45 41 44  ase PragTyp_HEAD
138b0 45 52 5f 56 41 4c 55 45 3a 20 7b 0a 20 20 20 20  ER_VALUE: {.    
138c0 69 6e 74 20 69 43 6f 6f 6b 69 65 20 3d 20 70 50  int iCookie = pP
138d0 72 61 67 6d 61 2d 3e 69 41 72 67 3b 20 20 2f 2a  ragma->iArg;  /*
138e0 20 57 68 69 63 68 20 63 6f 6f 6b 69 65 20 74 6f   Which cookie to
138f0 20 72 65 61 64 20 6f 72 20 77 72 69 74 65 20 2a   read or write *
13900 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  /.    sqlite3Vdb
13910 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 44  eUsesBtree(v, iD
13920 62 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  b);.    if( zRig
13930 68 74 20 26 26 20 28 70 50 72 61 67 6d 61 2d 3e  ht && (pPragma->
13940 6d 50 72 61 67 46 6c 61 67 20 26 20 50 72 61 67  mPragFlag & Prag
13950 46 6c 61 67 5f 52 65 61 64 4f 6e 6c 79 29 3d 3d  Flag_ReadOnly)==
13960 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 57 72  0 ){.      /* Wr
13970 69 74 65 20 74 68 65 20 73 70 65 63 69 66 69 65  ite the specifie
13980 64 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a  d cookie value *
13990 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63 20 63  /.      static c
139a0 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20  onst VdbeOpList 
139b0 73 65 74 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a  setCookie[] = {.
139c0 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61          { OP_Tra
139d0 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 30 2c 20  nsaction,    0, 
139e0 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30   1,  0},    /* 0
139f0 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50   */.        { OP
13a00 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20 20 20  _Integer,       
13a10 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20   0,  1,  0},    
13a20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 1 */.        
13a30 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20  { OP_SetCookie, 
13a40 20 20 20 20 20 30 2c 20 20 30 2c 20 20 31 7d 2c       0,  0,  1},
13a50 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20      /* 2 */.    
13a60 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74 20 61    };.      int a
13a70 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ddr = sqlite3Vdb
13a80 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72  eAddOpList(v, Ar
13a90 72 61 79 53 69 7a 65 28 73 65 74 43 6f 6f 6b 69  raySize(setCooki
13aa0 65 29 2c 20 73 65 74 43 6f 6f 6b 69 65 2c 20 30  e), setCookie, 0
13ab0 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
13ac0 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
13ad0 61 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20  addr, iDb);.    
13ae0 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
13af0 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c  ngeP1(v, addr+1,
13b00 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69   sqlite3Atoi(zRi
13b10 67 68 74 29 29 3b 0a 20 20 20 20 20 20 73 71 6c  ght));.      sql
13b20 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
13b30 28 76 2c 20 61 64 64 72 2b 32 2c 20 69 44 62 29  (v, addr+2, iDb)
13b40 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
13b50 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20 61  dbeChangeP2(v, a
13b60 64 64 72 2b 32 2c 20 69 43 6f 6f 6b 69 65 29 3b  ddr+2, iCookie);
13b70 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
13b80 20 20 2f 2a 20 52 65 61 64 20 74 68 65 20 73 70    /* Read the sp
13b90 65 63 69 66 69 65 64 20 63 6f 6f 6b 69 65 20 76  ecified cookie v
13ba0 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20 73 74  alue */.      st
13bb0 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f  atic const VdbeO
13bc0 70 4c 69 73 74 20 72 65 61 64 43 6f 6f 6b 69 65  pList readCookie
13bd0 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b  [] = {.        {
13be0 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c   OP_Transaction,
13bf0 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c       0,  0,  0},
13c00 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20      /* 0 */.    
13c10 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f      { OP_ReadCoo
13c20 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20 31 2c  kie,      0,  1,
13c30 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f    0},    /* 1 */
13c40 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65  .        { OP_Re
13c50 73 75 6c 74 52 6f 77 2c 20 20 20 20 20 20 20 31  sultRow,       1
13c60 2c 20 20 31 2c 20 20 30 7d 0a 20 20 20 20 20 20  ,  1,  0}.      
13c70 7d 3b 0a 20 20 20 20 20 20 69 6e 74 20 61 64 64  };.      int add
13c80 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
13c90 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61  ddOpList(v, Arra
13ca0 79 53 69 7a 65 28 72 65 61 64 43 6f 6f 6b 69 65  ySize(readCookie
13cb0 29 2c 20 72 65 61 64 43 6f 6f 6b 69 65 2c 20 30  ), readCookie, 0
13cc0 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
13cd0 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
13ce0 61 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20  addr, iDb);.    
13cf0 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
13d00 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c  ngeP1(v, addr+1,
13d10 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c   iDb);.      sql
13d20 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 33  ite3VdbeChangeP3
13d30 28 76 2c 20 61 64 64 72 2b 31 2c 20 69 43 6f 6f  (v, addr+1, iCoo
13d40 6b 69 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  kie);.      sqli
13d50 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
13d60 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73  s(v, 1);.      s
13d70 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
13d80 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
13d90 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c 20  ME_NAME, zLeft, 
13da0 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54  SQLITE_TRANSIENT
13db0 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
13dc0 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  reak;.#endif /* 
13dd0 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
13de0 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d  MA_VERSION_PRAGM
13df0 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  AS */..#ifndef S
13e00 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49  QLITE_OMIT_COMPI
13e10 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 0a 20  LEOPTION_DIAGS. 
13e20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
13e30 41 20 63 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e  A compile_option
13e40 73 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  s.  **.  ** Retu
13e50 72 6e 20 74 68 65 20 6e 61 6d 65 73 20 6f 66 20  rn the names of 
13e60 61 6c 6c 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65  all compile-time
13e70 20 6f 70 74 69 6f 6e 73 20 75 73 65 64 20 69 6e   options used in
13e80 20 74 68 69 73 20 62 75 69 6c 64 2c 0a 20 20 2a   this build,.  *
13e90 2a 20 6f 6e 65 20 6f 70 74 69 6f 6e 20 70 65 72  * one option per
13ea0 20 72 6f 77 2e 0a 20 20 2a 2f 0a 20 20 63 61 73   row..  */.  cas
13eb0 65 20 50 72 61 67 54 79 70 5f 43 4f 4d 50 49 4c  e PragTyp_COMPIL
13ec0 45 5f 4f 50 54 49 4f 4e 53 3a 20 7b 0a 20 20 20  E_OPTIONS: {.   
13ed0 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20 20 20   int i = 0;.    
13ee0 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f 70 74  const char *zOpt
13ef0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
13f00 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
13f10 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  );.    pParse->n
13f20 4d 65 6d 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c  Mem = 1;.    sql
13f30 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
13f40 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
13f50 5f 4e 41 4d 45 2c 20 22 63 6f 6d 70 69 6c 65 5f  _NAME, "compile_
13f60 6f 70 74 69 6f 6e 22 2c 20 53 51 4c 49 54 45 5f  option", SQLITE_
13f70 53 54 41 54 49 43 29 3b 0a 20 20 20 20 77 68 69  STATIC);.    whi
13f80 6c 65 28 20 28 7a 4f 70 74 20 3d 20 73 71 6c 69  le( (zOpt = sqli
13f90 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f  te3_compileoptio
13fa0 6e 5f 67 65 74 28 69 2b 2b 29 29 21 3d 30 20 29  n_get(i++))!=0 )
13fb0 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  {.      sqlite3V
13fc0 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
13fd0 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30  String8, 0, 1, 0
13fe0 2c 20 7a 4f 70 74 2c 20 30 29 3b 0a 20 20 20 20  , zOpt, 0);.    
13ff0 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
14000 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
14010 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20  Row, 1, 1);.    
14020 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23  }.  }.  break;.#
14030 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
14040 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49  OMIT_COMPILEOPTI
14050 4f 4e 5f 44 49 41 47 53 20 2a 2f 0a 0a 23 69 66  ON_DIAGS */..#if
14060 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
14070 5f 57 41 4c 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  _WAL.  /*.  **  
14080 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
14090 65 2e 5d 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e  e.]wal_checkpoin
140a0 74 20 3d 20 70 61 73 73 69 76 65 7c 66 75 6c 6c  t = passive|full
140b0 7c 72 65 73 74 61 72 74 7c 74 72 75 6e 63 61 74  |restart|truncat
140c0 65 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 68 65 63  e.  **.  ** Chec
140d0 6b 70 6f 69 6e 74 20 74 68 65 20 64 61 74 61 62  kpoint the datab
140e0 61 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ase..  */.  case
140f0 20 50 72 61 67 54 79 70 5f 57 41 4c 5f 43 48 45   PragTyp_WAL_CHE
14100 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20 20 20 69  CKPOINT: {.    i
14110 6e 74 20 69 42 74 20 3d 20 28 70 49 64 32 2d 3e  nt iBt = (pId2->
14120 7a 3f 69 44 62 3a 53 51 4c 49 54 45 5f 4d 41 58  z?iDb:SQLITE_MAX
14130 5f 41 54 54 41 43 48 45 44 29 3b 0a 20 20 20 20  _ATTACHED);.    
14140 69 6e 74 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49  int eMode = SQLI
14150 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41  TE_CHECKPOINT_PA
14160 53 53 49 56 45 3b 0a 20 20 20 20 69 66 28 20 7a  SSIVE;.    if( z
14170 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69  Right ){.      i
14180 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
14190 70 28 7a 52 69 67 68 74 2c 20 22 66 75 6c 6c 22  p(zRight, "full"
141a0 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
141b0 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43  eMode = SQLITE_C
141c0 48 45 43 4b 50 4f 49 4e 54 5f 46 55 4c 4c 3b 0a  HECKPOINT_FULL;.
141d0 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
141e0 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
141f0 52 69 67 68 74 2c 20 22 72 65 73 74 61 72 74 22  Right, "restart"
14200 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
14210 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43  eMode = SQLITE_C
14220 48 45 43 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52  HECKPOINT_RESTAR
14230 54 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69  T;.      }else i
14240 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
14250 70 28 7a 52 69 67 68 74 2c 20 22 74 72 75 6e 63  p(zRight, "trunc
14260 61 74 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ate")==0 ){.    
14270 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49      eMode = SQLI
14280 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52  TE_CHECKPOINT_TR
14290 55 4e 43 41 54 45 3b 0a 20 20 20 20 20 20 7d 0a  UNCATE;.      }.
142a0 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
142b0 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
142c0 76 2c 20 33 29 3b 0a 20 20 20 20 70 50 61 72 73  v, 3);.    pPars
142d0 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20  e->nMem = 3;.   
142e0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
142f0 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
14300 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 62 75 73 79  NAME_NAME, "busy
14310 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
14320 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
14330 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
14340 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  1, COLNAME_NAME,
14350 20 22 6c 6f 67 22 2c 20 53 51 4c 49 54 45 5f 53   "log", SQLITE_S
14360 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69  TATIC);.    sqli
14370 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
14380 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 2, COLNAME_
14390 4e 41 4d 45 2c 20 22 63 68 65 63 6b 70 6f 69 6e  NAME, "checkpoin
143a0 74 65 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ted", SQLITE_STA
143b0 54 49 43 29 3b 0a 0a 20 20 20 20 73 71 6c 69 74  TIC);..    sqlit
143c0 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
143d0 4f 50 5f 43 68 65 63 6b 70 6f 69 6e 74 2c 20 69  OP_Checkpoint, i
143e0 42 74 2c 20 65 4d 6f 64 65 2c 20 31 29 3b 0a 20  Bt, eMode, 1);. 
143f0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
14400 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
14410 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 7d  tRow, 1, 3);.  }
14420 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 2f 2a 0a  .  break;..  /*.
14430 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 77 61    **   PRAGMA wa
14440 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74  l_autocheckpoint
14450 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 77  .  **   PRAGMA w
14460 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e  al_autocheckpoin
14470 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  t = N.  **.  ** 
14480 43 6f 6e 66 69 67 75 72 65 20 61 20 64 61 74 61  Configure a data
14490 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20  base connection 
144a0 74 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79  to automatically
144b0 20 63 68 65 63 6b 70 6f 69 6e 74 20 61 20 64 61   checkpoint a da
144c0 74 61 62 61 73 65 0a 20 20 2a 2a 20 61 66 74 65  tabase.  ** afte
144d0 72 20 61 63 63 75 6d 75 6c 61 74 69 6e 67 20 4e  r accumulating N
144e0 20 66 72 61 6d 65 73 20 69 6e 20 74 68 65 20 6c   frames in the l
144f0 6f 67 2e 20 4f 72 20 71 75 65 72 79 20 66 6f 72  og. Or query for
14500 20 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c   the current val
14510 75 65 0a 20 20 2a 2a 20 6f 66 20 4e 2e 0a 20 20  ue.  ** of N..  
14520 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
14530 70 5f 57 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50  p_WAL_AUTOCHECKP
14540 4f 49 4e 54 3a 20 7b 0a 20 20 20 20 69 66 28 20  OINT: {.    if( 
14550 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
14560 73 71 6c 69 74 65 33 5f 77 61 6c 5f 61 75 74 6f  sqlite3_wal_auto
14570 63 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 73  checkpoint(db, s
14580 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68  qlite3Atoi(zRigh
14590 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  t));.    }.    r
145a0 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70  eturnSingleInt(p
145b0 50 61 72 73 65 2c 20 22 77 61 6c 5f 61 75 74 6f  Parse, "wal_auto
145c0 63 68 65 63 6b 70 6f 69 6e 74 22 2c 20 0a 20 20  checkpoint", .  
145d0 20 20 20 20 20 64 62 2d 3e 78 57 61 6c 43 61 6c       db->xWalCal
145e0 6c 62 61 63 6b 3d 3d 73 71 6c 69 74 65 33 57 61  lback==sqlite3Wa
145f0 6c 44 65 66 61 75 6c 74 48 6f 6f 6b 20 3f 20 0a  lDefaultHook ? .
14600 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
14610 45 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 64 62 2d  E_PTR_TO_INT(db-
14620 3e 70 57 61 6c 41 72 67 29 20 3a 20 30 29 3b 0a  >pWalArg) : 0);.
14630 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
14640 64 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  dif..  /*.  **  
14650 50 52 41 47 4d 41 20 73 68 72 69 6e 6b 5f 6d 65  PRAGMA shrink_me
14660 6d 6f 72 79 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  mory.  **.  ** T
14670 68 69 73 20 70 72 61 67 6d 61 20 61 74 74 65 6d  his pragma attem
14680 70 74 73 20 74 6f 20 66 72 65 65 20 61 73 20 6d  pts to free as m
14690 75 63 68 20 6d 65 6d 6f 72 79 20 61 73 20 70 6f  uch memory as po
146a0 73 73 69 62 6c 65 20 66 72 6f 6d 20 74 68 65 0a  ssible from the.
146b0 20 20 2a 2a 20 63 75 72 72 65 6e 74 20 64 61 74    ** current dat
146c0 61 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e  abase connection
146d0 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
146e0 61 67 54 79 70 5f 53 48 52 49 4e 4b 5f 4d 45 4d  agTyp_SHRINK_MEM
146f0 4f 52 59 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74  ORY: {.    sqlit
14700 65 33 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65  e3_db_release_me
14710 6d 6f 72 79 28 64 62 29 3b 0a 20 20 20 20 62 72  mory(db);.    br
14720 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20  eak;.  }..  /*. 
14730 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 62 75 73   **   PRAGMA bus
14740 79 5f 74 69 6d 65 6f 75 74 0a 20 20 2a 2a 20 20  y_timeout.  **  
14750 20 50 52 41 47 4d 41 20 62 75 73 79 5f 74 69 6d   PRAGMA busy_tim
14760 65 6f 75 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20  eout = N.  **.  
14770 2a 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65 33 5f  ** Call sqlite3_
14780 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c  busy_timeout(db,
14790 20 4e 29 2e 20 20 52 65 74 75 72 6e 20 74 68 65   N).  Return the
147a0 20 63 75 72 72 65 6e 74 20 74 69 6d 65 6f 75 74   current timeout
147b0 20 76 61 6c 75 65 0a 20 20 2a 2a 20 69 66 20 6f   value.  ** if o
147c0 6e 65 20 69 73 20 73 65 74 2e 20 20 49 66 20 6e  ne is set.  If n
147d0 6f 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20 6f  o busy handler o
147e0 72 20 61 20 64 69 66 66 65 72 65 6e 74 20 62 75  r a different bu
147f0 73 79 20 68 61 6e 64 6c 65 72 20 69 73 20 73 65  sy handler is se
14800 74 0a 20 20 2a 2a 20 74 68 65 6e 20 30 20 69 73  t.  ** then 0 is
14810 20 72 65 74 75 72 6e 65 64 2e 20 20 53 65 74 74   returned.  Sett
14820 69 6e 67 20 74 68 65 20 62 75 73 79 5f 74 69 6d  ing the busy_tim
14830 65 6f 75 74 20 74 6f 20 30 20 6f 72 20 6e 65 67  eout to 0 or neg
14840 61 74 69 76 65 0a 20 20 2a 2a 20 64 69 73 61 62  ative.  ** disab
14850 6c 65 73 20 74 68 65 20 74 69 6d 65 6f 75 74 2e  les the timeout.
14860 0a 20 20 2a 2f 0a 20 20 2f 2a 63 61 73 65 20 50  .  */.  /*case P
14870 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45  ragTyp_BUSY_TIME
14880 4f 55 54 2a 2f 20 64 65 66 61 75 6c 74 3a 20 7b  OUT*/ default: {
14890 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 50 72  .    assert( pPr
148a0 61 67 6d 61 2d 3e 65 50 72 61 67 54 79 70 3d 3d  agma->ePragTyp==
148b0 50 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d  PragTyp_BUSY_TIM
148c0 45 4f 55 54 20 29 3b 0a 20 20 20 20 69 66 28 20  EOUT );.    if( 
148d0 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
148e0 73 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d  sqlite3_busy_tim
148f0 65 6f 75 74 28 64 62 2c 20 73 71 6c 69 74 65 33  eout(db, sqlite3
14900 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20  Atoi(zRight));. 
14910 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53     }.    returnS
14920 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c  ingleInt(pParse,
14930 20 22 74 69 6d 65 6f 75 74 22 2c 20 20 64 62 2d   "timeout",  db-
14940 3e 62 75 73 79 54 69 6d 65 6f 75 74 29 3b 0a 20  >busyTimeout);. 
14950 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
14960 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
14970 41 20 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69  A soft_heap_limi
14980 74 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  t.  **   PRAGMA 
14990 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20  soft_heap_limit 
149a0 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 61  = N.  **.  ** Ca
149b0 6c 6c 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f  ll sqlite3_soft_
149c0 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 4e 29 2e  heap_limit64(N).
149d0 20 20 52 65 74 75 72 6e 20 74 68 65 20 72 65 73    Return the res
149e0 75 6c 74 2e 20 20 49 66 20 4e 20 69 73 20 6f 6d  ult.  If N is om
149f0 69 74 74 65 64 2c 0a 20 20 2a 2a 20 75 73 65 20  itted,.  ** use 
14a00 2d 31 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  -1..  */.  case 
14a10 50 72 61 67 54 79 70 5f 53 4f 46 54 5f 48 45 41  PragTyp_SOFT_HEA
14a20 50 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 73  P_LIMIT: {.    s
14a30 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 4e 3b 0a  qlite3_int64 N;.
14a40 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 26      if( zRight &
14a50 26 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65  & sqlite3DecOrHe
14a60 78 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26  xToI64(zRight, &
14a70 4e 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b  N)==SQLITE_OK ){
14a80 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73  .      sqlite3_s
14a90 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34  oft_heap_limit64
14aa0 28 4e 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  (N);.    }.    r
14ab0 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70  eturnSingleInt(p
14ac0 50 61 72 73 65 2c 20 22 73 6f 66 74 5f 68 65 61  Parse, "soft_hea
14ad0 70 5f 6c 69 6d 69 74 22 2c 20 20 73 71 6c 69 74  p_limit",  sqlit
14ae0 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  e3_soft_heap_lim
14af0 69 74 36 34 28 2d 31 29 29 3b 0a 20 20 20 20 62  it64(-1));.    b
14b00 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
14b10 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 68    **   PRAGMA th
14b20 72 65 61 64 73 0a 20 20 2a 2a 20 20 20 50 52 41  reads.  **   PRA
14b30 47 4d 41 20 74 68 72 65 61 64 73 20 3d 20 4e 0a  GMA threads = N.
14b40 20 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e 66 69 67    **.  ** Config
14b50 75 72 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20  ure the maximum 
14b60 6e 75 6d 62 65 72 20 6f 66 20 77 6f 72 6b 65 72  number of worker
14b70 20 74 68 72 65 61 64 73 2e 20 20 52 65 74 75 72   threads.  Retur
14b80 6e 20 74 68 65 20 6e 65 77 0a 20 20 2a 2a 20 6d  n the new.  ** m
14b90 61 78 69 6d 75 6d 2c 20 77 68 69 63 68 20 6d 69  aximum, which mi
14ba0 67 68 74 20 62 65 20 6c 65 73 73 20 74 68 61 6e  ght be less than
14bb0 20 72 65 71 75 65 73 74 65 64 2e 0a 20 20 2a 2f   requested..  */
14bc0 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
14bd0 54 48 52 45 41 44 53 3a 20 7b 0a 20 20 20 20 73  THREADS: {.    s
14be0 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 4e 3b 0a  qlite3_int64 N;.
14bf0 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 0a 20      if( zRight. 
14c00 20 20 20 20 26 26 20 73 71 6c 69 74 65 33 44 65      && sqlite3De
14c10 63 4f 72 48 65 78 54 6f 49 36 34 28 7a 52 69 67  cOrHexToI64(zRig
14c20 68 74 2c 20 26 4e 29 3d 3d 53 51 4c 49 54 45 5f  ht, &N)==SQLITE_
14c30 4f 4b 0a 20 20 20 20 20 26 26 20 4e 3e 3d 30 0a  OK.     && N>=0.
14c40 20 20 20 20 29 7b 0a 20 20 20 20 20 20 73 71 6c      ){.      sql
14c50 69 74 65 33 5f 6c 69 6d 69 74 28 64 62 2c 20 53  ite3_limit(db, S
14c60 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b  QLITE_LIMIT_WORK
14c70 45 52 5f 54 48 52 45 41 44 53 2c 20 28 69 6e 74  ER_THREADS, (int
14c80 29 28 4e 26 30 78 37 66 66 66 66 66 66 66 29 29  )(N&0x7fffffff))
14c90 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  ;.    }.    retu
14ca0 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72  rnSingleInt(pPar
14cb0 73 65 2c 20 22 74 68 72 65 61 64 73 22 2c 0a 20  se, "threads",. 
14cc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14cd0 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74     sqlite3_limit
14ce0 28 64 62 2c 20 53 51 4c 49 54 45 5f 4c 49 4d 49  (db, SQLITE_LIMI
14cf0 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  T_WORKER_THREADS
14d00 2c 20 2d 31 29 29 3b 0a 20 20 20 20 62 72 65 61  , -1));.    brea
14d10 6b 3b 0a 20 20 7d 0a 0a 23 69 66 20 64 65 66 69  k;.  }..#if defi
14d20 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
14d30 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
14d40 49 54 45 5f 54 45 53 54 29 0a 20 20 2f 2a 0a 20  ITE_TEST).  /*. 
14d50 20 2a 2a 20 52 65 70 6f 72 74 20 74 68 65 20 63   ** Report the c
14d60 75 72 72 65 6e 74 20 73 74 61 74 65 20 6f 66 20  urrent state of 
14d70 66 69 6c 65 20 6c 6f 67 73 20 66 6f 72 20 61 6c  file logs for al
14d80 6c 20 64 61 74 61 62 61 73 65 73 0a 20 20 2a 2f  l databases.  */
14d90 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
14da0 4c 4f 43 4b 5f 53 54 41 54 55 53 3a 20 7b 0a 20  LOCK_STATUS: {. 
14db0 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
14dc0 63 68 61 72 20 2a 63 6f 6e 73 74 20 61 7a 4c 6f  char *const azLo
14dd0 63 6b 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20  ckName[] = {.   
14de0 20 20 20 22 75 6e 6c 6f 63 6b 65 64 22 2c 20 22     "unlocked", "
14df0 73 68 61 72 65 64 22 2c 20 22 72 65 73 65 72 76  shared", "reserv
14e00 65 64 22 2c 20 22 70 65 6e 64 69 6e 67 22 2c 20  ed", "pending", 
14e10 22 65 78 63 6c 75 73 69 76 65 22 0a 20 20 20 20  "exclusive".    
14e20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20  };.    int i;.  
14e30 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
14e40 4e 75 6d 43 6f 6c 73 28 76 2c 20 32 29 3b 0a 20  NumCols(v, 2);. 
14e50 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
14e60 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 2;.    sqlite3
14e70 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
14e80 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
14e90 45 2c 20 22 64 61 74 61 62 61 73 65 22 2c 20 53  E, "database", S
14ea0 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
14eb0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
14ec0 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43  tColName(v, 1, C
14ed0 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 74  OLNAME_NAME, "st
14ee0 61 74 75 73 22 2c 20 53 51 4c 49 54 45 5f 53 54  atus", SQLITE_ST
14ef0 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 69  ATIC);.    for(i
14f00 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  =0; i<db->nDb; i
14f10 2b 2b 29 7b 0a 20 20 20 20 20 20 42 74 72 65 65  ++){.      Btree
14f20 20 2a 70 42 74 3b 0a 20 20 20 20 20 20 63 6f 6e   *pBt;.      con
14f30 73 74 20 63 68 61 72 20 2a 7a 53 74 61 74 65 20  st char *zState 
14f40 3d 20 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 20  = "unknown";.   
14f50 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20     int j;.      
14f60 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a  if( db->aDb[i].z
14f70 4e 61 6d 65 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  Name==0 ) contin
14f80 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ue;.      sqlite
14f90 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
14fa0 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c  P_String8, 0, 1,
14fb0 20 30 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a   0, db->aDb[i].z
14fc0 4e 61 6d 65 2c 20 50 34 5f 53 54 41 54 49 43 29  Name, P4_STATIC)
14fd0 3b 0a 20 20 20 20 20 20 70 42 74 20 3d 20 64 62  ;.      pBt = db
14fe0 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20 20  ->aDb[i].pBt;.  
14ff0 20 20 20 20 69 66 28 20 70 42 74 3d 3d 30 20 7c      if( pBt==0 |
15000 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  | sqlite3BtreePa
15010 67 65 72 28 70 42 74 29 3d 3d 30 20 29 7b 0a 20  ger(pBt)==0 ){. 
15020 20 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20         zState = 
15030 22 63 6c 6f 73 65 64 22 3b 0a 20 20 20 20 20 20  "closed";.      
15040 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65  }else if( sqlite
15050 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64  3_file_control(d
15060 62 2c 20 69 20 3f 20 64 62 2d 3e 61 44 62 5b 69  b, i ? db->aDb[i
15070 5d 2e 7a 4e 61 6d 65 20 3a 20 30 2c 20 0a 20 20  ].zName : 0, .  
15080 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
15090 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
150a0 20 20 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f     SQLITE_FCNTL_
150b0 4c 4f 43 4b 53 54 41 54 45 2c 20 26 6a 29 3d 3d  LOCKSTATE, &j)==
150c0 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
150d0 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20 61        zState = a
150e0 7a 4c 6f 63 6b 4e 61 6d 65 5b 6a 5d 3b 0a 20 20  zLockName[j];.  
150f0 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
15100 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
15110 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
15120 32 2c 20 30 2c 20 7a 53 74 61 74 65 2c 20 50 34  2, 0, zState, P4
15130 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
15140 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
15150 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
15160 77 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a  w, 1, 2);.    }.
15170 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
15180 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51  endif..#ifdef SQ
15190 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20  LITE_HAS_CODEC. 
151a0 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4b 45   case PragTyp_KE
151b0 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  Y: {.    if( zRi
151c0 67 68 74 20 29 20 73 71 6c 69 74 65 33 5f 6b 65  ght ) sqlite3_ke
151d0 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52  y_v2(db, zDb, zR
151e0 69 67 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72  ight, sqlite3Str
151f0 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a  len30(zRight));.
15200 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
15210 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 52 45   case PragTyp_RE
15220 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a  KEY: {.    if( z
15230 52 69 67 68 74 20 29 20 73 71 6c 69 74 65 33 5f  Right ) sqlite3_
15240 72 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62  rekey_v2(db, zDb
15250 2c 20 7a 52 69 67 68 74 2c 20 73 71 6c 69 74 65  , zRight, sqlite
15260 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74  3Strlen30(zRight
15270 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  ));.    break;. 
15280 20 7d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79   }.  case PragTy
15290 70 5f 48 45 58 4b 45 59 3a 20 7b 0a 20 20 20 20  p_HEXKEY: {.    
152a0 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
152b0 20 20 20 20 75 38 20 69 42 79 74 65 3b 0a 20 20      u8 iByte;.  
152c0 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20      int i;.     
152d0 20 63 68 61 72 20 7a 4b 65 79 5b 34 30 5d 3b 0a   char zKey[40];.
152e0 20 20 20 20 20 20 66 6f 72 28 69 3d 30 2c 20 69        for(i=0, i
152f0 42 79 74 65 3d 30 3b 20 69 3c 73 69 7a 65 6f 66  Byte=0; i<sizeof
15300 28 7a 4b 65 79 29 2a 32 20 26 26 20 73 71 6c 69  (zKey)*2 && sqli
15310 74 65 33 49 73 78 64 69 67 69 74 28 7a 52 69 67  te3Isxdigit(zRig
15320 68 74 5b 69 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20  ht[i]); i++){.  
15330 20 20 20 20 20 20 69 42 79 74 65 20 3d 20 28 69        iByte = (i
15340 42 79 74 65 3c 3c 34 29 20 2b 20 73 71 6c 69 74  Byte<<4) + sqlit
15350 65 33 48 65 78 54 6f 49 6e 74 28 7a 52 69 67 68  e3HexToInt(zRigh
15360 74 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 69  t[i]);.        i
15370 66 28 20 28 69 26 31 29 21 3d 30 20 29 20 7a 4b  f( (i&1)!=0 ) zK
15380 65 79 5b 69 2f 32 5d 20 3d 20 69 42 79 74 65 3b  ey[i/2] = iByte;
15390 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
153a0 66 28 20 28 7a 4c 65 66 74 5b 33 5d 20 26 20 30  f( (zLeft[3] & 0
153b0 78 66 29 3d 3d 30 78 62 20 29 7b 0a 20 20 20 20  xf)==0xb ){.    
153c0 20 20 20 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f      sqlite3_key_
153d0 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 4b 65 79  v2(db, zDb, zKey
153e0 2c 20 69 2f 32 29 3b 0a 20 20 20 20 20 20 7d 65  , i/2);.      }e
153f0 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  lse{.        sql
15400 69 74 65 33 5f 72 65 6b 65 79 5f 76 32 28 64 62  ite3_rekey_v2(db
15410 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32  , zDb, zKey, i/2
15420 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
15430 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
15440 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
15450 65 64 28 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f  ed(SQLITE_HAS_CO
15460 44 45 43 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  DEC) || defined(
15470 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45  SQLITE_ENABLE_CE
15480 52 4f 44 29 0a 20 20 63 61 73 65 20 50 72 61 67  ROD).  case Prag
15490 54 79 70 5f 41 43 54 49 56 41 54 45 5f 45 58 54  Typ_ACTIVATE_EXT
154a0 45 4e 53 49 4f 4e 53 3a 20 69 66 28 20 7a 52 69  ENSIONS: if( zRi
154b0 67 68 74 20 29 7b 0a 23 69 66 64 65 66 20 53 51  ght ){.#ifdef SQ
154c0 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20  LITE_HAS_CODEC. 
154d0 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74     if( sqlite3St
154e0 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22  rNICmp(zRight, "
154f0 73 65 65 2d 22 2c 20 34 29 3d 3d 30 20 29 7b 0a  see-", 4)==0 ){.
15500 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 61 63        sqlite3_ac
15510 74 69 76 61 74 65 5f 73 65 65 28 26 7a 52 69 67  tivate_see(&zRig
15520 68 74 5b 34 5d 29 3b 0a 20 20 20 20 7d 0a 23 65  ht[4]);.    }.#e
15530 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49  ndif.#ifdef SQLI
15540 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 0a  TE_ENABLE_CEROD.
15550 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
15560 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20  trNICmp(zRight, 
15570 22 63 65 72 6f 64 2d 22 2c 20 36 29 3d 3d 30 20  "cerod-", 6)==0 
15580 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
15590 5f 61 63 74 69 76 61 74 65 5f 63 65 72 6f 64 28  _activate_cerod(
155a0 26 7a 52 69 67 68 74 5b 36 5d 29 3b 0a 20 20 20  &zRight[6]);.   
155b0 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20   }.#endif.  }.  
155c0 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20  break;.#endif.. 
155d0 20 7d 20 2f 2a 20 45 6e 64 20 6f 66 20 74 68 65   } /* End of the
155e0 20 50 52 41 47 4d 41 20 73 77 69 74 63 68 20 2a   PRAGMA switch *
155f0 2f 0a 0a 70 72 61 67 6d 61 5f 6f 75 74 3a 0a 20  /..pragma_out:. 
15600 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64   sqlite3DbFree(d
15610 62 2c 20 7a 4c 65 66 74 29 3b 0a 20 20 73 71 6c  b, zLeft);.  sql
15620 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a  ite3DbFree(db, z
15630 52 69 67 68 74 29 3b 0a 7d 0a 0a 23 65 6e 64 69  Right);.}..#endi
15640 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
15650 5f 50 52 41 47 4d 41 20 2a 2f 0a                 _PRAGMA */.