/ Hex Artifact Content
Login

Artifact 7337e5d9f14664e987be3e6ed4d73fad16e48ad1:


0000: 2f 2a 0a 2a 2a 20 32 30 30 33 20 41 70 72 69 6c  /*.** 2003 April
0010: 20 36 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74   6.**.** The aut
0020: 68 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f  hor disclaims co
0030: 70 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20  pyright to this 
0040: 73 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e  source code.  In
0050: 20 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c   place of.** a l
0060: 65 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72  egal notice, her
0070: 65 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a  e is a blessing:
0080: 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f  .**.**    May yo
0090: 75 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f  u do good and no
00a0: 74 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61  t evil..**    Ma
00b0: 79 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69  y you find forgi
00c0: 76 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73  veness for yours
00d0: 65 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20  elf and forgive 
00e0: 6f 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61  others..**    Ma
00f0: 79 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65  y you share free
0100: 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67  ly, never taking
0110: 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67   more than you g
0120: 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  ive..**.********
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63  *.** This file c
0180: 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 75 73 65  ontains code use
0190: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
01a0: 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e  he PRAGMA comman
01b0: 64 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  d..*/.#include "
01c0: 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a 0a 23 69  sqliteInt.h"..#i
01d0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
01e0: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
01f0: 5f 53 54 59 4c 45 29 0a 23 20 20 69 66 20 64 65  _STYLE).#  if de
0200: 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29  fined(__APPLE__)
0210: 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53 51 4c  .#    define SQL
0220: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
0230: 4e 47 5f 53 54 59 4c 45 20 31 0a 23 20 20 65 6c  NG_STYLE 1.#  el
0240: 73 65 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53  se.#    define S
0250: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
0260: 4b 49 4e 47 5f 53 54 59 4c 45 20 30 0a 23 20 20  KING_STYLE 0.#  
0270: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
0280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
02d0: 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20  e next block of 
02e0: 63 6f 64 65 2c 20 69 6e 63 6c 75 64 69 6e 67 20  code, including 
02f0: 74 68 65 20 50 72 61 67 54 79 70 5f 58 58 58 58  the PragTyp_XXXX
0300: 20 6d 61 63 72 6f 20 64 65 66 69 6e 69 74 69 6f   macro definitio
0310: 6e 73 20 61 6e 64 0a 2a 2a 20 74 68 65 20 61 50  ns and.** the aP
0320: 72 61 67 6d 61 4e 61 6d 65 5b 5d 20 6f 62 6a 65  ragmaName[] obje
0330: 63 74 20 69 73 20 63 6f 6d 70 6f 73 65 64 20 6f  ct is composed o
0340: 66 20 67 65 6e 65 72 61 74 65 64 20 63 6f 64 65  f generated code
0350: 2e 20 44 4f 20 4e 4f 54 20 45 44 49 54 2e 0a 2a  . DO NOT EDIT..*
0360: 2a 0a 2a 2a 20 54 6f 20 61 64 64 20 6e 65 77 20  *.** To add new 
0370: 70 72 61 67 6d 61 73 2c 20 65 64 69 74 20 74 68  pragmas, edit th
0380: 65 20 63 6f 64 65 20 69 6e 20 2e 2e 2f 74 6f 6f  e code in ../too
0390: 6c 2f 6d 6b 70 72 61 67 6d 61 74 61 62 2e 74 63  l/mkpragmatab.tc
03a0: 6c 20 61 6e 64 20 72 65 72 75 6e 0a 2a 2a 20 74  l and rerun.** t
03b0: 68 61 74 20 73 63 72 69 70 74 2e 20 20 54 68 65  hat script.  The
03c0: 6e 20 63 6f 70 79 2f 70 61 73 74 65 20 74 68 65  n copy/paste the
03d0: 20 6f 75 74 70 75 74 20 69 6e 20 70 6c 61 63 65   output in place
03e0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
03f0: 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 50 72  g:.*/.#define Pr
0400: 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c  agTyp_HEADER_VAL
0410: 55 45 20 20 20 20 20 20 20 20 20 20 20 20 20 20  UE              
0420: 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 50       0.#define P
0430: 72 61 67 54 79 70 5f 41 55 54 4f 5f 56 41 43 55  ragTyp_AUTO_VACU
0440: 55 4d 20 20 20 20 20 20 20 20 20 20 20 20 20 20  UM              
0450: 20 20 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20        1.#define 
0460: 50 72 61 67 54 79 70 5f 46 4c 41 47 20 20 20 20  PragTyp_FLAG    
0470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0480: 20 20 20 20 20 20 20 32 0a 23 64 65 66 69 6e 65         2.#define
0490: 20 50 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49   PragTyp_BUSY_TI
04a0: 4d 45 4f 55 54 20 20 20 20 20 20 20 20 20 20 20  MEOUT           
04b0: 20 20 20 20 20 20 20 20 33 0a 23 64 65 66 69 6e          3.#defin
04c0: 65 20 50 72 61 67 54 79 70 5f 43 41 43 48 45 5f  e PragTyp_CACHE_
04d0: 53 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 20  SIZE            
04e0: 20 20 20 20 20 20 20 20 20 34 0a 23 64 65 66 69           4.#defi
04f0: 6e 65 20 50 72 61 67 54 79 70 5f 43 41 53 45 5f  ne PragTyp_CASE_
0500: 53 45 4e 53 49 54 49 56 45 5f 4c 49 4b 45 20 20  SENSITIVE_LIKE  
0510: 20 20 20 20 20 20 20 20 20 20 35 0a 23 64 65 66            5.#def
0520: 69 6e 65 20 50 72 61 67 54 79 70 5f 43 4f 4c 4c  ine PragTyp_COLL
0530: 41 54 49 4f 4e 5f 4c 49 53 54 20 20 20 20 20 20  ATION_LIST      
0540: 20 20 20 20 20 20 20 20 20 20 20 36 0a 23 64 65             6.#de
0550: 66 69 6e 65 20 50 72 61 67 54 79 70 5f 43 4f 4d  fine PragTyp_COM
0560: 50 49 4c 45 5f 4f 50 54 49 4f 4e 53 20 20 20 20  PILE_OPTIONS    
0570: 20 20 20 20 20 20 20 20 20 20 20 20 37 0a 23 64              7.#d
0580: 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 44 41  efine PragTyp_DA
0590: 54 41 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f  TA_STORE_DIRECTO
05a0: 52 59 20 20 20 20 20 20 20 20 20 20 20 38 0a 23  RY           8.#
05b0: 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 44  define PragTyp_D
05c0: 41 54 41 42 41 53 45 5f 4c 49 53 54 20 20 20 20  ATABASE_LIST    
05d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 39 0a                9.
05e0: 23 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f  #define PragTyp_
05f0: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
0600: 5a 45 20 20 20 20 20 20 20 20 20 20 20 20 31 30  ZE            10
0610: 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54 79 70  .#define PragTyp
0620: 5f 45 4e 43 4f 44 49 4e 47 20 20 20 20 20 20 20  _ENCODING       
0630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31                 1
0640: 31 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54 79  1.#define PragTy
0650: 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 43 48  p_FOREIGN_KEY_CH
0660: 45 43 4b 20 20 20 20 20 20 20 20 20 20 20 20 20  ECK             
0670: 31 32 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54  12.#define PragT
0680: 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 4c  yp_FOREIGN_KEY_L
0690: 49 53 54 20 20 20 20 20 20 20 20 20 20 20 20 20  IST             
06a0: 20 31 33 0a 23 64 65 66 69 6e 65 20 50 72 61 67   13.#define Prag
06b0: 54 79 70 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f  Typ_INCREMENTAL_
06c0: 56 41 43 55 55 4d 20 20 20 20 20 20 20 20 20 20  VACUUM          
06d0: 20 20 31 34 0a 23 64 65 66 69 6e 65 20 50 72 61    14.#define Pra
06e0: 67 54 79 70 5f 49 4e 44 45 58 5f 49 4e 46 4f 20  gTyp_INDEX_INFO 
06f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0700: 20 20 20 31 35 0a 23 64 65 66 69 6e 65 20 50 72     15.#define Pr
0710: 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c 49 53 54  agTyp_INDEX_LIST
0720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0730: 20 20 20 20 31 36 0a 23 64 65 66 69 6e 65 20 50      16.#define P
0740: 72 61 67 54 79 70 5f 49 4e 54 45 47 52 49 54 59  ragTyp_INTEGRITY
0750: 5f 43 48 45 43 4b 20 20 20 20 20 20 20 20 20 20  _CHECK          
0760: 20 20 20 20 20 31 37 0a 23 64 65 66 69 6e 65 20       17.#define 
0770: 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f  PragTyp_JOURNAL_
0780: 4d 4f 44 45 20 20 20 20 20 20 20 20 20 20 20 20  MODE            
0790: 20 20 20 20 20 20 31 38 0a 23 64 65 66 69 6e 65        18.#define
07a0: 20 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c   PragTyp_JOURNAL
07b0: 5f 53 49 5a 45 5f 4c 49 4d 49 54 20 20 20 20 20  _SIZE_LIMIT     
07c0: 20 20 20 20 20 20 20 31 39 0a 23 64 65 66 69 6e         19.#defin
07d0: 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 50  e PragTyp_LOCK_P
07e0: 52 4f 58 59 5f 46 49 4c 45 20 20 20 20 20 20 20  ROXY_FILE       
07f0: 20 20 20 20 20 20 20 20 32 30 0a 23 64 65 66 69          20.#defi
0800: 6e 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49  ne PragTyp_LOCKI
0810: 4e 47 5f 4d 4f 44 45 20 20 20 20 20 20 20 20 20  NG_MODE         
0820: 20 20 20 20 20 20 20 20 20 32 31 0a 23 64 65 66           21.#def
0830: 69 6e 65 20 50 72 61 67 54 79 70 5f 50 41 47 45  ine PragTyp_PAGE
0840: 5f 43 4f 55 4e 54 20 20 20 20 20 20 20 20 20 20  _COUNT          
0850: 20 20 20 20 20 20 20 20 20 20 32 32 0a 23 64 65            22.#de
0860: 66 69 6e 65 20 50 72 61 67 54 79 70 5f 4d 4d 41  fine PragTyp_MMA
0870: 50 5f 53 49 5a 45 20 20 20 20 20 20 20 20 20 20  P_SIZE          
0880: 20 20 20 20 20 20 20 20 20 20 20 32 33 0a 23 64             23.#d
0890: 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 50 41  efine PragTyp_PA
08a0: 47 45 5f 53 49 5a 45 20 20 20 20 20 20 20 20 20  GE_SIZE         
08b0: 20 20 20 20 20 20 20 20 20 20 20 20 32 34 0a 23              24.#
08c0: 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 53  define PragTyp_S
08d0: 45 43 55 52 45 5f 44 45 4c 45 54 45 20 20 20 20  ECURE_DELETE    
08e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 32 35 0a               25.
08f0: 23 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f  #define PragTyp_
0900: 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59 20 20 20  SHRINK_MEMORY   
0910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 36                26
0920: 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54 79 70  .#define PragTyp
0930: 5f 53 4f 46 54 5f 48 45 41 50 5f 4c 49 4d 49 54  _SOFT_HEAP_LIMIT
0940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32                 2
0950: 37 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54 79  7.#define PragTy
0960: 70 5f 53 54 41 54 53 20 20 20 20 20 20 20 20 20  p_STATS         
0970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0980: 32 38 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54  28.#define PragT
0990: 79 70 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 20  yp_SYNCHRONOUS  
09a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09b0: 20 32 39 0a 23 64 65 66 69 6e 65 20 50 72 61 67   29.#define Prag
09c0: 54 79 70 5f 54 41 42 4c 45 5f 49 4e 46 4f 20 20  Typ_TABLE_INFO  
09d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09e0: 20 20 33 30 0a 23 64 65 66 69 6e 65 20 50 72 61    30.#define Pra
09f0: 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45 20  gTyp_TEMP_STORE 
0a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a10: 20 20 20 33 31 0a 23 64 65 66 69 6e 65 20 50 72     31.#define Pr
0a20: 61 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45  agTyp_TEMP_STORE
0a30: 5f 44 49 52 45 43 54 4f 52 59 20 20 20 20 20 20  _DIRECTORY      
0a40: 20 20 20 20 33 32 0a 23 64 65 66 69 6e 65 20 50      32.#define P
0a50: 72 61 67 54 79 70 5f 54 48 52 45 41 44 53 20 20  ragTyp_THREADS  
0a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a70: 20 20 20 20 20 33 33 0a 23 64 65 66 69 6e 65 20       33.#define 
0a80: 50 72 61 67 54 79 70 5f 57 41 4c 5f 41 55 54 4f  PragTyp_WAL_AUTO
0a90: 43 48 45 43 4b 50 4f 49 4e 54 20 20 20 20 20 20  CHECKPOINT      
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 43 48 45   PragTyp_WAL_CHE
0ac0: 43 4b 50 4f 49 4e 54 20 20 20 20 20 20 20 20 20  CKPOINT         
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 41 43 54 49 56 41  e PragTyp_ACTIVA
0af0: 54 45 5f 45 58 54 45 4e 53 49 4f 4e 53 20 20 20  TE_EXTENSIONS   
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 48 45 58 4b 45  ne PragTyp_HEXKE
0b20: 59 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  Y               
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 4b 45 59 20  ine PragTyp_KEY 
0b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
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 52 45 4b  fine PragTyp_REK
0b80: 45 59 20 20 20 20 20 20 20 20 20 20 20 20 20 20  EY              
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 4c 4f  efine PragTyp_LO
0bb0: 43 4b 5f 53 54 41 54 55 53 20 20 20 20 20 20 20  CK_STATUS       
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 50  define PragTyp_P
0be0: 41 52 53 45 52 5f 54 52 41 43 45 20 20 20 20 20  ARSER_TRACE     
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 46 6c 61 67  #define PragFlag
0c10: 5f 4e 65 65 64 53 63 68 65 6d 61 20 20 20 20 20  _NeedSchema     
0c20: 20 20 20 20 20 20 30 78 30 31 0a 23 64 65 66 69        0x01.#defi
0c30: 6e 65 20 50 72 61 67 46 6c 61 67 5f 52 65 61 64  ne PragFlag_Read
0c40: 4f 6e 6c 79 20 20 20 20 20 20 20 20 20 20 20 20  Only            
0c50: 20 30 78 30 32 0a 73 74 61 74 69 63 20 63 6f 6e   0x02.static con
0c60: 73 74 20 73 74 72 75 63 74 20 73 50 72 61 67 6d  st struct sPragm
0c70: 61 4e 61 6d 65 73 20 7b 0a 20 20 63 6f 6e 73 74  aNames {.  const
0c80: 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 7a 4e 61   char *const zNa
0c90: 6d 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  me;  /* Name of 
0ca0: 70 72 61 67 6d 61 20 2a 2f 0a 20 20 75 38 20 65  pragma */.  u8 e
0cb0: 50 72 61 67 54 79 70 3b 20 20 20 20 20 20 20 20  PragTyp;        
0cc0: 20 20 20 20 20 20 2f 2a 20 50 72 61 67 54 79 70        /* PragTyp
0cd0: 5f 58 58 58 20 76 61 6c 75 65 20 2a 2f 0a 20 20  _XXX value */.  
0ce0: 75 38 20 6d 50 72 61 67 46 6c 61 67 3b 20 20 20  u8 mPragFlag;   
0cf0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72            /* Zer
0d00: 6f 20 6f 72 20 6d 6f 72 65 20 50 72 61 67 46 6c  o or more PragFl
0d10: 61 67 5f 58 58 58 20 76 61 6c 75 65 73 20 2a 2f  ag_XXX values */
0d20: 0a 20 20 75 33 32 20 69 41 72 67 3b 20 20 20 20  .  u32 iArg;    
0d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
0d40: 45 78 74 72 61 20 61 72 67 75 6d 65 6e 74 20 2a  Extra argument *
0d50: 2f 0a 7d 20 61 50 72 61 67 6d 61 4e 61 6d 65 73  /.} aPragmaNames
0d60: 5b 5d 20 3d 20 7b 0a 23 69 66 20 64 65 66 69 6e  [] = {.#if defin
0d70: 65 64 28 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f  ed(SQLITE_HAS_CO
0d80: 44 45 43 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  DEC) || defined(
0d90: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45  SQLITE_ENABLE_CE
0da0: 52 4f 44 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  ROD).  { /* zNam
0db0: 65 3a 20 20 20 20 20 2a 2f 20 22 61 63 74 69 76  e:     */ "activ
0dc0: 61 74 65 5f 65 78 74 65 6e 73 69 6f 6e 73 22 2c  ate_extensions",
0dd0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
0de0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 41 43  :  */ PragTyp_AC
0df0: 54 49 56 41 54 45 5f 45 58 54 45 4e 53 49 4f 4e  TIVATE_EXTENSION
0e00: 53 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  S,.    /* ePragF
0e10: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
0e20: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
0e30: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
0e40: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
0e50: 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53  OMIT_SCHEMA_VERS
0e60: 49 4f 4e 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  ION_PRAGMAS).  {
0e70: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
0e80: 2f 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69  / "application_i
0e90: 64 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  d",.    /* ePrag
0ea0: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
0eb0: 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 2c 0a 20  _HEADER_VALUE,. 
0ec0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
0ed0: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
0ee0: 72 67 3a 20 20 20 20 20 20 2a 2f 20 42 54 52 45  rg:      */ BTRE
0ef0: 45 5f 41 50 50 4c 49 43 41 54 49 4f 4e 5f 49 44  E_APPLICATION_ID
0f00: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
0f10: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
0f20: 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a  MIT_AUTOVACUUM).
0f30: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
0f40: 20 20 2a 2f 20 22 61 75 74 6f 5f 76 61 63 75 75    */ "auto_vacuu
0f50: 6d 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  m",.    /* ePrag
0f60: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
0f70: 5f 41 55 54 4f 5f 56 41 43 55 55 4d 2c 0a 20 20  _AUTO_VACUUM,.  
0f80: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
0f90: 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64  */ PragFlag_Need
0fa0: 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69  Schema,.    /* i
0fb0: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
0fc0: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ,.#endif.#if !de
0fd0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
0fe0: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a  T_FLAG_PRAGMAS).
0ff0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1000: 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 4d 41 54  ITE_OMIT_AUTOMAT
1010: 49 43 5f 49 4e 44 45 58 29 0a 20 20 7b 20 2f 2a  IC_INDEX).  { /*
1020: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
1030: 61 75 74 6f 6d 61 74 69 63 5f 69 6e 64 65 78 22  automatic_index"
1040: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
1050: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46  p:  */ PragTyp_F
1060: 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  LAG,.    /* ePra
1070: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
1080: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
1090: 2f 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64  / SQLITE_AutoInd
10a0: 65 78 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e  ex },.#endif.#en
10b0: 64 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  dif.  { /* zName
10c0: 3a 20 20 20 20 20 2a 2f 20 22 62 75 73 79 5f 74  :     */ "busy_t
10d0: 69 6d 65 6f 75 74 22 2c 0a 20 20 20 20 2f 2a 20  imeout",.    /* 
10e0: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
10f0: 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f  agTyp_BUSY_TIMEO
1100: 55 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  UT,.    /* ePrag
1110: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1120: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1130: 20 30 20 7d 2c 0a 23 69 66 20 21 64 65 66 69 6e   0 },.#if !defin
1140: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ed(SQLITE_OMIT_P
1150: 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a 20 20  AGER_PRAGMAS).  
1160: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
1170: 2a 2f 20 22 63 61 63 68 65 5f 73 69 7a 65 22 2c  */ "cache_size",
1180: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
1190: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 43 41  :  */ PragTyp_CA
11a0: 43 48 45 5f 53 49 5a 45 2c 0a 20 20 20 20 2f 2a  CHE_SIZE,.    /*
11b0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50   ePragFlag: */ P
11c0: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
11d0: 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a  ma,.    /* iArg:
11e0: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
11f0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
1200: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  d(SQLITE_OMIT_FL
1210: 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20  AG_PRAGMAS).  { 
1220: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
1230: 20 22 63 61 63 68 65 5f 73 70 69 6c 6c 22 2c 0a   "cache_spill",.
1240: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1250: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
1260: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
1270: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
1280: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
1290: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
12a0: 6c 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7b 20  l },.#endif.  { 
12b0: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
12c0: 20 22 63 61 73 65 5f 73 65 6e 73 69 74 69 76 65   "case_sensitive
12d0: 5f 6c 69 6b 65 22 2c 0a 20 20 20 20 2f 2a 20 65  _like",.    /* e
12e0: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
12f0: 67 54 79 70 5f 43 41 53 45 5f 53 45 4e 53 49 54  gTyp_CASE_SENSIT
1300: 49 56 45 5f 4c 49 4b 45 2c 0a 20 20 20 20 2f 2a  IVE_LIKE,.    /*
1310: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
1320: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
1330: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 69 66 20      */ 0 },.#if 
1340: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1350: 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41  OMIT_FLAG_PRAGMA
1360: 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  S).  { /* zName:
1370: 20 20 20 20 20 2a 2f 20 22 63 68 65 63 6b 70 6f       */ "checkpo
1380: 69 6e 74 5f 66 75 6c 6c 66 73 79 6e 63 22 2c 0a  int_fullfsync",.
1390: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
13a0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
13b0: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
13c0: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
13d0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
13e0: 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46  SQLITE_CkptFullF
13f0: 53 79 6e 63 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  Sync },.#endif.#
1400: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
1410: 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50  TE_OMIT_SCHEMA_P
1420: 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a  RAGMAS).  { /* z
1430: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 63 6f  Name:     */ "co
1440: 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 22 2c 0a 20  llation_list",. 
1450: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
1460: 20 2a 2f 20 50 72 61 67 54 79 70 5f 43 4f 4c 4c   */ PragTyp_COLL
1470: 41 54 49 4f 4e 5f 4c 49 53 54 2c 0a 20 20 20 20  ATION_LIST,.    
1480: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
1490: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
14a0: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
14b0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
14c0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f  d(SQLITE_OMIT_CO
14d0: 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47  MPILEOPTION_DIAG
14e0: 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  S).  { /* zName:
14f0: 20 20 20 20 20 2a 2f 20 22 63 6f 6d 70 69 6c 65       */ "compile
1500: 5f 6f 70 74 69 6f 6e 73 22 2c 0a 20 20 20 20 2f  _options",.    /
1510: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
1520: 50 72 61 67 54 79 70 5f 43 4f 4d 50 49 4c 45 5f  PragTyp_COMPILE_
1530: 4f 50 54 49 4f 4e 53 2c 0a 20 20 20 20 2f 2a 20  OPTIONS,.    /* 
1540: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
1550: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
1560: 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69     */ 0 },.#endi
1570: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
1580: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f  QLITE_OMIT_FLAG_
1590: 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20  PRAGMAS).  { /* 
15a0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 63  zName:     */ "c
15b0: 6f 75 6e 74 5f 63 68 61 6e 67 65 73 22 2c 0a 20  ount_changes",. 
15c0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
15d0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
15e0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
15f0: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
1600: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
1610: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
1620: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
1630: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1640: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
1650: 29 20 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57  ) && SQLITE_OS_W
1660: 49 4e 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  IN.  { /* zName:
1670: 20 20 20 20 20 2a 2f 20 22 64 61 74 61 5f 73 74       */ "data_st
1680: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 22 2c 0a  ore_directory",.
1690: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
16a0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 44 41 54    */ PragTyp_DAT
16b0: 41 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f 52  A_STORE_DIRECTOR
16c0: 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  Y,.    /* ePragF
16d0: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
16e0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
16f0: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
1700: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1710: 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47  OMIT_SCHEMA_PRAG
1720: 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  MAS).  { /* zNam
1730: 65 3a 20 20 20 20 20 2a 2f 20 22 64 61 74 61 62  e:     */ "datab
1740: 61 73 65 5f 6c 69 73 74 22 2c 0a 20 20 20 20 2f  ase_list",.    /
1750: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
1760: 50 72 61 67 54 79 70 5f 44 41 54 41 42 41 53 45  PragTyp_DATABASE
1770: 5f 4c 49 53 54 2c 0a 20 20 20 20 2f 2a 20 65 50  _LIST,.    /* eP
1780: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67  ragFlag: */ Prag
1790: 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c  Flag_NeedSchema,
17a0: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
17b0: 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69     */ 0 },.#endi
17c0: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
17d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
17e0: 5f 50 52 41 47 4d 41 53 29 20 26 26 20 21 64 65  _PRAGMAS) && !de
17f0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
1800: 54 5f 44 45 50 52 45 43 41 54 45 44 29 0a 20 20  T_DEPRECATED).  
1810: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
1820: 2a 2f 20 22 64 65 66 61 75 6c 74 5f 63 61 63 68  */ "default_cach
1830: 65 5f 73 69 7a 65 22 2c 0a 20 20 20 20 2f 2a 20  e_size",.    /* 
1840: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
1850: 61 67 54 79 70 5f 44 45 46 41 55 4c 54 5f 43 41  agTyp_DEFAULT_CA
1860: 43 48 45 5f 53 49 5a 45 2c 0a 20 20 20 20 2f 2a  CHE_SIZE,.    /*
1870: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50   ePragFlag: */ P
1880: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
1890: 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a  ma,.    /* iArg:
18a0: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
18b0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
18c0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  d(SQLITE_OMIT_FL
18d0: 41 47 5f 50 52 41 47 4d 41 53 29 0a 23 69 66 20  AG_PRAGMAS).#if 
18e0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
18f0: 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
1900: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
1910: 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
1920: 52 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  R).  { /* zName:
1930: 20 20 20 20 20 2a 2f 20 22 64 65 66 65 72 5f 66       */ "defer_f
1940: 6f 72 65 69 67 6e 5f 6b 65 79 73 22 2c 0a 20 20  oreign_keys",.  
1950: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
1960: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
1970: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
1980: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
1990: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
19a0: 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 7d 2c  LITE_DeferFKs },
19b0: 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23  .#endif.#endif.#
19c0: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
19d0: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
19e0: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
19f0: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 65 6d 70 74  me:     */ "empt
1a00: 79 5f 72 65 73 75 6c 74 5f 63 61 6c 6c 62 61 63  y_result_callbac
1a10: 6b 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ks",.    /* ePra
1a20: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
1a30: 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65  p_FLAG,.    /* e
1a40: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
1a50: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
1a60: 20 20 2a 2f 20 53 51 4c 49 54 45 5f 4e 75 6c 6c    */ SQLITE_Null
1a70: 43 61 6c 6c 62 61 63 6b 20 7d 2c 0a 23 65 6e 64  Callback },.#end
1a80: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
1a90: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31  SQLITE_OMIT_UTF1
1aa0: 36 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  6).  { /* zName:
1ab0: 20 20 20 20 20 2a 2f 20 22 65 6e 63 6f 64 69 6e       */ "encodin
1ac0: 67 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  g",.    /* ePrag
1ad0: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
1ae0: 5f 45 4e 43 4f 44 49 4e 47 2c 0a 20 20 20 20 2f  _ENCODING,.    /
1af0: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
1b00: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
1b10: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
1b20: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
1b30: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52  (SQLITE_OMIT_FOR
1b40: 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65  EIGN_KEY) && !de
1b50: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
1b60: 54 5f 54 52 49 47 47 45 52 29 0a 20 20 7b 20 2f  T_TRIGGER).  { /
1b70: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
1b80: 22 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68 65  "foreign_key_che
1b90: 63 6b 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ck",.    /* ePra
1ba0: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
1bb0: 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 43 48  p_FOREIGN_KEY_CH
1bc0: 45 43 4b 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ECK,.    /* ePra
1bd0: 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c  gFlag: */ PragFl
1be0: 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20  ag_NeedSchema,. 
1bf0: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
1c00: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
1c10: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1c20: 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
1c30: 5f 4b 45 59 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  _KEY).  { /* zNa
1c40: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66 6f 72 65  me:     */ "fore
1c50: 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 22 2c 0a 20  ign_key_list",. 
1c60: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
1c70: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4f 52 45   */ PragTyp_FORE
1c80: 49 47 4e 5f 4b 45 59 5f 4c 49 53 54 2c 0a 20 20  IGN_KEY_LIST,.  
1c90: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
1ca0: 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64  */ PragFlag_Need
1cb0: 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69  Schema,.    /* i
1cc0: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
1cd0: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ,.#endif.#if !de
1ce0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
1cf0: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a  T_FLAG_PRAGMAS).
1d00: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1d10: 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
1d20: 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65  _KEY) && !define
1d30: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  d(SQLITE_OMIT_TR
1d40: 49 47 47 45 52 29 0a 20 20 7b 20 2f 2a 20 7a 4e  IGGER).  { /* zN
1d50: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66 6f 72  ame:     */ "for
1d60: 65 69 67 6e 5f 6b 65 79 73 22 2c 0a 20 20 20 20  eign_keys",.    
1d70: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
1d80: 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20   PragTyp_FLAG,. 
1d90: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
1da0: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
1db0: 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49  rg:      */ SQLI
1dc0: 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20 7d  TE_ForeignKeys }
1dd0: 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  ,.#endif.#endif.
1de0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1df0: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
1e00: 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 29  VERSION_PRAGMAS)
1e10: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
1e20: 20 20 20 2a 2f 20 22 66 72 65 65 6c 69 73 74 5f     */ "freelist_
1e30: 63 6f 75 6e 74 22 2c 0a 20 20 20 20 2f 2a 20 65  count",.    /* e
1e40: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
1e50: 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55  gTyp_HEADER_VALU
1e60: 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  E,.    /* ePragF
1e70: 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67  lag: */ PragFlag
1e80: 5f 52 65 61 64 4f 6e 6c 79 2c 0a 20 20 20 20 2f  _ReadOnly,.    /
1e90: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
1ea0: 42 54 52 45 45 5f 46 52 45 45 5f 50 41 47 45 5f  BTREE_FREE_PAGE_
1eb0: 43 4f 55 4e 54 20 7d 2c 0a 23 65 6e 64 69 66 0a  COUNT },.#endif.
1ec0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1ed0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52  ITE_OMIT_FLAG_PR
1ee0: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
1ef0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66 75 6c  ame:     */ "ful
1f00: 6c 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22 2c  l_column_names",
1f10: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
1f20: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
1f30: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
1f40: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1f50: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1f60: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e   SQLITE_FullColN
1f70: 61 6d 65 73 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a  ames },.  { /* z
1f80: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66 75  Name:     */ "fu
1f90: 6c 6c 66 73 79 6e 63 22 2c 0a 20 20 20 20 2f 2a  llfsync",.    /*
1fa0: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
1fb0: 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20  ragTyp_FLAG,.   
1fc0: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
1fd0: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
1fe0: 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45  :      */ SQLITE
1ff0: 5f 46 75 6c 6c 46 53 79 6e 63 20 7d 2c 0a 23 65  _FullFSync },.#e
2000: 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
2010: 28 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45  (SQLITE_HAS_CODE
2020: 43 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  C).  { /* zName:
2030: 20 20 20 20 20 2a 2f 20 22 68 65 78 6b 65 79 22       */ "hexkey"
2040: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
2050: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 48  p:  */ PragTyp_H
2060: 45 58 4b 45 59 2c 0a 20 20 20 20 2f 2a 20 65 50  EXKEY,.    /* eP
2070: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
2080: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2090: 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20   */ 0 },.  { /* 
20a0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 68  zName:     */ "h
20b0: 65 78 72 65 6b 65 79 22 2c 0a 20 20 20 20 2f 2a  exrekey",.    /*
20c0: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
20d0: 72 61 67 54 79 70 5f 48 45 58 4b 45 59 2c 0a 20  ragTyp_HEXKEY,. 
20e0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
20f0: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
2100: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
2110: 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66  .#endif.#if !def
2120: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
2130: 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 23  _FLAG_PRAGMAS).#
2140: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2150: 54 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 29 0a 20  TE_OMIT_CHECK). 
2160: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
2170: 20 2a 2f 20 22 69 67 6e 6f 72 65 5f 63 68 65 63   */ "ignore_chec
2180: 6b 5f 63 6f 6e 73 74 72 61 69 6e 74 73 22 2c 0a  k_constraints",.
2190: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
21a0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
21b0: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
21c0: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
21d0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
21e0: 53 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65  SQLITE_IgnoreChe
21f0: 63 6b 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65  cks },.#endif.#e
2200: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
2210: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  d(SQLITE_OMIT_AU
2220: 54 4f 56 41 43 55 55 4d 29 0a 20 20 7b 20 2f 2a  TOVACUUM).  { /*
2230: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
2240: 69 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75  incremental_vacu
2250: 75 6d 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  um",.    /* ePra
2260: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
2270: 70 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f 56 41  p_INCREMENTAL_VA
2280: 43 55 55 4d 2c 0a 20 20 20 20 2f 2a 20 65 50 72  CUUM,.    /* ePr
2290: 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46  agFlag: */ PragF
22a0: 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a  lag_NeedSchema,.
22b0: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
22c0: 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66    */ 0 },.#endif
22d0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
22e0: 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41  LITE_OMIT_SCHEMA
22f0: 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a  _PRAGMAS).  { /*
2300: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
2310: 69 6e 64 65 78 5f 69 6e 66 6f 22 2c 0a 20 20 20  index_info",.   
2320: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
2330: 2f 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f  / PragTyp_INDEX_
2340: 49 4e 46 4f 2c 0a 20 20 20 20 2f 2a 20 65 50 72  INFO,.    /* ePr
2350: 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46  agFlag: */ PragF
2360: 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a  lag_NeedSchema,.
2370: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
2380: 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a    */ 0 },.  { /*
2390: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
23a0: 69 6e 64 65 78 5f 6c 69 73 74 22 2c 0a 20 20 20  index_list",.   
23b0: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
23c0: 2f 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f  / PragTyp_INDEX_
23d0: 4c 49 53 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72  LIST,.    /* ePr
23e0: 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46  agFlag: */ PragF
23f0: 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a  lag_NeedSchema,.
2400: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
2410: 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66    */ 0 },.#endif
2420: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
2430: 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52  LITE_OMIT_INTEGR
2440: 49 54 59 5f 43 48 45 43 4b 29 0a 20 20 7b 20 2f  ITY_CHECK).  { /
2450: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
2460: 22 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b  "integrity_check
2470: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
2480: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
2490: 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 2c  INTEGRITY_CHECK,
24a0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
24b0: 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e  g: */ PragFlag_N
24c0: 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f  eedSchema,.    /
24d0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
24e0: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
24f0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2500: 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
2510: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
2520: 3a 20 20 20 20 20 2a 2f 20 22 6a 6f 75 72 6e 61  :     */ "journa
2530: 6c 5f 6d 6f 64 65 22 2c 0a 20 20 20 20 2f 2a 20  l_mode",.    /* 
2540: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
2550: 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f 4d 4f  agTyp_JOURNAL_MO
2560: 44 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  DE,.    /* ePrag
2570: 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61  Flag: */ PragFla
2580: 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20  g_NeedSchema,.  
2590: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
25a0: 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a  */ 0 },.  { /* z
25b0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6a 6f  Name:     */ "jo
25c0: 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74  urnal_size_limit
25d0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
25e0: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
25f0: 4a 4f 55 52 4e 41 4c 5f 53 49 5a 45 5f 4c 49 4d  JOURNAL_SIZE_LIM
2600: 49 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  IT,.    /* ePrag
2610: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
2620: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
2630: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
2640: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2650: 48 41 53 5f 43 4f 44 45 43 29 0a 20 20 7b 20 2f  HAS_CODEC).  { /
2660: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
2670: 22 6b 65 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50  "key",.    /* eP
2680: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
2690: 54 79 70 5f 4b 45 59 2c 0a 20 20 20 20 2f 2a 20  Typ_KEY,.    /* 
26a0: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
26b0: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
26c0: 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69     */ 0 },.#endi
26d0: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
26e0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f  QLITE_OMIT_FLAG_
26f0: 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20  PRAGMAS).  { /* 
2700: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c  zName:     */ "l
2710: 65 67 61 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61  egacy_file_forma
2720: 74 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  t",.    /* ePrag
2730: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
2740: 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50  _FLAG,.    /* eP
2750: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
2760: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2770: 20 2a 2f 20 53 51 4c 49 54 45 5f 4c 65 67 61 63   */ SQLITE_Legac
2780: 79 46 69 6c 65 46 6d 74 20 7d 2c 0a 23 65 6e 64  yFileFmt },.#end
2790: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
27a0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
27b0: 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20 53 51  R_PRAGMAS) && SQ
27c0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b  LITE_ENABLE_LOCK
27d0: 49 4e 47 5f 53 54 59 4c 45 0a 20 20 7b 20 2f 2a  ING_STYLE.  { /*
27e0: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
27f0: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 22  lock_proxy_file"
2800: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
2810: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 4c  p:  */ PragTyp_L
2820: 4f 43 4b 5f 50 52 4f 58 59 5f 46 49 4c 45 2c 0a  OCK_PROXY_FILE,.
2830: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
2840: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
2850: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
2860: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66  ,.#endif.#if def
2870: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
2880: 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  G) || defined(SQ
2890: 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 7b 20 2f  LITE_TEST).  { /
28a0: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
28b0: 22 6c 6f 63 6b 5f 73 74 61 74 75 73 22 2c 0a 20  "lock_status",. 
28c0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
28d0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b   */ PragTyp_LOCK
28e0: 5f 53 54 41 54 55 53 2c 0a 20 20 20 20 2f 2a 20  _STATUS,.    /* 
28f0: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
2900: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
2910: 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69     */ 0 },.#endi
2920: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
2930: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
2940: 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a  _PRAGMAS).  { /*
2950: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
2960: 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c 0a 20  locking_mode",. 
2970: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2980: 20 2a 2f 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b   */ PragTyp_LOCK
2990: 49 4e 47 5f 4d 4f 44 45 2c 0a 20 20 20 20 2f 2a  ING_MODE,.    /*
29a0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
29b0: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
29c0: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20      */ 0 },.  { 
29d0: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
29e0: 20 22 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74   "max_page_count
29f0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
2a00: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
2a10: 50 41 47 45 5f 43 4f 55 4e 54 2c 0a 20 20 20 20  PAGE_COUNT,.    
2a20: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
2a30: 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63   PragFlag_NeedSc
2a40: 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72  hema,.    /* iAr
2a50: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
2a60: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
2a70: 20 20 2a 2f 20 22 6d 6d 61 70 5f 73 69 7a 65 22    */ "mmap_size"
2a80: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
2a90: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 4d  p:  */ PragTyp_M
2aa0: 4d 41 50 5f 53 49 5a 45 2c 0a 20 20 20 20 2f 2a  MAP_SIZE,.    /*
2ab0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
2ac0: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
2ad0: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20      */ 0 },.  { 
2ae0: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
2af0: 20 22 70 61 67 65 5f 63 6f 75 6e 74 22 2c 0a 20   "page_count",. 
2b00: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2b10: 20 2a 2f 20 50 72 61 67 54 79 70 5f 50 41 47 45   */ PragTyp_PAGE
2b20: 5f 43 4f 55 4e 54 2c 0a 20 20 20 20 2f 2a 20 65  _COUNT,.    /* e
2b30: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61  PragFlag: */ Pra
2b40: 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61  gFlag_NeedSchema
2b50: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
2b60: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20      */ 0 },.  { 
2b70: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
2b80: 20 22 70 61 67 65 5f 73 69 7a 65 22 2c 0a 20 20   "page_size",.  
2b90: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
2ba0: 2a 2f 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f  */ PragTyp_PAGE_
2bb0: 53 49 5a 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72  SIZE,.    /* ePr
2bc0: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
2bd0: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2be0: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
2bf0: 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  if defined(SQLIT
2c00: 45 5f 44 45 42 55 47 29 0a 20 20 7b 20 2f 2a 20  E_DEBUG).  { /* 
2c10: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 70  zName:     */ "p
2c20: 61 72 73 65 72 5f 74 72 61 63 65 22 2c 0a 20 20  arser_trace",.  
2c30: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
2c40: 2a 2f 20 50 72 61 67 54 79 70 5f 50 41 52 53 45  */ PragTyp_PARSE
2c50: 52 5f 54 52 41 43 45 2c 0a 20 20 20 20 2f 2a 20  R_TRACE,.    /* 
2c60: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
2c70: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
2c80: 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69     */ 0 },.#endi
2c90: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
2ca0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f  QLITE_OMIT_FLAG_
2cb0: 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20  PRAGMAS).  { /* 
2cc0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 71  zName:     */ "q
2cd0: 75 65 72 79 5f 6f 6e 6c 79 22 2c 0a 20 20 20 20  uery_only",.    
2ce0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2cf0: 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20   PragTyp_FLAG,. 
2d00: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
2d10: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
2d20: 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49  rg:      */ SQLI
2d30: 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20 7d 2c 0a  TE_QueryOnly },.
2d40: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
2d50: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2d60: 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 29  INTEGRITY_CHECK)
2d70: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
2d80: 20 20 20 2a 2f 20 22 71 75 69 63 6b 5f 63 68 65     */ "quick_che
2d90: 63 6b 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ck",.    /* ePra
2da0: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
2db0: 70 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  p_INTEGRITY_CHEC
2dc0: 4b 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  K,.    /* ePragF
2dd0: 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67  lag: */ PragFlag
2de0: 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20  _NeedSchema,.   
2df0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
2e00: 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  / 0 },.#endif.#i
2e10: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2e20: 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47  E_OMIT_FLAG_PRAG
2e30: 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  MAS).  { /* zNam
2e40: 65 3a 20 20 20 20 20 2a 2f 20 22 72 65 61 64 5f  e:     */ "read_
2e50: 75 6e 63 6f 6d 6d 69 74 74 65 64 22 2c 0a 20 20  uncommitted",.  
2e60: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
2e70: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
2e80: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
2e90: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
2ea0: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
2eb0: 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69  LITE_ReadUncommi
2ec0: 74 74 65 64 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a  tted },.  { /* z
2ed0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 72 65  Name:     */ "re
2ee0: 63 75 72 73 69 76 65 5f 74 72 69 67 67 65 72 73  cursive_triggers
2ef0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
2f00: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
2f10: 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72  FLAG,.    /* ePr
2f20: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
2f30: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2f40: 2a 2f 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69  */ SQLITE_RecTri
2f50: 67 67 65 72 73 20 7d 2c 0a 23 65 6e 64 69 66 0a  ggers },.#endif.
2f60: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
2f70: 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 0a 20 20  TE_HAS_CODEC).  
2f80: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
2f90: 2a 2f 20 22 72 65 6b 65 79 22 2c 0a 20 20 20 20  */ "rekey",.    
2fa0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2fb0: 20 50 72 61 67 54 79 70 5f 52 45 4b 45 59 2c 0a   PragTyp_REKEY,.
2fc0: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
2fd0: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
2fe0: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
2ff0: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ,.#endif.#if !de
3000: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
3010: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a  T_FLAG_PRAGMAS).
3020: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
3030: 20 20 2a 2f 20 22 72 65 76 65 72 73 65 5f 75 6e    */ "reverse_un
3040: 6f 72 64 65 72 65 64 5f 73 65 6c 65 63 74 73 22  ordered_selects"
3050: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
3060: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46  p:  */ PragTyp_F
3070: 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  LAG,.    /* ePra
3080: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
3090: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
30a0: 2f 20 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65  / SQLITE_Reverse
30b0: 4f 72 64 65 72 20 7d 2c 0a 23 65 6e 64 69 66 0a  Order },.#endif.
30c0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
30d0: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
30e0: 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 29  VERSION_PRAGMAS)
30f0: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
3100: 20 20 20 2a 2f 20 22 73 63 68 65 6d 61 5f 76 65     */ "schema_ve
3110: 72 73 69 6f 6e 22 2c 0a 20 20 20 20 2f 2a 20 65  rsion",.    /* e
3120: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
3130: 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55  gTyp_HEADER_VALU
3140: 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  E,.    /* ePragF
3150: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
3160: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
3170: 42 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52  BTREE_SCHEMA_VER
3180: 53 49 4f 4e 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  SION },.#endif.#
3190: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
31a0: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
31b0: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
31c0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 73 65 63  ame:     */ "sec
31d0: 75 72 65 5f 64 65 6c 65 74 65 22 2c 0a 20 20 20  ure_delete",.   
31e0: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
31f0: 2f 20 50 72 61 67 54 79 70 5f 53 45 43 55 52 45  / PragTyp_SECURE
3200: 5f 44 45 4c 45 54 45 2c 0a 20 20 20 20 2f 2a 20  _DELETE,.    /* 
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 73  zName:     */ "s
3280: 68 6f 72 74 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  hort_column_name
3290: 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  s",.    /* ePrag
32a0: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
32b0: 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50  _FLAG,.    /* eP
32c0: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
32d0: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
32e0: 20 2a 2f 20 53 51 4c 49 54 45 5f 53 68 6f 72 74   */ SQLITE_Short
32f0: 43 6f 6c 4e 61 6d 65 73 20 7d 2c 0a 23 65 6e 64  ColNames },.#end
3300: 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  if.  { /* zName:
3310: 20 20 20 20 20 2a 2f 20 22 73 68 72 69 6e 6b 5f       */ "shrink_
3320: 6d 65 6d 6f 72 79 22 2c 0a 20 20 20 20 2f 2a 20  memory",.    /* 
3330: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
3340: 61 67 54 79 70 5f 53 48 52 49 4e 4b 5f 4d 45 4d  agTyp_SHRINK_MEM
3350: 4f 52 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ORY,.    /* ePra
3360: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
3370: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
3380: 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e  / 0 },.  { /* zN
3390: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 73 6f 66  ame:     */ "sof
33a0: 74 5f 68 65 61 70 5f 6c 69 6d 69 74 22 2c 0a 20  t_heap_limit",. 
33b0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
33c0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 53 4f 46 54   */ PragTyp_SOFT
33d0: 5f 48 45 41 50 5f 4c 49 4d 49 54 2c 0a 20 20 20  _HEAP_LIMIT,.   
33e0: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
33f0: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
3400: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
3410: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
3420: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
3430: 47 4d 41 53 29 0a 23 69 66 20 64 65 66 69 6e 65  GMAS).#if define
3440: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a  d(SQLITE_DEBUG).
3450: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
3460: 20 20 2a 2f 20 22 73 71 6c 5f 74 72 61 63 65 22    */ "sql_trace"
3470: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
3480: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46  p:  */ PragTyp_F
3490: 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  LAG,.    /* ePra
34a0: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
34b0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
34c0: 2f 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63  / SQLITE_SqlTrac
34d0: 65 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64  e },.#endif.#end
34e0: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
34f0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
3500: 4d 41 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20  MA_PRAGMAS).  { 
3510: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
3520: 20 22 73 74 61 74 73 22 2c 0a 20 20 20 20 2f 2a   "stats",.    /*
3530: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
3540: 72 61 67 54 79 70 5f 53 54 41 54 53 2c 0a 20 20  ragTyp_STATS,.  
3550: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
3560: 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64  */ PragFlag_Need
3570: 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69  Schema,.    /* i
3580: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
3590: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ,.#endif.#if !de
35a0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
35b0: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29  T_PAGER_PRAGMAS)
35c0: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
35d0: 20 20 20 2a 2f 20 22 73 79 6e 63 68 72 6f 6e 6f     */ "synchrono
35e0: 75 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  us",.    /* ePra
35f0: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
3600: 70 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 2c 0a 20  p_SYNCHRONOUS,. 
3610: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
3620: 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65   */ PragFlag_Nee
3630: 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20  dSchema,.    /* 
3640: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
3650: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
3660: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
3670: 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d 41  IT_SCHEMA_PRAGMA
3680: 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  S).  { /* zName:
3690: 20 20 20 20 20 2a 2f 20 22 74 61 62 6c 65 5f 69       */ "table_i
36a0: 6e 66 6f 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  nfo",.    /* ePr
36b0: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
36c0: 79 70 5f 54 41 42 4c 45 5f 49 4e 46 4f 2c 0a 20  yp_TABLE_INFO,. 
36d0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
36e0: 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65   */ PragFlag_Nee
36f0: 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20  dSchema,.    /* 
3700: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
3710: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
3720: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
3730: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
3740: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
3750: 20 20 20 20 2a 2f 20 22 74 65 6d 70 5f 73 74 6f      */ "temp_sto
3760: 72 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  re",.    /* ePra
3770: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
3780: 70 5f 54 45 4d 50 5f 53 54 4f 52 45 2c 0a 20 20  p_TEMP_STORE,.  
3790: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
37a0: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
37b0: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
37c0: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
37d0: 20 20 2a 2f 20 22 74 65 6d 70 5f 73 74 6f 72 65    */ "temp_store
37e0: 5f 64 69 72 65 63 74 6f 72 79 22 2c 0a 20 20 20  _directory",.   
37f0: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
3800: 2f 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f 53  / PragTyp_TEMP_S
3810: 54 4f 52 45 5f 44 49 52 45 43 54 4f 52 59 2c 0a  TORE_DIRECTORY,.
3820: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
3830: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
3840: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
3850: 2c 0a 23 65 6e 64 69 66 0a 20 20 7b 20 2f 2a 20  ,.#endif.  { /* 
3860: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 74  zName:     */ "t
3870: 68 72 65 61 64 73 22 2c 0a 20 20 20 20 2f 2a 20  hreads",.    /* 
3880: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
3890: 61 67 54 79 70 5f 54 48 52 45 41 44 53 2c 0a 20  agTyp_THREADS,. 
38a0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
38b0: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
38c0: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
38d0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
38e0: 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41  LITE_OMIT_SCHEMA
38f0: 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53  _VERSION_PRAGMAS
3900: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
3910: 20 20 20 20 2a 2f 20 22 75 73 65 72 5f 76 65 72      */ "user_ver
3920: 73 69 6f 6e 22 2c 0a 20 20 20 20 2f 2a 20 65 50  sion",.    /* eP
3930: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
3940: 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55 45  Typ_HEADER_VALUE
3950: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
3960: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
3970: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 42   iArg:      */ B
3980: 54 52 45 45 5f 55 53 45 52 5f 56 45 52 53 49 4f  TREE_USER_VERSIO
3990: 4e 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  N },.#endif.#if 
39a0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
39b0: 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41  OMIT_FLAG_PRAGMA
39c0: 53 29 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  S).#if defined(S
39d0: 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20 7b  QLITE_DEBUG).  {
39e0: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
39f0: 2f 20 22 76 64 62 65 5f 61 64 64 6f 70 74 72 61  / "vdbe_addoptra
3a00: 63 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ce",.    /* ePra
3a10: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
3a20: 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65  p_FLAG,.    /* e
3a30: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
3a40: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
3a50: 20 20 2a 2f 20 53 51 4c 49 54 45 5f 56 64 62 65    */ SQLITE_Vdbe
3a60: 41 64 64 6f 70 54 72 61 63 65 20 7d 2c 0a 20 20  AddopTrace },.  
3a70: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
3a80: 2a 2f 20 22 76 64 62 65 5f 64 65 62 75 67 22 2c  */ "vdbe_debug",
3a90: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
3aa0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
3ab0: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
3ac0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
3ad0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
3ae0: 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65   SQLITE_SqlTrace
3af0: 7c 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74  |SQLITE_VdbeList
3b00: 69 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62 65 54  ing|SQLITE_VdbeT
3b10: 72 61 63 65 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a  race },.  { /* z
3b20: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76 64  Name:     */ "vd
3b30: 62 65 5f 65 71 70 22 2c 0a 20 20 20 20 2f 2a 20  be_eqp",.    /* 
3b40: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
3b50: 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20  agTyp_FLAG,.    
3b60: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
3b70: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
3b80: 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f        */ SQLITE_
3b90: 56 64 62 65 45 51 50 20 7d 2c 0a 20 20 7b 20 2f  VdbeEQP },.  { /
3ba0: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
3bb0: 22 76 64 62 65 5f 6c 69 73 74 69 6e 67 22 2c 0a  "vdbe_listing",.
3bc0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
3bd0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
3be0: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
3bf0: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
3c00: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
3c10: 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69  SQLITE_VdbeListi
3c20: 6e 67 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61  ng },.  { /* zNa
3c30: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76 64 62 65  me:     */ "vdbe
3c40: 5f 74 72 61 63 65 22 2c 0a 20 20 20 20 2f 2a 20  _trace",.    /* 
3c50: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
3c60: 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20  agTyp_FLAG,.    
3c70: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
3c80: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
3c90: 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f        */ SQLITE_
3ca0: 56 64 62 65 54 72 61 63 65 20 7d 2c 0a 23 65 6e  VdbeTrace },.#en
3cb0: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 21  dif.#endif.#if !
3cc0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
3cd0: 4d 49 54 5f 57 41 4c 29 0a 20 20 7b 20 2f 2a 20  MIT_WAL).  { /* 
3ce0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 77  zName:     */ "w
3cf0: 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e  al_autocheckpoin
3d00: 74 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  t",.    /* ePrag
3d10: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
3d20: 5f 57 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50 4f  _WAL_AUTOCHECKPO
3d30: 49 4e 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  INT,.    /* ePra
3d40: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
3d50: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
3d60: 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e  / 0 },.  { /* zN
3d70: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 77 61 6c  ame:     */ "wal
3d80: 5f 63 68 65 63 6b 70 6f 69 6e 74 22 2c 0a 20 20  _checkpoint",.  
3d90: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
3da0: 2a 2f 20 50 72 61 67 54 79 70 5f 57 41 4c 5f 43  */ PragTyp_WAL_C
3db0: 48 45 43 4b 50 4f 49 4e 54 2c 0a 20 20 20 20 2f  HECKPOINT,.    /
3dc0: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
3dd0: 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68  PragFlag_NeedSch
3de0: 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  ema,.    /* iArg
3df0: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
3e00: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
3e10: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
3e20: 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  LAG_PRAGMAS).  {
3e30: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
3e40: 2f 20 22 77 72 69 74 61 62 6c 65 5f 73 63 68 65  / "writable_sche
3e50: 6d 61 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ma",.    /* ePra
3e60: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
3e70: 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65  p_FLAG,.    /* e
3e80: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
3e90: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
3ea0: 20 20 2a 2f 20 53 51 4c 49 54 45 5f 57 72 69 74    */ SQLITE_Writ
3eb0: 65 53 63 68 65 6d 61 7c 53 51 4c 49 54 45 5f 52  eSchema|SQLITE_R
3ec0: 65 63 6f 76 65 72 79 4d 6f 64 65 20 7d 2c 0a 23  ecoveryMode },.#
3ed0: 65 6e 64 69 66 0a 7d 3b 0a 2f 2a 20 4e 75 6d 62  endif.};./* Numb
3ee0: 65 72 20 6f 66 20 70 72 61 67 6d 61 73 3a 20 35  er of pragmas: 5
3ef0: 37 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2c  7 on by default,
3f00: 20 37 30 20 74 6f 74 61 6c 2e 20 2a 2f 0a 2f 2a   70 total. */./*
3f10: 20 45 6e 64 20 6f 66 20 74 68 65 20 61 75 74 6f   End of the auto
3f20: 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61  matically genera
3f30: 74 65 64 20 70 72 61 67 6d 61 20 74 61 62 6c 65  ted pragma table
3f40: 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ..**************
3f50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3f60: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3f70: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3f80: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a  *************/..
3f90: 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  /*.** Interpret 
3fa0: 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67  the given string
3fb0: 20 61 73 20 61 20 73 61 66 65 74 79 20 6c 65 76   as a safety lev
3fc0: 65 6c 2e 20 20 52 65 74 75 72 6e 20 30 20 66 6f  el.  Return 0 fo
3fd0: 72 20 4f 46 46 2c 0a 2a 2a 20 31 20 66 6f 72 20  r OFF,.** 1 for 
3fe0: 4f 4e 20 6f 72 20 4e 4f 52 4d 41 4c 20 61 6e 64  ON or NORMAL and
3ff0: 20 32 20 66 6f 72 20 46 55 4c 4c 2e 20 20 52 65   2 for FULL.  Re
4000: 74 75 72 6e 20 31 20 66 6f 72 20 61 6e 20 65 6d  turn 1 for an em
4010: 70 74 79 20 6f 72 20 0a 2a 2a 20 75 6e 72 65 63  pty or .** unrec
4020: 6f 67 6e 69 7a 65 64 20 73 74 72 69 6e 67 20 61  ognized string a
4030: 72 67 75 6d 65 6e 74 2e 20 20 54 68 65 20 46 55  rgument.  The FU
4040: 4c 4c 20 6f 70 74 69 6f 6e 20 69 73 20 64 69 73  LL option is dis
4050: 61 6c 6c 6f 77 65 64 0a 2a 2a 20 69 66 20 74 68  allowed.** if th
4060: 65 20 6f 6d 69 74 46 75 6c 6c 20 70 61 72 61 6d  e omitFull param
4070: 65 74 65 72 20 69 74 20 31 2e 0a 2a 2a 0a 2a 2a  eter it 1..**.**
4080: 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 76   Note that the v
4090: 61 6c 75 65 73 20 72 65 74 75 72 6e 65 64 20 61  alues returned a
40a0: 72 65 20 6f 6e 65 20 6c 65 73 73 20 74 68 61 74  re one less that
40b0: 20 74 68 65 20 76 61 6c 75 65 73 20 74 68 61 74   the values that
40c0: 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20 70 61  .** should be pa
40d0: 73 73 65 64 20 69 6e 74 6f 20 73 71 6c 69 74 65  ssed into sqlite
40e0: 33 42 74 72 65 65 53 65 74 53 61 66 65 74 79 4c  3BtreeSetSafetyL
40f0: 65 76 65 6c 28 29 2e 20 20 54 68 65 20 69 73 20  evel().  The is 
4100: 64 6f 6e 65 0a 2a 2a 20 74 6f 20 73 75 70 70 6f  done.** to suppo
4110: 72 74 20 6c 65 67 61 63 79 20 53 51 4c 20 63 6f  rt legacy SQL co
4120: 64 65 2e 20 20 54 68 65 20 73 61 66 65 74 79 20  de.  The safety 
4130: 6c 65 76 65 6c 20 75 73 65 64 20 74 6f 20 62 65  level used to be
4140: 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 61 6e 64 20   boolean.** and 
4150: 6f 6c 64 65 72 20 73 63 72 69 70 74 73 20 6d 61  older scripts ma
4160: 79 20 68 61 76 65 20 75 73 65 64 20 6e 75 6d 62  y have used numb
4170: 65 72 73 20 30 20 66 6f 72 20 4f 46 46 20 61 6e  ers 0 for OFF an
4180: 64 20 31 20 66 6f 72 20 4f 4e 2e 0a 2a 2f 0a 73  d 1 for ON..*/.s
4190: 74 61 74 69 63 20 75 38 20 67 65 74 53 61 66 65  tatic u8 getSafe
41a0: 74 79 4c 65 76 65 6c 28 63 6f 6e 73 74 20 63 68  tyLevel(const ch
41b0: 61 72 20 2a 7a 2c 20 69 6e 74 20 6f 6d 69 74 46  ar *z, int omitF
41c0: 75 6c 6c 2c 20 75 38 20 64 66 6c 74 29 7b 0a 20  ull, u8 dflt){. 
41d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
41e0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31              /* 1
41f0: 32 33 34 35 36 37 38 39 20 31 32 33 34 35 36 37  23456789 1234567
4200: 38 39 20 2a 2f 0a 20 20 73 74 61 74 69 63 20 63  89 */.  static c
4210: 6f 6e 73 74 20 63 68 61 72 20 7a 54 65 78 74 5b  onst char zText[
4220: 5d 20 3d 20 22 6f 6e 6f 66 66 61 6c 73 65 79 65  ] = "onoffalseye
4230: 73 74 72 75 65 66 75 6c 6c 22 3b 0a 20 20 73 74  struefull";.  st
4240: 61 74 69 63 20 63 6f 6e 73 74 20 75 38 20 69 4f  atic const u8 iO
4250: 66 66 73 65 74 5b 5d 20 3d 20 7b 30 2c 20 31 2c  ffset[] = {0, 1,
4260: 20 32 2c 20 34 2c 20 39 2c 20 31 32 2c 20 31 36   2, 4, 9, 12, 16
4270: 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  };.  static cons
4280: 74 20 75 38 20 69 4c 65 6e 67 74 68 5b 5d 20 3d  t u8 iLength[] =
4290: 20 7b 32 2c 20 32 2c 20 33 2c 20 35 2c 20 33 2c   {2, 2, 3, 5, 3,
42a0: 20 34 2c 20 34 7d 3b 0a 20 20 73 74 61 74 69 63   4, 4};.  static
42b0: 20 63 6f 6e 73 74 20 75 38 20 69 56 61 6c 75 65   const u8 iValue
42c0: 5b 5d 20 3d 20 20 7b 31 2c 20 30 2c 20 30 2c 20  [] =  {1, 0, 0, 
42d0: 30 2c 20 31 2c 20 31 2c 20 32 7d 3b 0a 20 20 69  0, 1, 1, 2};.  i
42e0: 6e 74 20 69 2c 20 6e 3b 0a 20 20 69 66 28 20 73  nt i, n;.  if( s
42f0: 71 6c 69 74 65 33 49 73 64 69 67 69 74 28 2a 7a  qlite3Isdigit(*z
4300: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  ) ){.    return 
4310: 28 75 38 29 73 71 6c 69 74 65 33 41 74 6f 69 28  (u8)sqlite3Atoi(
4320: 7a 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 73 71  z);.  }.  n = sq
4330: 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 29  lite3Strlen30(z)
4340: 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41  ;.  for(i=0; i<A
4350: 72 72 61 79 53 69 7a 65 28 69 4c 65 6e 67 74 68  rraySize(iLength
4360: 29 2d 6f 6d 69 74 46 75 6c 6c 3b 20 69 2b 2b 29  )-omitFull; i++)
4370: 7b 0a 20 20 20 20 69 66 28 20 69 4c 65 6e 67 74  {.    if( iLengt
4380: 68 5b 69 5d 3d 3d 6e 20 26 26 20 73 71 6c 69 74  h[i]==n && sqlit
4390: 65 33 53 74 72 4e 49 43 6d 70 28 26 7a 54 65 78  e3StrNICmp(&zTex
43a0: 74 5b 69 4f 66 66 73 65 74 5b 69 5d 5d 2c 7a 2c  t[iOffset[i]],z,
43b0: 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72  n)==0 ){.      r
43c0: 65 74 75 72 6e 20 69 56 61 6c 75 65 5b 69 5d 3b  eturn iValue[i];
43d0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74  .    }.  }.  ret
43e0: 75 72 6e 20 64 66 6c 74 3b 0a 7d 0a 0a 2f 2a 0a  urn dflt;.}../*.
43f0: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
4400: 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73   given string as
4410: 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65   a boolean value
4420: 2e 0a 2a 2f 0a 75 38 20 73 71 6c 69 74 65 33 47  ..*/.u8 sqlite3G
4430: 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20  etBoolean(const 
4440: 63 68 61 72 20 2a 7a 2c 20 75 38 20 64 66 6c 74  char *z, u8 dflt
4450: 29 7b 0a 20 20 72 65 74 75 72 6e 20 67 65 74 53  ){.  return getS
4460: 61 66 65 74 79 4c 65 76 65 6c 28 7a 2c 31 2c 64  afetyLevel(z,1,d
4470: 66 6c 74 29 21 3d 30 3b 0a 7d 0a 0a 2f 2a 20 54  flt)!=0;.}../* T
4480: 68 65 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  he sqlite3GetBoo
4490: 6c 65 61 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20  lean() function 
44a0: 69 73 20 75 73 65 64 20 62 79 20 6f 74 68 65 72  is used by other
44b0: 20 6d 6f 64 75 6c 65 73 20 62 75 74 20 74 68 65   modules but the
44c0: 0a 2a 2a 20 72 65 6d 61 69 6e 64 65 72 20 6f 66  .** remainder of
44d0: 20 74 68 69 73 20 66 69 6c 65 20 69 73 20 73 70   this file is sp
44e0: 65 63 69 66 69 63 20 74 6f 20 50 52 41 47 4d 41  ecific to PRAGMA
44f0: 20 70 72 6f 63 65 73 73 69 6e 67 2e 20 20 53 6f   processing.  So
4500: 20 6f 6d 69 74 0a 2a 2a 20 74 68 65 20 72 65 73   omit.** the res
4510: 74 20 6f 66 20 74 68 65 20 66 69 6c 65 20 69 66  t of the file if
4520: 20 50 52 41 47 4d 41 73 20 61 72 65 20 6f 6d 69   PRAGMAs are omi
4530: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75  tted from the bu
4540: 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ild..*/.#if !def
4550: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
4560: 5f 50 52 41 47 4d 41 29 0a 0a 2f 2a 0a 2a 2a 20  _PRAGMA)../*.** 
4570: 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69  Interpret the gi
4580: 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20  ven string as a 
4590: 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 76 61 6c  locking mode val
45a0: 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ue..*/.static in
45b0: 74 20 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f 64 65  t getLockingMode
45c0: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b  (const char *z){
45d0: 0a 20 20 69 66 28 20 7a 20 29 7b 0a 20 20 20 20  .  if( z ){.    
45e0: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
45f0: 72 49 43 6d 70 28 7a 2c 20 22 65 78 63 6c 75 73  rICmp(z, "exclus
4600: 69 76 65 22 29 20 29 20 72 65 74 75 72 6e 20 50  ive") ) return P
4610: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
4620: 5f 45 58 43 4c 55 53 49 56 45 3b 0a 20 20 20 20  _EXCLUSIVE;.    
4630: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
4640: 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 72 6d 61 6c  rICmp(z, "normal
4650: 22 29 20 29 20 72 65 74 75 72 6e 20 50 41 47 45  ") ) return PAGE
4660: 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f  R_LOCKINGMODE_NO
4670: 52 4d 41 4c 3b 0a 20 20 7d 0a 20 20 72 65 74 75  RMAL;.  }.  retu
4680: 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47  rn PAGER_LOCKING
4690: 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 7d 0a 0a 23  MODE_QUERY;.}..#
46a0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
46b0: 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 2f 2a  IT_AUTOVACUUM./*
46c0: 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
46d0: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61  e given string a
46e0: 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  s an auto-vacuum
46f0: 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a 2a 2a 0a   mode value..**.
4700: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4710: 20 73 74 72 69 6e 67 73 2c 20 22 6e 6f 6e 65 22   strings, "none"
4720: 2c 20 22 66 75 6c 6c 22 20 61 6e 64 20 22 69 6e  , "full" and "in
4730: 63 72 65 6d 65 6e 74 61 6c 22 20 61 72 65 20 0a  cremental" are .
4740: 2a 2a 20 61 63 63 65 70 74 61 62 6c 65 2c 20 61  ** acceptable, a
4750: 73 20 61 72 65 20 74 68 65 69 72 20 6e 75 6d 65  s are their nume
4760: 72 69 63 20 65 71 75 69 76 61 6c 65 6e 74 73 3a  ric equivalents:
4770: 20 30 2c 20 31 20 61 6e 64 20 32 20 72 65 73 70   0, 1 and 2 resp
4780: 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 73 74 61  ectively..*/.sta
4790: 74 69 63 20 69 6e 74 20 67 65 74 41 75 74 6f 56  tic int getAutoV
47a0: 61 63 75 75 6d 28 63 6f 6e 73 74 20 63 68 61 72  acuum(const char
47b0: 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20   *z){.  int i;. 
47c0: 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53   if( 0==sqlite3S
47d0: 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 6e 65 22  trICmp(z, "none"
47e0: 29 20 29 20 72 65 74 75 72 6e 20 42 54 52 45 45  ) ) return BTREE
47f0: 5f 41 55 54 4f 56 41 43 55 55 4d 5f 4e 4f 4e 45  _AUTOVACUUM_NONE
4800: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
4810: 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 66 75  e3StrICmp(z, "fu
4820: 6c 6c 22 29 20 29 20 72 65 74 75 72 6e 20 42 54  ll") ) return BT
4830: 52 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 46  REE_AUTOVACUUM_F
4840: 55 4c 4c 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  ULL;.  if( 0==sq
4850: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
4860: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 29 20 29  "incremental") )
4870: 20 72 65 74 75 72 6e 20 42 54 52 45 45 5f 41 55   return BTREE_AU
4880: 54 4f 56 41 43 55 55 4d 5f 49 4e 43 52 3b 0a 20  TOVACUUM_INCR;. 
4890: 20 69 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 69   i = sqlite3Atoi
48a0: 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 75  (z);.  return (u
48b0: 38 29 28 28 69 3e 3d 30 26 26 69 3c 3d 32 29 3f  8)((i>=0&&i<=2)?
48c0: 69 3a 30 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  i:0);.}.#endif /
48d0: 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  * ifndef SQLITE_
48e0: 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 20  OMIT_AUTOVACUUM 
48f0: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
4900: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
4910: 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  AGMAS./*.** Inte
4920: 72 70 72 65 74 20 74 68 65 20 67 69 76 65 6e 20  rpret the given 
4930: 73 74 72 69 6e 67 20 61 73 20 61 20 74 65 6d 70  string as a temp
4940: 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e 20 52 65   db location. Re
4950: 74 75 72 6e 20 31 20 66 6f 72 20 66 69 6c 65 0a  turn 1 for file.
4960: 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d 70 6f 72  ** backed tempor
4970: 61 72 79 20 64 61 74 61 62 61 73 65 73 2c 20 32  ary databases, 2
4980: 20 66 6f 72 20 74 68 65 20 52 65 64 2d 42 6c 61   for the Red-Bla
4990: 63 6b 20 74 72 65 65 20 69 6e 20 6d 65 6d 6f 72  ck tree in memor
49a0: 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 61 6e  y database.** an
49b0: 64 20 30 20 74 6f 20 75 73 65 20 74 68 65 20 63  d 0 to use the c
49c0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64 65 66 61  ompile-time defa
49d0: 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ult..*/.static i
49e0: 6e 74 20 67 65 74 54 65 6d 70 53 74 6f 72 65 28  nt getTempStore(
49f0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a  const char *z){.
4a00: 20 20 69 66 28 20 7a 5b 30 5d 3e 3d 27 30 27 20    if( z[0]>='0' 
4a10: 26 26 20 7a 5b 30 5d 3c 3d 27 32 27 20 29 7b 0a  && z[0]<='2' ){.
4a20: 20 20 20 20 72 65 74 75 72 6e 20 7a 5b 30 5d 20      return z[0] 
4a30: 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69  - '0';.  }else i
4a40: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
4a50: 70 28 7a 2c 20 22 66 69 6c 65 22 29 3d 3d 30 20  p(z, "file")==0 
4a60: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b  ){.    return 1;
4a70: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c  .  }else if( sql
4a80: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22  ite3StrICmp(z, "
4a90: 6d 65 6d 6f 72 79 22 29 3d 3d 30 20 29 7b 0a 20  memory")==0 ){. 
4aa0: 20 20 20 72 65 74 75 72 6e 20 32 3b 0a 20 20 7d     return 2;.  }
4ab0: 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75 72 6e  else{.    return
4ac0: 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66   0;.  }.}.#endif
4ad0: 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41 47 45 52   /* SQLITE_PAGER
4ae0: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66  _PRAGMAS */..#if
4af0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
4b00: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
4b10: 2a 0a 2a 2a 20 49 6e 76 61 6c 69 64 61 74 65 20  *.** Invalidate 
4b20: 74 65 6d 70 20 73 74 6f 72 61 67 65 2c 20 65 69  temp storage, ei
4b30: 74 68 65 72 20 77 68 65 6e 20 74 68 65 20 74 65  ther when the te
4b40: 6d 70 20 73 74 6f 72 61 67 65 20 69 73 20 63 68  mp storage is ch
4b50: 61 6e 67 65 64 0a 2a 2a 20 66 72 6f 6d 20 64 65  anged.** from de
4b60: 66 61 75 6c 74 2c 20 6f 72 20 77 68 65 6e 20 27  fault, or when '
4b70: 66 69 6c 65 27 20 61 6e 64 20 74 68 65 20 74 65  file' and the te
4b80: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
4b90: 72 79 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a  ry has changed.*
4ba0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 69 6e 76  /.static int inv
4bb0: 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61  alidateTempStora
4bc0: 67 65 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ge(Parse *pParse
4bd0: 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
4be0: 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20   = pParse->db;. 
4bf0: 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 31 5d 2e   if( db->aDb[1].
4c00: 70 42 74 21 3d 30 20 29 7b 0a 20 20 20 20 69 66  pBt!=0 ){.    if
4c10: 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  ( !db->autoCommi
4c20: 74 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65  t || sqlite3Btre
4c30: 65 49 73 49 6e 52 65 61 64 54 72 61 6e 73 28 64  eIsInReadTrans(d
4c40: 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 29 20 29  b->aDb[1].pBt) )
4c50: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 45  {.      sqlite3E
4c60: 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20  rrorMsg(pParse, 
4c70: 22 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61  "temporary stora
4c80: 67 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 68 61  ge cannot be cha
4c90: 6e 67 65 64 20 22 0a 20 20 20 20 20 20 20 20 22  nged ".        "
4ca0: 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72  from within a tr
4cb0: 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20 20  ansaction");.   
4cc0: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
4cd0: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20  _ERROR;.    }.  
4ce0: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
4cf0: 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70  ose(db->aDb[1].p
4d00: 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e 61 44 62  Bt);.    db->aDb
4d10: 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a 20 20 20  [1].pBt = 0;.   
4d20: 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
4d30: 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
4d40: 69 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a 20 20 72  ion(db);.  }.  r
4d50: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
4d60: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
4d70: 49 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  ITE_PAGER_PRAGMA
4d80: 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  S */..#ifndef SQ
4d90: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
4da0: 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 66  PRAGMAS./*.** If
4db0: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
4dc0: 73 65 20 69 73 20 6f 70 65 6e 2c 20 63 6c 6f 73  se is open, clos
4dd0: 65 20 69 74 20 61 6e 64 20 6d 61 72 6b 20 74 68  e it and mark th
4de0: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
4df0: 61 0a 2a 2a 20 61 73 20 6e 65 65 64 69 6e 67 20  a.** as needing 
4e00: 72 65 6c 6f 61 64 69 6e 67 2e 20 20 54 68 69 73  reloading.  This
4e10: 20 6d 75 73 74 20 62 65 20 64 6f 6e 65 20 77 68   must be done wh
4e20: 65 6e 20 75 73 69 6e 67 20 74 68 65 20 53 51 4c  en using the SQL
4e30: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 2a  ITE_TEMP_STORE.*
4e40: 2a 20 6f 72 20 44 45 46 41 55 4c 54 5f 54 45 4d  * or DEFAULT_TEM
4e50: 50 5f 53 54 4f 52 45 20 70 72 61 67 6d 61 73 2e  P_STORE pragmas.
4e60: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63  .*/.static int c
4e70: 68 61 6e 67 65 54 65 6d 70 53 74 6f 72 61 67 65  hangeTempStorage
4e80: 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
4e90: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 6f  const char *zSto
4ea0: 72 61 67 65 54 79 70 65 29 7b 0a 20 20 69 6e 74  rageType){.  int
4eb0: 20 74 73 20 3d 20 67 65 74 54 65 6d 70 53 74 6f   ts = getTempSto
4ec0: 72 65 28 7a 53 74 6f 72 61 67 65 54 79 70 65 29  re(zStorageType)
4ed0: 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20  ;.  sqlite3 *db 
4ee0: 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20 20  = pParse->db;.  
4ef0: 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f  if( db->temp_sto
4f00: 72 65 3d 3d 74 73 20 29 20 72 65 74 75 72 6e 20  re==ts ) return 
4f10: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69 66 28  SQLITE_OK;.  if(
4f20: 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53   invalidateTempS
4f30: 74 6f 72 61 67 65 28 20 70 50 61 72 73 65 20 29  torage( pParse )
4f40: 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b   != SQLITE_OK ){
4f50: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
4f60: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  TE_ERROR;.  }.  
4f70: 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20 3d  db->temp_store =
4f80: 20 28 75 38 29 74 73 3b 0a 20 20 72 65 74 75 72   (u8)ts;.  retur
4f90: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23  n SQLITE_OK;.}.#
4fa0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
4fb0: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f  PAGER_PRAGMAS */
4fc0: 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65  ../*.** Generate
4fd0: 20 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20   code to return 
4fe0: 61 20 73 69 6e 67 6c 65 20 69 6e 74 65 67 65 72  a single integer
4ff0: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69   value..*/.stati
5000: 63 20 76 6f 69 64 20 72 65 74 75 72 6e 53 69 6e  c void returnSin
5010: 67 6c 65 49 6e 74 28 50 61 72 73 65 20 2a 70 50  gleInt(Parse *pP
5020: 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72  arse, const char
5030: 20 2a 7a 4c 61 62 65 6c 2c 20 69 36 34 20 76 61   *zLabel, i64 va
5040: 6c 75 65 29 7b 0a 20 20 56 64 62 65 20 2a 76 20  lue){.  Vdbe *v 
5050: 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65  = sqlite3GetVdbe
5060: 28 70 50 61 72 73 65 29 3b 0a 20 20 69 6e 74 20  (pParse);.  int 
5070: 6d 65 6d 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e  mem = ++pParse->
5080: 6e 4d 65 6d 3b 0a 20 20 69 36 34 20 2a 70 49 36  nMem;.  i64 *pI6
5090: 34 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  4 = sqlite3DbMal
50a0: 6c 6f 63 52 61 77 28 70 50 61 72 73 65 2d 3e 64  locRaw(pParse->d
50b0: 62 2c 20 73 69 7a 65 6f 66 28 76 61 6c 75 65 29  b, sizeof(value)
50c0: 29 3b 0a 20 20 69 66 28 20 70 49 36 34 20 29 7b  );.  if( pI64 ){
50d0: 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 49 36 34  .    memcpy(pI64
50e0: 2c 20 26 76 61 6c 75 65 2c 20 73 69 7a 65 6f 66  , &value, sizeof
50f0: 28 76 61 6c 75 65 29 29 3b 0a 20 20 7d 0a 20 20  (value));.  }.  
5100: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
5110: 34 28 76 2c 20 4f 50 5f 49 6e 74 36 34 2c 20 30  4(v, OP_Int64, 0
5120: 2c 20 6d 65 6d 2c 20 30 2c 20 28 63 68 61 72 2a  , mem, 0, (char*
5130: 29 70 49 36 34 2c 20 50 34 5f 49 4e 54 36 34 29  )pI64, P4_INT64)
5140: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53  ;.  sqlite3VdbeS
5150: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
5160: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  .  sqlite3VdbeSe
5170: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
5180: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 61  OLNAME_NAME, zLa
5190: 62 65 6c 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  bel, SQLITE_STAT
51a0: 49 43 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  IC);.  sqlite3Vd
51b0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
51c0: 65 73 75 6c 74 52 6f 77 2c 20 6d 65 6d 2c 20 31  esultRow, mem, 1
51d0: 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 53 65 74  );.}.../*.** Set
51e0: 20 74 68 65 20 73 61 66 65 74 79 5f 6c 65 76 65   the safety_leve
51f0: 6c 20 61 6e 64 20 70 61 67 65 72 20 66 6c 61 67  l and pager flag
5200: 73 20 66 6f 72 20 70 61 67 65 72 20 69 44 62 2e  s for pager iDb.
5210: 20 20 4f 72 20 69 66 20 69 44 62 3c 30 0a 2a 2a    Or if iDb<0.**
5220: 20 73 65 74 20 74 68 65 73 65 20 76 61 6c 75 65   set these value
5230: 73 20 66 6f 72 20 61 6c 6c 20 70 61 67 65 72 73  s for all pagers
5240: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
5250: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
5260: 52 41 47 4d 41 53 0a 73 74 61 74 69 63 20 76 6f  RAGMAS.static vo
5270: 69 64 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c  id setAllPagerFl
5280: 61 67 73 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ags(sqlite3 *db)
5290: 7b 0a 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f  {.  if( db->auto
52a0: 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 44 62  Commit ){.    Db
52b0: 20 2a 70 44 62 20 3d 20 64 62 2d 3e 61 44 62 3b   *pDb = db->aDb;
52c0: 0a 20 20 20 20 69 6e 74 20 6e 20 3d 20 64 62 2d  .    int n = db-
52d0: 3e 6e 44 62 3b 0a 20 20 20 20 61 73 73 65 72 74  >nDb;.    assert
52e0: 28 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79  ( SQLITE_FullFSy
52f0: 6e 63 3d 3d 50 41 47 45 52 5f 46 55 4c 4c 46 53  nc==PAGER_FULLFS
5300: 59 4e 43 20 29 3b 0a 20 20 20 20 61 73 73 65 72  YNC );.    asser
5310: 74 28 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75  t( SQLITE_CkptFu
5320: 6c 6c 46 53 79 6e 63 3d 3d 50 41 47 45 52 5f 43  llFSync==PAGER_C
5330: 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 20 29 3b  KPT_FULLFSYNC );
5340: 0a 20 20 20 20 61 73 73 65 72 74 28 20 53 51 4c  .    assert( SQL
5350: 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 3d 3d  ITE_CacheSpill==
5360: 50 41 47 45 52 5f 43 41 43 48 45 53 50 49 4c 4c  PAGER_CACHESPILL
5370: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
5380: 28 50 41 47 45 52 5f 46 55 4c 4c 46 53 59 4e 43  (PAGER_FULLFSYNC
5390: 20 7c 20 50 41 47 45 52 5f 43 4b 50 54 5f 46 55   | PAGER_CKPT_FU
53a0: 4c 4c 46 53 59 4e 43 20 7c 20 50 41 47 45 52 5f  LLFSYNC | PAGER_
53b0: 43 41 43 48 45 53 50 49 4c 4c 29 0a 20 20 20 20  CACHESPILL).    
53c0: 20 20 20 20 20 20 20 20 20 3d 3d 20 20 50 41 47           ==  PAG
53d0: 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b 20 29 3b  ER_FLAGS_MASK );
53e0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70 44  .    assert( (pD
53f0: 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  b->safety_level 
5400: 26 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e  & PAGER_SYNCHRON
5410: 4f 55 53 5f 4d 41 53 4b 29 3d 3d 70 44 62 2d 3e  OUS_MASK)==pDb->
5420: 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 29 3b 0a  safety_level );.
5430: 20 20 20 20 77 68 69 6c 65 28 20 28 6e 2d 2d 29      while( (n--)
5440: 20 3e 20 30 20 29 7b 0a 20 20 20 20 20 20 69 66   > 0 ){.      if
5450: 28 20 70 44 62 2d 3e 70 42 74 20 29 7b 0a 20 20  ( pDb->pBt ){.  
5460: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
5470: 65 65 53 65 74 50 61 67 65 72 46 6c 61 67 73 28  eeSetPagerFlags(
5480: 70 44 62 2d 3e 70 42 74 2c 0a 20 20 20 20 20 20  pDb->pBt,.      
5490: 20 20 20 20 20 20 20 20 20 20 20 70 44 62 2d 3e             pDb->
54a0: 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 7c 20 28  safety_level | (
54b0: 64 62 2d 3e 66 6c 61 67 73 20 26 20 50 41 47 45  db->flags & PAGE
54c0: 52 5f 46 4c 41 47 53 5f 4d 41 53 4b 29 20 29 3b  R_FLAGS_MASK) );
54d0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
54e0: 44 62 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  Db++;.    }.  }.
54f0: 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  }.#else.# define
5500: 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61 67   setAllPagerFlag
5510: 73 28 58 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a  s(X)  /* no-op *
5520: 2f 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a  /.#endif.../*.**
5530: 20 52 65 74 75 72 6e 20 61 20 68 75 6d 61 6e 2d   Return a human-
5540: 72 65 61 64 61 62 6c 65 20 6e 61 6d 65 20 66 6f  readable name fo
5550: 72 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 72  r a constraint r
5560: 65 73 6f 6c 75 74 69 6f 6e 20 61 63 74 69 6f 6e  esolution action
5570: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
5580: 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
5590: 5f 4b 45 59 0a 73 74 61 74 69 63 20 63 6f 6e 73  _KEY.static cons
55a0: 74 20 63 68 61 72 20 2a 61 63 74 69 6f 6e 4e 61  t char *actionNa
55b0: 6d 65 28 75 38 20 61 63 74 69 6f 6e 29 7b 0a 20  me(u8 action){. 
55c0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
55d0: 6d 65 3b 0a 20 20 73 77 69 74 63 68 28 20 61 63  me;.  switch( ac
55e0: 74 69 6f 6e 20 29 7b 0a 20 20 20 20 63 61 73 65  tion ){.    case
55f0: 20 4f 45 5f 53 65 74 4e 75 6c 6c 3a 20 20 7a 4e   OE_SetNull:  zN
5600: 61 6d 65 20 3d 20 22 53 45 54 20 4e 55 4c 4c 22  ame = "SET NULL"
5610: 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ;        break;.
5620: 20 20 20 20 63 61 73 65 20 4f 45 5f 53 65 74 44      case OE_SetD
5630: 66 6c 74 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 53  flt:  zName = "S
5640: 45 54 20 44 45 46 41 55 4c 54 22 3b 20 20 20 20  ET DEFAULT";    
5650: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
5660: 20 4f 45 5f 43 61 73 63 61 64 65 3a 20 20 7a 4e   OE_Cascade:  zN
5670: 61 6d 65 20 3d 20 22 43 41 53 43 41 44 45 22 3b  ame = "CASCADE";
5680: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
5690: 20 20 20 20 63 61 73 65 20 4f 45 5f 52 65 73 74      case OE_Rest
56a0: 72 69 63 74 3a 20 7a 4e 61 6d 65 20 3d 20 22 52  rict: zName = "R
56b0: 45 53 54 52 49 43 54 22 3b 20 20 20 20 20 20 20  ESTRICT";       
56c0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61   break;.    defa
56d0: 75 6c 74 3a 20 20 20 20 20 20 20 20 20 20 7a 4e  ult:          zN
56e0: 61 6d 65 20 3d 20 22 4e 4f 20 41 43 54 49 4f 4e  ame = "NO ACTION
56f0: 22 3b 20 20 0a 20 20 20 20 20 20 20 20 20 20 20  ";  .           
5700: 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72             asser
5710: 74 28 20 61 63 74 69 6f 6e 3d 3d 4f 45 5f 4e 6f  t( action==OE_No
5720: 6e 65 20 29 3b 20 62 72 65 61 6b 3b 0a 20 20 7d  ne ); break;.  }
5730: 0a 20 20 72 65 74 75 72 6e 20 7a 4e 61 6d 65 3b  .  return zName;
5740: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  .}.#endif.../*.*
5750: 2a 20 50 61 72 61 6d 65 74 65 72 20 65 4d 6f 64  * Parameter eMod
5760: 65 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66  e must be one of
5770: 20 74 68 65 20 50 41 47 45 52 5f 4a 4f 55 52 4e   the PAGER_JOURN
5780: 41 4c 4d 4f 44 45 5f 58 58 58 20 63 6f 6e 73 74  ALMODE_XXX const
5790: 61 6e 74 73 0a 2a 2a 20 64 65 66 69 6e 65 64 20  ants.** defined 
57a0: 69 6e 20 70 61 67 65 72 2e 68 2e 20 54 68 69 73  in pager.h. This
57b0: 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
57c0: 73 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  s the associated
57d0: 20 6c 6f 77 65 72 63 61 73 65 0a 2a 2a 20 6a 6f   lowercase.** jo
57e0: 75 72 6e 61 6c 2d 6d 6f 64 65 20 6e 61 6d 65 2e  urnal-mode name.
57f0: 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  .*/.const char *
5800: 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f  sqlite3JournalMo
5810: 64 65 6e 61 6d 65 28 69 6e 74 20 65 4d 6f 64 65  dename(int eMode
5820: 29 7b 0a 20 20 73 74 61 74 69 63 20 63 68 61 72  ){.  static char
5830: 20 2a 20 63 6f 6e 73 74 20 61 7a 4d 6f 64 65 4e   * const azModeN
5840: 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 22 64  ame[] = {.    "d
5850: 65 6c 65 74 65 22 2c 20 22 70 65 72 73 69 73 74  elete", "persist
5860: 22 2c 20 22 6f 66 66 22 2c 20 22 74 72 75 6e 63  ", "off", "trunc
5870: 61 74 65 22 2c 20 22 6d 65 6d 6f 72 79 22 0a 23  ate", "memory".#
5880: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
5890: 49 54 5f 57 41 4c 0a 20 20 20 20 20 2c 20 22 77  IT_WAL.     , "w
58a0: 61 6c 22 0a 23 65 6e 64 69 66 0a 20 20 7d 3b 0a  al".#endif.  };.
58b0: 20 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f    assert( PAGER_
58c0: 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45  JOURNALMODE_DELE
58d0: 54 45 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  TE==0 );.  asser
58e0: 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  t( PAGER_JOURNAL
58f0: 4d 4f 44 45 5f 50 45 52 53 49 53 54 3d 3d 31 20  MODE_PERSIST==1 
5900: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47  );.  assert( PAG
5910: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f  ER_JOURNALMODE_O
5920: 46 46 3d 3d 32 20 29 3b 0a 20 20 61 73 73 65 72  FF==2 );.  asser
5930: 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  t( PAGER_JOURNAL
5940: 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 3d 3d 33  MODE_TRUNCATE==3
5950: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41   );.  assert( PA
5960: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
5970: 4d 45 4d 4f 52 59 3d 3d 34 20 29 3b 0a 20 20 61  MEMORY==4 );.  a
5980: 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55  ssert( PAGER_JOU
5990: 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 3d 3d 35 20  RNALMODE_WAL==5 
59a0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 65 4d 6f  );.  assert( eMo
59b0: 64 65 3e 3d 30 20 26 26 20 65 4d 6f 64 65 3c 3d  de>=0 && eMode<=
59c0: 41 72 72 61 79 53 69 7a 65 28 61 7a 4d 6f 64 65  ArraySize(azMode
59d0: 4e 61 6d 65 29 20 29 3b 0a 0a 20 20 69 66 28 20  Name) );..  if( 
59e0: 65 4d 6f 64 65 3d 3d 41 72 72 61 79 53 69 7a 65  eMode==ArraySize
59f0: 28 61 7a 4d 6f 64 65 4e 61 6d 65 29 20 29 20 72  (azModeName) ) r
5a00: 65 74 75 72 6e 20 30 3b 0a 20 20 72 65 74 75 72  eturn 0;.  retur
5a10: 6e 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b 65 4d 6f  n azModeName[eMo
5a20: 64 65 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  de];.}../*.** Pr
5a30: 6f 63 65 73 73 20 61 20 70 72 61 67 6d 61 20 73  ocess a pragma s
5a40: 74 61 74 65 6d 65 6e 74 2e 20 20 0a 2a 2a 0a 2a  tatement.  .**.*
5a50: 2a 20 50 72 61 67 6d 61 73 20 61 72 65 20 6f 66  * Pragmas are of
5a60: 20 74 68 69 73 20 66 6f 72 6d 3a 0a 2a 2a 0a 2a   this form:.**.*
5a70: 2a 20 20 20 20 20 20 50 52 41 47 4d 41 20 5b 64  *      PRAGMA [d
5a80: 61 74 61 62 61 73 65 2e 5d 69 64 20 5b 3d 20 76  atabase.]id [= v
5a90: 61 6c 75 65 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  alue].**.** The 
5aa0: 69 64 65 6e 74 69 66 69 65 72 20 6d 69 67 68 74  identifier might
5ab0: 20 61 6c 73 6f 20 62 65 20 61 20 73 74 72 69 6e   also be a strin
5ac0: 67 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69 73  g.  The value is
5ad0: 20 61 20 73 74 72 69 6e 67 2c 20 61 6e 64 0a 2a   a string, and.*
5ae0: 2a 20 69 64 65 6e 74 69 66 69 65 72 2c 20 6f 72  * identifier, or
5af0: 20 61 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 6d   a number.  If m
5b00: 69 6e 75 73 46 6c 61 67 20 69 73 20 74 72 75 65  inusFlag is true
5b10: 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65  , then the value
5b20: 20 69 73 0a 2a 2a 20 61 20 6e 75 6d 62 65 72 20   is.** a number 
5b30: 74 68 61 74 20 77 61 73 20 70 72 65 63 65 64 65  that was precede
5b40: 64 20 62 79 20 61 20 6d 69 6e 75 73 20 73 69 67  d by a minus sig
5b50: 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  n..**.** If the 
5b60: 6c 65 66 74 20 73 69 64 65 20 69 73 20 22 64 61  left side is "da
5b70: 74 61 62 61 73 65 2e 69 64 22 20 74 68 65 6e 20  tabase.id" then 
5b80: 70 49 64 31 20 69 73 20 74 68 65 20 64 61 74 61  pId1 is the data
5b90: 62 61 73 65 20 6e 61 6d 65 0a 2a 2a 20 61 6e 64  base name.** and
5ba0: 20 70 49 64 32 20 69 73 20 74 68 65 20 69 64 2e   pId2 is the id.
5bb0: 20 20 49 66 20 74 68 65 20 6c 65 66 74 20 73 69    If the left si
5bc0: 64 65 20 69 73 20 6a 75 73 74 20 22 69 64 22 20  de is just "id" 
5bd0: 74 68 65 6e 20 70 49 64 31 20 69 73 20 74 68 65  then pId1 is the
5be0: 0a 2a 2a 20 69 64 20 61 6e 64 20 70 49 64 32 20  .** id and pId2 
5bf0: 69 73 20 61 6e 79 20 65 6d 70 74 79 20 73 74 72  is any empty str
5c00: 69 6e 67 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  ing..*/.void sql
5c10: 69 74 65 33 50 72 61 67 6d 61 28 0a 20 20 50 61  ite3Pragma(.  Pa
5c20: 72 73 65 20 2a 70 50 61 72 73 65 2c 20 0a 20 20  rse *pParse, .  
5c30: 54 6f 6b 65 6e 20 2a 70 49 64 31 2c 20 20 20 20  Token *pId1,    
5c40: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 70 61 72      /* First par
5c50: 74 20 6f 66 20 5b 64 61 74 61 62 61 73 65 2e 5d  t of [database.]
5c60: 69 64 20 66 69 65 6c 64 20 2a 2f 0a 20 20 54 6f  id field */.  To
5c70: 6b 65 6e 20 2a 70 49 64 32 2c 20 20 20 20 20 20  ken *pId2,      
5c80: 20 20 2f 2a 20 53 65 63 6f 6e 64 20 70 61 72 74    /* Second part
5c90: 20 6f 66 20 5b 64 61 74 61 62 61 73 65 2e 5d 69   of [database.]i
5ca0: 64 20 66 69 65 6c 64 2c 20 6f 72 20 4e 55 4c 4c  d field, or NULL
5cb0: 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 56 61   */.  Token *pVa
5cc0: 6c 75 65 2c 20 20 20 20 20 20 2f 2a 20 54 6f 6b  lue,      /* Tok
5cd0: 65 6e 20 66 6f 72 20 3c 76 61 6c 75 65 3e 2c 20  en for <value>, 
5ce0: 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74  or NULL */.  int
5cf0: 20 6d 69 6e 75 73 46 6c 61 67 20 20 20 20 20 20   minusFlag      
5d00: 20 2f 2a 20 54 72 75 65 20 69 66 20 61 20 27 2d   /* True if a '-
5d10: 27 20 73 69 67 6e 20 70 72 65 63 65 64 65 64 20  ' sign preceded 
5d20: 3c 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b 0a 20 20  <value> */.){.  
5d30: 63 68 61 72 20 2a 7a 4c 65 66 74 20 3d 20 30 3b  char *zLeft = 0;
5d40: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d 74 65         /* Nul-te
5d50: 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73  rminated UTF-8 s
5d60: 74 72 69 6e 67 20 3c 69 64 3e 20 2a 2f 0a 20 20  tring <id> */.  
5d70: 63 68 61 72 20 2a 7a 52 69 67 68 74 20 3d 20 30  char *zRight = 0
5d80: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d 74 65  ;      /* Nul-te
5d90: 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73  rminated UTF-8 s
5da0: 74 72 69 6e 67 20 3c 76 61 6c 75 65 3e 2c 20 6f  tring <value>, o
5db0: 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 6f 6e 73  r NULL */.  cons
5dc0: 74 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 30 3b  t char *zDb = 0;
5dd0: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
5de0: 73 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b  se name */.  Tok
5df0: 65 6e 20 2a 70 49 64 3b 20 20 20 20 20 20 20 20  en *pId;        
5e00: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
5e10: 6f 20 3c 69 64 3e 20 74 6f 6b 65 6e 20 2a 2f 0a  o <id> token */.
5e20: 20 20 63 68 61 72 20 2a 61 46 63 6e 74 6c 5b 34    char *aFcntl[4
5e30: 5d 3b 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75  ];       /* Argu
5e40: 6d 65 6e 74 20 74 6f 20 53 51 4c 49 54 45 5f 46  ment to SQLITE_F
5e50: 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f 0a 20  CNTL_PRAGMA */. 
5e60: 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
5e70: 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
5e80: 61 73 65 20 69 6e 64 65 78 20 66 6f 72 20 3c 64  ase index for <d
5e90: 61 74 61 62 61 73 65 3e 20 2a 2f 0a 20 20 69 6e  atabase> */.  in
5ea0: 74 20 6c 77 72 2c 20 75 70 72 2c 20 6d 69 64 3b  t lwr, upr, mid;
5eb0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 69             /* Bi
5ec0: 6e 61 72 79 20 73 65 61 72 63 68 20 62 6f 75 6e  nary search boun
5ed0: 64 73 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  ds */.  int rc; 
5ee0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5ef0: 20 20 20 20 20 2f 2a 20 72 65 74 75 72 6e 20 76       /* return v
5f00: 61 6c 75 65 20 66 6f 72 6d 20 53 51 4c 49 54 45  alue form SQLITE
5f10: 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f  _FCNTL_PRAGMA */
5f20: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d  .  sqlite3 *db =
5f30: 20 70 50 61 72 73 65 2d 3e 64 62 3b 20 20 20 20   pParse->db;    
5f40: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
5f50: 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20  connection */.  
5f60: 44 62 20 2a 70 44 62 3b 20 20 20 20 20 20 20 20  Db *pDb;        
5f70: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
5f80: 54 68 65 20 73 70 65 63 69 66 69 63 20 64 61 74  The specific dat
5f90: 61 62 61 73 65 20 62 65 69 6e 67 20 70 72 61 67  abase being prag
5fa0: 6d 61 65 64 20 2a 2f 0a 20 20 56 64 62 65 20 2a  maed */.  Vdbe *
5fb0: 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64  v = sqlite3GetVd
5fc0: 62 65 28 70 50 61 72 73 65 29 3b 20 20 2f 2a 20  be(pParse);  /* 
5fd0: 50 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  Prepared stateme
5fe0: 6e 74 20 2a 2f 0a 0a 20 20 69 66 28 20 76 3d 3d  nt */..  if( v==
5ff0: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 73 71  0 ) return;.  sq
6000: 6c 69 74 65 33 56 64 62 65 52 75 6e 4f 6e 6c 79  lite3VdbeRunOnly
6010: 4f 6e 63 65 28 76 29 3b 0a 20 20 70 50 61 72 73  Once(v);.  pPars
6020: 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 0a 20 20  e->nMem = 2;..  
6030: 2f 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  /* Interpret the
6040: 20 5b 64 61 74 61 62 61 73 65 2e 5d 20 70 61 72   [database.] par
6050: 74 20 6f 66 20 74 68 65 20 70 72 61 67 6d 61 20  t of the pragma 
6060: 73 74 61 74 65 6d 65 6e 74 2e 20 69 44 62 20 69  statement. iDb i
6070: 73 20 74 68 65 0a 20 20 2a 2a 20 69 6e 64 65 78  s the.  ** index
6080: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
6090: 20 74 68 69 73 20 70 72 61 67 6d 61 20 69 73 20   this pragma is 
60a0: 62 65 69 6e 67 20 61 70 70 6c 69 65 64 20 74 6f  being applied to
60b0: 20 69 6e 20 64 62 2e 61 44 62 5b 5d 2e 20 2a 2f   in db.aDb[]. */
60c0: 0a 20 20 69 44 62 20 3d 20 73 71 6c 69 74 65 33  .  iDb = sqlite3
60d0: 54 77 6f 50 61 72 74 4e 61 6d 65 28 70 50 61 72  TwoPartName(pPar
60e0: 73 65 2c 20 70 49 64 31 2c 20 70 49 64 32 2c 20  se, pId1, pId2, 
60f0: 26 70 49 64 29 3b 0a 20 20 69 66 28 20 69 44 62  &pId);.  if( iDb
6100: 3c 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 70  <0 ) return;.  p
6110: 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44  Db = &db->aDb[iD
6120: 62 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65  b];..  /* If the
6130: 20 74 65 6d 70 20 64 61 74 61 62 61 73 65 20 68   temp database h
6140: 61 73 20 62 65 65 6e 20 65 78 70 6c 69 63 69 74  as been explicit
6150: 6c 79 20 6e 61 6d 65 64 20 61 73 20 70 61 72 74  ly named as part
6160: 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 70 72   of the .  ** pr
6170: 61 67 6d 61 2c 20 6d 61 6b 65 20 73 75 72 65 20  agma, make sure 
6180: 69 74 20 69 73 20 6f 70 65 6e 2e 20 0a 20 20 2a  it is open. .  *
6190: 2f 0a 20 20 69 66 28 20 69 44 62 3d 3d 31 20 26  /.  if( iDb==1 &
61a0: 26 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d  & sqlite3OpenTem
61b0: 70 44 61 74 61 62 61 73 65 28 70 50 61 72 73 65  pDatabase(pParse
61c0: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 3b  ) ){.    return;
61d0: 0a 20 20 7d 0a 0a 20 20 7a 4c 65 66 74 20 3d 20  .  }..  zLeft = 
61e0: 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54  sqlite3NameFromT
61f0: 6f 6b 65 6e 28 64 62 2c 20 70 49 64 29 3b 0a 20  oken(db, pId);. 
6200: 20 69 66 28 20 21 7a 4c 65 66 74 20 29 20 72 65   if( !zLeft ) re
6210: 74 75 72 6e 3b 0a 20 20 69 66 28 20 6d 69 6e 75  turn;.  if( minu
6220: 73 46 6c 61 67 20 29 7b 0a 20 20 20 20 7a 52 69  sFlag ){.    zRi
6230: 67 68 74 20 3d 20 73 71 6c 69 74 65 33 4d 50 72  ght = sqlite3MPr
6240: 69 6e 74 66 28 64 62 2c 20 22 2d 25 54 22 2c 20  intf(db, "-%T", 
6250: 70 56 61 6c 75 65 29 3b 0a 20 20 7d 65 6c 73 65  pValue);.  }else
6260: 7b 0a 20 20 20 20 7a 52 69 67 68 74 20 3d 20 73  {.    zRight = s
6270: 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f  qlite3NameFromTo
6280: 6b 65 6e 28 64 62 2c 20 70 56 61 6c 75 65 29 3b  ken(db, pValue);
6290: 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20  .  }..  assert( 
62a0: 70 49 64 32 20 29 3b 0a 20 20 7a 44 62 20 3d 20  pId2 );.  zDb = 
62b0: 70 49 64 32 2d 3e 6e 3e 30 20 3f 20 70 44 62 2d  pId2->n>0 ? pDb-
62c0: 3e 7a 4e 61 6d 65 20 3a 20 30 3b 0a 20 20 69 66  >zName : 0;.  if
62d0: 28 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65  ( sqlite3AuthChe
62e0: 63 6b 28 70 50 61 72 73 65 2c 20 53 51 4c 49 54  ck(pParse, SQLIT
62f0: 45 5f 50 52 41 47 4d 41 2c 20 7a 4c 65 66 74 2c  E_PRAGMA, zLeft,
6300: 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 20 29 7b   zRight, zDb) ){
6310: 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61  .    goto pragma
6320: 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _out;.  }..  /* 
6330: 53 65 6e 64 20 61 6e 20 53 51 4c 49 54 45 5f 46  Send an SQLITE_F
6340: 43 4e 54 4c 5f 50 52 41 47 4d 41 20 66 69 6c 65  CNTL_PRAGMA file
6350: 2d 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20  -control to the 
6360: 75 6e 64 65 72 6c 79 69 6e 67 20 56 46 53 0a 20  underlying VFS. 
6370: 20 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20   ** connection. 
6380: 20 49 66 20 69 74 20 72 65 74 75 72 6e 73 20 53   If it returns S
6390: 51 4c 49 54 45 5f 4f 4b 2c 20 74 68 65 6e 20 61  QLITE_OK, then a
63a0: 73 73 75 6d 65 20 74 68 61 74 20 74 68 65 20 56  ssume that the V
63b0: 46 53 0a 20 20 2a 2a 20 68 61 6e 64 6c 65 64 20  FS.  ** handled 
63c0: 74 68 65 20 70 72 61 67 6d 61 20 61 6e 64 20 67  the pragma and g
63d0: 65 6e 65 72 61 74 65 20 61 20 6e 6f 2d 6f 70 20  enerate a no-op 
63e0: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
63f0: 6e 74 2e 0a 20 20 2a 2f 0a 20 20 61 46 63 6e 74  nt..  */.  aFcnt
6400: 6c 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 46 63 6e  l[0] = 0;.  aFcn
6410: 74 6c 5b 31 5d 20 3d 20 7a 4c 65 66 74 3b 0a 20  tl[1] = zLeft;. 
6420: 20 61 46 63 6e 74 6c 5b 32 5d 20 3d 20 7a 52 69   aFcntl[2] = zRi
6430: 67 68 74 3b 0a 20 20 61 46 63 6e 74 6c 5b 33 5d  ght;.  aFcntl[3]
6440: 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79   = 0;.  db->busy
6450: 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20  Handler.nBusy = 
6460: 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  0;.  rc = sqlite
6470: 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64  3_file_control(d
6480: 62 2c 20 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46  b, zDb, SQLITE_F
6490: 43 4e 54 4c 5f 50 52 41 47 4d 41 2c 20 28 76 6f  CNTL_PRAGMA, (vo
64a0: 69 64 2a 29 61 46 63 6e 74 6c 29 3b 0a 20 20 69  id*)aFcntl);.  i
64b0: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
64c0: 20 29 7b 0a 20 20 20 20 69 66 28 20 61 46 63 6e   ){.    if( aFcn
64d0: 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 69  tl[0] ){.      i
64e0: 6e 74 20 6d 65 6d 20 3d 20 2b 2b 70 50 61 72 73  nt mem = ++pPars
64f0: 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 20 20 73  e->nMem;.      s
6500: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
6510: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
6520: 30 2c 20 6d 65 6d 2c 20 30 2c 20 61 46 63 6e 74  0, mem, 0, aFcnt
6530: 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20 20 20 20  l[0], 0);.      
6540: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
6550: 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20  mCols(v, 1);.   
6560: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
6570: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
6580: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 72 65  OLNAME_NAME, "re
6590: 73 75 6c 74 22 2c 20 53 51 4c 49 54 45 5f 53 54  sult", SQLITE_ST
65a0: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
65b0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
65c0: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
65d0: 6d 65 6d 2c 20 31 29 3b 0a 20 20 20 20 20 20 73  mem, 1);.      s
65e0: 71 6c 69 74 65 33 5f 66 72 65 65 28 61 46 63 6e  qlite3_free(aFcn
65f0: 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  tl[0]);.    }.  
6600: 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75    goto pragma_ou
6610: 74 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 21  t;.  }.  if( rc!
6620: 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44  =SQLITE_NOTFOUND
6630: 20 29 7b 0a 20 20 20 20 69 66 28 20 61 46 63 6e   ){.    if( aFcn
6640: 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 73  tl[0] ){.      s
6650: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
6660: 50 61 72 73 65 2c 20 22 25 73 22 2c 20 61 46 63  Parse, "%s", aFc
6670: 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 20 20 73  ntl[0]);.      s
6680: 71 6c 69 74 65 33 5f 66 72 65 65 28 61 46 63 6e  qlite3_free(aFcn
6690: 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  tl[0]);.    }.  
66a0: 20 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b    pParse->nErr++
66b0: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 72 63  ;.    pParse->rc
66c0: 20 3d 20 72 63 3b 0a 20 20 20 20 67 6f 74 6f 20   = rc;.    goto 
66d0: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a  pragma_out;.  }.
66e0: 0a 20 20 2f 2a 20 4c 6f 63 61 74 65 20 74 68 65  .  /* Locate the
66f0: 20 70 72 61 67 6d 61 20 69 6e 20 74 68 65 20 6c   pragma in the l
6700: 6f 6f 6b 75 70 20 74 61 62 6c 65 20 2a 2f 0a 20  ookup table */. 
6710: 20 6c 77 72 20 3d 20 30 3b 0a 20 20 75 70 72 20   lwr = 0;.  upr 
6720: 3d 20 41 72 72 61 79 53 69 7a 65 28 61 50 72 61  = ArraySize(aPra
6730: 67 6d 61 4e 61 6d 65 73 29 2d 31 3b 0a 20 20 77  gmaNames)-1;.  w
6740: 68 69 6c 65 28 20 6c 77 72 3c 3d 75 70 72 20 29  hile( lwr<=upr )
6750: 7b 0a 20 20 20 20 6d 69 64 20 3d 20 28 6c 77 72  {.    mid = (lwr
6760: 2b 75 70 72 29 2f 32 3b 0a 20 20 20 20 72 63 20  +upr)/2;.    rc 
6770: 3d 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d  = sqlite3_stricm
6780: 70 28 7a 4c 65 66 74 2c 20 61 50 72 61 67 6d 61  p(zLeft, aPragma
6790: 4e 61 6d 65 73 5b 6d 69 64 5d 2e 7a 4e 61 6d 65  Names[mid].zName
67a0: 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 30  );.    if( rc==0
67b0: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 69 66   ) break;.    if
67c0: 28 20 72 63 3c 30 20 29 7b 0a 20 20 20 20 20 20  ( rc<0 ){.      
67d0: 75 70 72 20 3d 20 6d 69 64 20 2d 20 31 3b 0a 20  upr = mid - 1;. 
67e0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
67f0: 6c 77 72 20 3d 20 6d 69 64 20 2b 20 31 3b 0a 20  lwr = mid + 1;. 
6800: 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 6c     }.  }.  if( l
6810: 77 72 3e 75 70 72 20 29 20 67 6f 74 6f 20 70 72  wr>upr ) goto pr
6820: 61 67 6d 61 5f 6f 75 74 3b 0a 0a 20 20 2f 2a 20  agma_out;..  /* 
6830: 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 64 61  Make sure the da
6840: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
6850: 20 6c 6f 61 64 65 64 20 69 66 20 74 68 65 20 70   loaded if the p
6860: 72 61 67 6d 61 20 72 65 71 75 69 72 65 73 20 74  ragma requires t
6870: 68 61 74 20 2a 2f 0a 20 20 69 66 28 20 28 61 50  hat */.  if( (aP
6880: 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e  ragmaNames[mid].
6890: 6d 50 72 61 67 46 6c 61 67 20 26 20 50 72 61 67  mPragFlag & Prag
68a0: 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 29  Flag_NeedSchema)
68b0: 21 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 73  !=0 ){.    if( s
68c0: 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
68d0: 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20  (pParse) ) goto 
68e0: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a  pragma_out;.  }.
68f0: 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 74 68  .  /* Jump to th
6900: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 70 72  e appropriate pr
6910: 61 67 6d 61 20 68 61 6e 64 6c 65 72 20 2a 2f 0a  agma handler */.
6920: 20 20 73 77 69 74 63 68 28 20 61 50 72 61 67 6d    switch( aPragm
6930: 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 65 50 72 61  aNames[mid].ePra
6940: 67 54 79 70 20 29 7b 0a 20 20 0a 23 69 66 20 21  gTyp ){.  .#if !
6950: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
6960: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
6970: 53 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  S) && !defined(S
6980: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45  QLITE_OMIT_DEPRE
6990: 43 41 54 45 44 29 0a 20 20 2f 2a 0a 20 20 2a 2a  CATED).  /*.  **
69a0: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
69b0: 73 65 2e 5d 64 65 66 61 75 6c 74 5f 63 61 63 68  se.]default_cach
69c0: 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41  e_size.  **  PRA
69d0: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 64  GMA [database.]d
69e0: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
69f0: 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  e=N.  **.  ** Th
6a00: 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70  e first form rep
6a10: 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74  orts the current
6a20: 20 70 65 72 73 69 73 74 65 6e 74 20 73 65 74 74   persistent sett
6a30: 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  ing for the.  **
6a40: 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65   page cache size
6a50: 2e 20 20 54 68 65 20 76 61 6c 75 65 20 72 65 74  .  The value ret
6a60: 75 72 6e 65 64 20 69 73 20 74 68 65 20 6d 61 78  urned is the max
6a70: 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 0a 20  imum number of. 
6a80: 20 2a 2a 20 70 61 67 65 73 20 69 6e 20 74 68 65   ** pages in the
6a90: 20 70 61 67 65 20 63 61 63 68 65 2e 20 20 54 68   page cache.  Th
6aa0: 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65  e second form se
6ab0: 74 73 20 62 6f 74 68 20 74 68 65 20 63 75 72 72  ts both the curr
6ac0: 65 6e 74 0a 20 20 2a 2a 20 70 61 67 65 20 63 61  ent.  ** page ca
6ad0: 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65 20 61  che size value a
6ae0: 6e 64 20 74 68 65 20 70 65 72 73 69 73 74 65 6e  nd the persisten
6af0: 74 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  t page cache siz
6b00: 65 20 76 61 6c 75 65 0a 20 20 2a 2a 20 73 74 6f  e value.  ** sto
6b10: 72 65 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  red in the datab
6b20: 61 73 65 20 66 69 6c 65 2e 0a 20 20 2a 2a 0a 20  ase file..  **. 
6b30: 20 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73 69 6f   ** Older versio
6b40: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 77 6f 75  ns of SQLite wou
6b50: 6c 64 20 73 65 74 20 74 68 65 20 64 65 66 61 75  ld set the defau
6b60: 6c 74 20 63 61 63 68 65 20 73 69 7a 65 20 74 6f  lt cache size to
6b70: 20 61 0a 20 20 2a 2a 20 6e 65 67 61 74 69 76 65   a.  ** negative
6b80: 20 6e 75 6d 62 65 72 20 74 6f 20 69 6e 64 69 63   number to indic
6b90: 61 74 65 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d  ate synchronous=
6ba0: 4f 46 46 2e 20 20 54 68 65 73 65 20 64 61 79 73  OFF.  These days
6bb0: 2c 20 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20  , synchronous.  
6bc0: 2a 2a 20 69 73 20 61 6c 77 61 79 73 20 6f 6e 20  ** is always on 
6bd0: 62 79 20 64 65 66 61 75 6c 74 20 72 65 67 61 72  by default regar
6be0: 64 6c 65 73 73 20 6f 66 20 74 68 65 20 73 69 67  dless of the sig
6bf0: 6e 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74  n of the default
6c00: 20 63 61 63 68 65 0a 20 20 2a 2a 20 73 69 7a 65   cache.  ** size
6c10: 2e 20 20 42 75 74 20 63 6f 6e 74 69 6e 75 65 20  .  But continue 
6c20: 74 6f 20 74 61 6b 65 20 74 68 65 20 61 62 73 6f  to take the abso
6c30: 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20 74 68  lute value of th
6c40: 65 20 64 65 66 61 75 6c 74 20 63 61 63 68 65 0a  e default cache.
6c50: 20 20 2a 2a 20 73 69 7a 65 20 6f 66 20 68 69 73    ** size of his
6c60: 74 6f 72 69 63 61 6c 20 63 6f 6d 70 61 74 69 62  torical compatib
6c70: 69 6c 69 74 79 2e 0a 20 20 2a 2f 0a 20 20 63 61  ility..  */.  ca
6c80: 73 65 20 50 72 61 67 54 79 70 5f 44 45 46 41 55  se PragTyp_DEFAU
6c90: 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 3a 20 7b  LT_CACHE_SIZE: {
6ca0: 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
6cb0: 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42 45  t int iLn = VDBE
6cc0: 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28 32  _OFFSET_LINENO(2
6cd0: 29 3b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  );.    static co
6ce0: 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 67  nst VdbeOpList g
6cf0: 65 74 43 61 63 68 65 53 69 7a 65 5b 5d 20 3d 20  etCacheSize[] = 
6d00: 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61  {.      { OP_Tra
6d10: 6e 73 61 63 74 69 6f 6e 2c 20 30 2c 20 30 2c 20  nsaction, 0, 0, 
6d20: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 20 20         0},      
6d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6d40: 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20     /* 0 */.     
6d50: 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65   { OP_ReadCookie
6d60: 2c 20 20 30 2c 20 31 2c 20 20 20 20 20 20 20 20  ,  0, 1,        
6d70: 42 54 52 45 45 5f 44 45 46 41 55 4c 54 5f 43 41  BTREE_DEFAULT_CA
6d80: 43 48 45 5f 53 49 5a 45 7d 2c 20 20 2f 2a 20 31  CHE_SIZE},  /* 1
6d90: 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49   */.      { OP_I
6da0: 66 50 6f 73 2c 20 20 20 20 20 20 20 31 2c 20 38  fPos,       1, 8
6db0: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
6dc0: 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c     { OP_Integer,
6dd0: 20 20 20 20 20 30 2c 20 32 2c 20 20 20 20 20 20       0, 2,      
6de0: 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50    0},.      { OP
6df0: 5f 53 75 62 74 72 61 63 74 2c 20 20 20 20 31 2c  _Subtract,    1,
6e00: 20 32 2c 20 20 20 20 20 20 20 20 31 7d 2c 0a 20   2,        1},. 
6e10: 20 20 20 20 20 7b 20 4f 50 5f 49 66 50 6f 73 2c       { OP_IfPos,
6e20: 20 20 20 20 20 20 20 31 2c 20 38 2c 20 20 20 20         1, 8,    
6e30: 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20      0},.      { 
6e40: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20  OP_Integer,     
6e50: 30 2c 20 31 2c 20 20 20 20 20 20 20 20 30 7d 2c  0, 1,        0},
6e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e70: 20 20 20 20 20 20 20 20 20 2f 2a 20 36 20 2a 2f           /* 6 */
6e80: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 4e 6f 6f 70  .      { OP_Noop
6e90: 2c 20 20 20 20 20 20 20 20 30 2c 20 30 2c 20 20  ,        0, 0,  
6ea0: 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20        0},.      
6eb0: 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  { OP_ResultRow, 
6ec0: 20 20 31 2c 20 31 2c 20 20 20 20 20 20 20 20 30    1, 1,        0
6ed0: 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e  },.    };.    in
6ee0: 74 20 61 64 64 72 3b 0a 20 20 20 20 73 71 6c 69  t addr;.    sqli
6ef0: 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65 65  te3VdbeUsesBtree
6f00: 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 69 66  (v, iDb);.    if
6f10: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
6f20: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
6f30: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
6f40: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
6f50: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
6f60: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
6f70: 22 63 61 63 68 65 5f 73 69 7a 65 22 2c 20 53 51  "cache_size", SQ
6f80: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
6f90: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
6fa0: 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20 61 64 64   += 2;.      add
6fb0: 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
6fc0: 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61  ddOpList(v, Arra
6fd0: 79 53 69 7a 65 28 67 65 74 43 61 63 68 65 53 69  ySize(getCacheSi
6fe0: 7a 65 29 2c 20 67 65 74 43 61 63 68 65 53 69 7a  ze), getCacheSiz
6ff0: 65 2c 69 4c 6e 29 3b 0a 20 20 20 20 20 20 73 71  e,iLn);.      sq
7000: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
7010: 31 28 76 2c 20 61 64 64 72 2c 20 69 44 62 29 3b  1(v, addr, iDb);
7020: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
7030: 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64  beChangeP1(v, ad
7040: 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20 20  dr+1, iDb);.    
7050: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
7060: 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b 36 2c  ngeP1(v, addr+6,
7070: 20 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f   SQLITE_DEFAULT_
7080: 43 41 43 48 45 5f 53 49 5a 45 29 3b 0a 20 20 20  CACHE_SIZE);.   
7090: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e   }else{.      in
70a0: 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33  t size = sqlite3
70b0: 41 62 73 49 6e 74 33 32 28 73 71 6c 69 74 65 33  AbsInt32(sqlite3
70c0: 41 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20  Atoi(zRight));. 
70d0: 20 20 20 20 20 73 71 6c 69 74 65 33 42 65 67 69       sqlite3Begi
70e0: 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28  nWriteOperation(
70f0: 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62 29 3b  pParse, 0, iDb);
7100: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
7110: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
7120: 6e 74 65 67 65 72 2c 20 73 69 7a 65 2c 20 31 29  nteger, size, 1)
7130: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
7140: 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
7150: 53 65 74 43 6f 6f 6b 69 65 2c 20 69 44 62 2c 20  SetCookie, iDb, 
7160: 42 54 52 45 45 5f 44 45 46 41 55 4c 54 5f 43 41  BTREE_DEFAULT_CA
7170: 43 48 45 5f 53 49 5a 45 2c 20 31 29 3b 0a 20 20  CHE_SIZE, 1);.  
7180: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
7190: 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65  te3SchemaMutexHe
71a0: 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29  ld(db, iDb, 0) )
71b0: 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e 70 53 63  ;.      pDb->pSc
71c0: 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65  hema->cache_size
71d0: 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20 20 73   = size;.      s
71e0: 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61  qlite3BtreeSetCa
71f0: 63 68 65 53 69 7a 65 28 70 44 62 2d 3e 70 42 74  cheSize(pDb->pBt
7200: 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  , pDb->pSchema->
7210: 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20  cache_size);.   
7220: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
7230: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 21 53 51 4c  }.#endif /* !SQL
7240: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
7250: 52 41 47 4d 41 53 20 26 26 20 21 53 51 4c 49 54  RAGMAS && !SQLIT
7260: 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45  E_OMIT_DEPRECATE
7270: 44 20 2a 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e  D */..#if !defin
7280: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ed(SQLITE_OMIT_P
7290: 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a 20 20  AGER_PRAGMAS).  
72a0: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
72b0: 5b 64 61 74 61 62 61 73 65 2e 5d 70 61 67 65 5f  [database.]page_
72c0: 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d  size.  **  PRAGM
72d0: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 70 61 67  A [database.]pag
72e0: 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20  e_size=N.  **.  
72f0: 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72  ** The first for
7300: 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75  m reports the cu
7310: 72 72 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f  rrent setting fo
7320: 72 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61 62  r the.  ** datab
7330: 61 73 65 20 70 61 67 65 20 73 69 7a 65 20 69 6e  ase page size in
7340: 20 62 79 74 65 73 2e 20 20 54 68 65 20 73 65 63   bytes.  The sec
7350: 6f 6e 64 20 66 6f 72 6d 20 73 65 74 73 20 74 68  ond form sets th
7360: 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20  e.  ** database 
7370: 70 61 67 65 20 73 69 7a 65 20 76 61 6c 75 65 2e  page size value.
7380: 20 20 54 68 65 20 76 61 6c 75 65 20 63 61 6e 20    The value can 
7390: 6f 6e 6c 79 20 62 65 20 73 65 74 20 69 66 0a 20  only be set if. 
73a0: 20 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65   ** the database
73b0: 20 68 61 73 20 6e 6f 74 20 79 65 74 20 62 65 65   has not yet bee
73c0: 6e 20 63 72 65 61 74 65 64 2e 0a 20 20 2a 2f 0a  n created..  */.
73d0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 50    case PragTyp_P
73e0: 41 47 45 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20  AGE_SIZE: {.    
73f0: 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44 62  Btree *pBt = pDb
7400: 2d 3e 70 42 74 3b 0a 20 20 20 20 61 73 73 65 72  ->pBt;.    asser
7410: 74 28 20 70 42 74 21 3d 30 20 29 3b 0a 20 20 20  t( pBt!=0 );.   
7420: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
7430: 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d        int size =
7440: 20 41 4c 57 41 59 53 28 70 42 74 29 20 3f 20 73   ALWAYS(pBt) ? s
7450: 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 50 61  qlite3BtreeGetPa
7460: 67 65 53 69 7a 65 28 70 42 74 29 20 3a 20 30 3b  geSize(pBt) : 0;
7470: 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e  .      returnSin
7480: 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22  gleInt(pParse, "
7490: 70 61 67 65 5f 73 69 7a 65 22 2c 20 73 69 7a 65  page_size", size
74a0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
74b0: 20 20 20 20 2f 2a 20 4d 61 6c 6c 6f 63 20 6d 61      /* Malloc ma
74c0: 79 20 66 61 69 6c 20 77 68 65 6e 20 73 65 74 74  y fail when sett
74d0: 69 6e 67 20 74 68 65 20 70 61 67 65 2d 73 69 7a  ing the page-siz
74e0: 65 2c 20 61 73 20 74 68 65 72 65 20 69 73 20 61  e, as there is a
74f0: 6e 20 69 6e 74 65 72 6e 61 6c 0a 20 20 20 20 20  n internal.     
7500: 20 2a 2a 20 62 75 66 66 65 72 20 74 68 61 74 20   ** buffer that 
7510: 74 68 65 20 70 61 67 65 72 20 6d 6f 64 75 6c 65  the pager module
7520: 20 72 65 73 69 7a 65 73 20 75 73 69 6e 67 20 73   resizes using s
7530: 71 6c 69 74 65 33 5f 72 65 61 6c 6c 6f 63 28 29  qlite3_realloc()
7540: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
7550: 20 64 62 2d 3e 6e 65 78 74 50 61 67 65 73 69 7a   db->nextPagesiz
7560: 65 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 69 28  e = sqlite3Atoi(
7570: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 69  zRight);.      i
7580: 66 28 20 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3d  f( SQLITE_NOMEM=
7590: 3d 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74  =sqlite3BtreeSet
75a0: 50 61 67 65 53 69 7a 65 28 70 42 74 2c 20 64 62  PageSize(pBt, db
75b0: 2d 3e 6e 65 78 74 50 61 67 65 73 69 7a 65 2c 2d  ->nextPagesize,-
75c0: 31 2c 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20  1,0) ){.        
75d0: 64 62 2d 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64  db->mallocFailed
75e0: 20 3d 20 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20   = 1;.      }.  
75f0: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
7600: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50   }..  /*.  **  P
7610: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
7620: 5d 73 65 63 75 72 65 5f 64 65 6c 65 74 65 0a 20  ]secure_delete. 
7630: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
7640: 61 62 61 73 65 2e 5d 73 65 63 75 72 65 5f 64 65  abase.]secure_de
7650: 6c 65 74 65 3d 4f 4e 2f 4f 46 46 0a 20 20 2a 2a  lete=ON/OFF.  **
7660: 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20  .  ** The first 
7670: 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65  form reports the
7680: 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67   current setting
7690: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 73 65   for the.  ** se
76a0: 63 75 72 65 5f 64 65 6c 65 74 65 20 66 6c 61 67  cure_delete flag
76b0: 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  .  The second fo
76c0: 72 6d 20 63 68 61 6e 67 65 73 20 74 68 65 20 73  rm changes the s
76d0: 65 63 75 72 65 5f 64 65 6c 65 74 65 0a 20 20 2a  ecure_delete.  *
76e0: 2a 20 66 6c 61 67 20 73 65 74 74 69 6e 67 20 61  * flag setting a
76f0: 6e 64 20 72 65 70 6f 72 74 73 20 74 68 65 6e 65  nd reports thene
7700: 77 20 76 61 6c 75 65 2e 0a 20 20 2a 2f 0a 20 20  w value..  */.  
7710: 63 61 73 65 20 50 72 61 67 54 79 70 5f 53 45 43  case PragTyp_SEC
7720: 55 52 45 5f 44 45 4c 45 54 45 3a 20 7b 0a 20 20  URE_DELETE: {.  
7730: 20 20 42 74 72 65 65 20 2a 70 42 74 20 3d 20 70    Btree *pBt = p
7740: 44 62 2d 3e 70 42 74 3b 0a 20 20 20 20 69 6e 74  Db->pBt;.    int
7750: 20 62 20 3d 20 2d 31 3b 0a 20 20 20 20 61 73 73   b = -1;.    ass
7760: 65 72 74 28 20 70 42 74 21 3d 30 20 29 3b 0a 20  ert( pBt!=0 );. 
7770: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
7780: 0a 20 20 20 20 20 20 62 20 3d 20 73 71 6c 69 74  .      b = sqlit
7790: 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69  e3GetBoolean(zRi
77a0: 67 68 74 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20  ght, 0);.    }. 
77b0: 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d     if( pId2->n==
77c0: 30 20 26 26 20 62 3e 3d 30 20 29 7b 0a 20 20 20  0 && b>=0 ){.   
77d0: 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20 20 20     int ii;.     
77e0: 20 66 6f 72 28 69 69 3d 30 3b 20 69 69 3c 64 62   for(ii=0; ii<db
77f0: 2d 3e 6e 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20  ->nDb; ii++){.  
7800: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
7810: 65 65 53 65 63 75 72 65 44 65 6c 65 74 65 28 64  eeSecureDelete(d
7820: 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20  b->aDb[ii].pBt, 
7830: 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  b);.      }.    
7840: 7d 0a 20 20 20 20 62 20 3d 20 73 71 6c 69 74 65  }.    b = sqlite
7850: 33 42 74 72 65 65 53 65 63 75 72 65 44 65 6c 65  3BtreeSecureDele
7860: 74 65 28 70 42 74 2c 20 62 29 3b 0a 20 20 20 20  te(pBt, b);.    
7870: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
7880: 70 50 61 72 73 65 2c 20 22 73 65 63 75 72 65 5f  pParse, "secure_
7890: 64 65 6c 65 74 65 22 2c 20 62 29 3b 0a 20 20 20  delete", b);.   
78a0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
78b0: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
78c0: 64 61 74 61 62 61 73 65 2e 5d 6d 61 78 5f 70 61  database.]max_pa
78d0: 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a 20 20 50  ge_count.  **  P
78e0: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
78f0: 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 3d  ]max_page_count=
7900: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  N.  **.  ** The 
7910: 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f 72  first form repor
7920: 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20 73  ts the current s
7930: 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20  etting for the. 
7940: 20 2a 2a 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62   ** maximum numb
7950: 65 72 20 6f 66 20 70 61 67 65 73 20 69 6e 20 74  er of pages in t
7960: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
7970: 2e 20 20 54 68 65 20 0a 20 20 2a 2a 20 73 65 63  .  The .  ** sec
7980: 6f 6e 64 20 66 6f 72 6d 20 61 74 74 65 6d 70 74  ond form attempt
7990: 73 20 74 6f 20 63 68 61 6e 67 65 20 74 68 69 73  s to change this
79a0: 20 73 65 74 74 69 6e 67 2e 20 20 42 6f 74 68 0a   setting.  Both.
79b0: 20 20 2a 2a 20 66 6f 72 6d 73 20 72 65 74 75 72    ** forms retur
79c0: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 65  n the current se
79d0: 74 74 69 6e 67 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  tting..  **.  **
79e0: 20 54 68 65 20 61 62 73 6f 6c 75 74 65 20 76 61   The absolute va
79f0: 6c 75 65 20 6f 66 20 4e 20 69 73 20 75 73 65 64  lue of N is used
7a00: 2e 20 20 54 68 69 73 20 69 73 20 75 6e 64 6f 63  .  This is undoc
7a10: 75 6d 65 6e 74 65 64 20 61 6e 64 20 6d 69 67 68  umented and migh
7a20: 74 0a 20 20 2a 2a 20 63 68 61 6e 67 65 2e 20 20  t.  ** change.  
7a30: 54 68 65 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65  The only purpose
7a40: 20 69 73 20 74 6f 20 70 72 6f 76 69 64 65 20 61   is to provide a
7a50: 6e 20 65 61 73 79 20 77 61 79 20 74 6f 20 74 65  n easy way to te
7a60: 73 74 0a 20 20 2a 2a 20 74 68 65 20 73 71 6c 69  st.  ** the sqli
7a70: 74 65 33 41 62 73 49 6e 74 33 32 28 29 20 66 75  te3AbsInt32() fu
7a80: 6e 63 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a  nction..  **.  *
7a90: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
7aa0: 61 73 65 2e 5d 70 61 67 65 5f 63 6f 75 6e 74 0a  ase.]page_count.
7ab0: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
7ac0: 20 74 68 65 20 6e 75 6d 62 65 72 20 6f 66 20 70   the number of p
7ad0: 61 67 65 73 20 69 6e 20 74 68 65 20 73 70 65 63  ages in the spec
7ae0: 69 66 69 65 64 20 64 61 74 61 62 61 73 65 2e 0a  ified database..
7af0: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
7b00: 54 79 70 5f 50 41 47 45 5f 43 4f 55 4e 54 3a 20  Typ_PAGE_COUNT: 
7b10: 7b 0a 20 20 20 20 69 6e 74 20 69 52 65 67 3b 0a  {.    int iReg;.
7b20: 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56      sqlite3CodeV
7b30: 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72  erifySchema(pPar
7b40: 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 69 52  se, iDb);.    iR
7b50: 65 67 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e  eg = ++pParse->n
7b60: 4d 65 6d 3b 0a 20 20 20 20 69 66 28 20 73 71 6c  Mem;.    if( sql
7b70: 69 74 65 33 54 6f 6c 6f 77 65 72 28 7a 4c 65 66  ite3Tolower(zLef
7b80: 74 5b 30 5d 29 3d 3d 27 70 27 20 29 7b 0a 20 20  t[0])=='p' ){.  
7b90: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
7ba0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 50 61 67 65  ddOp2(v, OP_Page
7bb0: 63 6f 75 6e 74 2c 20 69 44 62 2c 20 69 52 65 67  count, iDb, iReg
7bc0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
7bd0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
7be0: 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d 61 78 50  ddOp3(v, OP_MaxP
7bf0: 67 63 6e 74 2c 20 69 44 62 2c 20 69 52 65 67 2c  gcnt, iDb, iReg,
7c00: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20   .              
7c10: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
7c20: 33 41 62 73 49 6e 74 33 32 28 73 71 6c 69 74 65  3AbsInt32(sqlite
7c30: 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29 29 3b  3Atoi(zRight)));
7c40: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
7c50: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
7c60: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 69 52  OP_ResultRow, iR
7c70: 65 67 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69  eg, 1);.    sqli
7c80: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
7c90: 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c  s(v, 1);.    sql
7ca0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
7cb0: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
7cc0: 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c 20 53 51  _NAME, zLeft, SQ
7cd0: 4c 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b  LITE_TRANSIENT);
7ce0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
7cf0: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
7d00: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f  MA [database.]lo
7d10: 63 6b 69 6e 67 5f 6d 6f 64 65 0a 20 20 2a 2a 20  cking_mode.  ** 
7d20: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
7d30: 65 2e 5d 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 20  e.]locking_mode 
7d40: 3d 20 28 6e 6f 72 6d 61 6c 7c 65 78 63 6c 75 73  = (normal|exclus
7d50: 69 76 65 29 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ive).  */.  case
7d60: 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49 4e 47   PragTyp_LOCKING
7d70: 5f 4d 4f 44 45 3a 20 7b 0a 20 20 20 20 63 6f 6e  _MODE: {.    con
7d80: 73 74 20 63 68 61 72 20 2a 7a 52 65 74 20 3d 20  st char *zRet = 
7d90: 22 6e 6f 72 6d 61 6c 22 3b 0a 20 20 20 20 69 6e  "normal";.    in
7da0: 74 20 65 4d 6f 64 65 20 3d 20 67 65 74 4c 6f 63  t eMode = getLoc
7db0: 6b 69 6e 67 4d 6f 64 65 28 7a 52 69 67 68 74 29  kingMode(zRight)
7dc0: 3b 0a 0a 20 20 20 20 69 66 28 20 70 49 64 32 2d  ;..    if( pId2-
7dd0: 3e 6e 3d 3d 30 20 26 26 20 65 4d 6f 64 65 3d 3d  >n==0 && eMode==
7de0: 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44  PAGER_LOCKINGMOD
7df0: 45 5f 51 55 45 52 59 20 29 7b 0a 20 20 20 20 20  E_QUERY ){.     
7e00: 20 2f 2a 20 53 69 6d 70 6c 65 20 22 50 52 41 47   /* Simple "PRAG
7e10: 4d 41 20 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 3b  MA locking_mode;
7e20: 22 20 73 74 61 74 65 6d 65 6e 74 2e 20 54 68 69  " statement. Thi
7e30: 73 20 69 73 20 61 20 71 75 65 72 79 20 66 6f 72  s is a query for
7e40: 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 63 75  .      ** the cu
7e50: 72 72 65 6e 74 20 64 65 66 61 75 6c 74 20 6c 6f  rrent default lo
7e60: 63 6b 69 6e 67 20 6d 6f 64 65 20 28 77 68 69 63  cking mode (whic
7e70: 68 20 6d 61 79 20 62 65 20 64 69 66 66 65 72 65  h may be differe
7e80: 6e 74 20 74 6f 0a 20 20 20 20 20 20 2a 2a 20 74  nt to.      ** t
7e90: 68 65 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20  he locking-mode 
7ea0: 6f 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  of the main data
7eb0: 62 61 73 65 29 2e 0a 20 20 20 20 20 20 2a 2f 0a  base)..      */.
7ec0: 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 64 62        eMode = db
7ed0: 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 0a  ->dfltLockMode;.
7ee0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
7ef0: 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 3b 0a   Pager *pPager;.
7f00: 20 20 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e        if( pId2->
7f10: 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  n==0 ){.        
7f20: 2f 2a 20 54 68 69 73 20 69 6e 64 69 63 61 74 65  /* This indicate
7f30: 73 20 74 68 61 74 20 6e 6f 20 64 61 74 61 62 61  s that no databa
7f40: 73 65 20 6e 61 6d 65 20 77 61 73 20 73 70 65 63  se name was spec
7f50: 69 66 69 65 64 20 61 73 20 70 61 72 74 0a 20 20  ified as part.  
7f60: 20 20 20 20 20 20 2a 2a 20 6f 66 20 74 68 65 20        ** of the 
7f70: 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e 64 2e 20  PRAGMA command. 
7f80: 49 6e 20 74 68 69 73 20 63 61 73 65 20 74 68 65  In this case the
7f90: 20 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 6d 75   locking-mode mu
7fa0: 73 74 20 62 65 0a 20 20 20 20 20 20 20 20 2a 2a  st be.        **
7fb0: 20 73 65 74 20 6f 6e 20 61 6c 6c 20 61 74 74 61   set on all atta
7fc0: 63 68 65 64 20 64 61 74 61 62 61 73 65 73 2c 20  ched databases, 
7fd0: 61 73 20 77 65 6c 6c 20 61 73 20 74 68 65 20 6d  as well as the m
7fe0: 61 69 6e 20 64 62 20 66 69 6c 65 2e 0a 20 20 20  ain db file..   
7ff0: 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 20 20       **.        
8000: 2a 2a 20 41 6c 73 6f 2c 20 74 68 65 20 73 71 6c  ** Also, the sql
8010: 69 74 65 33 2e 64 66 6c 74 4c 6f 63 6b 4d 6f 64  ite3.dfltLockMod
8020: 65 20 76 61 72 69 61 62 6c 65 20 69 73 20 73 65  e variable is se
8030: 74 20 73 6f 20 74 68 61 74 0a 20 20 20 20 20 20  t so that.      
8040: 20 20 2a 2a 20 61 6e 79 20 73 75 62 73 65 71 75    ** any subsequ
8050: 65 6e 74 6c 79 20 61 74 74 61 63 68 65 64 20 64  ently attached d
8060: 61 74 61 62 61 73 65 73 20 61 6c 73 6f 20 75 73  atabases also us
8070: 65 20 74 68 65 20 73 70 65 63 69 66 69 65 64 0a  e the specified.
8080: 20 20 20 20 20 20 20 20 2a 2a 20 6c 6f 63 6b 69          ** locki
8090: 6e 67 20 6d 6f 64 65 2e 0a 20 20 20 20 20 20 20  ng mode..       
80a0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 69 6e 74 20   */.        int 
80b0: 69 69 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65  ii;.        asse
80c0: 72 74 28 70 44 62 3d 3d 26 64 62 2d 3e 61 44 62  rt(pDb==&db->aDb
80d0: 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 66 6f  [0]);.        fo
80e0: 72 28 69 69 3d 32 3b 20 69 69 3c 64 62 2d 3e 6e  r(ii=2; ii<db->n
80f0: 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  Db; ii++){.     
8100: 20 20 20 20 20 70 50 61 67 65 72 20 3d 20 73 71       pPager = sq
8110: 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
8120: 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42 74 29  db->aDb[ii].pBt)
8130: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
8140: 74 65 33 50 61 67 65 72 4c 6f 63 6b 69 6e 67 4d  te3PagerLockingM
8150: 6f 64 65 28 70 50 61 67 65 72 2c 20 65 4d 6f 64  ode(pPager, eMod
8160: 65 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  e);.        }.  
8170: 20 20 20 20 20 20 64 62 2d 3e 64 66 6c 74 4c 6f        db->dfltLo
8180: 63 6b 4d 6f 64 65 20 3d 20 28 75 38 29 65 4d 6f  ckMode = (u8)eMo
8190: 64 65 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  de;.      }.    
81a0: 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74    pPager = sqlit
81b0: 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44 62  e3BtreePager(pDb
81c0: 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 65 4d  ->pBt);.      eM
81d0: 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67  ode = sqlite3Pag
81e0: 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70 50  erLockingMode(pP
81f0: 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20 20  ager, eMode);.  
8200: 20 20 7d 0a 0a 20 20 20 20 61 73 73 65 72 74 28    }..    assert(
8210: 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f   eMode==PAGER_LO
8220: 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52 4d 41 4c  CKINGMODE_NORMAL
8230: 0a 20 20 20 20 20 20 20 20 20 20 20 20 7c 7c 20  .            || 
8240: 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43  eMode==PAGER_LOC
8250: 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49  KINGMODE_EXCLUSI
8260: 56 45 20 29 3b 0a 20 20 20 20 69 66 28 20 65 4d  VE );.    if( eM
8270: 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49  ode==PAGER_LOCKI
8280: 4e 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49 56 45  NGMODE_EXCLUSIVE
8290: 20 29 7b 0a 20 20 20 20 20 20 7a 52 65 74 20 3d   ){.      zRet =
82a0: 20 22 65 78 63 6c 75 73 69 76 65 22 3b 0a 20 20   "exclusive";.  
82b0: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
82c0: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
82d0: 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   1);.    sqlite3
82e0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
82f0: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
8300: 45 2c 20 22 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65  E, "locking_mode
8310: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
8320: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
8330: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
8340: 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c  tring8, 0, 1, 0,
8350: 20 7a 52 65 74 2c 20 30 29 3b 0a 20 20 20 20 73   zRet, 0);.    s
8360: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
8370: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
8380: 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 62 72 65  , 1, 1);.    bre
8390: 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
83a0: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
83b0: 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f  base.]journal_mo
83c0: 64 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  de.  **  PRAGMA 
83d0: 5b 64 61 74 61 62 61 73 65 2e 5d 6a 6f 75 72 6e  [database.]journ
83e0: 61 6c 5f 6d 6f 64 65 20 3d 0a 20 20 2a 2a 20 20  al_mode =.  **  
83f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8400: 20 20 20 20 28 64 65 6c 65 74 65 7c 70 65 72 73      (delete|pers
8410: 69 73 74 7c 6f 66 66 7c 74 72 75 6e 63 61 74 65  ist|off|truncate
8420: 7c 6d 65 6d 6f 72 79 7c 77 61 6c 7c 6f 66 66 29  |memory|wal|off)
8430: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
8440: 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f 4d 4f 44  gTyp_JOURNAL_MOD
8450: 45 3a 20 7b 0a 20 20 20 20 69 6e 74 20 65 4d 6f  E: {.    int eMo
8460: 64 65 3b 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e  de;        /* On
8470: 65 20 6f 66 20 74 68 65 20 50 41 47 45 52 5f 4a  e of the PAGER_J
8480: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 73  OURNALMODE_XXX s
8490: 79 6d 62 6f 6c 73 20 2a 2f 0a 20 20 20 20 69 6e  ymbols */.    in
84a0: 74 20 69 69 3b 20 20 20 20 20 20 20 20 20 20 20  t ii;           
84b0: 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20  /* Loop counter 
84c0: 2a 2f 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 56  */..    sqlite3V
84d0: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
84e0: 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   1);.    sqlite3
84f0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
8500: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
8510: 45 2c 20 22 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65  E, "journal_mode
8520: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
8530: 29 3b 0a 0a 20 20 20 20 69 66 28 20 7a 52 69 67  );..    if( zRig
8540: 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f  ht==0 ){.      /
8550: 2a 20 49 66 20 74 68 65 72 65 20 69 73 20 6e 6f  * If there is no
8560: 20 22 3d 4d 4f 44 45 22 20 70 61 72 74 20 6f 66   "=MODE" part of
8570: 20 74 68 65 20 70 72 61 67 6d 61 2c 20 64 6f 20   the pragma, do 
8580: 61 20 71 75 65 72 79 20 66 6f 72 20 74 68 65 0a  a query for the.
8590: 20 20 20 20 20 20 2a 2a 20 63 75 72 72 65 6e 74        ** current
85a0: 20 6d 6f 64 65 20 2a 2f 0a 20 20 20 20 20 20 65   mode */.      e
85b0: 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f 55  Mode = PAGER_JOU
85c0: 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b 0a  RNALMODE_QUERY;.
85d0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
85e0: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4d 6f   const char *zMo
85f0: 64 65 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 20  de;.      int n 
8600: 3d 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  = sqlite3Strlen3
8610: 30 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20  0(zRight);.     
8620: 20 66 6f 72 28 65 4d 6f 64 65 3d 30 3b 20 28 7a   for(eMode=0; (z
8630: 4d 6f 64 65 20 3d 20 73 71 6c 69 74 65 33 4a 6f  Mode = sqlite3Jo
8640: 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4d  urnalModename(eM
8650: 6f 64 65 29 29 21 3d 30 3b 20 65 4d 6f 64 65 2b  ode))!=0; eMode+
8660: 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28 20  +){.        if( 
8670: 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28  sqlite3StrNICmp(
8680: 7a 52 69 67 68 74 2c 20 7a 4d 6f 64 65 2c 20 6e  zRight, zMode, n
8690: 29 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20  )==0 ) break;.  
86a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
86b0: 21 7a 4d 6f 64 65 20 29 7b 0a 20 20 20 20 20 20  !zMode ){.      
86c0: 20 20 2f 2a 20 49 66 20 74 68 65 20 22 3d 4d 4f    /* If the "=MO
86d0: 44 45 22 20 70 61 72 74 20 64 6f 65 73 20 6e 6f  DE" part does no
86e0: 74 20 6d 61 74 63 68 20 61 6e 79 20 6b 6e 6f 77  t match any know
86f0: 6e 20 6a 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c 0a  n journal mode,.
8700: 20 20 20 20 20 20 20 20 2a 2a 20 74 68 65 6e 20          ** then 
8710: 64 6f 20 61 20 71 75 65 72 79 20 2a 2f 0a 20 20  do a query */.  
8720: 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 50 41        eMode = PA
8730: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
8740: 51 55 45 52 59 3b 0a 20 20 20 20 20 20 7d 0a 20  QUERY;.      }. 
8750: 20 20 20 7d 0a 20 20 20 20 69 66 28 20 65 4d 6f     }.    if( eMo
8760: 64 65 3d 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41  de==PAGER_JOURNA
8770: 4c 4d 4f 44 45 5f 51 55 45 52 59 20 26 26 20 70  LMODE_QUERY && p
8780: 49 64 32 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20  Id2->n==0 ){.   
8790: 20 20 20 2f 2a 20 43 6f 6e 76 65 72 74 20 22 50     /* Convert "P
87a0: 52 41 47 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f  RAGMA journal_mo
87b0: 64 65 22 20 69 6e 74 6f 20 22 50 52 41 47 4d 41  de" into "PRAGMA
87c0: 20 6d 61 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f   main.journal_mo
87d0: 64 65 22 20 2a 2f 0a 20 20 20 20 20 20 69 44 62  de" */.      iDb
87e0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 70 49 64 32   = 0;.      pId2
87f0: 2d 3e 6e 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20  ->n = 1;.    }. 
8800: 20 20 20 66 6f 72 28 69 69 3d 64 62 2d 3e 6e 44     for(ii=db->nD
8810: 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69 69 2d 2d  b-1; ii>=0; ii--
8820: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d  ){.      if( db-
8830: 3e 61 44 62 5b 69 69 5d 2e 70 42 74 20 26 26 20  >aDb[ii].pBt && 
8840: 28 69 69 3d 3d 69 44 62 20 7c 7c 20 70 49 64 32  (ii==iDb || pId2
8850: 2d 3e 6e 3d 3d 30 29 20 29 7b 0a 20 20 20 20 20  ->n==0) ){.     
8860: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 55 73     sqlite3VdbeUs
8870: 65 73 42 74 72 65 65 28 76 2c 20 69 69 29 3b 0a  esBtree(v, ii);.
8880: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
8890: 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
88a0: 4a 6f 75 72 6e 61 6c 4d 6f 64 65 2c 20 69 69 2c  JournalMode, ii,
88b0: 20 31 2c 20 65 4d 6f 64 65 29 3b 0a 20 20 20 20   1, eMode);.    
88c0: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71    }.    }.    sq
88d0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
88e0: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
88f0: 20 31 2c 20 31 29 3b 0a 20 20 20 20 62 72 65 61   1, 1);.    brea
8900: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
8910: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
8920: 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a  ase.]journal_siz
8930: 65 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20 20 50 52  e_limit.  **  PR
8940: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
8950: 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d  journal_size_lim
8960: 69 74 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47  it=N.  **.  ** G
8970: 65 74 20 6f 72 20 73 65 74 20 74 68 65 20 73 69  et or set the si
8980: 7a 65 20 6c 69 6d 69 74 20 6f 6e 20 72 6f 6c 6c  ze limit on roll
8990: 62 61 63 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c  back journal fil
89a0: 65 73 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  es..  */.  case 
89b0: 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f  PragTyp_JOURNAL_
89c0: 53 49 5a 45 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20  SIZE_LIMIT: {.  
89d0: 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72 20    Pager *pPager 
89e0: 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50 61  = sqlite3BtreePa
89f0: 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20  ger(pDb->pBt);. 
8a00: 20 20 20 69 36 34 20 69 4c 69 6d 69 74 20 3d 20     i64 iLimit = 
8a10: 2d 32 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  -2;.    if( zRig
8a20: 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ht ){.      sqli
8a30: 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34  te3DecOrHexToI64
8a40: 28 7a 52 69 67 68 74 2c 20 26 69 4c 69 6d 69 74  (zRight, &iLimit
8a50: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 69 4c 69  );.      if( iLi
8a60: 6d 69 74 3c 2d 31 20 29 20 69 4c 69 6d 69 74 20  mit<-1 ) iLimit 
8a70: 3d 20 2d 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20  = -1;.    }.    
8a80: 69 4c 69 6d 69 74 20 3d 20 73 71 6c 69 74 65 33  iLimit = sqlite3
8a90: 50 61 67 65 72 4a 6f 75 72 6e 61 6c 53 69 7a 65  PagerJournalSize
8aa0: 4c 69 6d 69 74 28 70 50 61 67 65 72 2c 20 69 4c  Limit(pPager, iL
8ab0: 69 6d 69 74 29 3b 0a 20 20 20 20 72 65 74 75 72  imit);.    retur
8ac0: 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73  nSingleInt(pPars
8ad0: 65 2c 20 22 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65  e, "journal_size
8ae0: 5f 6c 69 6d 69 74 22 2c 20 69 4c 69 6d 69 74 29  _limit", iLimit)
8af0: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
8b00: 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ..#endif /* SQLI
8b10: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
8b20: 41 47 4d 41 53 20 2a 2f 0a 0a 20 20 2f 2a 0a 20  AGMAS */..  /*. 
8b30: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
8b40: 61 62 61 73 65 2e 5d 61 75 74 6f 5f 76 61 63 75  abase.]auto_vacu
8b50: 75 6d 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  um.  **  PRAGMA 
8b60: 5b 64 61 74 61 62 61 73 65 2e 5d 61 75 74 6f 5f  [database.]auto_
8b70: 76 61 63 75 75 6d 3d 4e 0a 20 20 2a 2a 0a 20 20  vacuum=N.  **.  
8b80: 2a 2a 20 47 65 74 20 6f 72 20 73 65 74 20 74 68  ** Get or set th
8b90: 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64  e value of the d
8ba0: 61 74 61 62 61 73 65 20 27 61 75 74 6f 2d 76 61  atabase 'auto-va
8bb0: 63 75 75 6d 27 20 70 61 72 61 6d 65 74 65 72 2e  cuum' parameter.
8bc0: 0a 20 20 2a 2a 20 54 68 65 20 76 61 6c 75 65 20  .  ** The value 
8bd0: 69 73 20 6f 6e 65 20 6f 66 3a 20 20 30 20 4e 4f  is one of:  0 NO
8be0: 4e 45 20 31 20 46 55 4c 4c 20 32 20 49 4e 43 52  NE 1 FULL 2 INCR
8bf0: 45 4d 45 4e 54 41 4c 0a 20 20 2a 2f 0a 23 69 66  EMENTAL.  */.#if
8c00: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
8c10: 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 63 61  _AUTOVACUUM.  ca
8c20: 73 65 20 50 72 61 67 54 79 70 5f 41 55 54 4f 5f  se PragTyp_AUTO_
8c30: 56 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20 42 74  VACUUM: {.    Bt
8c40: 72 65 65 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e  ree *pBt = pDb->
8c50: 70 42 74 3b 0a 20 20 20 20 61 73 73 65 72 74 28  pBt;.    assert(
8c60: 20 70 42 74 21 3d 30 20 29 3b 0a 20 20 20 20 69   pBt!=0 );.    i
8c70: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
8c80: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
8c90: 49 6e 74 28 70 50 61 72 73 65 2c 20 22 61 75 74  Int(pParse, "aut
8ca0: 6f 5f 76 61 63 75 75 6d 22 2c 20 73 71 6c 69 74  o_vacuum", sqlit
8cb0: 65 33 42 74 72 65 65 47 65 74 41 75 74 6f 56 61  e3BtreeGetAutoVa
8cc0: 63 75 75 6d 28 70 42 74 29 29 3b 0a 20 20 20 20  cuum(pBt));.    
8cd0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74  }else{.      int
8ce0: 20 65 41 75 74 6f 20 3d 20 67 65 74 41 75 74 6f   eAuto = getAuto
8cf0: 56 61 63 75 75 6d 28 7a 52 69 67 68 74 29 3b 0a  Vacuum(zRight);.
8d00: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65 41        assert( eA
8d10: 75 74 6f 3e 3d 30 20 26 26 20 65 41 75 74 6f 3c  uto>=0 && eAuto<
8d20: 3d 32 20 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e  =2 );.      db->
8d30: 6e 65 78 74 41 75 74 6f 76 61 63 20 3d 20 28 75  nextAutovac = (u
8d40: 38 29 65 41 75 74 6f 3b 0a 20 20 20 20 20 20 2f  8)eAuto;.      /
8d50: 2a 20 43 61 6c 6c 20 53 65 74 41 75 74 6f 56 61  * Call SetAutoVa
8d60: 63 75 75 6d 28 29 20 74 6f 20 73 65 74 20 69 6e  cuum() to set in
8d70: 69 74 69 61 6c 69 7a 65 20 74 68 65 20 69 6e 74  itialize the int
8d80: 65 72 6e 61 6c 20 61 75 74 6f 20 61 6e 64 0a 20  ernal auto and. 
8d90: 20 20 20 20 20 2a 2a 20 69 6e 63 72 2d 76 61 63       ** incr-vac
8da0: 75 75 6d 20 66 6c 61 67 73 2e 20 54 68 69 73 20  uum flags. This 
8db0: 69 73 20 72 65 71 75 69 72 65 64 20 69 6e 20 63  is required in c
8dc0: 61 73 65 20 74 68 69 73 20 63 6f 6e 6e 65 63 74  ase this connect
8dd0: 69 6f 6e 0a 20 20 20 20 20 20 2a 2a 20 63 72 65  ion.      ** cre
8de0: 61 74 65 73 20 74 68 65 20 64 61 74 61 62 61 73  ates the databas
8df0: 65 20 66 69 6c 65 2e 20 49 74 20 69 73 20 69 6d  e file. It is im
8e00: 70 6f 72 74 61 6e 74 20 74 68 61 74 20 69 74 20  portant that it 
8e10: 69 73 20 63 72 65 61 74 65 64 0a 20 20 20 20 20  is created.     
8e20: 20 2a 2a 20 61 73 20 61 6e 20 61 75 74 6f 2d 76   ** as an auto-v
8e30: 61 63 75 75 6d 20 63 61 70 61 62 6c 65 20 64 62  acuum capable db
8e40: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
8e50: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 42 74 72   rc = sqlite3Btr
8e60: 65 65 53 65 74 41 75 74 6f 56 61 63 75 75 6d 28  eeSetAutoVacuum(
8e70: 70 42 74 2c 20 65 41 75 74 6f 29 3b 0a 20 20 20  pBt, eAuto);.   
8e80: 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54     if( rc==SQLIT
8e90: 45 5f 4f 4b 20 26 26 20 28 65 41 75 74 6f 3d 3d  E_OK && (eAuto==
8ea0: 31 20 7c 7c 20 65 41 75 74 6f 3d 3d 32 29 20 29  1 || eAuto==2) )
8eb0: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 57 68 65  {.        /* Whe
8ec0: 6e 20 73 65 74 74 69 6e 67 20 74 68 65 20 61 75  n setting the au
8ed0: 74 6f 5f 76 61 63 75 75 6d 20 6d 6f 64 65 20 74  to_vacuum mode t
8ee0: 6f 20 65 69 74 68 65 72 20 22 66 75 6c 6c 22 20  o either "full" 
8ef0: 6f 72 20 0a 20 20 20 20 20 20 20 20 2a 2a 20 22  or .        ** "
8f00: 69 6e 63 72 65 6d 65 6e 74 61 6c 22 2c 20 77 72  incremental", wr
8f10: 69 74 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  ite the value of
8f20: 20 6d 65 74 61 5b 36 5d 20 69 6e 20 74 68 65 20   meta[6] in the 
8f30: 64 61 74 61 62 61 73 65 0a 20 20 20 20 20 20 20  database.       
8f40: 20 2a 2a 20 66 69 6c 65 2e 20 42 65 66 6f 72 65   ** file. Before
8f50: 20 77 72 69 74 69 6e 67 20 74 6f 20 6d 65 74 61   writing to meta
8f60: 5b 36 5d 2c 20 63 68 65 63 6b 20 74 68 61 74 20  [6], check that 
8f70: 6d 65 74 61 5b 33 5d 20 69 6e 64 69 63 61 74 65  meta[3] indicate
8f80: 73 0a 20 20 20 20 20 20 20 20 2a 2a 20 74 68 61  s.        ** tha
8f90: 74 20 74 68 69 73 20 72 65 61 6c 6c 79 20 69 73  t this really is
8fa0: 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20   an auto-vacuum 
8fb0: 63 61 70 61 62 6c 65 20 64 61 74 61 62 61 73 65  capable database
8fc0: 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20 20  ..        */.   
8fd0: 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
8fe0: 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42 45  t int iLn = VDBE
8ff0: 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28 32  _OFFSET_LINENO(2
9000: 29 3b 0a 20 20 20 20 20 20 20 20 73 74 61 74 69  );.        stati
9010: 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69  c const VdbeOpLi
9020: 73 74 20 73 65 74 4d 65 74 61 36 5b 5d 20 3d 20  st setMeta6[] = 
9030: 7b 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50  {.          { OP
9040: 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20  _Transaction,   
9050: 20 30 2c 20 20 20 20 20 20 20 20 20 31 2c 20 20   0,         1,  
9060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
9070: 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20  },    /* 0 */.  
9080: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61          { OP_Rea
9090: 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 30 2c 20  dCookie,     0, 
90a0: 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20 20          1,      
90b0: 20 20 20 42 54 52 45 45 5f 4c 41 52 47 45 53 54     BTREE_LARGEST
90c0: 5f 52 4f 4f 54 5f 50 41 47 45 7d 2c 0a 20 20 20  _ROOT_PAGE},.   
90d0: 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 2c 20         { OP_If, 
90e0: 20 20 20 20 20 20 20 20 20 20 20 20 31 2c 20 20              1,  
90f0: 20 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20         0,       
9100: 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20            0},   
9110: 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20 20   /* 2 */.       
9120: 20 20 20 7b 20 4f 50 5f 48 61 6c 74 2c 20 20 20     { OP_Halt,   
9130: 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 4f          SQLITE_O
9140: 4b 2c 20 4f 45 5f 41 62 6f 72 74 2c 20 20 20 20  K, OE_Abort,    
9150: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20        0},    /* 
9160: 33 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b  3 */.          {
9170: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20   OP_Integer,    
9180: 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 31      0,         1
9190: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
91a0: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 34 20 2a 2f    0},    /* 4 */
91b0: 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  .          { OP_
91c0: 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20  SetCookie,      
91d0: 30 2c 20 20 20 20 20 20 20 20 20 42 54 52 45 45  0,         BTREE
91e0: 5f 49 4e 43 52 5f 56 41 43 55 55 4d 2c 20 31 7d  _INCR_VACUUM, 1}
91f0: 2c 20 20 20 20 2f 2a 20 35 20 2a 2f 0a 20 20 20  ,    /* 5 */.   
9200: 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 20 20       };.        
9210: 69 6e 74 20 69 41 64 64 72 3b 0a 20 20 20 20 20  int iAddr;.     
9220: 20 20 20 69 41 64 64 72 20 3d 20 73 71 6c 69 74     iAddr = sqlit
9230: 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28  e3VdbeAddOpList(
9240: 76 2c 20 41 72 72 61 79 53 69 7a 65 28 73 65 74  v, ArraySize(set
9250: 4d 65 74 61 36 29 2c 20 73 65 74 4d 65 74 61 36  Meta6), setMeta6
9260: 2c 20 69 4c 6e 29 3b 0a 20 20 20 20 20 20 20 20  , iLn);.        
9270: 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
9280: 65 50 31 28 76 2c 20 69 41 64 64 72 2c 20 69 44  eP1(v, iAddr, iD
9290: 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  b);.        sqli
92a0: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
92b0: 76 2c 20 69 41 64 64 72 2b 31 2c 20 69 44 62 29  v, iAddr+1, iDb)
92c0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
92d0: 33 56 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c  3VdbeChangeP2(v,
92e0: 20 69 41 64 64 72 2b 32 2c 20 69 41 64 64 72 2b   iAddr+2, iAddr+
92f0: 34 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  4);.        sqli
9300: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
9310: 76 2c 20 69 41 64 64 72 2b 34 2c 20 65 41 75 74  v, iAddr+4, eAut
9320: 6f 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71  o-1);.        sq
9330: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
9340: 31 28 76 2c 20 69 41 64 64 72 2b 35 2c 20 69 44  1(v, iAddr+5, iD
9350: 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  b);.        sqli
9360: 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65 65  te3VdbeUsesBtree
9370: 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  (v, iDb);.      
9380: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  }.    }.    brea
9390: 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20  k;.  }.#endif.. 
93a0: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
93b0: 20 5b 64 61 74 61 62 61 73 65 2e 5d 69 6e 63 72   [database.]incr
93c0: 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 28 4e  emental_vacuum(N
93d0: 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 6f 20 4e  ).  **.  ** Do N
93e0: 20 73 74 65 70 73 20 6f 66 20 69 6e 63 72 65 6d   steps of increm
93f0: 65 6e 74 61 6c 20 76 61 63 75 75 6d 69 6e 67 20  ental vacuuming 
9400: 6f 6e 20 61 20 64 61 74 61 62 61 73 65 2e 0a 20  on a database.. 
9410: 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49   */.#ifndef SQLI
9420: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
9430: 55 4d 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  UM.  case PragTy
9440: 70 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f 56 41  p_INCREMENTAL_VA
9450: 43 55 55 4d 3a 20 7b 0a 20 20 20 20 69 6e 74 20  CUUM: {.    int 
9460: 69 4c 69 6d 69 74 2c 20 61 64 64 72 3b 0a 20 20  iLimit, addr;.  
9470: 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20    if( zRight==0 
9480: 7c 7c 20 21 73 71 6c 69 74 65 33 47 65 74 49 6e  || !sqlite3GetIn
9490: 74 33 32 28 7a 52 69 67 68 74 2c 20 26 69 4c 69  t32(zRight, &iLi
94a0: 6d 69 74 29 20 7c 7c 20 69 4c 69 6d 69 74 3c 3d  mit) || iLimit<=
94b0: 30 20 29 7b 0a 20 20 20 20 20 20 69 4c 69 6d 69  0 ){.      iLimi
94c0: 74 20 3d 20 30 78 37 66 66 66 66 66 66 66 3b 0a  t = 0x7fffffff;.
94d0: 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65      }.    sqlite
94e0: 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61  3BeginWriteOpera
94f0: 74 69 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c 20  tion(pParse, 0, 
9500: 69 44 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  iDb);.    sqlite
9510: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
9520: 50 5f 49 6e 74 65 67 65 72 2c 20 69 4c 69 6d 69  P_Integer, iLimi
9530: 74 2c 20 31 29 3b 0a 20 20 20 20 61 64 64 72 20  t, 1);.    addr 
9540: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
9550: 4f 70 31 28 76 2c 20 4f 50 5f 49 6e 63 72 56 61  Op1(v, OP_IncrVa
9560: 63 75 75 6d 2c 20 69 44 62 29 3b 20 56 64 62 65  cuum, iDb); Vdbe
9570: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
9580: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
9590: 70 31 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p1(v, OP_ResultR
95a0: 6f 77 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69  ow, 1);.    sqli
95b0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
95c0: 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d   OP_AddImm, 1, -
95d0: 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  1);.    sqlite3V
95e0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
95f0: 49 66 50 6f 73 2c 20 31 2c 20 61 64 64 72 29 3b  IfPos, 1, addr);
9600: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
9610: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
9620: 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64  eJumpHere(v, add
9630: 72 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  r);.    break;. 
9640: 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64   }.#endif..#ifnd
9650: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ef SQLITE_OMIT_P
9660: 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 20 20 2f  AGER_PRAGMAS.  /
9670: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
9680: 64 61 74 61 62 61 73 65 2e 5d 63 61 63 68 65 5f  database.]cache_
9690: 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d  size.  **  PRAGM
96a0: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 63 61 63  A [database.]cac
96b0: 68 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20  he_size=N.  **. 
96c0: 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f   ** The first fo
96d0: 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63  rm reports the c
96e0: 75 72 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65 74  urrent local set
96f0: 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a  ting for the.  *
9700: 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  * page cache siz
9710: 65 2e 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  e. The second fo
9720: 72 6d 20 73 65 74 73 20 74 68 65 20 6c 6f 63 61  rm sets the loca
9730: 6c 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68  l.  ** page cach
9740: 65 20 73 69 7a 65 20 76 61 6c 75 65 2e 20 20 49  e size value.  I
9750: 66 20 4e 20 69 73 20 70 6f 73 69 74 69 76 65 20  f N is positive 
9760: 74 68 65 6e 20 74 68 61 74 20 69 73 20 74 68 65  then that is the
9770: 0a 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20  .  ** number of 
9780: 70 61 67 65 73 20 69 6e 20 74 68 65 20 63 61 63  pages in the cac
9790: 68 65 2e 20 20 49 66 20 4e 20 69 73 20 6e 65 67  he.  If N is neg
97a0: 61 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65 0a  ative, then the.
97b0: 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70    ** number of p
97c0: 61 67 65 73 20 69 73 20 61 64 6a 75 73 74 65 64  ages is adjusted
97d0: 20 73 6f 20 74 68 61 74 20 74 68 65 20 63 61 63   so that the cac
97e0: 68 65 20 75 73 65 73 20 2d 4e 20 6b 69 62 69 62  he uses -N kibib
97f0: 79 74 65 73 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d  ytes.  ** of mem
9800: 6f 72 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ory..  */.  case
9810: 20 50 72 61 67 54 79 70 5f 43 41 43 48 45 5f 53   PragTyp_CACHE_S
9820: 49 5a 45 3a 20 7b 0a 20 20 20 20 61 73 73 65 72  IZE: {.    asser
9830: 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61  t( sqlite3Schema
9840: 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44  MutexHeld(db, iD
9850: 62 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28  b, 0) );.    if(
9860: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
9870: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
9880: 74 28 70 50 61 72 73 65 2c 20 22 63 61 63 68 65  t(pParse, "cache
9890: 5f 73 69 7a 65 22 2c 20 70 44 62 2d 3e 70 53 63  _size", pDb->pSc
98a0: 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65  hema->cache_size
98b0: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
98c0: 20 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 73      int size = s
98d0: 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68  qlite3Atoi(zRigh
98e0: 74 29 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e 70  t);.      pDb->p
98f0: 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69  Schema->cache_si
9900: 7a 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20  ze = size;.     
9910: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
9920: 43 61 63 68 65 53 69 7a 65 28 70 44 62 2d 3e 70  CacheSize(pDb->p
9930: 42 74 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  Bt, pDb->pSchema
9940: 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20  ->cache_size);. 
9950: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
9960: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
9970: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
9980: 2e 5d 6d 6d 61 70 5f 73 69 7a 65 28 4e 29 0a 20  .]mmap_size(N). 
9990: 20 2a 2a 0a 20 20 2a 2a 20 55 73 65 64 20 74 6f   **.  ** Used to
99a0: 20 73 65 74 20 6d 61 70 70 69 6e 67 20 73 69 7a   set mapping siz
99b0: 65 20 6c 69 6d 69 74 2e 20 54 68 65 20 6d 61 70  e limit. The map
99c0: 70 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69 74 20  ping size limit 
99d0: 69 73 0a 20 20 2a 2a 20 75 73 65 64 20 74 6f 20  is.  ** used to 
99e0: 6c 69 6d 69 74 20 74 68 65 20 61 67 67 72 65 67  limit the aggreg
99f0: 61 74 65 20 73 69 7a 65 20 6f 66 20 61 6c 6c 20  ate size of all 
9a00: 6d 65 6d 6f 72 79 20 6d 61 70 70 65 64 20 72 65  memory mapped re
9a10: 67 69 6f 6e 73 20 6f 66 20 74 68 65 0a 20 20 2a  gions of the.  *
9a20: 2a 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  * database file.
9a30: 20 49 66 20 74 68 69 73 20 70 61 72 61 6d 65 74   If this paramet
9a40: 65 72 20 69 73 20 73 65 74 20 74 6f 20 7a 65 72  er is set to zer
9a50: 6f 2c 20 74 68 65 6e 20 6d 65 6d 6f 72 79 20 6d  o, then memory m
9a60: 61 70 70 69 6e 67 0a 20 20 2a 2a 20 69 73 20 6e  apping.  ** is n
9a70: 6f 74 20 75 73 65 64 20 61 74 20 61 6c 6c 2e 20  ot used at all. 
9a80: 20 49 66 20 4e 20 69 73 20 6e 65 67 61 74 69 76   If N is negativ
9a90: 65 2c 20 74 68 65 6e 20 74 68 65 20 64 65 66 61  e, then the defa
9aa0: 75 6c 74 20 6d 65 6d 6f 72 79 20 6d 61 70 0a 20  ult memory map. 
9ab0: 20 2a 2a 20 6c 69 6d 69 74 20 64 65 74 65 72 6d   ** limit determ
9ac0: 69 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f  ined by sqlite3_
9ad0: 63 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f  config(SQLITE_CO
9ae0: 4e 46 49 47 5f 4d 4d 41 50 5f 53 49 5a 45 29 20  NFIG_MMAP_SIZE) 
9af0: 69 73 20 73 65 74 2e 0a 20 20 2a 2a 20 54 68 65  is set..  ** The
9b00: 20 70 61 72 61 6d 65 74 65 72 20 4e 20 69 73 20   parameter N is 
9b10: 6d 65 61 73 75 72 65 64 20 69 6e 20 62 79 74 65  measured in byte
9b20: 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69  s..  **.  ** Thi
9b30: 73 20 76 61 6c 75 65 20 69 73 20 61 64 76 69 73  s value is advis
9b40: 6f 72 79 2e 20 20 54 68 65 20 75 6e 64 65 72 6c  ory.  The underl
9b50: 79 69 6e 67 20 56 46 53 20 69 73 20 66 72 65 65  ying VFS is free
9b60: 20 74 6f 20 6d 65 6d 6f 72 79 20 6d 61 70 0a 20   to memory map. 
9b70: 20 2a 2a 20 61 73 20 6c 69 74 74 6c 65 20 6f 72   ** as little or
9b80: 20 61 73 20 6d 75 63 68 20 61 73 20 69 74 20 77   as much as it w
9b90: 61 6e 74 73 2e 20 20 45 78 63 65 70 74 2c 20 69  ants.  Except, i
9ba0: 66 20 4e 20 69 73 20 73 65 74 20 74 6f 20 30 20  f N is set to 0 
9bb0: 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20 75 70  then the.  ** up
9bc0: 70 65 72 20 6c 61 79 65 72 73 20 77 69 6c 6c 20  per layers will 
9bd0: 6e 65 76 65 72 20 69 6e 76 6f 6b 65 20 74 68 65  never invoke the
9be0: 20 78 46 65 74 63 68 20 69 6e 74 65 72 66 61 63   xFetch interfac
9bf0: 65 73 20 74 6f 20 74 68 65 20 56 46 53 2e 0a 20  es to the VFS.. 
9c00: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
9c10: 79 70 5f 4d 4d 41 50 5f 53 49 5a 45 3a 20 7b 0a  yp_MMAP_SIZE: {.
9c20: 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36      sqlite3_int6
9c30: 34 20 73 7a 3b 0a 23 69 66 20 53 51 4c 49 54 45  4 sz;.#if SQLITE
9c40: 5f 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 3e 30  _MAX_MMAP_SIZE>0
9c50: 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c  .    assert( sql
9c60: 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48  ite3SchemaMutexH
9c70: 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20  eld(db, iDb, 0) 
9c80: 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  );.    if( zRigh
9c90: 74 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69  t ){.      int i
9ca0: 69 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  i;.      sqlite3
9cb0: 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a 52  DecOrHexToI64(zR
9cc0: 69 67 68 74 2c 20 26 73 7a 29 3b 0a 20 20 20 20  ight, &sz);.    
9cd0: 20 20 69 66 28 20 73 7a 3c 30 20 29 20 73 7a 20    if( sz<0 ) sz 
9ce0: 3d 20 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43  = sqlite3GlobalC
9cf0: 6f 6e 66 69 67 2e 73 7a 4d 6d 61 70 3b 0a 20 20  onfig.szMmap;.  
9d00: 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d      if( pId2->n=
9d10: 3d 30 20 29 20 64 62 2d 3e 73 7a 4d 6d 61 70 20  =0 ) db->szMmap 
9d20: 3d 20 73 7a 3b 0a 20 20 20 20 20 20 66 6f 72 28  = sz;.      for(
9d30: 69 69 3d 64 62 2d 3e 6e 44 62 2d 31 3b 20 69 69  ii=db->nDb-1; ii
9d40: 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a 20 20 20 20  >=0; ii--){.    
9d50: 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b      if( db->aDb[
9d60: 69 69 5d 2e 70 42 74 20 26 26 20 28 69 69 3d 3d  ii].pBt && (ii==
9d70: 69 44 62 20 7c 7c 20 70 49 64 32 2d 3e 6e 3d 3d  iDb || pId2->n==
9d80: 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  0) ){.          
9d90: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 4d  sqlite3BtreeSetM
9da0: 6d 61 70 4c 69 6d 69 74 28 64 62 2d 3e 61 44 62  mapLimit(db->aDb
9db0: 5b 69 69 5d 2e 70 42 74 2c 20 73 7a 29 3b 0a 20  [ii].pBt, sz);. 
9dc0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
9dd0: 0a 20 20 20 20 7d 0a 20 20 20 20 73 7a 20 3d 20  .    }.    sz = 
9de0: 2d 31 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c  -1;.    rc = sql
9df0: 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
9e00: 6c 28 64 62 2c 20 7a 44 62 2c 20 53 51 4c 49 54  l(db, zDb, SQLIT
9e10: 45 5f 46 43 4e 54 4c 5f 4d 4d 41 50 5f 53 49 5a  E_FCNTL_MMAP_SIZ
9e20: 45 2c 20 26 73 7a 29 3b 0a 23 65 6c 73 65 0a 20  E, &sz);.#else. 
9e30: 20 20 20 73 7a 20 3d 20 30 3b 0a 20 20 20 20 72     sz = 0;.    r
9e40: 63 20 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 23  c = SQLITE_OK;.#
9e50: 65 6e 64 69 66 0a 20 20 20 20 69 66 28 20 72 63  endif.    if( rc
9e60: 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
9e70: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
9e80: 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 6d 6d  eInt(pParse, "mm
9e90: 61 70 5f 73 69 7a 65 22 2c 20 73 7a 29 3b 0a 20  ap_size", sz);. 
9ea0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 72 63 21     }else if( rc!
9eb0: 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44  =SQLITE_NOTFOUND
9ec0: 20 29 7b 0a 20 20 20 20 20 20 70 50 61 72 73 65   ){.      pParse
9ed0: 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 20 20  ->nErr++;.      
9ee0: 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b  pParse->rc = rc;
9ef0: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
9f00: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
9f10: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
9f20: 74 6f 72 65 0a 20 20 2a 2a 20 20 20 50 52 41 47  tore.  **   PRAG
9f30: 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20  MA temp_store = 
9f40: 22 64 65 66 61 75 6c 74 22 7c 22 6d 65 6d 6f 72  "default"|"memor
9f50: 79 22 7c 22 66 69 6c 65 22 0a 20 20 2a 2a 0a 20  y"|"file".  **. 
9f60: 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65   ** Return or se
9f70: 74 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75  t the local valu
9f80: 65 20 6f 66 20 74 68 65 20 74 65 6d 70 5f 73 74  e of the temp_st
9f90: 6f 72 65 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ore flag.  Chang
9fa0: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63  ing.  ** the loc
9fb0: 61 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f  al value does no
9fc0: 74 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74  t make changes t
9fd0: 6f 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20  o the disk file 
9fe0: 61 6e 64 20 74 68 65 20 64 65 66 61 75 6c 74 0a  and the default.
9ff0: 20 20 2a 2a 20 76 61 6c 75 65 20 77 69 6c 6c 20    ** value will 
a000: 62 65 20 72 65 73 74 6f 72 65 64 20 74 68 65 20  be restored the 
a010: 6e 65 78 74 20 74 69 6d 65 20 74 68 65 20 64 61  next time the da
a020: 74 61 62 61 73 65 20 69 73 20 6f 70 65 6e 65 64  tabase is opened
a030: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65  ..  **.  ** Note
a040: 20 74 68 61 74 20 69 74 20 69 73 20 70 6f 73 73   that it is poss
a050: 69 62 6c 65 20 66 6f 72 20 74 68 65 20 6c 69 62  ible for the lib
a060: 72 61 72 79 20 63 6f 6d 70 69 6c 65 2d 74 69 6d  rary compile-tim
a070: 65 20 6f 70 74 69 6f 6e 73 20 74 6f 0a 20 20 2a  e options to.  *
a080: 2a 20 6f 76 65 72 72 69 64 65 20 74 68 69 73 20  * override this 
a090: 73 65 74 74 69 6e 67 0a 20 20 2a 2f 0a 20 20 63  setting.  */.  c
a0a0: 61 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d 50  ase PragTyp_TEMP
a0b0: 5f 53 54 4f 52 45 3a 20 7b 0a 20 20 20 20 69 66  _STORE: {.    if
a0c0: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
a0d0: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
a0e0: 6e 74 28 70 50 61 72 73 65 2c 20 22 74 65 6d 70  nt(pParse, "temp
a0f0: 5f 73 74 6f 72 65 22 2c 20 64 62 2d 3e 74 65 6d  _store", db->tem
a100: 70 5f 73 74 6f 72 65 29 3b 0a 20 20 20 20 7d 65  p_store);.    }e
a110: 6c 73 65 7b 0a 20 20 20 20 20 20 63 68 61 6e 67  lse{.      chang
a120: 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70 50 61  eTempStorage(pPa
a130: 72 73 65 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20  rse, zRight);.  
a140: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
a150: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20   }..  /*.  **   
a160: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
a170: 65 5f 64 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a  e_directory.  **
a180: 20 20 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73     PRAGMA temp_s
a190: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d  tore_directory =
a1a0: 20 22 22 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e   ""|"directory_n
a1b0: 61 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52  ame".  **.  ** R
a1c0: 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65  eturn or set the
a1d0: 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20   local value of 
a1e0: 74 68 65 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  the temp_store_d
a1f0: 69 72 65 63 74 6f 72 79 20 66 6c 61 67 2e 20 20  irectory flag.  
a200: 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68  Changing.  ** th
a210: 65 20 76 61 6c 75 65 20 73 65 74 73 20 61 20 73  e value sets a s
a220: 70 65 63 69 66 69 63 20 64 69 72 65 63 74 6f 72  pecific director
a230: 79 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72  y to be used for
a240: 20 74 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73   temporary files
a250: 2e 0a 20 20 2a 2a 20 53 65 74 74 69 6e 67 20 74  ..  ** Setting t
a260: 6f 20 61 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20  o a null string 
a270: 72 65 76 65 72 74 73 20 74 6f 20 74 68 65 20 64  reverts to the d
a280: 65 66 61 75 6c 74 20 74 65 6d 70 6f 72 61 72 79  efault temporary
a290: 20 64 69 72 65 63 74 6f 72 79 20 73 65 61 72 63   directory searc
a2a0: 68 2e 0a 20 20 2a 2a 20 49 66 20 74 65 6d 70 6f  h..  ** If tempo
a2b0: 72 61 72 79 20 64 69 72 65 63 74 6f 72 79 20 69  rary directory i
a2c0: 73 20 63 68 61 6e 67 65 64 2c 20 74 68 65 6e 20  s changed, then 
a2d0: 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74  invalidateTempSt
a2e0: 6f 72 61 67 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2f  orage..  **.  */
a2f0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
a300: 54 45 4d 50 5f 53 54 4f 52 45 5f 44 49 52 45 43  TEMP_STORE_DIREC
a310: 54 4f 52 59 3a 20 7b 0a 20 20 20 20 69 66 28 20  TORY: {.    if( 
a320: 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20  !zRight ){.     
a330: 20 69 66 28 20 73 71 6c 69 74 65 33 5f 74 65 6d   if( sqlite3_tem
a340: 70 5f 64 69 72 65 63 74 6f 72 79 20 29 7b 0a 20  p_directory ){. 
a350: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
a360: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
a370: 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  1);.        sqli
a380: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
a390: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
a3a0: 4e 41 4d 45 2c 20 0a 20 20 20 20 20 20 20 20 20  NAME, .         
a3b0: 20 20 20 22 74 65 6d 70 5f 73 74 6f 72 65 5f 64     "temp_store_d
a3c0: 69 72 65 63 74 6f 72 79 22 2c 20 53 51 4c 49 54  irectory", SQLIT
a3d0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
a3e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
a3f0: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
a400: 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 73 71 6c  g8, 0, 1, 0, sql
a410: 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74  ite3_temp_direct
a420: 6f 72 79 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  ory, 0);.       
a430: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
a440: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
a450: 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 20  ow, 1, 1);.     
a460: 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69   }.    }else{.#i
a470: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
a480: 54 5f 57 53 44 0a 20 20 20 20 20 20 69 66 28 20  T_WSD.      if( 
a490: 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20  zRight[0] ){.   
a4a0: 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20       int res;.  
a4b0: 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74        rc = sqlit
a4c0: 65 33 4f 73 41 63 63 65 73 73 28 64 62 2d 3e 70  e3OsAccess(db->p
a4d0: 56 66 73 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c  Vfs, zRight, SQL
a4e0: 49 54 45 5f 41 43 43 45 53 53 5f 52 45 41 44 57  ITE_ACCESS_READW
a4f0: 52 49 54 45 2c 20 26 72 65 73 29 3b 0a 20 20 20  RITE, &res);.   
a500: 20 20 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c       if( rc!=SQL
a510: 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30  ITE_OK || res==0
a520: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
a530: 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50  lite3ErrorMsg(pP
a540: 61 72 73 65 2c 20 22 6e 6f 74 20 61 20 77 72 69  arse, "not a wri
a550: 74 61 62 6c 65 20 64 69 72 65 63 74 6f 72 79 22  table directory"
a560: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74  );.          got
a570: 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
a580: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
a590: 20 20 20 20 20 20 69 66 28 20 53 51 4c 49 54 45        if( SQLITE
a5a0: 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a 20  _TEMP_STORE==0. 
a5b0: 20 20 20 20 20 20 7c 7c 20 28 53 51 4c 49 54 45        || (SQLITE
a5c0: 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 31 20 26  _TEMP_STORE==1 &
a5d0: 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65  & db->temp_store
a5e0: 3c 3d 31 29 0a 20 20 20 20 20 20 20 7c 7c 20 28  <=1).       || (
a5f0: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
a600: 45 3d 3d 32 20 26 26 20 64 62 2d 3e 74 65 6d 70  E==2 && db->temp
a610: 5f 73 74 6f 72 65 3d 3d 31 29 0a 20 20 20 20 20  _store==1).     
a620: 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 76 61   ){.        inva
a630: 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67  lidateTempStorag
a640: 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20  e(pParse);.     
a650: 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
a660: 5f 66 72 65 65 28 73 71 6c 69 74 65 33 5f 74 65  _free(sqlite3_te
a670: 6d 70 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20  mp_directory);. 
a680: 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b       if( zRight[
a690: 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  0] ){.        sq
a6a0: 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63  lite3_temp_direc
a6b0: 74 6f 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d  tory = sqlite3_m
a6c0: 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 52 69  printf("%s", zRi
a6d0: 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ght);.      }els
a6e0: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
a6f0: 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72  e3_temp_director
a700: 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23  y = 0;.      }.#
a710: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
a720: 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20  OMIT_WSD */.    
a730: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
a740: 0a 0a 23 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f  ..#if SQLITE_OS_
a750: 57 49 4e 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  WIN.  /*.  **   
a760: 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72  PRAGMA data_stor
a770: 65 5f 64 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a  e_directory.  **
a780: 20 20 20 50 52 41 47 4d 41 20 64 61 74 61 5f 73     PRAGMA data_s
a790: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d  tore_directory =
a7a0: 20 22 22 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e   ""|"directory_n
a7b0: 61 6d 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52  ame".  **.  ** R
a7c0: 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65  eturn or set the
a7d0: 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20   local value of 
a7e0: 74 68 65 20 64 61 74 61 5f 73 74 6f 72 65 5f 64  the data_store_d
a7f0: 69 72 65 63 74 6f 72 79 20 66 6c 61 67 2e 20 20  irectory flag.  
a800: 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68  Changing.  ** th
a810: 65 20 76 61 6c 75 65 20 73 65 74 73 20 61 20 73  e value sets a s
a820: 70 65 63 69 66 69 63 20 64 69 72 65 63 74 6f 72  pecific director
a830: 79 20 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72  y to be used for
a840: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20   database files 
a850: 74 68 61 74 0a 20 20 2a 2a 20 77 65 72 65 20 73  that.  ** were s
a860: 70 65 63 69 66 69 65 64 20 77 69 74 68 20 61 20  pecified with a 
a870: 72 65 6c 61 74 69 76 65 20 70 61 74 68 6e 61 6d  relative pathnam
a880: 65 2e 20 20 53 65 74 74 69 6e 67 20 74 6f 20 61  e.  Setting to a
a890: 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76   null string rev
a8a0: 65 72 74 73 0a 20 20 2a 2a 20 74 6f 20 74 68 65  erts.  ** to the
a8b0: 20 64 65 66 61 75 6c 74 20 64 61 74 61 62 61 73   default databas
a8c0: 65 20 64 69 72 65 63 74 6f 72 79 2c 20 77 68 69  e directory, whi
a8d0: 63 68 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  ch for database 
a8e0: 66 69 6c 65 73 20 73 70 65 63 69 66 69 65 64 20  files specified 
a8f0: 77 69 74 68 0a 20 20 2a 2a 20 61 20 72 65 6c 61  with.  ** a rela
a900: 74 69 76 65 20 70 61 74 68 20 77 69 6c 6c 20 70  tive path will p
a910: 72 6f 62 61 62 6c 79 20 62 65 20 62 61 73 65 64  robably be based
a920: 20 6f 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20   on the current 
a930: 64 69 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68  directory for th
a940: 65 0a 20 20 2a 2a 20 70 72 6f 63 65 73 73 2e 20  e.  ** process. 
a950: 20 44 61 74 61 62 61 73 65 20 66 69 6c 65 20 73   Database file s
a960: 70 65 63 69 66 69 65 64 20 77 69 74 68 20 61 6e  pecified with an
a970: 20 61 62 73 6f 6c 75 74 65 20 70 61 74 68 20 61   absolute path a
a980: 72 65 20 6e 6f 74 20 69 6d 70 61 63 74 65 64 0a  re not impacted.
a990: 20 20 2a 2a 20 62 79 20 74 68 69 73 20 73 65 74    ** by this set
a9a0: 74 69 6e 67 2c 20 72 65 67 61 72 64 6c 65 73 73  ting, regardless
a9b0: 20 6f 66 20 69 74 73 20 76 61 6c 75 65 2e 0a 20   of its value.. 
a9c0: 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20   **.  */.  case 
a9d0: 50 72 61 67 54 79 70 5f 44 41 54 41 5f 53 54 4f  PragTyp_DATA_STO
a9e0: 52 45 5f 44 49 52 45 43 54 4f 52 59 3a 20 7b 0a  RE_DIRECTORY: {.
a9f0: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
aa00: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  ){.      if( sql
aa10: 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74  ite3_data_direct
aa20: 6f 72 79 20 29 7b 0a 20 20 20 20 20 20 20 20 73  ory ){.        s
aa30: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
aa40: 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20  Cols(v, 1);.    
aa50: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
aa60: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
aa70: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 0a 20  COLNAME_NAME, . 
aa80: 20 20 20 20 20 20 20 20 20 20 20 22 64 61 74 61             "data
aa90: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
aaa0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
aab0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
aac0: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
aad0: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31  OP_String8, 0, 1
aae0: 2c 20 30 2c 20 73 71 6c 69 74 65 33 5f 64 61 74  , 0, sqlite3_dat
aaf0: 61 5f 64 69 72 65 63 74 6f 72 79 2c 20 30 29 3b  a_directory, 0);
ab00: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
ab10: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
ab20: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31  _ResultRow, 1, 1
ab30: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
ab40: 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66 20 53 51  else{.#ifndef SQ
ab50: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20  LITE_OMIT_WSD.  
ab60: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30      if( zRight[0
ab70: 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  ] ){.        int
ab80: 20 72 65 73 3b 0a 20 20 20 20 20 20 20 20 72 63   res;.        rc
ab90: 20 3d 20 73 71 6c 69 74 65 33 4f 73 41 63 63 65   = sqlite3OsAcce
aba0: 73 73 28 64 62 2d 3e 70 56 66 73 2c 20 7a 52 69  ss(db->pVfs, zRi
abb0: 67 68 74 2c 20 53 51 4c 49 54 45 5f 41 43 43 45  ght, SQLITE_ACCE
abc0: 53 53 5f 52 45 41 44 57 52 49 54 45 2c 20 26 72  SS_READWRITE, &r
abd0: 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  es);.        if(
abe0: 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c   rc!=SQLITE_OK |
abf0: 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20  | res==0 ){.    
ac00: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72 72        sqlite3Err
ac10: 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22 6e  orMsg(pParse, "n
ac20: 6f 74 20 61 20 77 72 69 74 61 62 6c 65 20 64 69  ot a writable di
ac30: 72 65 63 74 6f 72 79 22 29 3b 0a 20 20 20 20 20  rectory");.     
ac40: 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61       goto pragma
ac50: 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a  _out;.        }.
ac60: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71        }.      sq
ac70: 6c 69 74 65 33 5f 66 72 65 65 28 73 71 6c 69 74  lite3_free(sqlit
ac80: 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72  e3_data_director
ac90: 79 29 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 52  y);.      if( zR
aca0: 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20  ight[0] ){.     
acb0: 20 20 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f     sqlite3_data_
acc0: 64 69 72 65 63 74 6f 72 79 20 3d 20 73 71 6c 69  directory = sqli
acd0: 74 65 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22  te3_mprintf("%s"
ace0: 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20  , zRight);.     
acf0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
ad00: 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72  sqlite3_data_dir
ad10: 65 63 74 6f 72 79 20 3d 20 30 3b 0a 20 20 20 20  ectory = 0;.    
ad20: 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
ad30: 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f  LITE_OMIT_WSD */
ad40: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
ad50: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69  ;.  }.#endif..#i
ad60: 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
ad70: 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45 0a 20 20  LOCKING_STYLE.  
ad80: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
ad90: 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f 63 6b   [database.]lock
ada0: 5f 70 72 6f 78 79 5f 66 69 6c 65 0a 20 20 2a 2a  _proxy_file.  **
adb0: 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
adc0: 61 73 65 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f  ase.]lock_proxy_
add0: 66 69 6c 65 20 3d 20 22 3a 61 75 74 6f 3a 22 7c  file = ":auto:"|
ade0: 22 6c 6f 63 6b 5f 66 69 6c 65 5f 70 61 74 68 22  "lock_file_path"
adf0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72  .  **.  ** Retur
ae00: 6e 20 6f 72 20 73 65 74 20 74 68 65 20 76 61 6c  n or set the val
ae10: 75 65 20 6f 66 20 74 68 65 20 6c 6f 63 6b 5f 70  ue of the lock_p
ae20: 72 6f 78 79 5f 66 69 6c 65 20 66 6c 61 67 2e 20  roxy_file flag. 
ae30: 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74   Changing.  ** t
ae40: 68 65 20 76 61 6c 75 65 20 73 65 74 73 20 61 20  he value sets a 
ae50: 73 70 65 63 69 66 69 63 20 66 69 6c 65 20 74 6f  specific file to
ae60: 20 62 65 20 75 73 65 64 20 66 6f 72 20 64 61 74   be used for dat
ae70: 61 62 61 73 65 20 61 63 63 65 73 73 20 6c 6f 63  abase access loc
ae80: 6b 73 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20  ks..  **.  */.  
ae90: 63 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f 43  case PragTyp_LOC
aea0: 4b 5f 50 52 4f 58 59 5f 46 49 4c 45 3a 20 7b 0a  K_PROXY_FILE: {.
aeb0: 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74 20      if( !zRight 
aec0: 29 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20 2a  ){.      Pager *
aed0: 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33  pPager = sqlite3
aee0: 42 74 72 65 65 50 61 67 65 72 28 70 44 62 2d 3e  BtreePager(pDb->
aef0: 70 42 74 29 3b 0a 20 20 20 20 20 20 63 68 61 72  pBt);.      char
af00: 20 2a 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74   *proxy_file_pat
af10: 68 20 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 20  h = NULL;.      
af20: 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 46  sqlite3_file *pF
af30: 69 6c 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67  ile = sqlite3Pag
af40: 65 72 46 69 6c 65 28 70 50 61 67 65 72 29 3b 0a  erFile(pPager);.
af50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f 73 46        sqlite3OsF
af60: 69 6c 65 43 6f 6e 74 72 6f 6c 48 69 6e 74 28 70  ileControlHint(p
af70: 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f 47 45 54  File, SQLITE_GET
af80: 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20  _LOCKPROXYFILE, 
af90: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
afa0: 20 20 20 20 20 20 20 20 20 20 20 20 26 70 72 6f              &pro
afb0: 78 79 5f 66 69 6c 65 5f 70 61 74 68 29 3b 0a 20  xy_file_path);. 
afc0: 20 20 20 20 20 0a 20 20 20 20 20 20 69 66 28 20       .      if( 
afd0: 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 20  proxy_file_path 
afe0: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
aff0: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
b000: 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20  (v, 1);.        
b010: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
b020: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
b030: 41 4d 45 5f 4e 41 4d 45 2c 20 0a 20 20 20 20 20  AME_NAME, .     
b040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b050: 20 20 20 20 20 20 20 20 20 22 6c 6f 63 6b 5f 70           "lock_p
b060: 72 6f 78 79 5f 66 69 6c 65 22 2c 20 53 51 4c 49  roxy_file", SQLI
b070: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
b080: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
b090: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
b0a0: 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 70 72  ng8, 0, 1, 0, pr
b0b0: 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 2c 20 30  oxy_file_path, 0
b0c0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
b0d0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
b0e0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
b0f0: 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   1);.      }.   
b100: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 50 61   }else{.      Pa
b110: 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71  ger *pPager = sq
b120: 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
b130: 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20  pDb->pBt);.     
b140: 20 73 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70   sqlite3_file *p
b150: 46 69 6c 65 20 3d 20 73 71 6c 69 74 65 33 50 61  File = sqlite3Pa
b160: 67 65 72 46 69 6c 65 28 70 50 61 67 65 72 29 3b  gerFile(pPager);
b170: 0a 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a  .      int res;.
b180: 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74        if( zRight
b190: 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 72  [0] ){.        r
b1a0: 65 73 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c 65  es=sqlite3OsFile
b1b0: 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53  Control(pFile, S
b1c0: 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52  QLITE_SET_LOCKPR
b1d0: 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20 20  OXYFILE, .      
b1e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b1f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7a                 z
b200: 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 20  Right);.      } 
b210: 65 6c 73 65 20 7b 0a 20 20 20 20 20 20 20 20 72  else {.        r
b220: 65 73 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c 65  es=sqlite3OsFile
b230: 43 6f 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53  Control(pFile, S
b240: 51 4c 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52  QLITE_SET_LOCKPR
b250: 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20 20  OXYFILE, .      
b260: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b270: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 4e                 N
b280: 55 4c 4c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ULL);.      }.  
b290: 20 20 20 20 69 66 28 20 72 65 73 21 3d 53 51 4c      if( res!=SQL
b2a0: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
b2b0: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73    sqlite3ErrorMs
b2c0: 67 28 70 50 61 72 73 65 2c 20 22 66 61 69 6c 65  g(pParse, "faile
b2d0: 64 20 74 6f 20 73 65 74 20 6c 6f 63 6b 20 70 72  d to set lock pr
b2e0: 6f 78 79 20 66 69 6c 65 22 29 3b 0a 20 20 20 20  oxy file");.    
b2f0: 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f      goto pragma_
b300: 6f 75 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  out;.      }.   
b310: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
b320: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
b330: 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e  TE_ENABLE_LOCKIN
b340: 47 5f 53 54 59 4c 45 20 2a 2f 20 20 20 20 20 20  G_STYLE */      
b350: 0a 20 20 20 20 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .    .  /*.  ** 
b360: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
b370: 73 65 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 0a  se.]synchronous.
b380: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64    **   PRAGMA [d
b390: 61 74 61 62 61 73 65 2e 5d 73 79 6e 63 68 72 6f  atabase.]synchro
b3a0: 6e 6f 75 73 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52 4d  nous=OFF|ON|NORM
b3b0: 41 4c 7c 46 55 4c 4c 0a 20 20 2a 2a 0a 20 20 2a  AL|FULL.  **.  *
b3c0: 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20  * Return or set 
b3d0: 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20  the local value 
b3e0: 6f 66 20 74 68 65 20 73 79 6e 63 68 72 6f 6e 6f  of the synchrono
b3f0: 75 73 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69  us flag.  Changi
b400: 6e 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61  ng.  ** the loca
b410: 6c 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74  l value does not
b420: 20 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f   make changes to
b430: 20 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61   the disk file a
b440: 6e 64 20 74 68 65 0a 20 20 2a 2a 20 64 65 66 61  nd the.  ** defa
b450: 75 6c 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62  ult value will b
b460: 65 20 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e  e restored the n
b470: 65 78 74 20 74 69 6d 65 20 74 68 65 20 64 61 74  ext time the dat
b480: 61 62 61 73 65 20 69 73 0a 20 20 2a 2a 20 6f 70  abase is.  ** op
b490: 65 6e 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  ened..  */.  cas
b4a0: 65 20 50 72 61 67 54 79 70 5f 53 59 4e 43 48 52  e PragTyp_SYNCHR
b4b0: 4f 4e 4f 55 53 3a 20 7b 0a 20 20 20 20 69 66 28  ONOUS: {.    if(
b4c0: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
b4d0: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
b4e0: 74 28 70 50 61 72 73 65 2c 20 22 73 79 6e 63 68  t(pParse, "synch
b4f0: 72 6f 6e 6f 75 73 22 2c 20 70 44 62 2d 3e 73 61  ronous", pDb->sa
b500: 66 65 74 79 5f 6c 65 76 65 6c 2d 31 29 3b 0a 20  fety_level-1);. 
b510: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
b520: 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d  if( !db->autoCom
b530: 6d 69 74 20 29 7b 0a 20 20 20 20 20 20 20 20 73  mit ){.        s
b540: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
b550: 50 61 72 73 65 2c 20 0a 20 20 20 20 20 20 20 20  Parse, .        
b560: 20 20 20 20 22 53 61 66 65 74 79 20 6c 65 76 65      "Safety leve
b570: 6c 20 6d 61 79 20 6e 6f 74 20 62 65 20 63 68 61  l may not be cha
b580: 6e 67 65 64 20 69 6e 73 69 64 65 20 61 20 74 72  nged inside a tr
b590: 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20 20  ansaction");.   
b5a0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
b5b0: 20 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65    pDb->safety_le
b5c0: 76 65 6c 20 3d 20 67 65 74 53 61 66 65 74 79 4c  vel = getSafetyL
b5d0: 65 76 65 6c 28 7a 52 69 67 68 74 2c 30 2c 31 29  evel(zRight,0,1)
b5e0: 2b 31 3b 0a 20 20 20 20 20 20 20 20 73 65 74 41  +1;.        setA
b5f0: 6c 6c 50 61 67 65 72 46 6c 61 67 73 28 64 62 29  llPagerFlags(db)
b600: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
b610: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
b620: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
b630: 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
b640: 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  AS */..#ifndef S
b650: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f  QLITE_OMIT_FLAG_
b660: 50 52 41 47 4d 41 53 0a 20 20 63 61 73 65 20 50  PRAGMAS.  case P
b670: 72 61 67 54 79 70 5f 46 4c 41 47 3a 20 7b 0a 20  ragTyp_FLAG: {. 
b680: 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30     if( zRight==0
b690: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
b6a0: 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
b6b0: 2c 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d  , aPragmaNames[m
b6c0: 69 64 5d 2e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20  id].zName,.     
b6d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b6e0: 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 61 50 72  (db->flags & aPr
b6f0: 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 69  agmaNames[mid].i
b700: 41 72 67 29 21 3d 30 20 29 3b 0a 20 20 20 20 7d  Arg)!=0 );.    }
b710: 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20  else{.      int 
b720: 6d 61 73 6b 20 3d 20 61 50 72 61 67 6d 61 4e 61  mask = aPragmaNa
b730: 6d 65 73 5b 6d 69 64 5d 2e 69 41 72 67 3b 20 20  mes[mid].iArg;  
b740: 20 20 2f 2a 20 4d 61 73 6b 20 6f 66 20 62 69 74    /* Mask of bit
b750: 73 20 74 6f 20 73 65 74 20 6f 72 20 63 6c 65 61  s to set or clea
b760: 72 2e 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20  r. */.      if( 
b770: 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d  db->autoCommit==
b780: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  0 ){.        /* 
b790: 46 6f 72 65 69 67 6e 20 6b 65 79 20 73 75 70 70  Foreign key supp
b7a0: 6f 72 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 65  ort may not be e
b7b0: 6e 61 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c  nabled or disabl
b7c0: 65 64 20 77 68 69 6c 65 20 6e 6f 74 0a 20 20 20  ed while not.   
b7d0: 20 20 20 20 20 2a 2a 20 69 6e 20 61 75 74 6f 2d       ** in auto-
b7e0: 63 6f 6d 6d 69 74 20 6d 6f 64 65 2e 20 20 2a 2f  commit mode.  */
b7f0: 0a 20 20 20 20 20 20 20 20 6d 61 73 6b 20 26 3d  .        mask &=
b800: 20 7e 28 53 51 4c 49 54 45 5f 46 6f 72 65 69 67   ~(SQLITE_Foreig
b810: 6e 4b 65 79 73 29 3b 0a 20 20 20 20 20 20 7d 0a  nKeys);.      }.
b820: 23 69 66 20 53 51 4c 49 54 45 5f 55 53 45 52 5f  #if SQLITE_USER_
b830: 41 55 54 48 45 4e 54 49 43 41 54 49 4f 4e 0a 20  AUTHENTICATION. 
b840: 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74       if( db->aut
b850: 68 2e 61 75 74 68 4c 65 76 65 6c 3d 3d 55 41 55  h.authLevel==UAU
b860: 54 48 5f 55 73 65 72 20 29 7b 0a 20 20 20 20 20  TH_User ){.     
b870: 20 20 20 2f 2a 20 44 6f 20 6e 6f 74 20 61 6c 6c     /* Do not all
b880: 6f 77 20 6e 6f 6e 2d 61 64 6d 69 6e 20 75 73 65  ow non-admin use
b890: 72 73 20 74 6f 20 6d 6f 64 69 66 79 20 74 68 65  rs to modify the
b8a0: 20 73 63 68 65 6d 61 20 61 72 62 69 74 72 61 72   schema arbitrar
b8b0: 69 6c 79 20 2a 2f 0a 20 20 20 20 20 20 20 20 6d  ily */.        m
b8c0: 61 73 6b 20 26 3d 20 7e 28 53 51 4c 49 54 45 5f  ask &= ~(SQLITE_
b8d0: 57 72 69 74 65 53 63 68 65 6d 61 29 3b 0a 20 20  WriteSchema);.  
b8e0: 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20      }.#endif..  
b8f0: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47      if( sqlite3G
b900: 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74  etBoolean(zRight
b910: 2c 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20  , 0) ){.        
b920: 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 6d 61 73  db->flags |= mas
b930: 6b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  k;.      }else{.
b940: 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67          db->flag
b950: 73 20 26 3d 20 7e 6d 61 73 6b 3b 0a 20 20 20 20  s &= ~mask;.    
b960: 20 20 20 20 69 66 28 20 6d 61 73 6b 3d 3d 53 51      if( mask==SQ
b970: 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29 20  LITE_DeferFKs ) 
b980: 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d  db->nDeferredImm
b990: 43 6f 6e 73 20 3d 20 30 3b 0a 20 20 20 20 20 20  Cons = 0;.      
b9a0: 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6e 79  }..      /* Many
b9b0: 20 6f 66 20 74 68 65 20 66 6c 61 67 2d 70 72 61   of the flag-pra
b9c0: 67 6d 61 73 20 6d 6f 64 69 66 79 20 74 68 65 20  gmas modify the 
b9d0: 63 6f 64 65 20 67 65 6e 65 72 61 74 65 64 20 62  code generated b
b9e0: 79 20 74 68 65 20 53 51 4c 20 0a 20 20 20 20 20  y the SQL .     
b9f0: 20 2a 2a 20 63 6f 6d 70 69 6c 65 72 20 28 65 67   ** compiler (eg
ba00: 2e 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 29  . count_changes)
ba10: 2e 20 53 6f 20 61 64 64 20 61 6e 20 6f 70 63 6f  . So add an opco
ba20: 64 65 20 74 6f 20 65 78 70 69 72 65 20 61 6c 6c  de to expire all
ba30: 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70 69 6c  .      ** compil
ba40: 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74  ed SQL statement
ba50: 73 20 61 66 74 65 72 20 6d 6f 64 69 66 79 69 6e  s after modifyin
ba60: 67 20 61 20 70 72 61 67 6d 61 20 76 61 6c 75 65  g a pragma value
ba70: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
ba80: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ba90: 70 32 28 76 2c 20 4f 50 5f 45 78 70 69 72 65 2c  p2(v, OP_Expire,
baa0: 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 65   0, 0);.      se
bab0: 74 41 6c 6c 50 61 67 65 72 46 6c 61 67 73 28 64  tAllPagerFlags(d
bac0: 62 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72  b);.    }.    br
bad0: 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20  eak;.  }.#endif 
bae0: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  /* SQLITE_OMIT_F
baf0: 4c 41 47 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  LAG_PRAGMAS */..
bb00: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
bb10: 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d  MIT_SCHEMA_PRAGM
bb20: 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  AS.  /*.  **   P
bb30: 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f  RAGMA table_info
bb40: 28 3c 74 61 62 6c 65 3e 29 0a 20 20 2a 2a 0a 20  (<table>).  **. 
bb50: 20 2a 2a 20 52 65 74 75 72 6e 20 61 20 73 69 6e   ** Return a sin
bb60: 67 6c 65 20 72 6f 77 20 66 6f 72 20 65 61 63 68  gle row for each
bb70: 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e   column of the n
bb80: 61 6d 65 64 20 74 61 62 6c 65 2e 20 54 68 65 20  amed table. The 
bb90: 63 6f 6c 75 6d 6e 73 20 6f 66 0a 20 20 2a 2a 20  columns of.  ** 
bba0: 74 68 65 20 72 65 74 75 72 6e 65 64 20 64 61 74  the returned dat
bbb0: 61 20 73 65 74 20 61 72 65 3a 0a 20 20 2a 2a 0a  a set are:.  **.
bbc0: 20 20 2a 2a 20 63 69 64 3a 20 20 20 20 20 20 20    ** cid:       
bbd0: 20 43 6f 6c 75 6d 6e 20 69 64 20 28 6e 75 6d 62   Column id (numb
bbe0: 65 72 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74  ered from left t
bbf0: 6f 20 72 69 67 68 74 2c 20 73 74 61 72 74 69 6e  o right, startin
bc00: 67 20 61 74 20 30 29 0a 20 20 2a 2a 20 6e 61 6d  g at 0).  ** nam
bc10: 65 3a 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20  e:       Column 
bc20: 6e 61 6d 65 0a 20 20 2a 2a 20 74 79 70 65 3a 20  name.  ** type: 
bc30: 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 64 65 63        Column dec
bc40: 6c 61 72 61 74 69 6f 6e 20 74 79 70 65 2e 0a 20  laration type.. 
bc50: 20 2a 2a 20 6e 6f 74 6e 75 6c 6c 3a 20 20 20 20   ** notnull:    
bc60: 54 72 75 65 20 69 66 20 27 4e 4f 54 20 4e 55 4c  True if 'NOT NUL
bc70: 4c 27 20 69 73 20 70 61 72 74 20 6f 66 20 63 6f  L' is part of co
bc80: 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e  lumn declaration
bc90: 0a 20 20 2a 2a 20 64 66 6c 74 5f 76 61 6c 75 65  .  ** dflt_value
bca0: 3a 20 54 68 65 20 64 65 66 61 75 6c 74 20 76 61  : The default va
bcb0: 6c 75 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75  lue for the colu
bcc0: 6d 6e 2c 20 69 66 20 61 6e 79 2e 0a 20 20 2a 2f  mn, if any..  */
bcd0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
bce0: 54 41 42 4c 45 5f 49 4e 46 4f 3a 20 69 66 28 20  TABLE_INFO: if( 
bcf0: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 54 61  zRight ){.    Ta
bd00: 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70  ble *pTab;.    p
bd10: 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  Tab = sqlite3Fin
bd20: 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68  dTable(db, zRigh
bd30: 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28  t, zDb);.    if(
bd40: 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20 69   pTab ){.      i
bd50: 6e 74 20 69 2c 20 6b 3b 0a 20 20 20 20 20 20 69  nt i, k;.      i
bd60: 6e 74 20 6e 48 69 64 64 65 6e 20 3d 20 30 3b 0a  nt nHidden = 0;.
bd70: 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 2a 70 43        Column *pC
bd80: 6f 6c 3b 0a 20 20 20 20 20 20 49 6e 64 65 78 20  ol;.      Index 
bd90: 2a 70 50 6b 20 3d 20 73 71 6c 69 74 65 33 50 72  *pPk = sqlite3Pr
bda0: 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 70 54  imaryKeyIndex(pT
bdb0: 61 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ab);.      sqlit
bdc0: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
bdd0: 28 76 2c 20 36 29 3b 0a 20 20 20 20 20 20 70 50  (v, 6);.      pP
bde0: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a  arse->nMem = 6;.
bdf0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64        sqlite3Cod
be00: 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50  eVerifySchema(pP
be10: 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20  arse, iDb);.    
be20: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
be30: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
be40: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 69 64  LNAME_NAME, "cid
be50: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
be60: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
be70: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
be80: 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 1, COLNAME_NAM
be90: 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54  E, "name", SQLIT
bea0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
beb0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
bec0: 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c  olName(v, 2, COL
bed0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 79 70 65  NAME_NAME, "type
bee0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
bef0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
bf00: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
bf10: 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 3, COLNAME_NAM
bf20: 45 2c 20 22 6e 6f 74 6e 75 6c 6c 22 2c 20 53 51  E, "notnull", SQ
bf30: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
bf40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
bf50: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c 20  etColName(v, 4, 
bf60: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 64  COLNAME_NAME, "d
bf70: 66 6c 74 5f 76 61 6c 75 65 22 2c 20 53 51 4c 49  flt_value", SQLI
bf80: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
bf90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
bfa0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 35 2c 20 43 4f  ColName(v, 5, CO
bfb0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 70 6b 22  LNAME_NAME, "pk"
bfc0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
bfd0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
bfe0: 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65  iewGetColumnName
bff0: 73 28 70 50 61 72 73 65 2c 20 70 54 61 62 29 3b  s(pParse, pTab);
c000: 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 2c 20  .      for(i=0, 
c010: 70 43 6f 6c 3d 70 54 61 62 2d 3e 61 43 6f 6c 3b  pCol=pTab->aCol;
c020: 20 69 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20 69   i<pTab->nCol; i
c030: 2b 2b 2c 20 70 43 6f 6c 2b 2b 29 7b 0a 20 20 20  ++, pCol++){.   
c040: 20 20 20 20 20 69 66 28 20 49 73 48 69 64 64 65       if( IsHidde
c050: 6e 43 6f 6c 75 6d 6e 28 70 43 6f 6c 29 20 29 7b  nColumn(pCol) ){
c060: 0a 20 20 20 20 20 20 20 20 20 20 6e 48 69 64 64  .          nHidd
c070: 65 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20  en++;.          
c080: 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
c090: 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69    }.        sqli
c0a0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
c0b0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2d 6e   OP_Integer, i-n
c0c0: 48 69 64 64 65 6e 2c 20 31 29 3b 0a 20 20 20 20  Hidden, 1);.    
c0d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c0e0: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
c0f0: 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70 43  ng8, 0, 2, 0, pC
c100: 6f 6c 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20  ol->zName, 0);. 
c110: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
c120: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
c130: 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c  tring8, 0, 3, 0,
c140: 0a 20 20 20 20 20 20 20 20 20 20 20 70 43 6f 6c  .           pCol
c150: 2d 3e 7a 54 79 70 65 20 3f 20 70 43 6f 6c 2d 3e  ->zType ? pCol->
c160: 7a 54 79 70 65 20 3a 20 22 22 2c 20 30 29 3b 0a  zType : "", 0);.
c170: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
c180: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
c190: 49 6e 74 65 67 65 72 2c 20 28 70 43 6f 6c 2d 3e  Integer, (pCol->
c1a0: 6e 6f 74 4e 75 6c 6c 20 3f 20 31 20 3a 20 30 29  notNull ? 1 : 0)
c1b0: 2c 20 34 29 3b 0a 20 20 20 20 20 20 20 20 69 66  , 4);.        if
c1c0: 28 20 70 43 6f 6c 2d 3e 7a 44 66 6c 74 20 29 7b  ( pCol->zDflt ){
c1d0: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
c1e0: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
c1f0: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 35  OP_String8, 0, 5
c200: 2c 20 30 2c 20 28 63 68 61 72 2a 29 70 43 6f 6c  , 0, (char*)pCol
c210: 2d 3e 7a 44 66 6c 74 2c 20 30 29 3b 0a 20 20 20  ->zDflt, 0);.   
c220: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
c230: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c240: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 75  eAddOp2(v, OP_Nu
c250: 6c 6c 2c 20 30 2c 20 35 29 3b 0a 20 20 20 20 20  ll, 0, 5);.     
c260: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
c270: 20 28 70 43 6f 6c 2d 3e 63 6f 6c 46 6c 61 67 73   (pCol->colFlags
c280: 20 26 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b   & COLFLAG_PRIMK
c290: 45 59 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  EY)==0 ){.      
c2a0: 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20      k = 0;.     
c2b0: 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 50 6b     }else if( pPk
c2c0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
c2d0: 20 6b 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20   k = 1;.        
c2e0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
c2f0: 20 66 6f 72 28 6b 3d 31 3b 20 41 4c 57 41 59 53   for(k=1; ALWAYS
c300: 28 6b 3c 3d 70 54 61 62 2d 3e 6e 43 6f 6c 29 20  (k<=pTab->nCol) 
c310: 26 26 20 70 50 6b 2d 3e 61 69 43 6f 6c 75 6d 6e  && pPk->aiColumn
c320: 5b 6b 2d 31 5d 21 3d 69 3b 20 6b 2b 2b 29 7b 7d  [k-1]!=i; k++){}
c330: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
c340: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c350: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
c360: 65 72 2c 20 6b 2c 20 36 29 3b 0a 20 20 20 20 20  er, k, 6);.     
c370: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c380: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
c390: 74 52 6f 77 2c 20 31 2c 20 36 29 3b 0a 20 20 20  tRow, 1, 6);.   
c3a0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
c3b0: 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20   break;..  case 
c3c0: 50 72 61 67 54 79 70 5f 53 54 41 54 53 3a 20 7b  PragTyp_STATS: {
c3d0: 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78  .    Index *pIdx
c3e0: 3b 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a  ;.    HashElem *
c3f0: 69 3b 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74  i;.    v = sqlit
c400: 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65  e3GetVdbe(pParse
c410: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
c420: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
c430: 34 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  4);.    pParse->
c440: 6e 4d 65 6d 20 3d 20 34 3b 0a 20 20 20 20 73 71  nMem = 4;.    sq
c450: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
c460: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44  chema(pParse, iD
c470: 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  b);.    sqlite3V
c480: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
c490: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
c4a0: 2c 20 22 74 61 62 6c 65 22 2c 20 53 51 4c 49 54  , "table", SQLIT
c4b0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
c4c0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
c4d0: 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41  Name(v, 1, COLNA
c4e0: 4d 45 5f 4e 41 4d 45 2c 20 22 69 6e 64 65 78 22  ME_NAME, "index"
c4f0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
c500: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
c510: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32  eSetColName(v, 2
c520: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
c530: 22 77 69 64 74 68 22 2c 20 53 51 4c 49 54 45 5f  "width", SQLITE_
c540: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
c550: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
c560: 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45  me(v, 3, COLNAME
c570: 5f 4e 41 4d 45 2c 20 22 68 65 69 67 68 74 22 2c  _NAME, "height",
c580: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
c590: 0a 20 20 20 20 66 6f 72 28 69 3d 73 71 6c 69 74  .    for(i=sqlit
c5a0: 65 48 61 73 68 46 69 72 73 74 28 26 70 44 62 2d  eHashFirst(&pDb-
c5b0: 3e 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73  >pSchema->tblHas
c5c0: 68 29 3b 20 69 3b 20 69 3d 73 71 6c 69 74 65 48  h); i; i=sqliteH
c5d0: 61 73 68 4e 65 78 74 28 69 29 29 7b 0a 20 20 20  ashNext(i)){.   
c5e0: 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d     Table *pTab =
c5f0: 20 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28   sqliteHashData(
c600: 69 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  i);.      sqlite
c610: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
c620: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c  P_String8, 0, 1,
c630: 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c   0, pTab->zName,
c640: 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
c650: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c660: 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20 32 29 3b 0a  OP_Null, 0, 2);.
c670: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c680: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
c690: 74 65 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20  teger,.         
c6a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6b0: 20 20 28 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f    (int)sqlite3Lo
c6c0: 67 45 73 74 54 6f 49 6e 74 28 70 54 61 62 2d 3e  gEstToInt(pTab->
c6d0: 73 7a 54 61 62 52 6f 77 29 2c 20 33 29 3b 0a 20  szTabRow), 3);. 
c6e0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c6f0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
c700: 65 67 65 72 2c 20 0a 20 20 20 20 20 20 20 20 20  eger, .         
c710: 20 28 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67   (int)sqlite3Log
c720: 45 73 74 54 6f 49 6e 74 28 70 54 61 62 2d 3e 6e  EstToInt(pTab->n
c730: 52 6f 77 4c 6f 67 45 73 74 29 2c 20 34 29 3b 0a  RowLogEst), 4);.
c740: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c750: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
c760: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29 3b 0a  sultRow, 1, 4);.
c770: 20 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d 70        for(pIdx=p
c780: 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64  Tab->pIndex; pId
c790: 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e  x; pIdx=pIdx->pN
c7a0: 65 78 74 29 7b 0a 20 20 20 20 20 20 20 20 73 71  ext){.        sq
c7b0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
c7c0: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
c7d0: 2c 20 32 2c 20 30 2c 20 70 49 64 78 2d 3e 7a 4e  , 2, 0, pIdx->zN
c7e0: 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  ame, 0);.       
c7f0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c800: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
c810: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
c820: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
c830: 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67 45 73  int)sqlite3LogEs
c840: 74 54 6f 49 6e 74 28 70 49 64 78 2d 3e 73 7a 49  tToInt(pIdx->szI
c850: 64 78 52 6f 77 29 2c 20 33 29 3b 0a 20 20 20 20  dxRow), 3);.    
c860: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c870: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
c880: 67 65 72 2c 20 0a 20 20 20 20 20 20 20 20 20 20  ger, .          
c890: 20 20 28 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f    (int)sqlite3Lo
c8a0: 67 45 73 74 54 6f 49 6e 74 28 70 49 64 78 2d 3e  gEstToInt(pIdx->
c8b0: 61 69 52 6f 77 4c 6f 67 45 73 74 5b 30 5d 29 2c  aiRowLogEst[0]),
c8c0: 20 34 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   4);.        sql
c8d0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
c8e0: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
c8f0: 31 2c 20 34 29 3b 0a 20 20 20 20 20 20 7d 0a 20  1, 4);.      }. 
c900: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
c910: 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  ;..  case PragTy
c920: 70 5f 49 4e 44 45 58 5f 49 4e 46 4f 3a 20 69 66  p_INDEX_INFO: if
c930: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
c940: 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20  Index *pIdx;.   
c950: 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20   Table *pTab;.  
c960: 20 20 70 49 64 78 20 3d 20 73 71 6c 69 74 65 33    pIdx = sqlite3
c970: 46 69 6e 64 49 6e 64 65 78 28 64 62 2c 20 7a 52  FindIndex(db, zR
c980: 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20  ight, zDb);.    
c990: 69 66 28 20 70 49 64 78 20 29 7b 0a 20 20 20 20  if( pIdx ){.    
c9a0: 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 70    int i;.      p
c9b0: 54 61 62 20 3d 20 70 49 64 78 2d 3e 70 54 61 62  Tab = pIdx->pTab
c9c0: 6c 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  le;.      sqlite
c9d0: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
c9e0: 76 2c 20 33 29 3b 0a 20 20 20 20 20 20 70 50 61  v, 3);.      pPa
c9f0: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20  rse->nMem = 3;. 
ca00: 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65       sqlite3Code
ca10: 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61  VerifySchema(pPa
ca20: 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  rse, iDb);.     
ca30: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
ca40: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
ca50: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 6e  NAME_NAME, "seqn
ca60: 6f 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  o", SQLITE_STATI
ca70: 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
ca80: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
ca90: 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 1, COLNAME_NA
caa0: 4d 45 2c 20 22 63 69 64 22 2c 20 53 51 4c 49 54  ME, "cid", SQLIT
cab0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
cac0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
cad0: 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c  olName(v, 2, COL
cae0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65  NAME_NAME, "name
caf0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
cb00: 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30  );.      for(i=0
cb10: 3b 20 69 3c 70 49 64 78 2d 3e 6e 4b 65 79 43 6f  ; i<pIdx->nKeyCo
cb20: 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  l; i++){.       
cb30: 20 69 31 36 20 63 6e 75 6d 20 3d 20 70 49 64 78   i16 cnum = pIdx
cb40: 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 69 5d 3b 0a 20  ->aiColumn[i];. 
cb50: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
cb60: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
cb70: 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20  nteger, i, 1);. 
cb80: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
cb90: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
cba0: 6e 74 65 67 65 72 2c 20 63 6e 75 6d 2c 20 32 29  nteger, cnum, 2)
cbb0: 3b 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74  ;.        assert
cbc0: 28 20 70 54 61 62 2d 3e 6e 43 6f 6c 3e 63 6e 75  ( pTab->nCol>cnu
cbd0: 6d 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  m );.        sql
cbe0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
cbf0: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
cc00: 20 33 2c 20 30 2c 20 70 54 61 62 2d 3e 61 43 6f   3, 0, pTab->aCo
cc10: 6c 5b 63 6e 75 6d 5d 2e 7a 4e 61 6d 65 2c 20 30  l[cnum].zName, 0
cc20: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
cc30: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
cc40: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
cc50: 20 33 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   3);.      }.   
cc60: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
cc70: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
cc80: 49 4e 44 45 58 5f 4c 49 53 54 3a 20 69 66 28 20  INDEX_LIST: if( 
cc90: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 49 6e  zRight ){.    In
cca0: 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 54  dex *pIdx;.    T
ccb0: 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20  able *pTab;.    
ccc0: 69 6e 74 20 69 3b 0a 20 20 20 20 70 54 61 62 20  int i;.    pTab 
ccd0: 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62  = sqlite3FindTab
cce0: 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a  le(db, zRight, z
ccf0: 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61  Db);.    if( pTa
cd00: 62 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73  b ){.      v = s
cd10: 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50  qlite3GetVdbe(pP
cd20: 61 72 73 65 29 3b 0a 20 20 20 20 20 20 73 71 6c  arse);.      sql
cd30: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
cd40: 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20 20 20 20  ls(v, 3);.      
cd50: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33  pParse->nMem = 3
cd60: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 43  ;.      sqlite3C
cd70: 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28  odeVerifySchema(
cd80: 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20  pParse, iDb);.  
cd90: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
cda0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
cdb0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73  COLNAME_NAME, "s
cdc0: 65 71 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  eq", SQLITE_STAT
cdd0: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
cde0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
cdf0: 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 1, COLNAME_N
ce00: 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c  AME, "name", SQL
ce10: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
ce20: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
ce30: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43  tColName(v, 2, C
ce40: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 75 6e  OLNAME_NAME, "un
ce50: 69 71 75 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  ique", SQLITE_ST
ce60: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 66 6f 72  ATIC);.      for
ce70: 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64  (pIdx=pTab->pInd
ce80: 65 78 2c 20 69 3d 30 3b 20 70 49 64 78 3b 20 70  ex, i=0; pIdx; p
ce90: 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c  Idx=pIdx->pNext,
cea0: 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73   i++){.        s
ceb0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
cec0: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
ced0: 69 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73  i, 1);.        s
cee0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
cef0: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
cf00: 30 2c 20 32 2c 20 30 2c 20 70 49 64 78 2d 3e 7a  0, 2, 0, pIdx->z
cf10: 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  Name, 0);.      
cf20: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
cf30: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
cf40: 72 2c 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78  r, IsUniqueIndex
cf50: 28 70 49 64 78 29 2c 20 33 29 3b 0a 20 20 20 20  (pIdx), 3);.    
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 52 65 73 75  ddOp2(v, OP_Resu
cf80: 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20  ltRow, 1, 3);.  
cf90: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
cfa0: 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65    break;..  case
cfb0: 20 50 72 61 67 54 79 70 5f 44 41 54 41 42 41 53   PragTyp_DATABAS
cfc0: 45 5f 4c 49 53 54 3a 20 7b 0a 20 20 20 20 69 6e  E_LIST: {.    in
cfd0: 74 20 69 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  t i;.    sqlite3
cfe0: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
cff0: 2c 20 33 29 3b 0a 20 20 20 20 70 50 61 72 73 65  , 3);.    pParse
d000: 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20  ->nMem = 3;.    
d010: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
d020: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
d030: 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c  AME_NAME, "seq",
d040: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
d050: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
d060: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c  SetColName(v, 1,
d070: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
d080: 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  name", SQLITE_ST
d090: 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
d0a0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
d0b0: 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 2, COLNAME_N
d0c0: 41 4d 45 2c 20 22 66 69 6c 65 22 2c 20 53 51 4c  AME, "file", SQL
d0d0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
d0e0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e   for(i=0; i<db->
d0f0: 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  nDb; i++){.     
d100: 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e   if( db->aDb[i].
d110: 70 42 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75  pBt==0 ) continu
d120: 65 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  e;.      assert(
d130: 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d   db->aDb[i].zNam
d140: 65 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 73 71  e!=0 );.      sq
d150: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
d160: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69  v, OP_Integer, i
d170: 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 1);.      sqli
d180: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
d190: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
d1a0: 32 2c 20 30 2c 20 64 62 2d 3e 61 44 62 5b 69 5d  2, 0, db->aDb[i]
d1b0: 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20  .zName, 0);.    
d1c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d1d0: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
d1e0: 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20  8, 0, 3, 0,.    
d1f0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74         sqlite3Bt
d200: 72 65 65 47 65 74 46 69 6c 65 6e 61 6d 65 28 64  reeGetFilename(d
d210: 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 29 2c 20  b->aDb[i].pBt), 
d220: 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0);.      sqlite
d230: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
d240: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
d250: 33 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  3);.    }.  }.  
d260: 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50  break;..  case P
d270: 72 61 67 54 79 70 5f 43 4f 4c 4c 41 54 49 4f 4e  ragTyp_COLLATION
d280: 5f 4c 49 53 54 3a 20 7b 0a 20 20 20 20 69 6e 74  _LIST: {.    int
d290: 20 69 20 3d 20 30 3b 0a 20 20 20 20 48 61 73 68   i = 0;.    Hash
d2a0: 45 6c 65 6d 20 2a 70 3b 0a 20 20 20 20 73 71 6c  Elem *p;.    sql
d2b0: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
d2c0: 6c 73 28 76 2c 20 32 29 3b 0a 20 20 20 20 70 50  ls(v, 2);.    pP
d2d0: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a  arse->nMem = 2;.
d2e0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
d2f0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
d300: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73  COLNAME_NAME, "s
d310: 65 71 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  eq", SQLITE_STAT
d320: 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  IC);.    sqlite3
d330: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
d340: 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 1, COLNAME_NAM
d350: 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54  E, "name", SQLIT
d360: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 66  E_STATIC);.    f
d370: 6f 72 28 70 3d 73 71 6c 69 74 65 48 61 73 68 46  or(p=sqliteHashF
d380: 69 72 73 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53  irst(&db->aCollS
d390: 65 71 29 3b 20 70 3b 20 70 3d 73 71 6c 69 74 65  eq); p; p=sqlite
d3a0: 48 61 73 68 4e 65 78 74 28 70 29 29 7b 0a 20 20  HashNext(p)){.  
d3b0: 20 20 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f      CollSeq *pCo
d3c0: 6c 6c 20 3d 20 28 43 6f 6c 6c 53 65 71 20 2a 29  ll = (CollSeq *)
d3d0: 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 70  sqliteHashData(p
d3e0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
d3f0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
d400: 5f 49 6e 74 65 67 65 72 2c 20 69 2b 2b 2c 20 31  _Integer, i++, 1
d410: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
d420: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
d430: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20  _String8, 0, 2, 
d440: 30 2c 20 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 2c  0, pColl->zName,
d450: 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
d460: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
d470: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
d480: 20 32 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20   2);.    }.  }. 
d490: 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f   break;.#endif /
d4a0: 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43  * SQLITE_OMIT_SC
d4b0: 48 45 4d 41 5f 50 52 41 47 4d 41 53 20 2a 2f 0a  HEMA_PRAGMAS */.
d4c0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
d4d0: 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
d4e0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
d4f0: 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 4c 49 53 54  FOREIGN_KEY_LIST
d500: 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a  : if( zRight ){.
d510: 20 20 20 20 46 4b 65 79 20 2a 70 46 4b 3b 0a 20      FKey *pFK;. 
d520: 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a     Table *pTab;.
d530: 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74      pTab = sqlit
d540: 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20  e3FindTable(db, 
d550: 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20  zRight, zDb);.  
d560: 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20    if( pTab ){.  
d570: 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47      v = sqlite3G
d580: 65 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a  etVdbe(pParse);.
d590: 20 20 20 20 20 20 70 46 4b 20 3d 20 70 54 61 62        pFK = pTab
d5a0: 2d 3e 70 46 4b 65 79 3b 0a 20 20 20 20 20 20 69  ->pFKey;.      i
d5b0: 66 28 20 70 46 4b 20 29 7b 0a 20 20 20 20 20 20  f( pFK ){.      
d5c0: 20 20 69 6e 74 20 69 20 3d 20 30 3b 20 0a 20 20    int i = 0; .  
d5d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d5e0: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 38  eSetNumCols(v, 8
d5f0: 29 3b 0a 20 20 20 20 20 20 20 20 70 50 61 72 73  );.        pPars
d600: 65 2d 3e 6e 4d 65 6d 20 3d 20 38 3b 0a 20 20 20  e->nMem = 8;.   
d610: 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65       sqlite3Code
d620: 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61  VerifySchema(pPa
d630: 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  rse, iDb);.     
d640: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
d650: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
d660: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 69 64  OLNAME_NAME, "id
d670: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
d680: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
d690: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
d6a0: 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 1, COLNAME_N
d6b0: 41 4d 45 2c 20 22 73 65 71 22 2c 20 53 51 4c 49  AME, "seq", SQLI
d6c0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
d6d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
d6e0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20  etColName(v, 2, 
d6f0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74  COLNAME_NAME, "t
d700: 61 62 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  able", SQLITE_ST
d710: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73  ATIC);.        s
d720: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
d730: 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41  Name(v, 3, COLNA
d740: 4d 45 5f 4e 41 4d 45 2c 20 22 66 72 6f 6d 22 2c  ME_NAME, "from",
d750: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
d760: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
d770: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
d780: 2c 20 34 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 4, COLNAME_NAM
d790: 45 2c 20 22 74 6f 22 2c 20 53 51 4c 49 54 45 5f  E, "to", SQLITE_
d7a0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
d7b0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
d7c0: 6f 6c 4e 61 6d 65 28 76 2c 20 35 2c 20 43 4f 4c  olName(v, 5, COL
d7d0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6f 6e 5f 75  NAME_NAME, "on_u
d7e0: 70 64 61 74 65 22 2c 20 53 51 4c 49 54 45 5f 53  pdate", SQLITE_S
d7f0: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
d800: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
d810: 6c 4e 61 6d 65 28 76 2c 20 36 2c 20 43 4f 4c 4e  lName(v, 6, COLN
d820: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6f 6e 5f 64 65  AME_NAME, "on_de
d830: 6c 65 74 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  lete", SQLITE_ST
d840: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73  ATIC);.        s
d850: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
d860: 4e 61 6d 65 28 76 2c 20 37 2c 20 43 4f 4c 4e 41  Name(v, 7, COLNA
d870: 4d 45 5f 4e 41 4d 45 2c 20 22 6d 61 74 63 68 22  ME_NAME, "match"
d880: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
d890: 3b 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 28  ;.        while(
d8a0: 70 46 4b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  pFK){.          
d8b0: 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 20 20 20  int j;.         
d8c0: 20 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d   for(j=0; j<pFK-
d8d0: 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20  >nCol; j++){.   
d8e0: 20 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a           char *z
d8f0: 43 6f 6c 20 3d 20 70 46 4b 2d 3e 61 43 6f 6c 5b  Col = pFK->aCol[
d900: 6a 5d 2e 7a 43 6f 6c 3b 0a 20 20 20 20 20 20 20  j].zCol;.       
d910: 20 20 20 20 20 63 68 61 72 20 2a 7a 4f 6e 44 65       char *zOnDe
d920: 6c 65 74 65 20 3d 20 28 63 68 61 72 20 2a 29 61  lete = (char *)a
d930: 63 74 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61  ctionName(pFK->a
d940: 41 63 74 69 6f 6e 5b 30 5d 29 3b 0a 20 20 20 20  Action[0]);.    
d950: 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4f          char *zO
d960: 6e 55 70 64 61 74 65 20 3d 20 28 63 68 61 72 20  nUpdate = (char 
d970: 2a 29 61 63 74 69 6f 6e 4e 61 6d 65 28 70 46 4b  *)actionName(pFK
d980: 2d 3e 61 41 63 74 69 6f 6e 5b 31 5d 29 3b 0a 20  ->aAction[1]);. 
d990: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
d9a0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
d9b0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 31  OP_Integer, i, 1
d9c0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
d9d0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
d9e0: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
d9f0: 6a 2c 20 32 29 3b 0a 20 20 20 20 20 20 20 20 20  j, 2);.         
da00: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
da10: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
da20: 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 70 46 4b  g8, 0, 3, 0, pFK
da30: 2d 3e 7a 54 6f 2c 20 30 29 3b 0a 20 20 20 20 20  ->zTo, 0);.     
da40: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
da50: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
da60: 74 72 69 6e 67 38 2c 20 30 2c 20 34 2c 20 30 2c  tring8, 0, 4, 0,
da70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
da80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
da90: 54 61 62 2d 3e 61 43 6f 6c 5b 70 46 4b 2d 3e 61  Tab->aCol[pFK->a
daa0: 43 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 5d 2e 7a 4e  Col[j].iFrom].zN
dab0: 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  ame, 0);.       
dac0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
dad0: 41 64 64 4f 70 34 28 76 2c 20 7a 43 6f 6c 20 3f  AddOp4(v, zCol ?
dae0: 20 4f 50 5f 53 74 72 69 6e 67 38 20 3a 20 4f 50   OP_String8 : OP
daf0: 5f 4e 75 6c 6c 2c 20 30 2c 20 35 2c 20 30 2c 20  _Null, 0, 5, 0, 
db00: 7a 43 6f 6c 2c 20 30 29 3b 0a 20 20 20 20 20 20  zCol, 0);.      
db10: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
db20: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
db30: 72 69 6e 67 38 2c 20 30 2c 20 36 2c 20 30 2c 20  ring8, 0, 6, 0, 
db40: 7a 4f 6e 55 70 64 61 74 65 2c 20 30 29 3b 0a 20  zOnUpdate, 0);. 
db50: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
db60: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
db70: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 37  OP_String8, 0, 7
db80: 2c 20 30 2c 20 7a 4f 6e 44 65 6c 65 74 65 2c 20  , 0, zOnDelete, 
db90: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0);.            
dba0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
dbb0: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
dbc0: 20 30 2c 20 38 2c 20 30 2c 20 22 4e 4f 4e 45 22   0, 8, 0, "NONE"
dbd0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
dbe0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
dbf0: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
dc00: 52 6f 77 2c 20 31 2c 20 38 29 3b 0a 20 20 20 20  Row, 1, 8);.    
dc10: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
dc20: 20 20 2b 2b 69 3b 0a 20 20 20 20 20 20 20 20 20    ++i;.         
dc30: 20 70 46 4b 20 3d 20 70 46 4b 2d 3e 70 4e 65 78   pFK = pFK->pNex
dc40: 74 46 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20 7d  tFrom;.        }
dc50: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
dc60: 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
dc70: 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
dc80: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
dc90: 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69 66 6e  GN_KEY) */..#ifn
dca0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
dcb0: 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 23 69 66 6e  FOREIGN_KEY.#ifn
dcc0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
dcd0: 54 52 49 47 47 45 52 0a 20 20 63 61 73 65 20 50  TRIGGER.  case P
dce0: 72 61 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b  ragTyp_FOREIGN_K
dcf0: 45 59 5f 43 48 45 43 4b 3a 20 7b 0a 20 20 20 20  EY_CHECK: {.    
dd00: 46 4b 65 79 20 2a 70 46 4b 3b 20 20 20 20 20 20  FKey *pFK;      
dd10: 20 20 20 20 20 20 20 2f 2a 20 41 20 66 6f 72 65         /* A fore
dd20: 69 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69  ign key constrai
dd30: 6e 74 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20  nt */.    Table 
dd40: 2a 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20  *pTab;          
dd50: 20 2f 2a 20 43 68 69 6c 64 20 74 61 62 6c 65 20   /* Child table 
dd60: 63 6f 6e 74 61 69 6e 20 22 52 45 46 45 52 45 4e  contain "REFEREN
dd70: 43 45 53 22 20 6b 65 79 77 6f 72 64 20 2a 2f 0a  CES" keyword */.
dd80: 20 20 20 20 54 61 62 6c 65 20 2a 70 50 61 72 65      Table *pPare
dd90: 6e 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 61  nt;        /* Pa
dda0: 72 65 6e 74 20 74 61 62 6c 65 20 74 68 61 74 20  rent table that 
ddb0: 63 68 69 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20  child points to 
ddc0: 2a 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49  */.    Index *pI
ddd0: 64 78 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  dx;           /*
dde0: 20 49 6e 64 65 78 20 69 6e 20 74 68 65 20 70 61   Index in the pa
ddf0: 72 65 6e 74 20 74 61 62 6c 65 20 2a 2f 0a 20 20  rent table */.  
de00: 20 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20    int i;        
de10: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
de20: 20 63 6f 75 6e 74 65 72 3a 20 20 46 6f 72 65 69   counter:  Forei
de30: 67 6e 20 6b 65 79 20 6e 75 6d 62 65 72 20 66 6f  gn key number fo
de40: 72 20 70 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e  r pTab */.    in
de50: 74 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20  t j;            
de60: 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75       /* Loop cou
de70: 6e 74 65 72 3a 20 20 46 69 65 6c 64 20 6f 66 20  nter:  Field of 
de80: 74 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  the foreign key 
de90: 2a 2f 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20  */.    HashElem 
dea0: 2a 6b 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  *k;           /*
deb0: 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20   Loop counter:  
dec0: 4e 65 78 74 20 74 61 62 6c 65 20 69 6e 20 73 63  Next table in sc
ded0: 68 65 6d 61 20 2a 2f 0a 20 20 20 20 69 6e 74 20  hema */.    int 
dee0: 78 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  x;              
def0: 20 20 20 2f 2a 20 72 65 73 75 6c 74 20 76 61 72     /* result var
df00: 69 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  iable */.    int
df10: 20 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20 20   regResult;     
df20: 20 20 20 20 2f 2a 20 33 20 72 65 67 69 73 74 65      /* 3 registe
df30: 72 73 20 74 6f 20 68 6f 6c 64 20 61 20 72 65 73  rs to hold a res
df40: 75 6c 74 20 72 6f 77 20 2a 2f 0a 20 20 20 20 69  ult row */.    i
df50: 6e 74 20 72 65 67 4b 65 79 3b 20 20 20 20 20 20  nt regKey;      
df60: 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65        /* Registe
df70: 72 20 74 6f 20 68 6f 6c 64 20 6b 65 79 20 66 6f  r to hold key fo
df80: 72 20 63 68 65 63 6b 69 6e 67 20 74 68 65 20 46  r checking the F
df90: 4b 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67  K */.    int reg
dfa0: 52 6f 77 3b 20 20 20 20 20 20 20 20 20 20 20 20  Row;            
dfb0: 2f 2a 20 52 65 67 69 73 74 65 72 73 20 74 6f 20  /* Registers to 
dfc0: 68 6f 6c 64 20 61 20 72 6f 77 20 66 72 6f 6d 20  hold a row from 
dfd0: 70 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20  pTab */.    int 
dfe0: 61 64 64 72 54 6f 70 3b 20 20 20 20 20 20 20 20  addrTop;        
dff0: 20 20 20 2f 2a 20 54 6f 70 20 6f 66 20 61 20 6c     /* Top of a l
e000: 6f 6f 70 20 63 68 65 63 6b 69 6e 67 20 66 6f 72  oop checking for
e010: 65 69 67 6e 20 6b 65 79 73 20 2a 2f 0a 20 20 20  eign keys */.   
e020: 20 69 6e 74 20 61 64 64 72 4f 6b 3b 20 20 20 20   int addrOk;    
e030: 20 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20          /* Jump 
e040: 68 65 72 65 20 69 66 20 74 68 65 20 6b 65 79 20  here if the key 
e050: 69 73 20 4f 4b 20 2a 2f 0a 20 20 20 20 69 6e 74  is OK */.    int
e060: 20 2a 61 69 43 6f 6c 73 3b 20 20 20 20 20 20 20   *aiCols;       
e070: 20 20 20 20 2f 2a 20 63 68 69 6c 64 20 74 6f 20      /* child to 
e080: 70 61 72 65 6e 74 20 63 6f 6c 75 6d 6e 20 6d 61  parent column ma
e090: 70 70 69 6e 67 20 2a 2f 0a 0a 20 20 20 20 72 65  pping */..    re
e0a0: 67 52 65 73 75 6c 74 20 3d 20 70 50 61 72 73 65  gResult = pParse
e0b0: 2d 3e 6e 4d 65 6d 2b 31 3b 0a 20 20 20 20 70 50  ->nMem+1;.    pP
e0c0: 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 34 3b  arse->nMem += 4;
e0d0: 0a 20 20 20 20 72 65 67 4b 65 79 20 3d 20 2b 2b  .    regKey = ++
e0e0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20  pParse->nMem;.  
e0f0: 20 20 72 65 67 52 6f 77 20 3d 20 2b 2b 70 50 61    regRow = ++pPa
e100: 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 76  rse->nMem;.    v
e110: 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62   = sqlite3GetVdb
e120: 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 73  e(pParse);.    s
e130: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
e140: 43 6f 6c 73 28 76 2c 20 34 29 3b 0a 20 20 20 20  Cols(v, 4);.    
e150: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
e160: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
e170: 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 61 62 6c 65  AME_NAME, "table
e180: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
e190: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
e1a0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
e1b0: 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  1, COLNAME_NAME,
e1c0: 20 22 72 6f 77 69 64 22 2c 20 53 51 4c 49 54 45   "rowid", SQLITE
e1d0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71  _STATIC);.    sq
e1e0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
e1f0: 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d  ame(v, 2, COLNAM
e200: 45 5f 4e 41 4d 45 2c 20 22 70 61 72 65 6e 74 22  E_NAME, "parent"
e210: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
e220: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
e230: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33  eSetColName(v, 3
e240: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
e250: 22 66 6b 69 64 22 2c 20 53 51 4c 49 54 45 5f 53  "fkid", SQLITE_S
e260: 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69  TATIC);.    sqli
e270: 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
e280: 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29  ema(pParse, iDb)
e290: 3b 0a 20 20 20 20 6b 20 3d 20 73 71 6c 69 74 65  ;.    k = sqlite
e2a0: 48 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61  HashFirst(&db->a
e2b0: 44 62 5b 69 44 62 5d 2e 70 53 63 68 65 6d 61 2d  Db[iDb].pSchema-
e2c0: 3e 74 62 6c 48 61 73 68 29 3b 0a 20 20 20 20 77  >tblHash);.    w
e2d0: 68 69 6c 65 28 20 6b 20 29 7b 0a 20 20 20 20 20  hile( k ){.     
e2e0: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
e2f0: 20 20 20 20 20 20 20 70 54 61 62 20 3d 20 73 71         pTab = sq
e300: 6c 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65  lite3LocateTable
e310: 28 70 50 61 72 73 65 2c 20 30 2c 20 7a 52 69 67  (pParse, 0, zRig
e320: 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20 20  ht, zDb);.      
e330: 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d    k = 0;.      }
e340: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 54  else{.        pT
e350: 61 62 20 3d 20 28 54 61 62 6c 65 2a 29 73 71 6c  ab = (Table*)sql
e360: 69 74 65 48 61 73 68 44 61 74 61 28 6b 29 3b 0a  iteHashData(k);.
e370: 20 20 20 20 20 20 20 20 6b 20 3d 20 73 71 6c 69          k = sqli
e380: 74 65 48 61 73 68 4e 65 78 74 28 6b 29 3b 0a 20  teHashNext(k);. 
e390: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
e3a0: 20 70 54 61 62 3d 3d 30 20 7c 7c 20 70 54 61 62   pTab==0 || pTab
e3b0: 2d 3e 70 46 4b 65 79 3d 3d 30 20 29 20 63 6f 6e  ->pFKey==0 ) con
e3c0: 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c  tinue;.      sql
e3d0: 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50  ite3TableLock(pP
e3e0: 61 72 73 65 2c 20 69 44 62 2c 20 70 54 61 62 2d  arse, iDb, pTab-
e3f0: 3e 74 6e 75 6d 2c 20 30 2c 20 70 54 61 62 2d 3e  >tnum, 0, pTab->
e400: 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 69 66  zName);.      if
e410: 28 20 70 54 61 62 2d 3e 6e 43 6f 6c 2b 72 65 67  ( pTab->nCol+reg
e420: 52 6f 77 3e 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  Row>pParse->nMem
e430: 20 29 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20   ) pParse->nMem 
e440: 3d 20 70 54 61 62 2d 3e 6e 43 6f 6c 20 2b 20 72  = pTab->nCol + r
e450: 65 67 52 6f 77 3b 0a 20 20 20 20 20 20 73 71 6c  egRow;.      sql
e460: 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 70 50  ite3OpenTable(pP
e470: 61 72 73 65 2c 20 30 2c 20 69 44 62 2c 20 70 54  arse, 0, iDb, pT
e480: 61 62 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29  ab, OP_OpenRead)
e490: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
e4a0: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
e4b0: 53 74 72 69 6e 67 38 2c 20 30 2c 20 72 65 67 52  String8, 0, regR
e4c0: 65 73 75 6c 74 2c 20 30 2c 20 70 54 61 62 2d 3e  esult, 0, pTab->
e4d0: 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20  zName,.         
e4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50                 P
e4f0: 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20  4_TRANSIENT);.  
e500: 20 20 20 20 66 6f 72 28 69 3d 31 2c 20 70 46 4b      for(i=1, pFK
e510: 3d 70 54 61 62 2d 3e 70 46 4b 65 79 3b 20 70 46  =pTab->pFKey; pF
e520: 4b 3b 20 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d  K; i++, pFK=pFK-
e530: 3e 70 4e 65 78 74 46 72 6f 6d 29 7b 0a 20 20 20  >pNextFrom){.   
e540: 20 20 20 20 20 70 50 61 72 65 6e 74 20 3d 20 73       pParent = s
e550: 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28  qlite3FindTable(
e560: 64 62 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44  db, pFK->zTo, zD
e570: 62 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  b);.        if( 
e580: 70 50 61 72 65 6e 74 3d 3d 30 20 29 20 63 6f 6e  pParent==0 ) con
e590: 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 70  tinue;.        p
e5a0: 49 64 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  Idx = 0;.       
e5b0: 20 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63   sqlite3TableLoc
e5c0: 6b 28 70 50 61 72 73 65 2c 20 69 44 62 2c 20 70  k(pParse, iDb, p
e5d0: 50 61 72 65 6e 74 2d 3e 74 6e 75 6d 2c 20 30 2c  Parent->tnum, 0,
e5e0: 20 70 50 61 72 65 6e 74 2d 3e 7a 4e 61 6d 65 29   pParent->zName)
e5f0: 3b 0a 20 20 20 20 20 20 20 20 78 20 3d 20 73 71  ;.        x = sq
e600: 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
e610: 65 78 28 70 50 61 72 73 65 2c 20 70 50 61 72 65  ex(pParse, pPare
e620: 6e 74 2c 20 70 46 4b 2c 20 26 70 49 64 78 2c 20  nt, pFK, &pIdx, 
e630: 30 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  0);.        if( 
e640: 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  x==0 ){.        
e650: 20 20 69 66 28 20 70 49 64 78 3d 3d 30 20 29 7b    if( pIdx==0 ){
e660: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
e670: 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 70 50  ite3OpenTable(pP
e680: 61 72 73 65 2c 20 69 2c 20 69 44 62 2c 20 70 50  arse, i, iDb, pP
e690: 61 72 65 6e 74 2c 20 4f 50 5f 4f 70 65 6e 52 65  arent, OP_OpenRe
e6a0: 61 64 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d  ad);.          }
e6b0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
e6c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
e6d0: 4f 70 33 28 76 2c 20 4f 50 5f 4f 70 65 6e 52 65  Op3(v, OP_OpenRe
e6e0: 61 64 2c 20 69 2c 20 70 49 64 78 2d 3e 74 6e 75  ad, i, pIdx->tnu
e6f0: 6d 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 20  m, iDb);.       
e700: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
e710: 53 65 74 50 34 4b 65 79 49 6e 66 6f 28 70 50 61  SetP4KeyInfo(pPa
e720: 72 73 65 2c 20 70 49 64 78 29 3b 0a 20 20 20 20  rse, pIdx);.    
e730: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
e740: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
e750: 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20   k = 0;.        
e760: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
e770: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
e780: 20 61 73 73 65 72 74 28 20 70 50 61 72 73 65 2d   assert( pParse-
e790: 3e 6e 45 72 72 3e 30 20 7c 7c 20 70 46 4b 3d 3d  >nErr>0 || pFK==
e7a0: 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  0 );.      if( p
e7b0: 46 4b 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  FK ) break;.    
e7c0: 20 20 69 66 28 20 70 50 61 72 73 65 2d 3e 6e 54    if( pParse->nT
e7d0: 61 62 3c 69 20 29 20 70 50 61 72 73 65 2d 3e 6e  ab<i ) pParse->n
e7e0: 54 61 62 20 3d 20 69 3b 0a 20 20 20 20 20 20 61  Tab = i;.      a
e7f0: 64 64 72 54 6f 70 20 3d 20 73 71 6c 69 74 65 33  ddrTop = sqlite3
e800: 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50  VdbeAddOp1(v, OP
e810: 5f 52 65 77 69 6e 64 2c 20 30 29 3b 20 56 64 62  _Rewind, 0); Vdb
e820: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
e830: 20 20 20 20 66 6f 72 28 69 3d 31 2c 20 70 46 4b      for(i=1, pFK
e840: 3d 70 54 61 62 2d 3e 70 46 4b 65 79 3b 20 70 46  =pTab->pFKey; pF
e850: 4b 3b 20 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d  K; i++, pFK=pFK-
e860: 3e 70 4e 65 78 74 46 72 6f 6d 29 7b 0a 20 20 20  >pNextFrom){.   
e870: 20 20 20 20 20 70 50 61 72 65 6e 74 20 3d 20 73       pParent = s
e880: 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28  qlite3FindTable(
e890: 64 62 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44  db, pFK->zTo, zD
e8a0: 62 29 3b 0a 20 20 20 20 20 20 20 20 70 49 64 78  b);.        pIdx
e8b0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 61 69   = 0;.        ai
e8c0: 43 6f 6c 73 20 3d 20 30 3b 0a 20 20 20 20 20 20  Cols = 0;.      
e8d0: 20 20 69 66 28 20 70 50 61 72 65 6e 74 20 29 7b    if( pParent ){
e8e0: 0a 20 20 20 20 20 20 20 20 20 20 78 20 3d 20 73  .          x = s
e8f0: 71 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e  qlite3FkLocateIn
e900: 64 65 78 28 70 50 61 72 73 65 2c 20 70 50 61 72  dex(pParse, pPar
e910: 65 6e 74 2c 20 70 46 4b 2c 20 26 70 49 64 78 2c  ent, pFK, &pIdx,
e920: 20 26 61 69 43 6f 6c 73 29 3b 0a 20 20 20 20 20   &aiCols);.     
e930: 20 20 20 20 20 61 73 73 65 72 74 28 20 78 3d 3d       assert( x==
e940: 30 20 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  0 );.        }. 
e950: 20 20 20 20 20 20 20 61 64 64 72 4f 6b 20 3d 20         addrOk = 
e960: 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 4c  sqlite3VdbeMakeL
e970: 61 62 65 6c 28 76 29 3b 0a 20 20 20 20 20 20 20  abel(v);.       
e980: 20 69 66 28 20 70 50 61 72 65 6e 74 20 26 26 20   if( pParent && 
e990: 70 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20  pIdx==0 ){.     
e9a0: 20 20 20 20 20 69 6e 74 20 69 4b 65 79 20 3d 20       int iKey = 
e9b0: 70 46 4b 2d 3e 61 43 6f 6c 5b 30 5d 2e 69 46 72  pFK->aCol[0].iFr
e9c0: 6f 6d 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73  om;.          as
e9d0: 73 65 72 74 28 20 69 4b 65 79 3e 3d 30 20 26 26  sert( iKey>=0 &&
e9e0: 20 69 4b 65 79 3c 70 54 61 62 2d 3e 6e 43 6f 6c   iKey<pTab->nCol
e9f0: 20 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66   );.          if
ea00: 28 20 69 4b 65 79 21 3d 70 54 61 62 2d 3e 69 50  ( iKey!=pTab->iP
ea10: 4b 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 20  Key ){.         
ea20: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
ea30: 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6c 75 6d  dOp3(v, OP_Colum
ea40: 6e 2c 20 30 2c 20 69 4b 65 79 2c 20 72 65 67 52  n, 0, iKey, regR
ea50: 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20  ow);.           
ea60: 20 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65   sqlite3ColumnDe
ea70: 66 61 75 6c 74 28 76 2c 20 70 54 61 62 2c 20 69  fault(v, pTab, i
ea80: 4b 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20  Key, regRow);.  
ea90: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
eaa0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
eab0: 50 5f 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77  P_IsNull, regRow
eac0: 2c 20 61 64 64 72 4f 6b 29 3b 20 56 64 62 65 43  , addrOk); VdbeC
ead0: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
eae0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
eaf0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
eb00: 4d 75 73 74 42 65 49 6e 74 2c 20 72 65 67 52 6f  MustBeInt, regRo
eb10: 77 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  w, .            
eb20: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 75     sqlite3VdbeCu
eb30: 72 72 65 6e 74 41 64 64 72 28 76 29 2b 33 29 3b  rrentAddr(v)+3);
eb40: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
eb50: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73  ;.          }els
eb60: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  e{.            s
eb70: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
eb80: 28 76 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30 2c  (v, OP_Rowid, 0,
eb90: 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20   regRow);.      
eba0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
ebb0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
ebc0: 33 28 76 2c 20 4f 50 5f 4e 6f 74 45 78 69 73 74  3(v, OP_NotExist
ebd0: 73 2c 20 69 2c 20 30 2c 20 72 65 67 52 6f 77 29  s, i, 0, regRow)
ebe0: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
ebf0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
ec00: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
ec10: 2c 20 4f 50 5f 47 6f 74 6f 2c 20 30 2c 20 61 64  , OP_Goto, 0, ad
ec20: 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 20  drOk);.         
ec30: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
ec40: 48 65 72 65 28 76 2c 20 73 71 6c 69 74 65 33 56  Here(v, sqlite3V
ec50: 64 62 65 43 75 72 72 65 6e 74 41 64 64 72 28 76  dbeCurrentAddr(v
ec60: 29 2d 32 29 3b 0a 20 20 20 20 20 20 20 20 7d 65  )-2);.        }e
ec70: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 66  lse{.          f
ec80: 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e  or(j=0; j<pFK->n
ec90: 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20  Col; j++){.     
eca0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78         sqlite3Ex
ecb0: 70 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f  prCodeGetColumnO
ecc0: 66 54 61 62 6c 65 28 76 2c 20 70 54 61 62 2c 20  fTable(v, pTab, 
ecd0: 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  0,.             
ece0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61                 a
ecf0: 69 43 6f 6c 73 20 3f 20 61 69 43 6f 6c 73 5b 6a  iCols ? aiCols[j
ed00: 5d 20 3a 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d  ] : pFK->aCol[j]
ed10: 2e 69 46 72 6f 6d 2c 20 72 65 67 52 6f 77 2b 6a  .iFrom, regRow+j
ed20: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
ed30: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
ed40: 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72  (v, OP_IsNull, r
ed50: 65 67 52 6f 77 2b 6a 2c 20 61 64 64 72 4f 6b 29  egRow+j, addrOk)
ed60: 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
ed70: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
ed80: 20 20 20 20 20 20 20 20 20 69 66 28 20 70 50 61           if( pPa
ed90: 72 65 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20  rent ){.        
eda0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
edb0: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 4d 61 6b 65  ddOp4(v, OP_Make
edc0: 52 65 63 6f 72 64 2c 20 72 65 67 52 6f 77 2c 20  Record, regRow, 
edd0: 70 46 4b 2d 3e 6e 43 6f 6c 2c 20 72 65 67 4b 65  pFK->nCol, regKe
ede0: 79 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  y,.             
edf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ee00: 20 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66   sqlite3IndexAff
ee10: 69 6e 69 74 79 53 74 72 28 76 2c 70 49 64 78 29  inityStr(v,pIdx)
ee20: 2c 20 70 46 4b 2d 3e 6e 43 6f 6c 29 3b 0a 20 20  , pFK->nCol);.  
ee30: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
ee40: 33 56 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76  3VdbeAddOp4Int(v
ee50: 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20 69 2c 20 61  , OP_Found, i, a
ee60: 64 64 72 4f 6b 2c 20 72 65 67 4b 65 79 2c 20 30  ddrOk, regKey, 0
ee70: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 56  );.            V
ee80: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
ee90: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
eea0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71      }.        sq
eeb0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
eec0: 76 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20  v, OP_Rowid, 0, 
eed0: 72 65 67 52 65 73 75 6c 74 2b 31 29 3b 0a 20 20  regResult+1);.  
eee0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
eef0: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
ef00: 72 69 6e 67 38 2c 20 30 2c 20 72 65 67 52 65 73  ring8, 0, regRes
ef10: 75 6c 74 2b 32 2c 20 30 2c 20 0a 20 20 20 20 20  ult+2, 0, .     
ef20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ef30: 20 20 20 20 20 70 46 4b 2d 3e 7a 54 6f 2c 20 50       pFK->zTo, P
ef40: 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20  4_TRANSIENT);.  
ef50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ef60: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
ef70: 74 65 67 65 72 2c 20 69 2d 31 2c 20 72 65 67 52  teger, i-1, regR
ef80: 65 73 75 6c 74 2b 33 29 3b 0a 20 20 20 20 20 20  esult+3);.      
ef90: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
efa0: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
efb0: 52 6f 77 2c 20 72 65 67 52 65 73 75 6c 74 2c 20  Row, regResult, 
efc0: 34 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  4);.        sqli
efd0: 74 65 33 56 64 62 65 52 65 73 6f 6c 76 65 4c 61  te3VdbeResolveLa
efe0: 62 65 6c 28 76 2c 20 61 64 64 72 4f 6b 29 3b 0a  bel(v, addrOk);.
eff0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44          sqlite3D
f000: 62 46 72 65 65 28 64 62 2c 20 61 69 43 6f 6c 73  bFree(db, aiCols
f010: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
f020: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
f030: 70 32 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 30  p2(v, OP_Next, 0
f040: 2c 20 61 64 64 72 54 6f 70 2b 31 29 3b 20 56 64  , addrTop+1); Vd
f050: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
f060: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
f070: 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72  JumpHere(v, addr
f080: 54 6f 70 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  Top);.    }.  }.
f090: 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20    break;.#endif 
f0a0: 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
f0b0: 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29  TE_OMIT_TRIGGER)
f0c0: 20 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64   */.#endif /* !d
f0d0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
f0e0: 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20  IT_FOREIGN_KEY) 
f0f0: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42  */..#ifndef NDEB
f100: 55 47 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  UG.  case PragTy
f110: 70 5f 50 41 52 53 45 52 5f 54 52 41 43 45 3a 20  p_PARSER_TRACE: 
f120: 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  {.    if( zRight
f130: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71   ){.      if( sq
f140: 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
f150: 7a 52 69 67 68 74 2c 20 30 29 20 29 7b 0a 20 20  zRight, 0) ){.  
f160: 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 72        sqlite3Par
f170: 73 65 72 54 72 61 63 65 28 73 74 64 65 72 72 2c  serTrace(stderr,
f180: 20 22 70 61 72 73 65 72 3a 20 22 29 3b 0a 20 20   "parser: ");.  
f190: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
f1a0: 20 20 20 73 71 6c 69 74 65 33 50 61 72 73 65 72     sqlite3Parser
f1b0: 54 72 61 63 65 28 30 2c 20 30 29 3b 0a 20 20 20  Trace(0, 0);.   
f1c0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
f1d0: 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a   break;.#endif..
f1e0: 20 20 2f 2a 20 52 65 69 6e 73 74 61 6c 6c 20 74    /* Reinstall t
f1f0: 68 65 20 4c 49 4b 45 20 61 6e 64 20 47 4c 4f 42  he LIKE and GLOB
f200: 20 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65   functions.  The
f210: 20 76 61 72 69 61 6e 74 20 6f 66 20 4c 49 4b 45   variant of LIKE
f220: 0a 20 20 2a 2a 20 75 73 65 64 20 77 69 6c 6c 20  .  ** used will 
f230: 62 65 20 63 61 73 65 20 73 65 6e 73 69 74 69 76  be case sensitiv
f240: 65 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69  e or not dependi
f250: 6e 67 20 6f 6e 20 74 68 65 20 52 48 53 2e 0a 20  ng on the RHS.. 
f260: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
f270: 79 70 5f 43 41 53 45 5f 53 45 4e 53 49 54 49 56  yp_CASE_SENSITIV
f280: 45 5f 4c 49 4b 45 3a 20 7b 0a 20 20 20 20 69 66  E_LIKE: {.    if
f290: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
f2a0: 20 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65    sqlite3Registe
f2b0: 72 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 64  rLikeFunctions(d
f2c0: 62 2c 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  b, sqlite3GetBoo
f2d0: 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 29  lean(zRight, 0))
f2e0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
f2f0: 65 61 6b 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51  eak;..#ifndef SQ
f300: 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43  LITE_INTEGRITY_C
f310: 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 0a 23  HECK_ERROR_MAX.#
f320: 20 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49   define SQLITE_I
f330: 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45  NTEGRITY_CHECK_E
f340: 52 52 4f 52 5f 4d 41 58 20 31 30 30 0a 23 65 6e  RROR_MAX 100.#en
f350: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
f360: 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
f370: 54 59 5f 43 48 45 43 4b 0a 20 20 2f 2a 20 50 72  TY_CHECK.  /* Pr
f380: 61 67 6d 61 20 22 71 75 69 63 6b 5f 63 68 65 63  agma "quick_chec
f390: 6b 22 20 69 73 20 72 65 64 75 63 65 64 20 76 65  k" is reduced ve
f3a0: 72 73 69 6f 6e 20 6f 66 20 0a 20 20 2a 2a 20 69  rsion of .  ** i
f3b0: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 64  ntegrity_check d
f3c0: 65 73 69 67 6e 65 64 20 74 6f 20 64 65 74 65 63  esigned to detec
f3d0: 74 20 6d 6f 73 74 20 64 61 74 61 62 61 73 65 20  t most database 
f3e0: 63 6f 72 72 75 70 74 69 6f 6e 0a 20 20 2a 2a 20  corruption.  ** 
f3f0: 77 69 74 68 6f 75 74 20 6d 6f 73 74 20 6f 66 20  without most of 
f400: 74 68 65 20 6f 76 65 72 68 65 61 64 20 6f 66 20  the overhead of 
f410: 61 20 66 75 6c 6c 20 69 6e 74 65 67 72 69 74 79  a full integrity
f420: 2d 63 68 65 63 6b 2e 0a 20 20 2a 2f 0a 20 20 63  -check..  */.  c
f430: 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e 54 45  ase PragTyp_INTE
f440: 47 52 49 54 59 5f 43 48 45 43 4b 3a 20 7b 0a 20  GRITY_CHECK: {. 
f450: 20 20 20 69 6e 74 20 69 2c 20 6a 2c 20 61 64 64     int i, j, add
f460: 72 2c 20 6d 78 45 72 72 3b 0a 0a 20 20 20 20 2f  r, mxErr;..    /
f470: 2a 20 43 6f 64 65 20 74 68 61 74 20 61 70 70 65  * Code that appe
f480: 61 72 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f  ars at the end o
f490: 66 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 20  f the integrity 
f4a0: 63 68 65 63 6b 2e 20 20 49 66 20 6e 6f 20 65 72  check.  If no er
f4b0: 72 6f 72 0a 20 20 20 20 2a 2a 20 6d 65 73 73 61  ror.    ** messa
f4c0: 67 65 73 20 68 61 76 65 20 62 65 65 6e 20 67 65  ges have been ge
f4d0: 6e 65 72 61 74 65 64 2c 20 6f 75 74 70 75 74 20  nerated, output 
f4e0: 4f 4b 2e 20 20 4f 74 68 65 72 77 69 73 65 20 6f  OK.  Otherwise o
f4f0: 75 74 70 75 74 20 74 68 65 0a 20 20 20 20 2a 2a  utput the.    **
f500: 20 65 72 72 6f 72 20 6d 65 73 73 61 67 65 0a 20   error message. 
f510: 20 20 20 2a 2f 0a 20 20 20 20 73 74 61 74 69 63     */.    static
f520: 20 63 6f 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d   const int iLn =
f530: 20 56 44 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e   VDBE_OFFSET_LIN
f540: 45 4e 4f 28 32 29 3b 0a 20 20 20 20 73 74 61 74  ENO(2);.    stat
f550: 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c  ic const VdbeOpL
f560: 69 73 74 20 65 6e 64 43 6f 64 65 5b 5d 20 3d 20  ist endCode[] = 
f570: 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 4e  {.      { OP_IfN
f580: 65 67 2c 20 20 20 20 20 20 20 31 2c 20 30 2c 20  eg,       1, 0, 
f590: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a         0},    /*
f5a0: 20 30 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50   0 */.      { OP
f5b0: 5f 53 74 72 69 6e 67 38 2c 20 20 20 20 20 30 2c  _String8,     0,
f5c0: 20 33 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20   3,        0},  
f5d0: 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20    /* 1 */.      
f5e0: 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  { OP_ResultRow, 
f5f0: 20 20 33 2c 20 31 2c 20 20 20 20 20 20 20 20 30    3, 1,        0
f600: 7d 2c 0a 20 20 20 20 7d 3b 0a 0a 20 20 20 20 69  },.    };..    i
f610: 6e 74 20 69 73 51 75 69 63 6b 20 3d 20 28 73 71  nt isQuick = (sq
f620: 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 7a 4c 65  lite3Tolower(zLe
f630: 66 74 5b 30 5d 29 3d 3d 27 71 27 29 3b 0a 0a 20  ft[0])=='q');.. 
f640: 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 52 41     /* If the PRA
f650: 47 4d 41 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20  GMA command was 
f660: 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 50 52 41  of the form "PRA
f670: 47 4d 41 20 3c 64 62 3e 2e 69 6e 74 65 67 72 69  GMA <db>.integri
f680: 74 79 5f 63 68 65 63 6b 22 2c 0a 20 20 20 20 2a  ty_check",.    *
f690: 2a 20 74 68 65 6e 20 69 44 62 20 69 73 20 73 65  * then iDb is se
f6a0: 74 20 74 6f 20 74 68 65 20 69 6e 64 65 78 20 6f  t to the index o
f6b0: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  f the database i
f6c0: 64 65 6e 74 69 66 69 65 64 20 62 79 20 3c 64 62  dentified by <db
f6d0: 3e 2e 0a 20 20 20 20 2a 2a 20 49 6e 20 74 68 69  >..    ** In thi
f6e0: 73 20 63 61 73 65 2c 20 74 68 65 20 69 6e 74 65  s case, the inte
f6f0: 67 72 69 74 79 20 6f 66 20 64 61 74 61 62 61 73  grity of databas
f700: 65 20 69 44 62 20 6f 6e 6c 79 20 69 73 20 76 65  e iDb only is ve
f710: 72 69 66 69 65 64 20 62 79 0a 20 20 20 20 2a 2a  rified by.    **
f720: 20 74 68 65 20 56 44 42 45 20 63 72 65 61 74 65   the VDBE create
f730: 64 20 62 65 6c 6f 77 2e 0a 20 20 20 20 2a 2a 0a  d below..    **.
f740: 20 20 20 20 2a 2a 20 4f 74 68 65 72 77 69 73 65      ** Otherwise
f750: 2c 20 69 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64  , if the command
f760: 20 77 61 73 20 73 69 6d 70 6c 79 20 22 50 52 41   was simply "PRA
f770: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
f780: 65 63 6b 22 20 28 6f 72 0a 20 20 20 20 2a 2a 20  eck" (or.    ** 
f790: 22 50 52 41 47 4d 41 20 71 75 69 63 6b 5f 63 68  "PRAGMA quick_ch
f7a0: 65 63 6b 22 29 2c 20 74 68 65 6e 20 69 44 62 20  eck"), then iDb 
f7b0: 69 73 20 73 65 74 20 74 6f 20 30 2e 20 49 6e 20  is set to 0. In 
f7c0: 74 68 69 73 20 63 61 73 65 2c 20 73 65 74 20 69  this case, set i
f7d0: 44 62 0a 20 20 20 20 2a 2a 20 74 6f 20 2d 31 20  Db.    ** to -1 
f7e0: 68 65 72 65 2c 20 74 6f 20 69 6e 64 69 63 61 74  here, to indicat
f7f0: 65 20 74 68 61 74 20 74 68 65 20 56 44 42 45 20  e that the VDBE 
f800: 73 68 6f 75 6c 64 20 76 65 72 69 66 79 20 74 68  should verify th
f810: 65 20 69 6e 74 65 67 72 69 74 79 0a 20 20 20 20  e integrity.    
f820: 2a 2a 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68  ** of all attach
f830: 65 64 20 64 61 74 61 62 61 73 65 73 2e 20 20 2a  ed databases.  *
f840: 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44  /.    assert( iD
f850: 62 3e 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  b>=0 );.    asse
f860: 72 74 28 20 69 44 62 3d 3d 30 20 7c 7c 20 70 49  rt( iDb==0 || pI
f870: 64 32 2d 3e 7a 20 29 3b 0a 20 20 20 20 69 66 28  d2->z );.    if(
f880: 20 70 49 64 32 2d 3e 7a 3d 3d 30 20 29 20 69 44   pId2->z==0 ) iD
f890: 62 20 3d 20 2d 31 3b 0a 0a 20 20 20 20 2f 2a 20  b = -1;..    /* 
f8a0: 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 56  Initialize the V
f8b0: 44 42 45 20 70 72 6f 67 72 61 6d 20 2a 2f 0a 20  DBE program */. 
f8c0: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
f8d0: 3d 20 36 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 6;.    sqlite3
f8e0: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
f8f0: 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 1);.    sqlite
f900: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
f910: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
f920: 4d 45 2c 20 22 69 6e 74 65 67 72 69 74 79 5f 63  ME, "integrity_c
f930: 68 65 63 6b 22 2c 20 53 51 4c 49 54 45 5f 53 54  heck", SQLITE_ST
f940: 41 54 49 43 29 3b 0a 0a 20 20 20 20 2f 2a 20 53  ATIC);..    /* S
f950: 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 65  et the maximum e
f960: 72 72 6f 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20  rror count */.  
f970: 20 20 6d 78 45 72 72 20 3d 20 53 51 4c 49 54 45    mxErr = SQLITE
f980: 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
f990: 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20 20 20  _ERROR_MAX;.    
f9a0: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
f9b0: 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 49 6e      sqlite3GetIn
f9c0: 74 33 32 28 7a 52 69 67 68 74 2c 20 26 6d 78 45  t32(zRight, &mxE
f9d0: 72 72 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6d  rr);.      if( m
f9e0: 78 45 72 72 3c 3d 30 20 29 7b 0a 20 20 20 20 20  xErr<=0 ){.     
f9f0: 20 20 20 6d 78 45 72 72 20 3d 20 53 51 4c 49 54     mxErr = SQLIT
fa00: 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  E_INTEGRITY_CHEC
fa10: 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20 20  K_ERROR_MAX;.   
fa20: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73     }.    }.    s
fa30: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
fa40: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
fa50: 6d 78 45 72 72 2c 20 31 29 3b 20 20 2f 2a 20 72  mxErr, 1);  /* r
fa60: 65 67 5b 31 5d 20 68 6f 6c 64 73 20 65 72 72 6f  eg[1] holds erro
fa70: 72 73 20 6c 65 66 74 20 2a 2f 0a 0a 20 20 20 20  rs left */..    
fa80: 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67 72 69  /* Do an integri
fa90: 74 79 20 63 68 65 63 6b 20 6f 6e 20 65 61 63 68  ty check on each
faa0: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a   database file *
fab0: 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  /.    for(i=0; i
fac0: 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a  <db->nDb; i++){.
fad0: 20 20 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a        HashElem *
fae0: 78 3b 0a 20 20 20 20 20 20 48 61 73 68 20 2a 70  x;.      Hash *p
faf0: 54 62 6c 73 3b 0a 20 20 20 20 20 20 69 6e 74 20  Tbls;.      int 
fb00: 63 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20  cnt = 0;..      
fb10: 69 66 28 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20  if( OMIT_TEMPDB 
fb20: 26 26 20 69 3d 3d 31 20 29 20 63 6f 6e 74 69 6e  && i==1 ) contin
fb30: 75 65 3b 0a 20 20 20 20 20 20 69 66 28 20 69 44  ue;.      if( iD
fb40: 62 3e 3d 30 20 26 26 20 69 21 3d 69 44 62 20 29  b>=0 && i!=iDb )
fb50: 20 63 6f 6e 74 69 6e 75 65 3b 0a 0a 20 20 20 20   continue;..    
fb60: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
fb70: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
fb80: 2c 20 69 29 3b 0a 20 20 20 20 20 20 61 64 64 72  , i);.      addr
fb90: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
fba0: 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73  dOp1(v, OP_IfPos
fbb0: 2c 20 31 29 3b 20 2f 2a 20 48 61 6c 74 20 69 66  , 1); /* Halt if
fbc0: 20 6f 75 74 20 6f 66 20 65 72 72 6f 72 73 20 2a   out of errors *
fbd0: 2f 0a 20 20 20 20 20 20 56 64 62 65 43 6f 76 65  /.      VdbeCove
fbe0: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73  rage(v);.      s
fbf0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
fc00: 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20  (v, OP_Halt, 0, 
fc10: 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0);.      sqlite
fc20: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
fc30: 20 61 64 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f   addr);..      /
fc40: 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67 72 69 74  * Do an integrit
fc50: 79 20 63 68 65 63 6b 20 6f 66 20 74 68 65 20 42  y check of the B
fc60: 2d 54 72 65 65 0a 20 20 20 20 20 20 2a 2a 0a 20  -Tree.      **. 
fc70: 20 20 20 20 20 2a 2a 20 42 65 67 69 6e 20 62 79       ** Begin by
fc80: 20 66 69 6c 6c 69 6e 67 20 72 65 67 69 73 74 65   filling registe
fc90: 72 73 20 32 2c 20 33 2c 20 2e 2e 2e 20 77 69 74  rs 2, 3, ... wit
fca0: 68 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 73  h the root pages
fcb0: 20 6e 75 6d 62 65 72 73 0a 20 20 20 20 20 20 2a   numbers.      *
fcc0: 2a 20 66 6f 72 20 61 6c 6c 20 74 61 62 6c 65 73  * for all tables
fcd0: 20 61 6e 64 20 69 6e 64 69 63 65 73 20 69 6e 20   and indices in 
fce0: 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20  the database..  
fcf0: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73      */.      ass
fd00: 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65  ert( sqlite3Sche
fd10: 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20  maMutexHeld(db, 
fd20: 69 2c 20 30 29 20 29 3b 0a 20 20 20 20 20 20 70  i, 0) );.      p
fd30: 54 62 6c 73 20 3d 20 26 64 62 2d 3e 61 44 62 5b  Tbls = &db->aDb[
fd40: 69 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48  i].pSchema->tblH
fd50: 61 73 68 3b 0a 20 20 20 20 20 20 66 6f 72 28 78  ash;.      for(x
fd60: 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74  =sqliteHashFirst
fd70: 28 70 54 62 6c 73 29 3b 20 78 3b 20 78 3d 73 71  (pTbls); x; x=sq
fd80: 6c 69 74 65 48 61 73 68 4e 65 78 74 28 78 29 29  liteHashNext(x))
fd90: 7b 0a 20 20 20 20 20 20 20 20 54 61 62 6c 65 20  {.        Table 
fda0: 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61  *pTab = sqliteHa
fdb0: 73 68 44 61 74 61 28 78 29 3b 0a 20 20 20 20 20  shData(x);.     
fdc0: 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a     Index *pIdx;.
fdd0: 20 20 20 20 20 20 20 20 69 66 28 20 48 61 73 52          if( HasR
fde0: 6f 77 69 64 28 70 54 61 62 29 20 29 7b 0a 20 20  owid(pTab) ){.  
fdf0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
fe00: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
fe10: 49 6e 74 65 67 65 72 2c 20 70 54 61 62 2d 3e 74  Integer, pTab->t
fe20: 6e 75 6d 2c 20 32 2b 63 6e 74 29 3b 0a 20 20 20  num, 2+cnt);.   
fe30: 20 20 20 20 20 20 20 56 64 62 65 43 6f 6d 6d 65         VdbeComme
fe40: 6e 74 28 28 76 2c 20 22 25 73 22 2c 20 70 54 61  nt((v, "%s", pTa
fe50: 62 2d 3e 7a 4e 61 6d 65 29 29 3b 0a 20 20 20 20  b->zName));.    
fe60: 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20        cnt++;.   
fe70: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66       }.        f
fe80: 6f 72 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49  or(pIdx=pTab->pI
fe90: 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78  ndex; pIdx; pIdx
fea0: 3d 70 49 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20  =pIdx->pNext){. 
feb0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
fec0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
fed0: 5f 49 6e 74 65 67 65 72 2c 20 70 49 64 78 2d 3e  _Integer, pIdx->
fee0: 74 6e 75 6d 2c 20 32 2b 63 6e 74 29 3b 0a 20 20  tnum, 2+cnt);.  
fef0: 20 20 20 20 20 20 20 20 56 64 62 65 43 6f 6d 6d          VdbeComm
ff00: 65 6e 74 28 28 76 2c 20 22 25 73 22 2c 20 70 49  ent((v, "%s", pI
ff10: 64 78 2d 3e 7a 4e 61 6d 65 29 29 3b 0a 20 20 20  dx->zName));.   
ff20: 20 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20         cnt++;.  
ff30: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a        }.      }.
ff40: 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  .      /* Make s
ff50: 75 72 65 20 73 75 66 66 69 63 69 65 6e 74 20 6e  ure sufficient n
ff60: 75 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65  umber of registe
ff70: 72 73 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c  rs have been all
ff80: 6f 63 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20  ocated */.      
ff90: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 4d  pParse->nMem = M
ffa0: 41 58 28 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  AX( pParse->nMem
ffb0: 2c 20 63 6e 74 2b 38 20 29 3b 0a 0a 20 20 20 20  , cnt+8 );..    
ffc0: 20 20 2f 2a 20 44 6f 20 74 68 65 20 62 2d 74 72    /* Do the b-tr
ffd0: 65 65 20 69 6e 74 65 67 72 69 74 79 20 63 68 65  ee integrity che
ffe0: 63 6b 73 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c  cks */.      sql
fff0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
10000 2c 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b  , OP_IntegrityCk
10010 2c 20 32 2c 20 63 6e 74 2c 20 31 29 3b 0a 20 20  , 2, cnt, 1);.  
10020 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
10030 68 61 6e 67 65 50 35 28 76 2c 20 28 75 38 29 69  hangeP5(v, (u8)i
10040 29 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20  );.      addr = 
10050 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
10060 31 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20  1(v, OP_IsNull, 
10070 32 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  2); VdbeCoverage
10080 28 76 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  (v);.      sqlit
10090 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
100a0 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33  OP_String8, 0, 3
100b0 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 73 71  , 0,.         sq
100c0 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c  lite3MPrintf(db,
100d0 20 22 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73   "*** in databas
100e0 65 20 25 73 20 2a 2a 2a 5c 6e 22 2c 20 64 62 2d  e %s ***\n", db-
100f0 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 29 2c 0a  >aDb[i].zName),.
10100 20 20 20 20 20 20 20 20 20 50 34 5f 44 59 4e 41           P4_DYNA
10110 4d 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  MIC);.      sqli
10120 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
10130 20 4f 50 5f 4d 6f 76 65 2c 20 32 2c 20 34 2c 20   OP_Move, 2, 4, 
10140 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  1);.      sqlite
10150 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
10160 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20  P_Concat, 4, 3, 
10170 32 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  2);.      sqlite
10180 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
10190 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 32 2c 20  P_ResultRow, 2, 
101a0 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  1);.      sqlite
101b0 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
101c0 20 61 64 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f   addr);..      /
101d0 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20  * Make sure all 
101e0 74 68 65 20 69 6e 64 69 63 65 73 20 61 72 65 20  the indices are 
101f0 63 6f 6e 73 74 72 75 63 74 65 64 20 63 6f 72 72  constructed corr
10200 65 63 74 6c 79 2e 0a 20 20 20 20 20 20 2a 2f 0a  ectly..      */.
10210 20 20 20 20 20 20 66 6f 72 28 78 3d 73 71 6c 69        for(x=sqli
10220 74 65 48 61 73 68 46 69 72 73 74 28 70 54 62 6c  teHashFirst(pTbl
10230 73 29 3b 20 78 20 26 26 20 21 69 73 51 75 69 63  s); x && !isQuic
10240 6b 3b 20 78 3d 73 71 6c 69 74 65 48 61 73 68 4e  k; x=sqliteHashN
10250 65 78 74 28 78 29 29 7b 0a 20 20 20 20 20 20 20  ext(x)){.       
10260 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73   Table *pTab = s
10270 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 78 29  qliteHashData(x)
10280 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78 20  ;.        Index 
10290 2a 70 49 64 78 2c 20 2a 70 50 6b 3b 0a 20 20 20  *pIdx, *pPk;.   
102a0 20 20 20 20 20 49 6e 64 65 78 20 2a 70 50 72 69       Index *pPri
102b0 6f 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  or = 0;.        
102c0 69 6e 74 20 6c 6f 6f 70 54 6f 70 3b 0a 20 20 20  int loopTop;.   
102d0 20 20 20 20 20 69 6e 74 20 69 44 61 74 61 43 75       int iDataCu
102e0 72 2c 20 69 49 64 78 43 75 72 3b 0a 20 20 20 20  r, iIdxCur;.    
102f0 20 20 20 20 69 6e 74 20 72 31 20 3d 20 2d 31 3b      int r1 = -1;
10300 0a 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 54  ..        if( pT
10310 61 62 2d 3e 70 49 6e 64 65 78 3d 3d 30 20 29 20  ab->pIndex==0 ) 
10320 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
10330 20 20 70 50 6b 20 3d 20 48 61 73 52 6f 77 69 64    pPk = HasRowid
10340 28 70 54 61 62 29 20 3f 20 30 20 3a 20 73 71 6c  (pTab) ? 0 : sql
10350 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e  ite3PrimaryKeyIn
10360 64 65 78 28 70 54 61 62 29 3b 0a 20 20 20 20 20  dex(pTab);.     
10370 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65     addr = sqlite
10380 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
10390 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 20 2f 2a  P_IfPos, 1);  /*
103a0 20 53 74 6f 70 20 69 66 20 6f 75 74 20 6f 66 20   Stop if out of 
103b0 65 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20 20 20  errors */.      
103c0 20 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76    VdbeCoverage(v
103d0 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
103e0 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
103f0 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a  OP_Halt, 0, 0);.
10400 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
10410 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61  dbeJumpHere(v, a
10420 64 64 72 29 3b 0a 20 20 20 20 20 20 20 20 73 71  ddr);.        sq
10430 6c 69 74 65 33 45 78 70 72 43 61 63 68 65 43 6c  lite3ExprCacheCl
10440 65 61 72 28 70 50 61 72 73 65 29 3b 0a 20 20 20  ear(pParse);.   
10450 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65 6e       sqlite3Open
10460 54 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28  TableAndIndices(
10470 70 50 61 72 73 65 2c 20 70 54 61 62 2c 20 4f 50  pParse, pTab, OP
10480 5f 4f 70 65 6e 52 65 61 64 2c 0a 20 20 20 20 20  _OpenRead,.     
10490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31 2c                1,
104b0 20 30 2c 20 26 69 44 61 74 61 43 75 72 2c 20 26   0, &iDataCur, &
104c0 69 49 64 78 43 75 72 29 3b 0a 20 20 20 20 20 20  iIdxCur);.      
104d0 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
104e0 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
104f0 72 2c 20 30 2c 20 37 29 3b 0a 20 20 20 20 20 20  r, 0, 7);.      
10500 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d    for(j=0, pIdx=
10510 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49  pTab->pIndex; pI
10520 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70  dx; pIdx=pIdx->p
10530 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20  Next, j++){.    
10540 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10550 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
10560 74 65 67 65 72 2c 20 30 2c 20 38 2b 6a 29 3b 20  teger, 0, 8+j); 
10570 2f 2a 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73  /* index entries
10580 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20   counter */.    
10590 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 50      }.        pP
105a0 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 4d 41 58  arse->nMem = MAX
105b0 28 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20 38  (pParse->nMem, 8
105c0 2b 6a 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  +j);.        sql
105d0 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
105e0 2c 20 4f 50 5f 52 65 77 69 6e 64 2c 20 69 44 61  , OP_Rewind, iDa
105f0 74 61 43 75 72 2c 20 30 29 3b 20 56 64 62 65 43  taCur, 0); VdbeC
10600 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
10610 20 20 20 20 6c 6f 6f 70 54 6f 70 20 3d 20 73 71      loopTop = sq
10620 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
10630 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 37 2c  v, OP_AddImm, 7,
10640 20 31 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20   1);.        /* 
10650 56 65 72 69 66 79 20 74 68 61 74 20 61 6c 6c 20  Verify that all 
10660 4e 4f 54 20 4e 55 4c 4c 20 63 6f 6c 75 6d 6e 73  NOT NULL columns
10670 20 72 65 61 6c 6c 79 20 61 72 65 20 4e 4f 54 20   really are NOT 
10680 4e 55 4c 4c 20 2a 2f 0a 20 20 20 20 20 20 20 20  NULL */.        
10690 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 54 61 62 2d  for(j=0; j<pTab-
106a0 3e 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20  >nCol; j++){.   
106b0 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 45 72         char *zEr
106c0 72 3b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  r;.          int
106d0 20 6a 6d 70 32 2c 20 6a 6d 70 33 3b 0a 20 20 20   jmp2, jmp3;.   
106e0 20 20 20 20 20 20 20 69 66 28 20 6a 3d 3d 70 54         if( j==pT
106f0 61 62 2d 3e 69 50 4b 65 79 20 29 20 63 6f 6e 74  ab->iPKey ) cont
10700 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20  inue;.          
10710 69 66 28 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 6a  if( pTab->aCol[j
10720 5d 2e 6e 6f 74 4e 75 6c 6c 3d 3d 30 20 29 20 63  ].notNull==0 ) c
10730 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20  ontinue;.       
10740 20 20 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f     sqlite3ExprCo
10750 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62  deGetColumnOfTab
10760 6c 65 28 76 2c 20 70 54 61 62 2c 20 69 44 61 74  le(v, pTab, iDat
10770 61 43 75 72 2c 20 6a 2c 20 33 29 3b 0a 20 20 20  aCur, j, 3);.   
10780 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
10790 62 65 43 68 61 6e 67 65 50 35 28 76 2c 20 4f 50  beChangeP5(v, OP
107a0 46 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 3b  FLAG_TYPEOFARG);
107b0 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70 32 20  .          jmp2 
107c0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
107d0 4f 70 31 28 76 2c 20 4f 50 5f 4e 6f 74 4e 75 6c  Op1(v, OP_NotNul
107e0 6c 2c 20 33 29 3b 20 56 64 62 65 43 6f 76 65 72  l, 3); VdbeCover
107f0 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
10800 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
10810 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d  Op2(v, OP_AddImm
10820 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44 65 63  , 1, -1); /* Dec
10830 72 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c 69 6d  rement error lim
10840 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  it */.          
10850 7a 45 72 72 20 3d 20 73 71 6c 69 74 65 33 4d 50  zErr = sqlite3MP
10860 72 69 6e 74 66 28 64 62 2c 20 22 4e 55 4c 4c 20  rintf(db, "NULL 
10870 76 61 6c 75 65 20 69 6e 20 25 73 2e 25 73 22 2c  value in %s.%s",
10880 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20   pTab->zName,.  
10890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
108a0 20 20 20 20 20 20 20 20 20 20 20 20 70 54 61 62              pTab
108b0 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 4e 61 6d 65 29  ->aCol[j].zName)
108c0 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
108d0 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
108e0 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
108f0 33 2c 20 30 2c 20 7a 45 72 72 2c 20 50 34 5f 44  3, 0, zErr, P4_D
10900 59 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20 20 20  YNAMIC);.       
10910 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
10920 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
10930 74 52 6f 77 2c 20 33 2c 20 31 29 3b 0a 20 20 20  tRow, 3, 1);.   
10940 20 20 20 20 20 20 20 6a 6d 70 33 20 3d 20 73 71         jmp3 = sq
10950 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
10960 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b  v, OP_IfPos, 1);
10970 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
10980 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
10990 74 65 33 56 64 62 65 41 64 64 4f 70 30 28 76 2c  te3VdbeAddOp0(v,
109a0 20 4f 50 5f 48 61 6c 74 29 3b 0a 20 20 20 20 20   OP_Halt);.     
109b0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
109c0 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 32  JumpHere(v, jmp2
109d0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
109e0 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
109f0 28 76 2c 20 6a 6d 70 33 29 3b 0a 20 20 20 20 20  (v, jmp3);.     
10a00 20 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20     }.        /* 
10a10 56 61 6c 69 64 61 74 65 20 69 6e 64 65 78 20 65  Validate index e
10a20 6e 74 72 69 65 73 20 66 6f 72 20 74 68 65 20 63  ntries for the c
10a30 75 72 72 65 6e 74 20 72 6f 77 20 2a 2f 0a 20 20  urrent row */.  
10a40 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70        for(j=0, p
10a50 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78  Idx=pTab->pIndex
10a60 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64  ; pIdx; pIdx=pId
10a70 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a  x->pNext, j++){.
10a80 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a 6d            int jm
10a90 70 32 2c 20 6a 6d 70 33 2c 20 6a 6d 70 34 2c 20  p2, jmp3, jmp4, 
10aa0 6a 6d 70 35 3b 0a 20 20 20 20 20 20 20 20 20 20  jmp5;.          
10ab0 69 6e 74 20 63 6b 55 6e 69 71 20 3d 20 73 71 6c  int ckUniq = sql
10ac0 69 74 65 33 56 64 62 65 4d 61 6b 65 4c 61 62 65  ite3VdbeMakeLabe
10ad0 6c 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  l(v);.          
10ae0 69 66 28 20 70 50 6b 3d 3d 70 49 64 78 20 29 20  if( pPk==pIdx ) 
10af0 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
10b00 20 20 20 20 72 31 20 3d 20 73 71 6c 69 74 65 33      r1 = sqlite3
10b10 47 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79  GenerateIndexKey
10b20 28 70 50 61 72 73 65 2c 20 70 49 64 78 2c 20 69  (pParse, pIdx, i
10b30 44 61 74 61 43 75 72 2c 20 30 2c 20 30 2c 20 26  DataCur, 0, 0, &
10b40 6a 6d 70 33 2c 0a 20 20 20 20 20 20 20 20 20 20  jmp3,.          
10b50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b60 20 20 20 20 20 20 20 20 20 20 20 20 20 70 50 72               pPr
10b70 69 6f 72 2c 20 72 31 29 3b 0a 20 20 20 20 20 20  ior, r1);.      
10b80 20 20 20 20 70 50 72 69 6f 72 20 3d 20 70 49 64      pPrior = pId
10b90 78 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  x;.          sql
10ba0 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
10bb0 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 38 2b 6a  , OP_AddImm, 8+j
10bc0 2c 20 31 29 3b 20 20 2f 2a 20 69 6e 63 72 65 6d  , 1);  /* increm
10bd0 65 6e 74 20 65 6e 74 72 79 20 63 6f 75 6e 74 20  ent entry count 
10be0 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  */.          /* 
10bf0 56 65 72 69 66 79 20 74 68 61 74 20 61 6e 20 69  Verify that an i
10c00 6e 64 65 78 20 65 6e 74 72 79 20 65 78 69 73 74  ndex entry exist
10c10 73 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  s for the curren
10c20 74 20 74 61 62 6c 65 20 72 6f 77 20 2a 2f 0a 20  t table row */. 
10c30 20 20 20 20 20 20 20 20 20 6a 6d 70 32 20 3d 20           jmp2 = 
10c40 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
10c50 34 49 6e 74 28 76 2c 20 4f 50 5f 46 6f 75 6e 64  4Int(v, OP_Found
10c60 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20 63 6b 55  , iIdxCur+j, ckU
10c70 6e 69 71 2c 20 72 31 2c 0a 20 20 20 20 20 20 20  niq, r1,.       
10c80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70                 p
10ca0 49 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 29 3b 20 56  Idx->nColumn); V
10cb0 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
10cc0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
10cd0 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
10ce0 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29  P_AddImm, 1, -1)
10cf0 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20 65  ; /* Decrement e
10d00 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20  rror limit */.  
10d10 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
10d20 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
10d30 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30  String8, 0, 3, 0
10d40 2c 20 22 72 6f 77 20 22 2c 20 50 34 5f 53 54 41  , "row ", P4_STA
10d50 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 20 20  TIC);.          
10d60 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
10d70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20  3(v, OP_Concat, 
10d80 37 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20 20  7, 3, 3);.      
10d90 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
10da0 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
10db0 6e 67 38 2c 20 30 2c 20 34 2c 20 30 2c 20 0a 20  ng8, 0, 4, 0, . 
10dc0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10dd0 20 20 20 20 20 20 20 20 20 20 20 22 20 6d 69 73             " mis
10de0 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20  sing from index 
10df0 22 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20  ", P4_STATIC);. 
10e00 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
10e10 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
10e20 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20 33  _Concat, 4, 3, 3
10e30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70  );.          jmp
10e40 35 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  5 = sqlite3VdbeA
10e50 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
10e60 6e 67 38 2c 20 30 2c 20 34 2c 20 30 2c 0a 20 20  ng8, 0, 4, 0,.  
10e70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10e90 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 50 34   pIdx->zName, P4
10ea0 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20  _TRANSIENT);.   
10eb0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
10ec0 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43  beAddOp3(v, OP_C
10ed0 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20 33 29 3b  oncat, 4, 3, 3);
10ee0 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
10ef0 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
10f00 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 33 2c  OP_ResultRow, 3,
10f10 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6a   1);.          j
10f20 6d 70 34 20 3d 20 73 71 6c 69 74 65 33 56 64 62  mp4 = sqlite3Vdb
10f30 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66  eAddOp1(v, OP_If
10f40 50 6f 73 2c 20 31 29 3b 20 56 64 62 65 43 6f 76  Pos, 1); VdbeCov
10f50 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
10f60 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
10f70 64 64 4f 70 30 28 76 2c 20 4f 50 5f 48 61 6c 74  ddOp0(v, OP_Halt
10f80 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
10f90 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
10fa0 28 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20 20 20  (v, jmp2);.     
10fb0 20 20 20 20 20 2f 2a 20 46 6f 72 20 55 4e 49 51       /* For UNIQ
10fc0 55 45 20 69 6e 64 65 78 65 73 2c 20 76 65 72 69  UE indexes, veri
10fd0 66 79 20 74 68 61 74 20 6f 6e 6c 79 20 6f 6e 65  fy that only one
10fe0 20 65 6e 74 72 79 20 65 78 69 73 74 73 20 77 69   entry exists wi
10ff0 74 68 20 74 68 65 0a 20 20 20 20 20 20 20 20 20  th the.         
11000 20 2a 2a 20 63 75 72 72 65 6e 74 20 6b 65 79 2e   ** current key.
11010 20 20 54 68 65 20 65 6e 74 72 79 20 69 73 20 75    The entry is u
11020 6e 69 71 75 65 20 69 66 20 28 31 29 20 61 6e 79  nique if (1) any
11030 20 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 0a   column is NULL.
11040 20 20 20 20 20 20 20 20 20 20 2a 2a 20 6f 72 20            ** or 
11050 28 32 29 20 74 68 65 20 6e 65 78 74 20 65 6e 74  (2) the next ent
11060 72 79 20 68 61 73 20 61 20 64 69 66 66 65 72 65  ry has a differe
11070 6e 74 20 6b 65 79 20 2a 2f 0a 20 20 20 20 20 20  nt key */.      
11080 20 20 20 20 69 66 28 20 49 73 55 6e 69 71 75 65      if( IsUnique
11090 49 6e 64 65 78 28 70 49 64 78 29 20 29 7b 0a 20  Index(pIdx) ){. 
110a0 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 75             int u
110b0 6e 69 71 4f 6b 20 3d 20 73 71 6c 69 74 65 33 56  niqOk = sqlite3V
110c0 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b  dbeMakeLabel(v);
110d0 0a 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74  .            int
110e0 20 6a 6d 70 36 3b 0a 20 20 20 20 20 20 20 20 20   jmp6;.         
110f0 20 20 20 69 6e 74 20 6b 6b 3b 0a 20 20 20 20 20     int kk;.     
11100 20 20 20 20 20 20 20 66 6f 72 28 6b 6b 3d 30 3b         for(kk=0;
11110 20 6b 6b 3c 70 49 64 78 2d 3e 6e 4b 65 79 43 6f   kk<pIdx->nKeyCo
11120 6c 3b 20 6b 6b 2b 2b 29 7b 0a 20 20 20 20 20 20  l; kk++){.      
11130 20 20 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6c          int iCol
11140 20 3d 20 70 49 64 78 2d 3e 61 69 43 6f 6c 75 6d   = pIdx->aiColum
11150 6e 5b 6b 6b 5d 3b 0a 20 20 20 20 20 20 20 20 20  n[kk];.         
11160 20 20 20 20 20 61 73 73 65 72 74 28 20 69 43 6f       assert( iCo
11170 6c 3e 3d 30 20 26 26 20 69 43 6f 6c 3c 70 54 61  l>=0 && iCol<pTa
11180 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20 20 20  b->nCol );.     
11190 20 20 20 20 20 20 20 20 20 69 66 28 20 70 54 61           if( pTa
111a0 62 2d 3e 61 43 6f 6c 5b 69 43 6f 6c 5d 2e 6e 6f  b->aCol[iCol].no
111b0 74 4e 75 6c 6c 20 29 20 63 6f 6e 74 69 6e 75 65  tNull ) continue
111c0 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;.              
111d0 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
111e0 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20  2(v, OP_IsNull, 
111f0 72 31 2b 6b 6b 2c 20 75 6e 69 71 4f 6b 29 3b 0a  r1+kk, uniqOk);.
11200 20 20 20 20 20 20 20 20 20 20 20 20 20 20 56 64                Vd
11210 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
11220 20 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20             }.   
11230 20 20 20 20 20 20 20 20 20 6a 6d 70 36 20 3d 20           jmp6 = 
11240 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
11250 31 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 69 49  1(v, OP_Next, iI
11260 64 78 43 75 72 2b 6a 29 3b 20 56 64 62 65 43 6f  dxCur+j); VdbeCo
11270 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
11280 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
11290 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 47  beAddOp2(v, OP_G
112a0 6f 74 6f 2c 20 30 2c 20 75 6e 69 71 4f 6b 29 3b  oto, 0, uniqOk);
112b0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
112c0 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
112d0 28 76 2c 20 6a 6d 70 36 29 3b 0a 20 20 20 20 20  (v, jmp6);.     
112e0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
112f0 62 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f  beAddOp4Int(v, O
11300 50 5f 49 64 78 47 54 2c 20 69 49 64 78 43 75 72  P_IdxGT, iIdxCur
11310 2b 6a 2c 20 75 6e 69 71 4f 6b 2c 20 72 31 2c 0a  +j, uniqOk, r1,.
11320 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11330 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11340 20 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 29 3b   pIdx->nKeyCol);
11350 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
11360 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
11370 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
11380 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c  v, OP_AddImm, 1,
11390 20 2d 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65   -1); /* Decreme
113a0 6e 74 20 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a  nt error limit *
113b0 2f 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  /.            sq
113c0 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
113d0 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
113e0 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20 20  , 3, 0,.        
113f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11400 20 20 20 20 20 20 22 6e 6f 6e 2d 75 6e 69 71 75        "non-uniqu
11410 65 20 65 6e 74 72 79 20 69 6e 20 69 6e 64 65 78  e entry in index
11420 20 22 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a   ", P4_STATIC);.
11430 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
11440 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
11450 20 4f 50 5f 47 6f 74 6f 2c 20 30 2c 20 6a 6d 70   OP_Goto, 0, jmp
11460 35 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  5);.            
11470 73 71 6c 69 74 65 33 56 64 62 65 52 65 73 6f 6c  sqlite3VdbeResol
11480 76 65 4c 61 62 65 6c 28 76 2c 20 75 6e 69 71 4f  veLabel(v, uniqO
11490 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  k);.          }.
114a0 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
114b0 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
114c0 20 6a 6d 70 34 29 3b 0a 20 20 20 20 20 20 20 20   jmp4);.        
114d0 20 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65    sqlite3Resolve
114e0 50 61 72 74 49 64 78 4c 61 62 65 6c 28 70 50 61  PartIdxLabel(pPa
114f0 72 73 65 2c 20 6a 6d 70 33 29 3b 0a 20 20 20 20  rse, jmp3);.    
11500 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71      }.        sq
11510 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
11520 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 69 44 61 74  v, OP_Next, iDat
11530 61 43 75 72 2c 20 6c 6f 6f 70 54 6f 70 29 3b 20  aCur, loopTop); 
11540 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
11550 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
11560 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
11570 6c 6f 6f 70 54 6f 70 2d 31 29 3b 0a 23 69 66 6e  loopTop-1);.#ifn
11580 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
11590 42 54 52 45 45 43 4f 55 4e 54 0a 20 20 20 20 20  BTREECOUNT.     
115a0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
115b0 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
115c0 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 0a 20 20  g8, 0, 2, 0, .  
115d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
115e0 20 20 20 22 77 72 6f 6e 67 20 23 20 6f 66 20 65     "wrong # of e
115f0 6e 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20  ntries in index 
11600 22 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20  ", P4_STATIC);. 
11610 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20         for(j=0, 
11620 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65  pIdx=pTab->pInde
11630 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49  x; pIdx; pIdx=pI
11640 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b  dx->pNext, j++){
11650 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70  .          if( p
11660 50 6b 3d 3d 70 49 64 78 20 29 20 63 6f 6e 74 69  Pk==pIdx ) conti
11670 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 61  nue;.          a
11680 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ddr = sqlite3Vdb
11690 65 43 75 72 72 65 6e 74 41 64 64 72 28 76 29 3b  eCurrentAddr(v);
116a0 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
116b0 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
116c0 4f 50 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64 64  OP_IfPos, 1, add
116d0 72 2b 32 29 3b 20 56 64 62 65 43 6f 76 65 72 61  r+2); VdbeCovera
116e0 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
116f0 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
11700 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30  p2(v, OP_Halt, 0
11710 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
11720 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
11730 32 28 76 2c 20 4f 50 5f 43 6f 75 6e 74 2c 20 69  2(v, OP_Count, i
11740 49 64 78 43 75 72 2b 6a 2c 20 33 29 3b 0a 20 20  IdxCur+j, 3);.  
11750 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
11760 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
11770 45 71 2c 20 38 2b 6a 2c 20 61 64 64 72 2b 38 2c  Eq, 8+j, addr+8,
11780 20 33 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67   3); VdbeCoverag
11790 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
117a0 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
117b0 65 50 35 28 76 2c 20 53 51 4c 49 54 45 5f 4e 4f  eP5(v, SQLITE_NO
117c0 54 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 20 20  TNULL);.        
117d0 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
117e0 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d  Op2(v, OP_AddImm
117f0 2c 20 31 2c 20 2d 31 29 3b 0a 20 20 20 20 20 20  , 1, -1);.      
11800 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
11810 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
11820 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 70 49  ng8, 0, 3, 0, pI
11830 64 78 2d 3e 7a 4e 61 6d 65 2c 20 50 34 5f 54 52  dx->zName, P4_TR
11840 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20  ANSIENT);.      
11850 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
11860 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63  ddOp3(v, OP_Conc
11870 61 74 2c 20 33 2c 20 32 2c 20 37 29 3b 0a 20 20  at, 3, 2, 7);.  
11880 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
11890 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
118a0 52 65 73 75 6c 74 52 6f 77 2c 20 37 2c 20 31 29  ResultRow, 7, 1)
118b0 3b 0a 20 20 20 20 20 20 20 20 7d 0a 23 65 6e 64  ;.        }.#end
118c0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
118d0 54 5f 42 54 52 45 45 43 4f 55 4e 54 20 2a 2f 0a  T_BTREECOUNT */.
118e0 20 20 20 20 20 20 7d 20 0a 20 20 20 20 7d 0a 20        } .    }. 
118f0 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65     addr = sqlite
11900 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76  3VdbeAddOpList(v
11910 2c 20 41 72 72 61 79 53 69 7a 65 28 65 6e 64 43  , ArraySize(endC
11920 6f 64 65 29 2c 20 65 6e 64 43 6f 64 65 2c 20 69  ode), endCode, i
11930 4c 6e 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  Ln);.    sqlite3
11940 56 64 62 65 43 68 61 6e 67 65 50 33 28 76 2c 20  VdbeChangeP3(v, 
11950 61 64 64 72 2c 20 2d 6d 78 45 72 72 29 3b 0a 20  addr, -mxErr);. 
11960 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
11970 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b  mpHere(v, addr);
11980 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
11990 43 68 61 6e 67 65 50 34 28 76 2c 20 61 64 64 72  ChangeP4(v, addr
119a0 2b 31 2c 20 22 6f 6b 22 2c 20 50 34 5f 53 54 41  +1, "ok", P4_STA
119b0 54 49 43 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  TIC);.  }.  brea
119c0 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  k;.#endif /* SQL
119d0 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
119e0 54 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 23 69 66  TY_CHECK */..#if
119f0 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
11a00 5f 55 54 46 31 36 0a 20 20 2f 2a 0a 20 20 2a 2a  _UTF16.  /*.  **
11a10 20 20 20 50 52 41 47 4d 41 20 65 6e 63 6f 64 69     PRAGMA encodi
11a20 6e 67 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  ng.  **   PRAGMA
11a30 20 65 6e 63 6f 64 69 6e 67 20 3d 20 22 75 74 66   encoding = "utf
11a40 2d 38 22 7c 22 75 74 66 2d 31 36 22 7c 22 75 74  -8"|"utf-16"|"ut
11a50 66 2d 31 36 6c 65 22 7c 22 75 74 66 2d 31 36 62  f-16le"|"utf-16b
11a60 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20  e".  **.  ** In 
11a70 69 74 73 20 66 69 72 73 74 20 66 6f 72 6d 2c 20  its first form, 
11a80 74 68 69 73 20 70 72 61 67 6d 61 20 72 65 74 75  this pragma retu
11a90 72 6e 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67  rns the encoding
11aa0 20 6f 66 20 74 68 65 20 6d 61 69 6e 0a 20 20 2a   of the main.  *
11ab0 2a 20 64 61 74 61 62 61 73 65 2e 20 49 66 20 74  * database. If t
11ac0 68 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6e  he database is n
11ad0 6f 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20  ot initialized, 
11ae0 69 74 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65  it is initialize
11af0 64 20 6e 6f 77 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  d now..  **.  **
11b00 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d   The second form
11b10 20 6f 66 20 74 68 69 73 20 70 72 61 67 6d 61 20   of this pragma 
11b20 69 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 74 68  is a no-op if th
11b30 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
11b40 66 69 6c 65 0a 20 20 2a 2a 20 68 61 73 20 6e 6f  file.  ** has no
11b50 74 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 69  t already been i
11b60 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49 6e 20 74  nitialized. In t
11b70 68 69 73 20 63 61 73 65 20 69 74 20 73 65 74 73  his case it sets
11b80 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a   the default.  *
11b90 2a 20 65 6e 63 6f 64 69 6e 67 20 74 68 61 74 20  * encoding that 
11ba0 77 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72  will be used for
11bb0 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
11bc0 73 65 20 66 69 6c 65 20 69 66 20 61 20 6e 65 77  se file if a new
11bd0 20 66 69 6c 65 0a 20 20 2a 2a 20 69 73 20 63 72   file.  ** is cr
11be0 65 61 74 65 64 2e 20 49 66 20 61 6e 20 65 78 69  eated. If an exi
11bf0 73 74 69 6e 67 20 6d 61 69 6e 20 64 61 74 61 62  sting main datab
11c00 61 73 65 20 66 69 6c 65 20 69 73 20 6f 70 65 6e  ase file is open
11c10 65 64 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a  ed, then the.  *
11c20 2a 20 64 65 66 61 75 6c 74 20 74 65 78 74 20 65  * default text e
11c30 6e 63 6f 64 69 6e 67 20 66 6f 72 20 74 68 65 20  ncoding for the 
11c40 65 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73  existing databas
11c50 65 20 69 73 20 75 73 65 64 2e 0a 20 20 2a 2a 20  e is used..  ** 
11c60 0a 20 20 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73  .  ** In all cas
11c70 65 73 20 6e 65 77 20 64 61 74 61 62 61 73 65 73  es new databases
11c80 20 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 74   created using t
11c90 68 65 20 41 54 54 41 43 48 20 63 6f 6d 6d 61 6e  he ATTACH comman
11ca0 64 20 61 72 65 0a 20 20 2a 2a 20 63 72 65 61 74  d are.  ** creat
11cb0 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 73 61  ed to use the sa
11cc0 6d 65 20 64 65 66 61 75 6c 74 20 74 65 78 74 20  me default text 
11cd0 65 6e 63 6f 64 69 6e 67 20 61 73 20 74 68 65 20  encoding as the 
11ce0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 49  main database. I
11cf0 66 0a 20 20 2a 2a 20 74 68 65 20 6d 61 69 6e 20  f.  ** the main 
11d00 64 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74  database has not
11d10 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65   been initialize
11d20 64 20 61 6e 64 2f 6f 72 20 63 72 65 61 74 65 64  d and/or created
11d30 20 77 68 65 6e 20 41 54 54 41 43 48 0a 20 20 2a   when ATTACH.  *
11d40 2a 20 69 73 20 65 78 65 63 75 74 65 64 2c 20 74  * is executed, t
11d50 68 69 73 20 69 73 20 64 6f 6e 65 20 62 65 66 6f  his is done befo
11d60 72 65 20 74 68 65 20 41 54 54 41 43 48 20 6f 70  re the ATTACH op
11d70 65 72 61 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20  eration..  **.  
11d80 2a 2a 20 49 6e 20 74 68 65 20 73 65 63 6f 6e 64  ** In the second
11d90 20 66 6f 72 6d 20 74 68 69 73 20 70 72 61 67 6d   form this pragm
11da0 61 20 73 65 74 73 20 74 68 65 20 74 65 78 74 20  a sets the text 
11db0 65 6e 63 6f 64 69 6e 67 20 74 6f 20 62 65 20 75  encoding to be u
11dc0 73 65 64 20 69 6e 0a 20 20 2a 2a 20 6e 65 77 20  sed in.  ** new 
11dd0 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 63  database files c
11de0 72 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 69  reated using thi
11df0 73 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  s database handl
11e00 65 2e 20 49 74 20 69 73 20 6f 6e 6c 79 0a 20 20  e. It is only.  
11e10 2a 2a 20 75 73 65 66 75 6c 20 69 66 20 69 6e 76  ** useful if inv
11e20 6f 6b 65 64 20 69 6d 6d 65 64 69 61 74 65 6c 79  oked immediately
11e30 20 61 66 74 65 72 20 74 68 65 20 6d 61 69 6e 20   after the main 
11e40 64 61 74 61 62 61 73 65 20 69 0a 20 20 2a 2f 0a  database i.  */.
11e50 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 45    case PragTyp_E
11e60 4e 43 4f 44 49 4e 47 3a 20 7b 0a 20 20 20 20 73  NCODING: {.    s
11e70 74 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75  tatic const stru
11e80 63 74 20 45 6e 63 4e 61 6d 65 20 7b 0a 20 20 20  ct EncName {.   
11e90 20 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a     char *zName;.
11ea0 20 20 20 20 20 20 75 38 20 65 6e 63 3b 0a 20 20        u8 enc;.  
11eb0 20 20 7d 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d    } encnames[] =
11ec0 20 7b 0a 20 20 20 20 20 20 7b 20 22 55 54 46 38   {.      { "UTF8
11ed0 22 2c 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54  ",     SQLITE_UT
11ee0 46 38 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20  F8        },.   
11ef0 20 20 20 7b 20 22 55 54 46 2d 38 22 2c 20 20 20     { "UTF-8",   
11f00 20 53 51 4c 49 54 45 5f 55 54 46 38 20 20 20 20   SQLITE_UTF8    
11f10 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20      },  /* Must 
11f20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 31 5d 20 2a  be element [1] *
11f30 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31  /.      { "UTF-1
11f40 36 6c 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46  6le", SQLITE_UTF
11f50 31 36 4c 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20  16LE     },  /* 
11f60 4d 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20  Must be element 
11f70 5b 32 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22  [2] */.      { "
11f80 55 54 46 2d 31 36 62 65 22 2c 20 53 51 4c 49 54  UTF-16be", SQLIT
11f90 45 5f 55 54 46 31 36 42 45 20 20 20 20 20 7d 2c  E_UTF16BE     },
11fa0 20 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65    /* Must be ele
11fb0 6d 65 6e 74 20 5b 33 5d 20 2a 2f 0a 20 20 20 20  ment [3] */.    
11fc0 20 20 7b 20 22 55 54 46 31 36 6c 65 22 2c 20 20    { "UTF16le",  
11fd0 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 20  SQLITE_UTF16LE  
11fe0 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55     },.      { "U
11ff0 54 46 31 36 62 65 22 2c 20 20 53 51 4c 49 54 45  TF16be",  SQLITE
12000 5f 55 54 46 31 36 42 45 20 20 20 20 20 7d 2c 0a  _UTF16BE     },.
12010 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36 22        { "UTF-16"
12020 2c 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20  ,   0           
12030 20 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c         }, /* SQL
12040 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
12050 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31  */.      { "UTF1
12060 36 22 2c 20 20 20 20 30 20 20 20 20 20 20 20 20  6",    0        
12070 20 20 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a 20            }, /* 
12080 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
12090 56 45 20 2a 2f 0a 20 20 20 20 20 20 7b 20 30 2c  VE */.      { 0,
120a0 20 30 20 7d 0a 20 20 20 20 7d 3b 0a 20 20 20 20   0 }.    };.    
120b0 63 6f 6e 73 74 20 73 74 72 75 63 74 20 45 6e 63  const struct Enc
120c0 4e 61 6d 65 20 2a 70 45 6e 63 3b 0a 20 20 20 20  Name *pEnc;.    
120d0 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 20 20  if( !zRight ){  
120e0 20 20 2f 2a 20 22 50 52 41 47 4d 41 20 65 6e 63    /* "PRAGMA enc
120f0 6f 64 69 6e 67 22 20 2a 2f 0a 20 20 20 20 20 20  oding" */.      
12100 69 66 28 20 73 71 6c 69 74 65 33 52 65 61 64 53  if( sqlite3ReadS
12110 63 68 65 6d 61 28 70 50 61 72 73 65 29 20 29 20  chema(pParse) ) 
12120 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b  goto pragma_out;
12130 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
12140 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
12150 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  1);.      sqlite
12160 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
12170 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
12180 4d 45 2c 20 22 65 6e 63 6f 64 69 6e 67 22 2c 20  ME, "encoding", 
12190 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
121a0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
121b0 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 53 74  eAddOp2(v, OP_St
121c0 72 69 6e 67 38 2c 20 30 2c 20 31 29 3b 0a 20 20  ring8, 0, 1);.  
121d0 20 20 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e      assert( encn
121e0 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 38  ames[SQLITE_UTF8
121f0 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ].enc==SQLITE_UT
12200 46 38 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65  F8 );.      asse
12210 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c  rt( encnames[SQL
12220 49 54 45 5f 55 54 46 31 36 4c 45 5d 2e 65 6e 63  ITE_UTF16LE].enc
12230 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  ==SQLITE_UTF16LE
12240 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
12250 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54  ( encnames[SQLIT
12260 45 5f 55 54 46 31 36 42 45 5d 2e 65 6e 63 3d 3d  E_UTF16BE].enc==
12270 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29  SQLITE_UTF16BE )
12280 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
12290 64 62 65 43 68 61 6e 67 65 50 34 28 76 2c 20 2d  dbeChangeP4(v, -
122a0 31 2c 20 65 6e 63 6e 61 6d 65 73 5b 45 4e 43 28  1, encnames[ENC(
122b0 70 50 61 72 73 65 2d 3e 64 62 29 5d 2e 7a 4e 61  pParse->db)].zNa
122c0 6d 65 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a  me, P4_STATIC);.
122d0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
122e0 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
122f0 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a  sultRow, 1, 1);.
12300 20 20 20 20 7d 65 6c 73 65 7b 20 20 20 20 20 20      }else{      
12310 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12320 20 20 2f 2a 20 22 50 52 41 47 4d 41 20 65 6e 63    /* "PRAGMA enc
12330 6f 64 69 6e 67 20 3d 20 58 58 58 22 20 2a 2f 0a  oding = XXX" */.
12340 20 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 63 68        /* Only ch
12350 61 6e 67 65 20 74 68 65 20 76 61 6c 75 65 20 6f  ange the value o
12360 66 20 73 71 6c 69 74 65 2e 65 6e 63 20 69 66 20  f sqlite.enc if 
12370 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e  the database han
12380 64 6c 65 20 69 73 20 6e 6f 74 0a 20 20 20 20 20  dle is not.     
12390 20 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e   ** initialized.
123a0 20 49 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74   If the main dat
123b0 61 62 61 73 65 20 65 78 69 73 74 73 2c 20 74 68  abase exists, th
123c0 65 20 6e 65 77 20 73 71 6c 69 74 65 2e 65 6e 63  e new sqlite.enc
123d0 20 76 61 6c 75 65 0a 20 20 20 20 20 20 2a 2a 20   value.      ** 
123e0 77 69 6c 6c 20 62 65 20 6f 76 65 72 77 72 69 74  will be overwrit
123f0 74 65 6e 20 77 68 65 6e 20 74 68 65 20 73 63 68  ten when the sch
12400 65 6d 61 20 69 73 20 6e 65 78 74 20 6c 6f 61 64  ema is next load
12410 65 64 2e 20 49 66 20 69 74 20 64 6f 65 73 20 6e  ed. If it does n
12420 6f 74 0a 20 20 20 20 20 20 2a 2a 20 61 6c 72 65  ot.      ** alre
12430 61 64 79 20 65 78 69 73 74 73 2c 20 69 74 20 77  ady exists, it w
12440 69 6c 6c 20 62 65 20 63 72 65 61 74 65 64 20 74  ill be created t
12450 6f 20 75 73 65 20 74 68 65 20 6e 65 77 20 65 6e  o use the new en
12460 63 6f 64 69 6e 67 20 76 61 6c 75 65 2e 0a 20 20  coding value..  
12470 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28      */.      if(
12480 20 0a 20 20 20 20 20 20 20 20 21 28 44 62 48 61   .        !(DbHa
12490 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 30 2c  sProperty(db, 0,
124a0 20 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64   DB_SchemaLoaded
124b0 29 29 20 7c 7c 20 0a 20 20 20 20 20 20 20 20 44  )) || .        D
124c0 62 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c  bHasProperty(db,
124d0 20 30 2c 20 44 42 5f 45 6d 70 74 79 29 20 0a 20   0, DB_Empty) . 
124e0 20 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20       ){.        
124f0 66 6f 72 28 70 45 6e 63 3d 26 65 6e 63 6e 61 6d  for(pEnc=&encnam
12500 65 73 5b 30 5d 3b 20 70 45 6e 63 2d 3e 7a 4e 61  es[0]; pEnc->zNa
12510 6d 65 3b 20 70 45 6e 63 2b 2b 29 7b 0a 20 20 20  me; pEnc++){.   
12520 20 20 20 20 20 20 20 69 66 28 20 30 3d 3d 73 71         if( 0==sq
12530 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69  lite3StrICmp(zRi
12540 67 68 74 2c 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65  ght, pEnc->zName
12550 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ) ){.           
12560 20 53 43 48 45 4d 41 5f 45 4e 43 28 64 62 29 20   SCHEMA_ENC(db) 
12570 3d 20 45 4e 43 28 64 62 29 20 3d 0a 20 20 20 20  = ENC(db) =.    
12580 20 20 20 20 20 20 20 20 20 20 20 20 70 45 6e 63              pEnc
12590 2d 3e 65 6e 63 20 3f 20 70 45 6e 63 2d 3e 65 6e  ->enc ? pEnc->en
125a0 63 20 3a 20 53 51 4c 49 54 45 5f 55 54 46 31 36  c : SQLITE_UTF16
125b0 4e 41 54 49 56 45 3b 0a 20 20 20 20 20 20 20 20  NATIVE;.        
125c0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20      break;.     
125d0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
125e0 0a 20 20 20 20 20 20 20 20 69 66 28 20 21 70 45  .        if( !pE
125f0 6e 63 2d 3e 7a 4e 61 6d 65 20 29 7b 0a 20 20 20  nc->zName ){.   
12600 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72         sqlite3Er
12610 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22  rorMsg(pParse, "
12620 75 6e 73 75 70 70 6f 72 74 65 64 20 65 6e 63 6f  unsupported enco
12630 64 69 6e 67 3a 20 25 73 22 2c 20 7a 52 69 67 68  ding: %s", zRigh
12640 74 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  t);.        }.  
12650 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
12660 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20    break;.#endif 
12670 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  /* SQLITE_OMIT_U
12680 54 46 31 36 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  TF16 */..#ifndef
12690 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48   SQLITE_OMIT_SCH
126a0 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47  EMA_VERSION_PRAG
126b0 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  MAS.  /*.  **   
126c0 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
126d0 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  .]schema_version
126e0 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
126f0 64 61 74 61 62 61 73 65 2e 5d 73 63 68 65 6d 61  database.]schema
12700 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74 65  _version = <inte
12710 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20  ger>.  **.  **  
12720 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
12730 65 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e 0a  e.]user_version.
12740 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64    **   PRAGMA [d
12750 61 74 61 62 61 73 65 2e 5d 75 73 65 72 5f 76 65  atabase.]user_ve
12760 72 73 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72  rsion = <integer
12770 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52  >.  **.  **   PR
12780 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
12790 66 72 65 65 6c 69 73 74 5f 63 6f 75 6e 74 20 3d  freelist_count =
127a0 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a   <integer>.  **.
127b0 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64    **   PRAGMA [d
127c0 61 74 61 62 61 73 65 2e 5d 61 70 70 6c 69 63 61  atabase.]applica
127d0 74 69 6f 6e 5f 69 64 0a 20 20 2a 2a 20 20 20 50  tion_id.  **   P
127e0 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
127f0 5d 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 20  ]application_id 
12800 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a  = <integer>.  **
12810 0a 20 20 2a 2a 20 54 68 65 20 70 72 61 67 6d 61  .  ** The pragma
12820 27 73 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  's schema_versio
12830 6e 20 61 6e 64 20 75 73 65 72 5f 76 65 72 73 69  n and user_versi
12840 6f 6e 20 61 72 65 20 75 73 65 64 20 74 6f 20 73  on are used to s
12850 65 74 20 6f 72 20 67 65 74 0a 20 20 2a 2a 20 74  et or get.  ** t
12860 68 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20  he value of the 
12870 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 61  schema-version a
12880 6e 64 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 2c  nd user-version,
12890 20 72 65 73 70 65 63 74 69 76 65 6c 79 2e 20 42   respectively. B
128a0 6f 74 68 0a 20 20 2a 2a 20 74 68 65 20 73 63 68  oth.  ** the sch
128b0 65 6d 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20  ema-version and 
128c0 74 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e  the user-version
128d0 20 61 72 65 20 33 32 2d 62 69 74 20 73 69 67 6e   are 32-bit sign
128e0 65 64 20 69 6e 74 65 67 65 72 73 0a 20 20 2a 2a  ed integers.  **
128f0 20 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64   stored in the d
12900 61 74 61 62 61 73 65 20 68 65 61 64 65 72 2e 0a  atabase header..
12910 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 63    **.  ** The sc
12920 68 65 6d 61 2d 63 6f 6f 6b 69 65 20 69 73 20 75  hema-cookie is u
12930 73 75 61 6c 6c 79 20 6f 6e 6c 79 20 6d 61 6e 69  sually only mani
12940 70 75 6c 61 74 65 64 20 69 6e 74 65 72 6e 61 6c  pulated internal
12950 6c 79 20 62 79 20 53 51 4c 69 74 65 2e 20 49 74  ly by SQLite. It
12960 0a 20 20 2a 2a 20 69 73 20 69 6e 63 72 65 6d 65  .  ** is increme
12970 6e 74 65 64 20 62 79 20 53 51 4c 69 74 65 20 77  nted by SQLite w
12980 68 65 6e 65 76 65 72 20 74 68 65 20 64 61 74 61  henever the data
12990 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20 6d  base schema is m
129a0 6f 64 69 66 69 65 64 20 28 62 79 0a 20 20 2a 2a  odified (by.  **
129b0 20 63 72 65 61 74 69 6e 67 20 6f 72 20 64 72 6f   creating or dro
129c0 70 70 69 6e 67 20 61 20 74 61 62 6c 65 20 6f 72  pping a table or
129d0 20 69 6e 64 65 78 29 2e 20 54 68 65 20 73 63 68   index). The sch
129e0 65 6d 61 20 76 65 72 73 69 6f 6e 20 69 73 20 75  ema version is u
129f0 73 65 64 20 62 79 0a 20 20 2a 2a 20 53 51 4c 69  sed by.  ** SQLi
12a00 74 65 20 65 61 63 68 20 74 69 6d 65 20 61 20 71  te each time a q
12a10 75 65 72 79 20 69 73 20 65 78 65 63 75 74 65 64  uery is executed
12a20 20 74 6f 20 65 6e 73 75 72 65 20 74 68 61 74 20   to ensure that 
12a30 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 63 61 63  the internal cac
12a40 68 65 0a 20 20 2a 2a 20 6f 66 20 74 68 65 20 73  he.  ** of the s
12a50 63 68 65 6d 61 20 75 73 65 64 20 77 68 65 6e 20  chema used when 
12a60 63 6f 6d 70 69 6c 69 6e 67 20 74 68 65 20 53 51  compiling the SQ
12a70 4c 20 71 75 65 72 79 20 6d 61 74 63 68 65 73 20  L query matches 
12a80 74 68 65 20 73 63 68 65 6d 61 20 6f 66 0a 20 20  the schema of.  
12a90 2a 2a 20 74 68 65 20 64 61 74 61 62 61 73 65 20  ** the database 
12aa0 61 67 61 69 6e 73 74 20 77 68 69 63 68 20 74 68  against which th
12ab0 65 20 63 6f 6d 70 69 6c 65 64 20 71 75 65 72 79  e compiled query
12ac0 20 69 73 20 61 63 74 75 61 6c 6c 79 20 65 78 65   is actually exe
12ad0 63 75 74 65 64 2e 0a 20 20 2a 2a 20 53 75 62 76  cuted..  ** Subv
12ae0 65 72 74 69 6e 67 20 74 68 69 73 20 6d 65 63 68  erting this mech
12af0 61 6e 69 73 6d 20 62 79 20 75 73 69 6e 67 20 22  anism by using "
12b00 50 52 41 47 4d 41 20 73 63 68 65 6d 61 5f 76 65  PRAGMA schema_ve
12b10 72 73 69 6f 6e 22 20 74 6f 20 6d 6f 64 69 66 79  rsion" to modify
12b20 0a 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61  .  ** the schema
12b30 2d 76 65 72 73 69 6f 6e 20 69 73 20 70 6f 74 65  -version is pote
12b40 6e 74 69 61 6c 6c 79 20 64 61 6e 67 65 72 6f 75  ntially dangerou
12b50 73 20 61 6e 64 20 6d 61 79 20 6c 65 61 64 20 74  s and may lead t
12b60 6f 20 70 72 6f 67 72 61 6d 0a 20 20 2a 2a 20 63  o program.  ** c
12b70 72 61 73 68 65 73 20 6f 72 20 64 61 74 61 62 61  rashes or databa
12b80 73 65 20 63 6f 72 72 75 70 74 69 6f 6e 2e 20 55  se corruption. U
12b90 73 65 20 77 69 74 68 20 63 61 75 74 69 6f 6e 21  se with caution!
12ba0 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 75  .  **.  ** The u
12bb0 73 65 72 2d 76 65 72 73 69 6f 6e 20 69 73 20 6e  ser-version is n
12bc0 6f 74 20 75 73 65 64 20 69 6e 74 65 72 6e 61 6c  ot used internal
12bd0 6c 79 20 62 79 20 53 51 4c 69 74 65 2e 20 49 74  ly by SQLite. It
12be0 20 6d 61 79 20 62 65 20 75 73 65 64 20 62 79 0a   may be used by.
12bf0 20 20 2a 2a 20 61 70 70 6c 69 63 61 74 69 6f 6e    ** application
12c00 73 20 66 6f 72 20 61 6e 79 20 70 75 72 70 6f 73  s for any purpos
12c10 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  e..  */.  case P
12c20 72 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41  ragTyp_HEADER_VA
12c30 4c 55 45 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69  LUE: {.    int i
12c40 43 6f 6f 6b 69 65 20 3d 20 61 50 72 61 67 6d 61  Cookie = aPragma
12c50 4e 61 6d 65 73 5b 6d 69 64 5d 2e 69 41 72 67 3b  Names[mid].iArg;
12c60 20 20 2f 2a 20 57 68 69 63 68 20 63 6f 6f 6b 69    /* Which cooki
12c70 65 20 74 6f 20 72 65 61 64 20 6f 72 20 77 72 69  e to read or wri
12c80 74 65 20 2a 2f 0a 20 20 20 20 73 71 6c 69 74 65  te */.    sqlite
12c90 33 56 64 62 65 55 73 65 73 42 74 72 65 65 28 76  3VdbeUsesBtree(v
12ca0 2c 20 69 44 62 29 3b 0a 20 20 20 20 69 66 28 20  , iDb);.    if( 
12cb0 7a 52 69 67 68 74 20 26 26 20 28 61 50 72 61 67  zRight && (aPrag
12cc0 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 6d 50 72  maNames[mid].mPr
12cd0 61 67 46 6c 61 67 20 26 20 50 72 61 67 46 6c 61  agFlag & PragFla
12ce0 67 5f 52 65 61 64 4f 6e 6c 79 29 3d 3d 30 20 29  g_ReadOnly)==0 )
12cf0 7b 0a 20 20 20 20 20 20 2f 2a 20 57 72 69 74 65  {.      /* Write
12d00 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63   the specified c
12d10 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a 2f 0a 20  ookie value */. 
12d20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
12d30 74 20 56 64 62 65 4f 70 4c 69 73 74 20 73 65 74  t VdbeOpList set
12d40 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20 20  Cookie[] = {.   
12d50 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61       { OP_Transa
12d60 63 74 69 6f 6e 2c 20 20 20 20 30 2c 20 20 31 2c  ction,    0,  1,
12d70 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f    0},    /* 0 */
12d80 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e  .        { OP_In
12d90 74 65 67 65 72 2c 20 20 20 20 20 20 20 20 30 2c  teger,        0,
12da0 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20    1,  0},    /* 
12db0 31 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f  1 */.        { O
12dc0 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20 20  P_SetCookie,    
12dd0 20 20 30 2c 20 20 30 2c 20 20 31 7d 2c 20 20 20    0,  0,  1},   
12de0 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20 7d   /* 2 */.      }
12df0 3b 0a 20 20 20 20 20 20 69 6e 74 20 61 64 64 72  ;.      int addr
12e00 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
12e10 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79  dOpList(v, Array
12e20 53 69 7a 65 28 73 65 74 43 6f 6f 6b 69 65 29 2c  Size(setCookie),
12e30 20 73 65 74 43 6f 6f 6b 69 65 2c 20 30 29 3b 0a   setCookie, 0);.
12e40 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
12e50 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64  eChangeP1(v, add
12e60 72 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73  r, iDb);.      s
12e70 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
12e80 50 31 28 76 2c 20 61 64 64 72 2b 31 2c 20 73 71  P1(v, addr+1, sq
12e90 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74  lite3Atoi(zRight
12ea0 29 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ));.      sqlite
12eb0 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c  3VdbeChangeP1(v,
12ec0 20 61 64 64 72 2b 32 2c 20 69 44 62 29 3b 0a 20   addr+2, iDb);. 
12ed0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
12ee0 43 68 61 6e 67 65 50 32 28 76 2c 20 61 64 64 72  ChangeP2(v, addr
12ef0 2b 32 2c 20 69 43 6f 6f 6b 69 65 29 3b 0a 20 20  +2, iCookie);.  
12f00 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
12f10 2a 20 52 65 61 64 20 74 68 65 20 73 70 65 63 69  * Read the speci
12f20 66 69 65 64 20 63 6f 6f 6b 69 65 20 76 61 6c 75  fied cookie valu
12f30 65 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69  e */.      stati
12f40 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69  c const VdbeOpLi
12f50 73 74 20 72 65 61 64 43 6f 6f 6b 69 65 5b 5d 20  st readCookie[] 
12f60 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f 50  = {.        { OP
12f70 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20  _Transaction,   
12f80 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c 20 20 20    0,  0,  0},   
12f90 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20   /* 0 */.       
12fa0 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65   { OP_ReadCookie
12fb0 2c 20 20 20 20 20 20 30 2c 20 20 31 2c 20 20 30  ,      0,  1,  0
12fc0 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20  },    /* 1 */.  
12fd0 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73 75 6c        { OP_Resul
12fe0 74 52 6f 77 2c 20 20 20 20 20 20 20 31 2c 20 20  tRow,       1,  
12ff0 31 2c 20 20 30 7d 0a 20 20 20 20 20 20 7d 3b 0a  1,  0}.      };.
13000 20 20 20 20 20 20 69 6e 74 20 61 64 64 72 20 3d        int addr =
13010 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
13020 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69  pList(v, ArraySi
13030 7a 65 28 72 65 61 64 43 6f 6f 6b 69 65 29 2c 20  ze(readCookie), 
13040 72 65 61 64 43 6f 6f 6b 69 65 2c 20 30 29 3b 0a  readCookie, 0);.
13050 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
13060 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64  eChangeP1(v, add
13070 72 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73  r, iDb);.      s
13080 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
13090 50 31 28 76 2c 20 61 64 64 72 2b 31 2c 20 69 44  P1(v, addr+1, iD
130a0 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  b);.      sqlite
130b0 33 56 64 62 65 43 68 61 6e 67 65 50 33 28 76 2c  3VdbeChangeP3(v,
130c0 20 61 64 64 72 2b 31 2c 20 69 43 6f 6f 6b 69 65   addr+1, iCookie
130d0 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
130e0 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
130f0 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 1);.      sqli
13100 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
13110 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
13120 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c 20 53 51 4c  NAME, zLeft, SQL
13130 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a  ITE_TRANSIENT);.
13140 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
13150 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  k;.#endif /* SQL
13160 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
13170 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 20  VERSION_PRAGMAS 
13180 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
13190 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f  TE_OMIT_COMPILEO
131a0 50 54 49 4f 4e 5f 44 49 41 47 53 0a 20 20 2f 2a  PTION_DIAGS.  /*
131b0 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 63  .  **   PRAGMA c
131c0 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 0a 20  ompile_options. 
131d0 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20   **.  ** Return 
131e0 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 61 6c 6c  the names of all
131f0 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
13200 74 69 6f 6e 73 20 75 73 65 64 20 69 6e 20 74 68  tions used in th
13210 69 73 20 62 75 69 6c 64 2c 0a 20 20 2a 2a 20 6f  is build,.  ** o
13220 6e 65 20 6f 70 74 69 6f 6e 20 70 65 72 20 72 6f  ne option per ro
13230 77 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  w..  */.  case P
13240 72 61 67 54 79 70 5f 43 4f 4d 50 49 4c 45 5f 4f  ragTyp_COMPILE_O
13250 50 54 49 4f 4e 53 3a 20 7b 0a 20 20 20 20 69 6e  PTIONS: {.    in
13260 74 20 69 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e  t i = 0;.    con
13270 73 74 20 63 68 61 72 20 2a 7a 4f 70 74 3b 0a 20  st char *zOpt;. 
13280 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
13290 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
132a0 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
132b0 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 1;.    sqlite
132c0 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
132d0 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
132e0 4d 45 2c 20 22 63 6f 6d 70 69 6c 65 5f 6f 70 74  ME, "compile_opt
132f0 69 6f 6e 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ion", SQLITE_STA
13300 54 49 43 29 3b 0a 20 20 20 20 77 68 69 6c 65 28  TIC);.    while(
13310 20 28 7a 4f 70 74 20 3d 20 73 71 6c 69 74 65 33   (zOpt = sqlite3
13320 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67  _compileoption_g
13330 65 74 28 69 2b 2b 29 29 21 3d 30 20 29 7b 0a 20  et(i++))!=0 ){. 
13340 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
13350 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
13360 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 7a  ing8, 0, 1, 0, z
13370 4f 70 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  Opt, 0);.      s
13380 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
13390 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
133a0 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 7d 0a 20  , 1, 1);.    }. 
133b0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
133c0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
133d0 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f  T_COMPILEOPTION_
133e0 44 49 41 47 53 20 2a 2f 0a 0a 23 69 66 6e 64 65  DIAGS */..#ifnde
133f0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
13400 4c 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  L.  /*.  **   PR
13410 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
13420 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e 74 20 3d  wal_checkpoint =
13430 20 70 61 73 73 69 76 65 7c 66 75 6c 6c 7c 72 65   passive|full|re
13440 73 74 61 72 74 7c 74 72 75 6e 63 61 74 65 0a 20  start|truncate. 
13450 20 2a 2a 0a 20 20 2a 2a 20 43 68 65 63 6b 70 6f   **.  ** Checkpo
13460 69 6e 74 20 74 68 65 20 64 61 74 61 62 61 73 65  int the database
13470 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
13480 61 67 54 79 70 5f 57 41 4c 5f 43 48 45 43 4b 50  agTyp_WAL_CHECKP
13490 4f 49 4e 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20  OINT: {.    int 
134a0 69 42 74 20 3d 20 28 70 49 64 32 2d 3e 7a 3f 69  iBt = (pId2->z?i
134b0 44 62 3a 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54  Db:SQLITE_MAX_AT
134c0 54 41 43 48 45 44 29 3b 0a 20 20 20 20 69 6e 74  TACHED);.    int
134d0 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f   eMode = SQLITE_
134e0 43 48 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49  CHECKPOINT_PASSI
134f0 56 45 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  VE;.    if( zRig
13500 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ht ){.      if( 
13510 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
13520 52 69 67 68 74 2c 20 22 66 75 6c 6c 22 29 3d 3d  Right, "full")==
13530 30 20 29 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f  0 ){.        eMo
13540 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43  de = SQLITE_CHEC
13550 4b 50 4f 49 4e 54 5f 46 55 4c 4c 3b 0a 20 20 20  KPOINT_FULL;.   
13560 20 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c     }else if( sql
13570 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67  ite3StrICmp(zRig
13580 68 74 2c 20 22 72 65 73 74 61 72 74 22 29 3d 3d  ht, "restart")==
13590 30 20 29 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f  0 ){.        eMo
135a0 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43  de = SQLITE_CHEC
135b0 4b 50 4f 49 4e 54 5f 52 45 53 54 41 52 54 3b 0a  KPOINT_RESTART;.
135c0 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
135d0 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
135e0 52 69 67 68 74 2c 20 22 74 72 75 6e 63 61 74 65  Right, "truncate
135f0 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  ")==0 ){.       
13600 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f   eMode = SQLITE_
13610 43 48 45 43 4b 50 4f 49 4e 54 5f 54 52 55 4e 43  CHECKPOINT_TRUNC
13620 41 54 45 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  ATE;.      }.   
13630 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
13640 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
13650 33 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  3);.    pParse->
13660 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 73 71  nMem = 3;.    sq
13670 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
13680 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
13690 45 5f 4e 41 4d 45 2c 20 22 62 75 73 79 22 2c 20  E_NAME, "busy", 
136a0 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
136b0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
136c0 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20  etColName(v, 1, 
136d0 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6c  COLNAME_NAME, "l
136e0 6f 67 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  og", SQLITE_STAT
136f0 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  IC);.    sqlite3
13700 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
13710 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 2, COLNAME_NAM
13720 45 2c 20 22 63 68 65 63 6b 70 6f 69 6e 74 65 64  E, "checkpointed
13730 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
13740 29 3b 0a 0a 20 20 20 20 73 71 6c 69 74 65 33 56  );..    sqlite3V
13750 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
13760 43 68 65 63 6b 70 6f 69 6e 74 2c 20 69 42 74 2c  Checkpoint, iBt,
13770 20 65 4d 6f 64 65 2c 20 31 29 3b 0a 20 20 20 20   eMode, 1);.    
13780 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
13790 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
137a0 77 2c 20 31 2c 20 33 29 3b 0a 20 20 7d 0a 20 20  w, 1, 3);.  }.  
137b0 62 72 65 61 6b 3b 0a 0a 20 20 2f 2a 0a 20 20 2a  break;..  /*.  *
137c0 2a 20 20 20 50 52 41 47 4d 41 20 77 61 6c 5f 61  *   PRAGMA wal_a
137d0 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 0a 20 20  utocheckpoint.  
137e0 2a 2a 20 20 20 50 52 41 47 4d 41 20 77 61 6c 5f  **   PRAGMA wal_
137f0 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 20 3d  autocheckpoint =
13800 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 6f 6e   N.  **.  ** Con
13810 66 69 67 75 72 65 20 61 20 64 61 74 61 62 61 73  figure a databas
13820 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74 6f 20  e connection to 
13830 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20 63 68  automatically ch
13840 65 63 6b 70 6f 69 6e 74 20 61 20 64 61 74 61 62  eckpoint a datab
13850 61 73 65 0a 20 20 2a 2a 20 61 66 74 65 72 20 61  ase.  ** after a
13860 63 63 75 6d 75 6c 61 74 69 6e 67 20 4e 20 66 72  ccumulating N fr
13870 61 6d 65 73 20 69 6e 20 74 68 65 20 6c 6f 67 2e  ames in the log.
13880 20 4f 72 20 71 75 65 72 79 20 66 6f 72 20 74 68   Or query for th
13890 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75 65 0a  e current value.
138a0 20 20 2a 2a 20 6f 66 20 4e 2e 0a 20 20 2a 2f 0a    ** of N..  */.
138b0 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 57    case PragTyp_W
138c0 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50 4f 49 4e  AL_AUTOCHECKPOIN
138d0 54 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  T: {.    if( zRi
138e0 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
138f0 69 74 65 33 5f 77 61 6c 5f 61 75 74 6f 63 68 65  ite3_wal_autoche
13900 63 6b 70 6f 69 6e 74 28 64 62 2c 20 73 71 6c 69  ckpoint(db, sqli
13910 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 29  te3Atoi(zRight))
13920 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  ;.    }.    retu
13930 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72  rnSingleInt(pPar
13940 73 65 2c 20 22 77 61 6c 5f 61 75 74 6f 63 68 65  se, "wal_autoche
13950 63 6b 70 6f 69 6e 74 22 2c 20 0a 20 20 20 20 20  ckpoint", .     
13960 20 20 64 62 2d 3e 78 57 61 6c 43 61 6c 6c 62 61    db->xWalCallba
13970 63 6b 3d 3d 73 71 6c 69 74 65 33 57 61 6c 44 65  ck==sqlite3WalDe
13980 66 61 75 6c 74 48 6f 6f 6b 20 3f 20 0a 20 20 20  faultHook ? .   
13990 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f 50          SQLITE_P
139a0 54 52 5f 54 4f 5f 49 4e 54 28 64 62 2d 3e 70 57  TR_TO_INT(db->pW
139b0 61 6c 41 72 67 29 20 3a 20 30 29 3b 0a 20 20 7d  alArg) : 0);.  }
139c0 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66  .  break;.#endif
139d0 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
139e0 47 4d 41 20 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72  GMA shrink_memor
139f0 79 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73  y.  **.  ** This
13a00 20 70 72 61 67 6d 61 20 61 74 74 65 6d 70 74 73   pragma attempts
13a10 20 74 6f 20 66 72 65 65 20 61 73 20 6d 75 63 68   to free as much
13a20 20 6d 65 6d 6f 72 79 20 61 73 20 70 6f 73 73 69   memory as possi
13a30 62 6c 65 20 66 72 6f 6d 20 74 68 65 0a 20 20 2a  ble from the.  *
13a40 2a 20 63 75 72 72 65 6e 74 20 64 61 74 61 62 61  * current databa
13a50 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 0a 20  se connection.. 
13a60 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
13a70 79 70 5f 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59  yp_SHRINK_MEMORY
13a80 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f  : {.    sqlite3_
13a90 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65 6d 6f 72  db_release_memor
13aa0 79 28 64 62 29 3b 0a 20 20 20 20 62 72 65 61 6b  y(db);.    break
13ab0 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
13ac0 20 20 20 50 52 41 47 4d 41 20 62 75 73 79 5f 74     PRAGMA busy_t
13ad0 69 6d 65 6f 75 74 0a 20 20 2a 2a 20 20 20 50 52  imeout.  **   PR
13ae0 41 47 4d 41 20 62 75 73 79 5f 74 69 6d 65 6f 75  AGMA busy_timeou
13af0 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  t = N.  **.  ** 
13b00 43 61 6c 6c 20 73 71 6c 69 74 65 33 5f 62 75 73  Call sqlite3_bus
13b10 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20 4e 29  y_timeout(db, N)
13b20 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20 63 75  .  Return the cu
13b30 72 72 65 6e 74 20 74 69 6d 65 6f 75 74 20 76 61  rrent timeout va
13b40 6c 75 65 0a 20 20 2a 2a 20 69 66 20 6f 6e 65 20  lue.  ** if one 
13b50 69 73 20 73 65 74 2e 20 20 49 66 20 6e 6f 20 62  is set.  If no b
13b60 75 73 79 20 68 61 6e 64 6c 65 72 20 6f 72 20 61  usy handler or a
13b70 20 64 69 66 66 65 72 65 6e 74 20 62 75 73 79 20   different busy 
13b80 68 61 6e 64 6c 65 72 20 69 73 20 73 65 74 0a 20  handler is set. 
13b90 20 2a 2a 20 74 68 65 6e 20 30 20 69 73 20 72 65   ** then 0 is re
13ba0 74 75 72 6e 65 64 2e 20 20 53 65 74 74 69 6e 67  turned.  Setting
13bb0 20 74 68 65 20 62 75 73 79 5f 74 69 6d 65 6f 75   the busy_timeou
13bc0 74 20 74 6f 20 30 20 6f 72 20 6e 65 67 61 74 69  t to 0 or negati
13bd0 76 65 0a 20 20 2a 2a 20 64 69 73 61 62 6c 65 73  ve.  ** disables
13be0 20 74 68 65 20 74 69 6d 65 6f 75 74 2e 0a 20 20   the timeout..  
13bf0 2a 2f 0a 20 20 2f 2a 63 61 73 65 20 50 72 61 67  */.  /*case Prag
13c00 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55 54  Typ_BUSY_TIMEOUT
13c10 2a 2f 20 64 65 66 61 75 6c 74 3a 20 7b 0a 20 20  */ default: {.  
13c20 20 20 61 73 73 65 72 74 28 20 61 50 72 61 67 6d    assert( aPragm
13c30 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 65 50 72 61  aNames[mid].ePra
13c40 67 54 79 70 3d 3d 50 72 61 67 54 79 70 5f 42 55  gTyp==PragTyp_BU
13c50 53 59 5f 54 49 4d 45 4f 55 54 20 29 3b 0a 20 20  SY_TIMEOUT );.  
13c60 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
13c70 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 62 75        sqlite3_bu
13c80 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20 73  sy_timeout(db, s
13c90 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68  qlite3Atoi(zRigh
13ca0 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72  t));.    }.    r
13cb0 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70  eturnSingleInt(p
13cc0 50 61 72 73 65 2c 20 22 74 69 6d 65 6f 75 74 22  Parse, "timeout"
13cd0 2c 20 20 64 62 2d 3e 62 75 73 79 54 69 6d 65 6f  ,  db->busyTimeo
13ce0 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  ut);.    break;.
13cf0 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
13d00 20 50 52 41 47 4d 41 20 73 6f 66 74 5f 68 65 61   PRAGMA soft_hea
13d10 70 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20 20 20 50  p_limit.  **   P
13d20 52 41 47 4d 41 20 73 6f 66 74 5f 68 65 61 70 5f  RAGMA soft_heap_
13d30 6c 69 6d 69 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20  limit = N.  **. 
13d40 20 2a 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65 33   ** Call sqlite3
13d50 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74  _soft_heap_limit
13d60 36 34 28 4e 29 2e 20 20 52 65 74 75 72 6e 20 74  64(N).  Return t
13d70 68 65 20 72 65 73 75 6c 74 2e 20 20 49 66 20 4e  he result.  If N
13d80 20 69 73 20 6f 6d 69 74 74 65 64 2c 0a 20 20 2a   is omitted,.  *
13d90 2a 20 75 73 65 20 2d 31 2e 0a 20 20 2a 2f 0a 20  * use -1..  */. 
13da0 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 53 4f   case PragTyp_SO
13db0 46 54 5f 48 45 41 50 5f 4c 49 4d 49 54 3a 20 7b  FT_HEAP_LIMIT: {
13dc0 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  .    sqlite3_int
13dd0 36 34 20 4e 3b 0a 20 20 20 20 69 66 28 20 7a 52  64 N;.    if( zR
13de0 69 67 68 74 20 26 26 20 73 71 6c 69 74 65 33 44  ight && sqlite3D
13df0 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a 52 69  ecOrHexToI64(zRi
13e00 67 68 74 2c 20 26 4e 29 3d 3d 53 51 4c 49 54 45  ght, &N)==SQLITE
13e10 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  _OK ){.      sql
13e20 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c  ite3_soft_heap_l
13e30 69 6d 69 74 36 34 28 4e 29 3b 0a 20 20 20 20 7d  imit64(N);.    }
13e40 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c  .    returnSingl
13e50 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 73 6f  eInt(pParse, "so
13e60 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 22 2c 20  ft_heap_limit", 
13e70 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65   sqlite3_soft_he
13e80 61 70 5f 6c 69 6d 69 74 36 34 28 2d 31 29 29 3b  ap_limit64(-1));
13e90 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
13ea0 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
13eb0 47 4d 41 20 74 68 72 65 61 64 73 0a 20 20 2a 2a  GMA threads.  **
13ec0 20 20 20 50 52 41 47 4d 41 20 74 68 72 65 61 64     PRAGMA thread
13ed0 73 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  s = N.  **.  ** 
13ee0 43 6f 6e 66 69 67 75 72 65 20 74 68 65 20 6d 61  Configure the ma
13ef0 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
13f00 77 6f 72 6b 65 72 20 74 68 72 65 61 64 73 2e 20  worker threads. 
13f10 20 52 65 74 75 72 6e 20 74 68 65 20 6e 65 77 0a   Return the new.
13f20 20 20 2a 2a 20 6d 61 78 69 6d 75 6d 2c 20 77 68    ** maximum, wh
13f30 69 63 68 20 6d 69 67 68 74 20 62 65 20 6c 65 73  ich might be les
13f40 73 20 74 68 61 6e 20 72 65 71 75 65 73 74 65 64  s than requested
13f50 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
13f60 61 67 54 79 70 5f 54 48 52 45 41 44 53 3a 20 7b  agTyp_THREADS: {
13f70 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74  .    sqlite3_int
13f80 36 34 20 4e 3b 0a 20 20 20 20 69 66 28 20 7a 52  64 N;.    if( zR
13f90 69 67 68 74 0a 20 20 20 20 20 26 26 20 73 71 6c  ight.     && sql
13fa0 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36  ite3DecOrHexToI6
13fb0 34 28 7a 52 69 67 68 74 2c 20 26 4e 29 3d 3d 53  4(zRight, &N)==S
13fc0 51 4c 49 54 45 5f 4f 4b 0a 20 20 20 20 20 26 26  QLITE_OK.     &&
13fd0 20 4e 3e 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20   N>=0.    ){.   
13fe0 20 20 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74     sqlite3_limit
13ff0 28 64 62 2c 20 53 51 4c 49 54 45 5f 4c 49 4d 49  (db, SQLITE_LIMI
14000 54 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  T_WORKER_THREADS
14010 2c 20 28 69 6e 74 29 28 4e 26 30 78 37 66 66 66  , (int)(N&0x7fff
14020 66 66 66 66 29 29 3b 0a 20 20 20 20 7d 0a 20 20  ffff));.    }.  
14030 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
14040 74 28 70 50 61 72 73 65 2c 20 22 74 68 72 65 61  t(pParse, "threa
14050 64 73 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ds",.           
14060 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
14070 5f 6c 69 6d 69 74 28 64 62 2c 20 53 51 4c 49 54  _limit(db, SQLIT
14080 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f 54  E_LIMIT_WORKER_T
14090 48 52 45 41 44 53 2c 20 2d 31 29 29 3b 0a 20 20  HREADS, -1));.  
140a0 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69    break;.  }..#i
140b0 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
140c0 5f 44 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e  _DEBUG) || defin
140d0 65 64 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a  ed(SQLITE_TEST).
140e0 20 20 2f 2a 0a 20 20 2a 2a 20 52 65 70 6f 72 74    /*.  ** Report
140f0 20 74 68 65 20 63 75 72 72 65 6e 74 20 73 74 61   the current sta
14100 74 65 20 6f 66 20 66 69 6c 65 20 6c 6f 67 73 20  te of file logs 
14110 66 6f 72 20 61 6c 6c 20 64 61 74 61 62 61 73 65  for all database
14120 73 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  s.  */.  case Pr
14130 61 67 54 79 70 5f 4c 4f 43 4b 5f 53 54 41 54 55  agTyp_LOCK_STATU
14140 53 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20  S: {.    static 
14150 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73  const char *cons
14160 74 20 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 5d 20 3d  t azLockName[] =
14170 20 7b 0a 20 20 20 20 20 20 22 75 6e 6c 6f 63 6b   {.      "unlock
14180 65 64 22 2c 20 22 73 68 61 72 65 64 22 2c 20 22  ed", "shared", "
14190 72 65 73 65 72 76 65 64 22 2c 20 22 70 65 6e 64  reserved", "pend
141a0 69 6e 67 22 2c 20 22 65 78 63 6c 75 73 69 76 65  ing", "exclusive
141b0 22 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74  ".    };.    int
141c0 20 69 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   i;.    sqlite3V
141d0 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
141e0 20 32 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d   2);.    pParse-
141f0 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 20 20 20 20 73  >nMem = 2;.    s
14200 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
14210 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
14220 4d 45 5f 4e 41 4d 45 2c 20 22 64 61 74 61 62 61  ME_NAME, "databa
14230 73 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  se", SQLITE_STAT
14240 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  IC);.    sqlite3
14250 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
14260 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 1, COLNAME_NAM
14270 45 2c 20 22 73 74 61 74 75 73 22 2c 20 53 51 4c  E, "status", SQL
14280 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
14290 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e   for(i=0; i<db->
142a0 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  nDb; i++){.     
142b0 20 42 74 72 65 65 20 2a 70 42 74 3b 0a 20 20 20   Btree *pBt;.   
142c0 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a     const char *z
142d0 53 74 61 74 65 20 3d 20 22 75 6e 6b 6e 6f 77 6e  State = "unknown
142e0 22 3b 0a 20 20 20 20 20 20 69 6e 74 20 6a 3b 0a  ";.      int j;.
142f0 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44        if( db->aD
14300 62 5b 69 5d 2e 7a 4e 61 6d 65 3d 3d 30 20 29 20  b[i].zName==0 ) 
14310 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
14320 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
14330 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
14340 20 30 2c 20 31 2c 20 30 2c 20 64 62 2d 3e 61 44   0, 1, 0, db->aD
14350 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20 50 34 5f 53  b[i].zName, P4_S
14360 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 70 42  TATIC);.      pB
14370 74 20 3d 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70  t = db->aDb[i].p
14380 42 74 3b 0a 20 20 20 20 20 20 69 66 28 20 70 42  Bt;.      if( pB
14390 74 3d 3d 30 20 7c 7c 20 73 71 6c 69 74 65 33 42  t==0 || sqlite3B
143a0 74 72 65 65 50 61 67 65 72 28 70 42 74 29 3d 3d  treePager(pBt)==
143b0 30 20 29 7b 0a 20 20 20 20 20 20 20 20 7a 53 74  0 ){.        zSt
143c0 61 74 65 20 3d 20 22 63 6c 6f 73 65 64 22 3b 0a  ate = "closed";.
143d0 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20        }else if( 
143e0 73 71 6c 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e  sqlite3_file_con
143f0 74 72 6f 6c 28 64 62 2c 20 69 20 3f 20 64 62 2d  trol(db, i ? db-
14400 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 20 3a 20  >aDb[i].zName : 
14410 30 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  0, .            
14420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14430 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45 5f           SQLITE_
14440 46 43 4e 54 4c 5f 4c 4f 43 4b 53 54 41 54 45 2c  FCNTL_LOCKSTATE,
14450 20 26 6a 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20   &j)==SQLITE_OK 
14460 29 7b 0a 20 20 20 20 20 20 20 20 20 7a 53 74 61  ){.         zSta
14470 74 65 20 3d 20 61 7a 4c 6f 63 6b 4e 61 6d 65 5b  te = azLockName[
14480 6a 5d 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  j];.      }.    
14490 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
144a0 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
144b0 38 2c 20 30 2c 20 32 2c 20 30 2c 20 7a 53 74 61  8, 0, 2, 0, zSta
144c0 74 65 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a  te, P4_STATIC);.
144d0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
144e0 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
144f0 73 75 6c 74 52 6f 77 2c 20 31 2c 20 32 29 3b 0a  sultRow, 1, 2);.
14500 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
14510 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66  .  }.#endif..#if
14520 64 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f 43  def SQLITE_HAS_C
14530 4f 44 45 43 0a 20 20 63 61 73 65 20 50 72 61 67  ODEC.  case Prag
14540 54 79 70 5f 4b 45 59 3a 20 7b 0a 20 20 20 20 69  Typ_KEY: {.    i
14550 66 28 20 7a 52 69 67 68 74 20 29 20 73 71 6c 69  f( zRight ) sqli
14560 74 65 33 5f 6b 65 79 5f 76 32 28 64 62 2c 20 7a  te3_key_v2(db, z
14570 44 62 2c 20 7a 52 69 67 68 74 2c 20 73 71 6c 69  Db, zRight, sqli
14580 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67  te3Strlen30(zRig
14590 68 74 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  ht));.    break;
145a0 0a 20 20 7d 0a 20 20 63 61 73 65 20 50 72 61 67  .  }.  case Prag
145b0 54 79 70 5f 52 45 4b 45 59 3a 20 7b 0a 20 20 20  Typ_REKEY: {.   
145c0 20 69 66 28 20 7a 52 69 67 68 74 20 29 20 73 71   if( zRight ) sq
145d0 6c 69 74 65 33 5f 72 65 6b 65 79 5f 76 32 28 64  lite3_rekey_v2(d
145e0 62 2c 20 7a 44 62 2c 20 7a 52 69 67 68 74 2c 20  b, zDb, zRight, 
145f0 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
14600 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 62 72  zRight));.    br
14610 65 61 6b 3b 0a 20 20 7d 0a 20 20 63 61 73 65 20  eak;.  }.  case 
14620 50 72 61 67 54 79 70 5f 48 45 58 4b 45 59 3a 20  PragTyp_HEXKEY: 
14630 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  {.    if( zRight
14640 20 29 7b 0a 20 20 20 20 20 20 75 38 20 69 42 79   ){.      u8 iBy
14650 74 65 3b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b  te;.      int i;
14660 0a 20 20 20 20 20 20 63 68 61 72 20 7a 4b 65 79  .      char zKey
14670 5b 34 30 5d 3b 0a 20 20 20 20 20 20 66 6f 72 28  [40];.      for(
14680 69 3d 30 2c 20 69 42 79 74 65 3d 30 3b 20 69 3c  i=0, iByte=0; i<
14690 73 69 7a 65 6f 66 28 7a 4b 65 79 29 2a 32 20 26  sizeof(zKey)*2 &
146a0 26 20 73 71 6c 69 74 65 33 49 73 78 64 69 67 69  & sqlite3Isxdigi
146b0 74 28 7a 52 69 67 68 74 5b 69 5d 29 3b 20 69 2b  t(zRight[i]); i+
146c0 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 42 79 74  +){.        iByt
146d0 65 20 3d 20 28 69 42 79 74 65 3c 3c 34 29 20 2b  e = (iByte<<4) +
146e0 20 73 71 6c 69 74 65 33 48 65 78 54 6f 49 6e 74   sqlite3HexToInt
146f0 28 7a 52 69 67 68 74 5b 69 5d 29 3b 0a 20 20 20  (zRight[i]);.   
14700 20 20 20 20 20 69 66 28 20 28 69 26 31 29 21 3d       if( (i&1)!=
14710 30 20 29 20 7a 4b 65 79 5b 69 2f 32 5d 20 3d 20  0 ) zKey[i/2] = 
14720 69 42 79 74 65 3b 0a 20 20 20 20 20 20 7d 0a 20  iByte;.      }. 
14730 20 20 20 20 20 69 66 28 20 28 7a 4c 65 66 74 5b       if( (zLeft[
14740 33 5d 20 26 20 30 78 66 29 3d 3d 30 78 62 20 29  3] & 0xf)==0xb )
14750 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
14760 33 5f 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62  3_key_v2(db, zDb
14770 2c 20 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20 20  , zKey, i/2);.  
14780 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
14790 20 20 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79     sqlite3_rekey
147a0 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 4b 65  _v2(db, zDb, zKe
147b0 79 2c 20 69 2f 32 29 3b 0a 20 20 20 20 20 20 7d  y, i/2);.      }
147c0 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
147d0 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66  ;.  }.#endif.#if
147e0 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
147f0 48 41 53 5f 43 4f 44 45 43 29 20 7c 7c 20 64 65  HAS_CODEC) || de
14800 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
14810 42 4c 45 5f 43 45 52 4f 44 29 0a 20 20 63 61 73  BLE_CEROD).  cas
14820 65 20 50 72 61 67 54 79 70 5f 41 43 54 49 56 41  e PragTyp_ACTIVA
14830 54 45 5f 45 58 54 45 4e 53 49 4f 4e 53 3a 20 69  TE_EXTENSIONS: i
14840 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 23 69 66  f( zRight ){.#if
14850 64 65 66 20 53 51 4c 49 54 45 5f 48 41 53 5f 43  def SQLITE_HAS_C
14860 4f 44 45 43 0a 20 20 20 20 69 66 28 20 73 71 6c  ODEC.    if( sql
14870 69 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 52 69  ite3StrNICmp(zRi
14880 67 68 74 2c 20 22 73 65 65 2d 22 2c 20 34 29 3d  ght, "see-", 4)=
14890 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
148a0 74 65 33 5f 61 63 74 69 76 61 74 65 5f 73 65 65  te3_activate_see
148b0 28 26 7a 52 69 67 68 74 5b 34 5d 29 3b 0a 20 20  (&zRight[4]);.  
148c0 20 20 7d 0a 23 65 6e 64 69 66 0a 23 69 66 64 65    }.#endif.#ifde
148d0 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  f SQLITE_ENABLE_
148e0 43 45 52 4f 44 0a 20 20 20 20 69 66 28 20 73 71  CEROD.    if( sq
148f0 6c 69 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 52  lite3StrNICmp(zR
14900 69 67 68 74 2c 20 22 63 65 72 6f 64 2d 22 2c 20  ight, "cerod-", 
14910 36 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 73  6)==0 ){.      s
14920 71 6c 69 74 65 33 5f 61 63 74 69 76 61 74 65 5f  qlite3_activate_
14930 63 65 72 6f 64 28 26 7a 52 69 67 68 74 5b 36 5d  cerod(&zRight[6]
14940 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a  );.    }.#endif.
14950 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
14960 64 69 66 0a 0a 20 20 7d 20 2f 2a 20 45 6e 64 20  dif..  } /* End 
14970 6f 66 20 74 68 65 20 50 52 41 47 4d 41 20 73 77  of the PRAGMA sw
14980 69 74 63 68 20 2a 2f 0a 0a 70 72 61 67 6d 61 5f  itch */..pragma_
14990 6f 75 74 3a 0a 20 20 73 71 6c 69 74 65 33 44 62  out:.  sqlite3Db
149a0 46 72 65 65 28 64 62 2c 20 7a 4c 65 66 74 29 3b  Free(db, zLeft);
149b0 0a 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65  .  sqlite3DbFree
149c0 28 64 62 2c 20 7a 52 69 67 68 74 29 3b 0a 7d 0a  (db, zRight);.}.
149d0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
149e0 45 5f 4f 4d 49 54 5f 50 52 41 47 4d 41 20 2a 2f  E_OMIT_PRAGMA */
149f0 0a                                               .