/ Hex Artifact Content
Login

Artifact 33971fcaa7c13b84b1a0f2e813f4a3ab4d745ede:


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 73 74 61 74 69        0x01.stati
0c30: 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 73  c const struct s
0c40: 50 72 61 67 6d 61 4e 61 6d 65 73 20 7b 0a 20 20  PragmaNames {.  
0c50: 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73  const char *cons
0c60: 74 20 7a 4e 61 6d 65 3b 20 20 2f 2a 20 4e 61 6d  t zName;  /* Nam
0c70: 65 20 6f 66 20 70 72 61 67 6d 61 20 2a 2f 0a 20  e of pragma */. 
0c80: 20 75 38 20 65 50 72 61 67 54 79 70 3b 20 20 20   u8 ePragTyp;   
0c90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72             /* Pr
0ca0: 61 67 54 79 70 5f 58 58 58 20 76 61 6c 75 65 20  agTyp_XXX value 
0cb0: 2a 2f 0a 20 20 75 38 20 6d 50 72 61 67 46 6c 61  */.  u8 mPragFla
0cc0: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  g;             /
0cd0: 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 50  * Zero or more P
0ce0: 72 61 67 46 6c 61 67 5f 58 58 58 20 76 61 6c 75  ragFlag_XXX valu
0cf0: 65 73 20 2a 2f 0a 20 20 75 33 32 20 69 41 72 67  es */.  u32 iArg
0d00: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
0d10: 20 20 2f 2a 20 45 78 74 72 61 20 61 72 67 75 6d    /* Extra argum
0d20: 65 6e 74 20 2a 2f 0a 7d 20 61 50 72 61 67 6d 61  ent */.} aPragma
0d30: 4e 61 6d 65 73 5b 5d 20 3d 20 7b 0a 23 69 66 20  Names[] = {.#if 
0d40: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48  defined(SQLITE_H
0d50: 41 53 5f 43 4f 44 45 43 29 20 7c 7c 20 64 65 66  AS_CODEC) || def
0d60: 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42  ined(SQLITE_ENAB
0d70: 4c 45 5f 43 45 52 4f 44 29 0a 20 20 7b 20 2f 2a  LE_CEROD).  { /*
0d80: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
0d90: 61 63 74 69 76 61 74 65 5f 65 78 74 65 6e 73 69  activate_extensi
0da0: 6f 6e 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ons",.    /* ePr
0db0: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
0dc0: 79 70 5f 41 43 54 49 56 41 54 45 5f 45 58 54 45  yp_ACTIVATE_EXTE
0dd0: 4e 53 49 4f 4e 53 2c 0a 20 20 20 20 2f 2a 20 65  NSIONS,.    /* e
0de0: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
0df0: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
0e00: 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66    */ 0 },.#endif
0e10: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
0e20: 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41  LITE_OMIT_SCHEMA
0e30: 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53  _VERSION_PRAGMAS
0e40: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
0e50: 20 20 20 20 2a 2f 20 22 61 70 70 6c 69 63 61 74      */ "applicat
0e60: 69 6f 6e 5f 69 64 22 2c 0a 20 20 20 20 2f 2a 20  ion_id",.    /* 
0e70: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
0e80: 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c  agTyp_HEADER_VAL
0e90: 55 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  UE,.    /* ePrag
0ea0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
0eb0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
0ec0: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
0ed0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
0ee0: 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
0ef0: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
0f00: 20 20 20 20 2a 2f 20 22 61 75 74 6f 5f 76 61 63      */ "auto_vac
0f10: 75 75 6d 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  uum",.    /* ePr
0f20: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
0f30: 79 70 5f 41 55 54 4f 5f 56 41 43 55 55 4d 2c 0a  yp_AUTO_VACUUM,.
0f40: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
0f50: 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65  : */ PragFlag_Ne
0f60: 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a  edSchema,.    /*
0f70: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
0f80: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
0f90: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
0fa0: 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53  MIT_FLAG_PRAGMAS
0fb0: 29 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ).#if !defined(S
0fc0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 4d  QLITE_OMIT_AUTOM
0fd0: 41 54 49 43 5f 49 4e 44 45 58 29 0a 20 20 7b 20  ATIC_INDEX).  { 
0fe0: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
0ff0: 20 22 61 75 74 6f 6d 61 74 69 63 5f 69 6e 64 65   "automatic_inde
1000: 78 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  x",.    /* ePrag
1010: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
1020: 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50  _FLAG,.    /* eP
1030: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
1040: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
1050: 20 2a 2f 20 53 51 4c 49 54 45 5f 41 75 74 6f 49   */ SQLITE_AutoI
1060: 6e 64 65 78 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  ndex },.#endif.#
1070: 65 6e 64 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e 61  endif.  { /* zNa
1080: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 62 75 73 79  me:     */ "busy
1090: 5f 74 69 6d 65 6f 75 74 22 2c 0a 20 20 20 20 2f  _timeout",.    /
10a0: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
10b0: 50 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d  PragTyp_BUSY_TIM
10c0: 45 4f 55 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72  EOUT,.    /* ePr
10d0: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
10e0: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
10f0: 2a 2f 20 30 20 7d 2c 0a 23 69 66 20 21 64 65 66  */ 0 },.#if !def
1100: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1110: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a  _PAGER_PRAGMAS).
1120: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
1130: 20 20 2a 2f 20 22 63 61 63 68 65 5f 73 69 7a 65    */ "cache_size
1140: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
1150: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
1160: 43 41 43 48 45 5f 53 49 5a 45 2c 0a 20 20 20 20  CACHE_SIZE,.    
1170: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
1180: 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63   PragFlag_NeedSc
1190: 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72  hema,.    /* iAr
11a0: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
11b0: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
11c0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
11d0: 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20  FLAG_PRAGMAS).  
11e0: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
11f0: 2a 2f 20 22 63 61 63 68 65 5f 73 70 69 6c 6c 22  */ "cache_spill"
1200: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
1210: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46  p:  */ PragTyp_F
1220: 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  LAG,.    /* ePra
1230: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
1240: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
1250: 2f 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70  / SQLITE_CacheSp
1260: 69 6c 6c 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20  ill },.#endif.  
1270: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
1280: 2a 2f 20 22 63 61 73 65 5f 73 65 6e 73 69 74 69  */ "case_sensiti
1290: 76 65 5f 6c 69 6b 65 22 2c 0a 20 20 20 20 2f 2a  ve_like",.    /*
12a0: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
12b0: 72 61 67 54 79 70 5f 43 41 53 45 5f 53 45 4e 53  ragTyp_CASE_SENS
12c0: 49 54 49 56 45 5f 4c 49 4b 45 2c 0a 20 20 20 20  ITIVE_LIKE,.    
12d0: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
12e0: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
12f0: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 69        */ 0 },.#i
1300: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
1310: 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47  E_OMIT_FLAG_PRAG
1320: 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  MAS).  { /* zNam
1330: 65 3a 20 20 20 20 20 2a 2f 20 22 63 68 65 63 6b  e:     */ "check
1340: 70 6f 69 6e 74 5f 66 75 6c 6c 66 73 79 6e 63 22  point_fullfsync"
1350: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
1360: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46  p:  */ PragTyp_F
1370: 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  LAG,.    /* ePra
1380: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
1390: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
13a0: 2f 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c  / SQLITE_CkptFul
13b0: 6c 46 53 79 6e 63 20 7d 2c 0a 23 65 6e 64 69 66  lFSync },.#endif
13c0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
13d0: 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41  LITE_OMIT_SCHEMA
13e0: 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a  _PRAGMAS).  { /*
13f0: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
1400: 63 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 22 2c  collation_list",
1410: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
1420: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 43 4f  :  */ PragTyp_CO
1430: 4c 4c 41 54 49 4f 4e 5f 4c 49 53 54 2c 0a 20 20  LLATION_LIST,.  
1440: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
1450: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
1460: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
1470: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
1480: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
1490: 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49  COMPILEOPTION_DI
14a0: 41 47 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  AGS).  { /* zNam
14b0: 65 3a 20 20 20 20 20 2a 2f 20 22 63 6f 6d 70 69  e:     */ "compi
14c0: 6c 65 5f 6f 70 74 69 6f 6e 73 22 2c 0a 20 20 20  le_options",.   
14d0: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
14e0: 2f 20 50 72 61 67 54 79 70 5f 43 4f 4d 50 49 4c  / PragTyp_COMPIL
14f0: 45 5f 4f 50 54 49 4f 4e 53 2c 0a 20 20 20 20 2f  E_OPTIONS,.    /
1500: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
1510: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
1520: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
1530: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
1540: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41  (SQLITE_OMIT_FLA
1550: 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f  G_PRAGMAS).  { /
1560: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
1570: 22 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 22 2c  "count_changes",
1580: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
1590: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
15a0: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
15b0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
15c0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
15d0: 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77   SQLITE_CountRow
15e0: 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  s },.#endif.#if 
15f0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1600: 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
1610: 41 53 29 20 26 26 20 53 51 4c 49 54 45 5f 4f 53  AS) && SQLITE_OS
1620: 5f 57 49 4e 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  _WIN.  { /* zNam
1630: 65 3a 20 20 20 20 20 2a 2f 20 22 64 61 74 61 5f  e:     */ "data_
1640: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 22  store_directory"
1650: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
1660: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 44  p:  */ PragTyp_D
1670: 41 54 41 5f 53 54 4f 52 45 5f 44 49 52 45 43 54  ATA_STORE_DIRECT
1680: 4f 52 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ORY,.    /* ePra
1690: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
16a0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
16b0: 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  / 0 },.#endif.#i
16c0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
16d0: 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52  E_OMIT_SCHEMA_PR
16e0: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
16f0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 64 61 74  ame:     */ "dat
1700: 61 62 61 73 65 5f 6c 69 73 74 22 2c 0a 20 20 20  abase_list",.   
1710: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
1720: 2f 20 50 72 61 67 54 79 70 5f 44 41 54 41 42 41  / PragTyp_DATABA
1730: 53 45 5f 4c 49 53 54 2c 0a 20 20 20 20 2f 2a 20  SE_LIST,.    /* 
1740: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72  ePragFlag: */ Pr
1750: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
1760: 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  a,.    /* iArg: 
1770: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
1780: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
1790: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47  (SQLITE_OMIT_PAG
17a0: 45 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20 21  ER_PRAGMAS) && !
17b0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
17c0: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 29 0a  MIT_DEPRECATED).
17d0: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
17e0: 20 20 2a 2f 20 22 64 65 66 61 75 6c 74 5f 63 61    */ "default_ca
17f0: 63 68 65 5f 73 69 7a 65 22 2c 0a 20 20 20 20 2f  che_size",.    /
1800: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
1810: 50 72 61 67 54 79 70 5f 44 45 46 41 55 4c 54 5f  PragTyp_DEFAULT_
1820: 43 41 43 48 45 5f 53 49 5a 45 2c 0a 20 20 20 20  CACHE_SIZE,.    
1830: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
1840: 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63   PragFlag_NeedSc
1850: 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72  hema,.    /* iAr
1860: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
1870: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
1880: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
1890: 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 23 69  FLAG_PRAGMAS).#i
18a0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
18b0: 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b  E_OMIT_FOREIGN_K
18c0: 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28  EY) && !defined(
18d0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47  SQLITE_OMIT_TRIG
18e0: 47 45 52 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  GER).  { /* zNam
18f0: 65 3a 20 20 20 20 20 2a 2f 20 22 64 65 66 65 72  e:     */ "defer
1900: 5f 66 6f 72 65 69 67 6e 5f 6b 65 79 73 22 2c 0a  _foreign_keys",.
1910: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1920: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
1930: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
1940: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
1950: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
1960: 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20  SQLITE_DeferFKs 
1970: 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66  },.#endif.#endif
1980: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1990: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50  LITE_OMIT_FLAG_P
19a0: 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a  RAGMAS).  { /* z
19b0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 65 6d  Name:     */ "em
19c0: 70 74 79 5f 72 65 73 75 6c 74 5f 63 61 6c 6c 62  pty_result_callb
19d0: 61 63 6b 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50  acks",.    /* eP
19e0: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
19f0: 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a  Typ_FLAG,.    /*
1a00: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
1a10: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
1a20: 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 4e 75      */ SQLITE_Nu
1a30: 6c 6c 43 61 6c 6c 62 61 63 6b 20 7d 2c 0a 23 65  llCallback },.#e
1a40: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
1a50: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  d(SQLITE_OMIT_UT
1a60: 46 31 36 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  F16).  { /* zNam
1a70: 65 3a 20 20 20 20 20 2a 2f 20 22 65 6e 63 6f 64  e:     */ "encod
1a80: 69 6e 67 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ing",.    /* ePr
1a90: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
1aa0: 79 70 5f 45 4e 43 4f 44 49 4e 47 2c 0a 20 20 20  yp_ENCODING,.   
1ab0: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
1ac0: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
1ad0: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
1ae0: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
1af0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
1b00: 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21  OREIGN_KEY) && !
1b10: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1b20: 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 7b  MIT_TRIGGER).  {
1b30: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
1b40: 2f 20 22 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63  / "foreign_key_c
1b50: 68 65 63 6b 22 2c 0a 20 20 20 20 2f 2a 20 65 50  heck",.    /* eP
1b60: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
1b70: 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f  Typ_FOREIGN_KEY_
1b80: 43 48 45 43 4b 2c 0a 20 20 20 20 2f 2a 20 65 50  CHECK,.    /* eP
1b90: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67  ragFlag: */ Prag
1ba0: 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c  Flag_NeedSchema,
1bb0: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
1bc0: 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69     */ 0 },.#endi
1bd0: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
1be0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
1bf0: 47 4e 5f 4b 45 59 29 0a 20 20 7b 20 2f 2a 20 7a  GN_KEY).  { /* z
1c00: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66 6f  Name:     */ "fo
1c10: 72 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 22 2c  reign_key_list",
1c20: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
1c30: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4f  :  */ PragTyp_FO
1c40: 52 45 49 47 4e 5f 4b 45 59 5f 4c 49 53 54 2c 0a  REIGN_KEY_LIST,.
1c50: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
1c60: 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65  : */ PragFlag_Ne
1c70: 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a  edSchema,.    /*
1c80: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
1c90: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
1ca0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1cb0: 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53  MIT_FLAG_PRAGMAS
1cc0: 29 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  ).#if !defined(S
1cd0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
1ce0: 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69  GN_KEY) && !defi
1cf0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
1d00: 54 52 49 47 47 45 52 29 0a 20 20 7b 20 2f 2a 20  TRIGGER).  { /* 
1d10: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66  zName:     */ "f
1d20: 6f 72 65 69 67 6e 5f 6b 65 79 73 22 2c 0a 20 20  oreign_keys",.  
1d30: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
1d40: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
1d50: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
1d60: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
1d70: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
1d80: 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73  LITE_ForeignKeys
1d90: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69   },.#endif.#endi
1da0: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
1db0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
1dc0: 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41  A_VERSION_PRAGMA
1dd0: 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  S).  { /* zName:
1de0: 20 20 20 20 20 2a 2f 20 22 66 72 65 65 6c 69 73       */ "freelis
1df0: 74 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 2f 2a  t_count",.    /*
1e00: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
1e10: 72 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41  ragTyp_HEADER_VA
1e20: 4c 55 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  LUE,.    /* ePra
1e30: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
1e40: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
1e50: 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  / 0 },.#endif.#i
1e60: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
1e70: 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47  E_OMIT_FLAG_PRAG
1e80: 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  MAS).  { /* zNam
1e90: 65 3a 20 20 20 20 20 2a 2f 20 22 66 75 6c 6c 5f  e:     */ "full_
1ea0: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22 2c 0a 20  column_names",. 
1eb0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
1ec0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
1ed0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
1ee0: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
1ef0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
1f00: 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d  QLITE_FullColNam
1f10: 65 73 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61  es },.  { /* zNa
1f20: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66 75 6c 6c  me:     */ "full
1f30: 66 73 79 6e 63 22 2c 0a 20 20 20 20 2f 2a 20 65  fsync",.    /* e
1f40: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
1f50: 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f  gTyp_FLAG,.    /
1f60: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
1f70: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
1f80: 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 46       */ SQLITE_F
1f90: 75 6c 6c 46 53 79 6e 63 20 7d 2c 0a 23 65 6e 64  ullFSync },.#end
1fa0: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
1fb0: 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29  QLITE_HAS_CODEC)
1fc0: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
1fd0: 20 20 20 2a 2f 20 22 68 65 78 6b 65 79 22 2c 0a     */ "hexkey",.
1fe0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1ff0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 48 45 58    */ PragTyp_HEX
2000: 4b 45 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  KEY,.    /* ePra
2010: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
2020: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
2030: 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e  / 0 },.  { /* zN
2040: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 68 65 78  ame:     */ "hex
2050: 72 65 6b 65 79 22 2c 0a 20 20 20 20 2f 2a 20 65  rekey",.    /* e
2060: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
2070: 67 54 79 70 5f 48 45 58 4b 45 59 2c 0a 20 20 20  gTyp_HEXKEY,.   
2080: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
2090: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
20a0: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
20b0: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
20c0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
20d0: 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 23 69 66  LAG_PRAGMAS).#if
20e0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
20f0: 5f 4f 4d 49 54 5f 43 48 45 43 4b 29 0a 20 20 7b  _OMIT_CHECK).  {
2100: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
2110: 2f 20 22 69 67 6e 6f 72 65 5f 63 68 65 63 6b 5f  / "ignore_check_
2120: 63 6f 6e 73 74 72 61 69 6e 74 73 22 2c 0a 20 20  constraints",.  
2130: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
2140: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
2150: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
2160: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
2170: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
2180: 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b  LITE_IgnoreCheck
2190: 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64  s },.#endif.#end
21a0: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
21b0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
21c0: 56 41 43 55 55 4d 29 0a 20 20 7b 20 2f 2a 20 7a  VACUUM).  { /* z
21d0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e  Name:     */ "in
21e0: 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d  cremental_vacuum
21f0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
2200: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
2210: 49 4e 43 52 45 4d 45 4e 54 41 4c 5f 56 41 43 55  INCREMENTAL_VACU
2220: 55 4d 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  UM,.    /* ePrag
2230: 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61  Flag: */ PragFla
2240: 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20  g_NeedSchema,.  
2250: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2260: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
2270: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2280: 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50  TE_OMIT_SCHEMA_P
2290: 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a  RAGMAS).  { /* z
22a0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e  Name:     */ "in
22b0: 64 65 78 5f 69 6e 66 6f 22 2c 0a 20 20 20 20 2f  dex_info",.    /
22c0: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
22d0: 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 49 4e  PragTyp_INDEX_IN
22e0: 46 4f 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  FO,.    /* ePrag
22f0: 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61  Flag: */ PragFla
2300: 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20  g_NeedSchema,.  
2310: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2320: 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a  */ 0 },.  { /* z
2330: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e  Name:     */ "in
2340: 64 65 78 5f 6c 69 73 74 22 2c 0a 20 20 20 20 2f  dex_list",.    /
2350: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
2360: 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c 49  PragTyp_INDEX_LI
2370: 53 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  ST,.    /* ePrag
2380: 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61  Flag: */ PragFla
2390: 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20  g_NeedSchema,.  
23a0: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
23b0: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
23c0: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
23d0: 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
23e0: 59 5f 43 48 45 43 4b 29 0a 20 20 7b 20 2f 2a 20  Y_CHECK).  { /* 
23f0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69  zName:     */ "i
2400: 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c  ntegrity_check",
2410: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
2420: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 49 4e  :  */ PragTyp_IN
2430: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 2c 0a 20  TEGRITY_CHECK,. 
2440: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
2450: 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65   */ PragFlag_Nee
2460: 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20  dSchema,.    /* 
2470: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
2480: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
2490: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
24a0: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
24b0: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
24c0: 20 20 20 20 2a 2f 20 22 6a 6f 75 72 6e 61 6c 5f      */ "journal_
24d0: 6d 6f 64 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50  mode",.    /* eP
24e0: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
24f0: 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f 4d 4f 44 45  Typ_JOURNAL_MODE
2500: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
2510: 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f  ag: */ PragFlag_
2520: 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20  NeedSchema,.    
2530: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
2540: 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61   0 },.  { /* zNa
2550: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6a 6f 75 72  me:     */ "jour
2560: 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 22 2c  nal_size_limit",
2570: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
2580: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 4a 4f  :  */ PragTyp_JO
2590: 55 52 4e 41 4c 5f 53 49 5a 45 5f 4c 49 4d 49 54  URNAL_SIZE_LIMIT
25a0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
25b0: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
25c0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
25d0: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 64   },.#endif.#if d
25e0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41  efined(SQLITE_HA
25f0: 53 5f 43 4f 44 45 43 29 0a 20 20 7b 20 2f 2a 20  S_CODEC).  { /* 
2600: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6b  zName:     */ "k
2610: 65 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ey",.    /* ePra
2620: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
2630: 70 5f 4b 45 59 2c 0a 20 20 20 20 2f 2a 20 65 50  p_KEY,.    /* eP
2640: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
2650: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2660: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
2670: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2680: 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52  ITE_OMIT_FLAG_PR
2690: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
26a0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 65 67  ame:     */ "leg
26b0: 61 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 22  acy_file_format"
26c0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
26d0: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46  p:  */ PragTyp_F
26e0: 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  LAG,.    /* ePra
26f0: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
2700: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
2710: 2f 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46  / SQLITE_LegacyF
2720: 69 6c 65 46 6d 74 20 7d 2c 0a 23 65 6e 64 69 66  ileFmt },.#endif
2730: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
2740: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
2750: 50 52 41 47 4d 41 53 29 20 26 26 20 53 51 4c 49  PRAGMAS) && SQLI
2760: 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e  TE_ENABLE_LOCKIN
2770: 47 5f 53 54 59 4c 45 0a 20 20 7b 20 2f 2a 20 7a  G_STYLE.  { /* z
2780: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 6f  Name:     */ "lo
2790: 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 22 2c 0a  ck_proxy_file",.
27a0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
27b0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 4c 4f 43    */ PragTyp_LOC
27c0: 4b 5f 50 52 4f 58 59 5f 46 49 4c 45 2c 0a 20 20  K_PROXY_FILE,.  
27d0: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
27e0: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
27f0: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
2800: 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e  #endif.#if defin
2810: 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29  ed(SQLITE_DEBUG)
2820: 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
2830: 54 45 5f 54 45 53 54 29 0a 20 20 7b 20 2f 2a 20  TE_TEST).  { /* 
2840: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c  zName:     */ "l
2850: 6f 63 6b 5f 73 74 61 74 75 73 22 2c 0a 20 20 20  ock_status",.   
2860: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
2870: 2f 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 53  / PragTyp_LOCK_S
2880: 54 41 54 55 53 2c 0a 20 20 20 20 2f 2a 20 65 50  TATUS,.    /* eP
2890: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
28a0: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
28b0: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
28c0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
28d0: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
28e0: 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a  RAGMAS).  { /* z
28f0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 6f  Name:     */ "lo
2900: 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c 0a 20 20 20  cking_mode",.   
2910: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
2920: 2f 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49 4e  / PragTyp_LOCKIN
2930: 47 5f 4d 4f 44 45 2c 0a 20 20 20 20 2f 2a 20 65  G_MODE,.    /* e
2940: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
2950: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
2960: 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a    */ 0 },.  { /*
2970: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
2980: 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 22 2c  max_page_count",
2990: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
29a0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 50 41  :  */ PragTyp_PA
29b0: 47 45 5f 43 4f 55 4e 54 2c 0a 20 20 20 20 2f 2a  GE_COUNT,.    /*
29c0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50   ePragFlag: */ P
29d0: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
29e0: 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a  ma,.    /* iArg:
29f0: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20        */ 0 },.  
2a00: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
2a10: 2a 2f 20 22 6d 6d 61 70 5f 73 69 7a 65 22 2c 0a  */ "mmap_size",.
2a20: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2a30: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 4d 4d 41    */ PragTyp_MMA
2a40: 50 5f 53 49 5a 45 2c 0a 20 20 20 20 2f 2a 20 65  P_SIZE,.    /* e
2a50: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
2a60: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
2a70: 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a    */ 0 },.  { /*
2a80: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
2a90: 70 61 67 65 5f 63 6f 75 6e 74 22 2c 0a 20 20 20  page_count",.   
2aa0: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
2ab0: 2f 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 43  / PragTyp_PAGE_C
2ac0: 4f 55 4e 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72  OUNT,.    /* ePr
2ad0: 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46  agFlag: */ PragF
2ae0: 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a  lag_NeedSchema,.
2af0: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
2b00: 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a    */ 0 },.  { /*
2b10: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
2b20: 70 61 67 65 5f 73 69 7a 65 22 2c 0a 20 20 20 20  page_size",.    
2b30: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2b40: 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 53 49   PragTyp_PAGE_SI
2b50: 5a 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  ZE,.    /* ePrag
2b60: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
2b70: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
2b80: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
2b90: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2ba0: 44 45 42 55 47 29 0a 20 20 7b 20 2f 2a 20 7a 4e  DEBUG).  { /* zN
2bb0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 70 61 72  ame:     */ "par
2bc0: 73 65 72 5f 74 72 61 63 65 22 2c 0a 20 20 20 20  ser_trace",.    
2bd0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2be0: 20 50 72 61 67 54 79 70 5f 50 41 52 53 45 52 5f   PragTyp_PARSER_
2bf0: 54 52 41 43 45 2c 0a 20 20 20 20 2f 2a 20 65 50  TRACE,.    /* eP
2c00: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
2c10: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2c20: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
2c30: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2c40: 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52  ITE_OMIT_FLAG_PR
2c50: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
2c60: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 71 75 65  ame:     */ "que
2c70: 72 79 5f 6f 6e 6c 79 22 2c 0a 20 20 20 20 2f 2a  ry_only",.    /*
2c80: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
2c90: 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20  ragTyp_FLAG,.   
2ca0: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
2cb0: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
2cc0: 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45  :      */ SQLITE
2cd0: 5f 51 75 65 72 79 4f 6e 6c 79 20 7d 2c 0a 23 65  _QueryOnly },.#e
2ce0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
2cf0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e  d(SQLITE_OMIT_IN
2d00: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 29 0a 20  TEGRITY_CHECK). 
2d10: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
2d20: 20 2a 2f 20 22 71 75 69 63 6b 5f 63 68 65 63 6b   */ "quick_check
2d30: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
2d40: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
2d50: 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 2c  INTEGRITY_CHECK,
2d60: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
2d70: 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e  g: */ PragFlag_N
2d80: 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f  eedSchema,.    /
2d90: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
2da0: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
2db0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2dc0: 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41  OMIT_FLAG_PRAGMA
2dd0: 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  S).  { /* zName:
2de0: 20 20 20 20 20 2a 2f 20 22 72 65 61 64 5f 75 6e       */ "read_un
2df0: 63 6f 6d 6d 69 74 74 65 64 22 2c 0a 20 20 20 20  committed",.    
2e00: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2e10: 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20   PragTyp_FLAG,. 
2e20: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
2e30: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
2e40: 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49  rg:      */ SQLI
2e50: 54 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74  TE_ReadUncommitt
2e60: 65 64 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61  ed },.  { /* zNa
2e70: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 72 65 63 75  me:     */ "recu
2e80: 72 73 69 76 65 5f 74 72 69 67 67 65 72 73 22 2c  rsive_triggers",
2e90: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
2ea0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
2eb0: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
2ec0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
2ed0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
2ee0: 20 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67   SQLITE_RecTrigg
2ef0: 65 72 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  ers },.#endif.#i
2f00: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
2f10: 5f 48 41 53 5f 43 4f 44 45 43 29 0a 20 20 7b 20  _HAS_CODEC).  { 
2f20: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
2f30: 20 22 72 65 6b 65 79 22 2c 0a 20 20 20 20 2f 2a   "rekey",.    /*
2f40: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
2f50: 72 61 67 54 79 70 5f 52 45 4b 45 59 2c 0a 20 20  ragTyp_REKEY,.  
2f60: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
2f70: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
2f80: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
2f90: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
2fa0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2fb0: 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20  FLAG_PRAGMAS).  
2fc0: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
2fd0: 2a 2f 20 22 72 65 76 65 72 73 65 5f 75 6e 6f 72  */ "reverse_unor
2fe0: 64 65 72 65 64 5f 73 65 6c 65 63 74 73 22 2c 0a  dered_selects",.
2ff0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
3000: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
3010: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
3020: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
3030: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
3040: 53 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72  SQLITE_ReverseOr
3050: 64 65 72 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  der },.#endif.#i
3060: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
3070: 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45  E_OMIT_SCHEMA_VE
3080: 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 29 0a 20  RSION_PRAGMAS). 
3090: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
30a0: 20 2a 2f 20 22 73 63 68 65 6d 61 5f 76 65 72 73   */ "schema_vers
30b0: 69 6f 6e 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ion",.    /* ePr
30c0: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
30d0: 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 2c  yp_HEADER_VALUE,
30e0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
30f0: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
3100: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
3110: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
3120: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
3130: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
3140: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
3150: 20 20 20 20 2a 2f 20 22 73 65 63 75 72 65 5f 64      */ "secure_d
3160: 65 6c 65 74 65 22 2c 0a 20 20 20 20 2f 2a 20 65  elete",.    /* e
3170: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
3180: 67 54 79 70 5f 53 45 43 55 52 45 5f 44 45 4c 45  gTyp_SECURE_DELE
3190: 54 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  TE,.    /* ePrag
31a0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
31b0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
31c0: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
31d0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
31e0: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
31f0: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
3200: 3a 20 20 20 20 20 2a 2f 20 22 73 68 6f 72 74 5f  :     */ "short_
3210: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22 2c 0a 20  column_names",. 
3220: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
3230: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
3240: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
3250: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
3260: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
3270: 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61  QLITE_ShortColNa
3280: 6d 65 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20  mes },.#endif.  
3290: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
32a0: 2a 2f 20 22 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72  */ "shrink_memor
32b0: 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  y",.    /* ePrag
32c0: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
32d0: 5f 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59 2c 0a  _SHRINK_MEMORY,.
32e0: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
32f0: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
3300: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
3310: 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ,.  { /* zName: 
3320: 20 20 20 20 2a 2f 20 22 73 6f 66 74 5f 68 65 61      */ "soft_hea
3330: 70 5f 6c 69 6d 69 74 22 2c 0a 20 20 20 20 2f 2a  p_limit",.    /*
3340: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
3350: 72 61 67 54 79 70 5f 53 4f 46 54 5f 48 45 41 50  ragTyp_SOFT_HEAP
3360: 5f 4c 49 4d 49 54 2c 0a 20 20 20 20 2f 2a 20 65  _LIMIT,.    /* e
3370: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
3380: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
3390: 20 20 2a 2f 20 30 20 7d 2c 0a 23 69 66 20 21 64    */ 0 },.#if !d
33a0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
33b0: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29  IT_FLAG_PRAGMAS)
33c0: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
33d0: 49 54 45 5f 44 45 42 55 47 29 0a 20 20 7b 20 2f  ITE_DEBUG).  { /
33e0: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
33f0: 22 73 71 6c 5f 74 72 61 63 65 22 2c 0a 20 20 20  "sql_trace",.   
3400: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
3410: 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a  / PragTyp_FLAG,.
3420: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
3430: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
3440: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c  Arg:      */ SQL
3450: 49 54 45 5f 53 71 6c 54 72 61 63 65 20 7d 2c 0a  ITE_SqlTrace },.
3460: 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69  #endif.#endif.#i
3470: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
3480: 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52  E_OMIT_SCHEMA_PR
3490: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
34a0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 73 74 61  ame:     */ "sta
34b0: 74 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ts",.    /* ePra
34c0: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
34d0: 70 5f 53 54 41 54 53 2c 0a 20 20 20 20 2f 2a 20  p_STATS,.    /* 
34e0: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72  ePragFlag: */ Pr
34f0: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
3500: 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  a,.    /* iArg: 
3510: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
3520: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
3530: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47  (SQLITE_OMIT_PAG
3540: 45 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20  ER_PRAGMAS).  { 
3550: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
3560: 20 22 73 79 6e 63 68 72 6f 6e 6f 75 73 22 2c 0a   "synchronous",.
3570: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
3580: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 53 59 4e    */ PragTyp_SYN
3590: 43 48 52 4f 4e 4f 55 53 2c 0a 20 20 20 20 2f 2a  CHRONOUS,.    /*
35a0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50   ePragFlag: */ P
35b0: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
35c0: 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a  ma,.    /* iArg:
35d0: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
35e0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
35f0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43  d(SQLITE_OMIT_SC
3600: 48 45 4d 41 5f 50 52 41 47 4d 41 53 29 0a 20 20  HEMA_PRAGMAS).  
3610: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
3620: 2a 2f 20 22 74 61 62 6c 65 5f 69 6e 66 6f 22 2c  */ "table_info",
3630: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
3640: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 54 41  :  */ PragTyp_TA
3650: 42 4c 45 5f 49 4e 46 4f 2c 0a 20 20 20 20 2f 2a  BLE_INFO,.    /*
3660: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50   ePragFlag: */ P
3670: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
3680: 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a  ma,.    /* iArg:
3690: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
36a0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
36b0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  d(SQLITE_OMIT_PA
36c0: 47 45 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  GER_PRAGMAS).  {
36d0: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
36e0: 2f 20 22 74 65 6d 70 5f 73 74 6f 72 65 22 2c 0a  / "temp_store",.
36f0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
3700: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 54 45 4d    */ PragTyp_TEM
3710: 50 5f 53 54 4f 52 45 2c 0a 20 20 20 20 2f 2a 20  P_STORE,.    /* 
3720: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
3730: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
3740: 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f     */ 0 },.  { /
3750: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
3760: 22 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65  "temp_store_dire
3770: 63 74 6f 72 79 22 2c 0a 20 20 20 20 2f 2a 20 65  ctory",.    /* e
3780: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
3790: 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45 5f  gTyp_TEMP_STORE_
37a0: 44 49 52 45 43 54 4f 52 59 2c 0a 20 20 20 20 2f  DIRECTORY,.    /
37b0: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
37c0: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
37d0: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
37e0: 64 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  dif.  { /* zName
37f0: 3a 20 20 20 20 20 2a 2f 20 22 74 68 72 65 61 64  :     */ "thread
3800: 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  s",.    /* ePrag
3810: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
3820: 5f 54 48 52 45 41 44 53 2c 0a 20 20 20 20 2f 2a  _THREADS,.    /*
3830: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
3840: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
3850: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 69 66 20      */ 0 },.#if 
3860: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3870: 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53  OMIT_SCHEMA_VERS
3880: 49 4f 4e 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  ION_PRAGMAS).  {
3890: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
38a0: 2f 20 22 75 73 65 72 5f 76 65 72 73 69 6f 6e 22  / "user_version"
38b0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
38c0: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 48  p:  */ PragTyp_H
38d0: 45 41 44 45 52 5f 56 41 4c 55 45 2c 0a 20 20 20  EADER_VALUE,.   
38e0: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
38f0: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
3900: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
3910: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
3920: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
3930: 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 23 69 66  LAG_PRAGMAS).#if
3940: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
3950: 44 45 42 55 47 29 0a 20 20 7b 20 2f 2a 20 7a 4e  DEBUG).  { /* zN
3960: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76 64 62  ame:     */ "vdb
3970: 65 5f 61 64 64 6f 70 74 72 61 63 65 22 2c 0a 20  e_addoptrace",. 
3980: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
3990: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
39a0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
39b0: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
39c0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
39d0: 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70 54  QLITE_VdbeAddopT
39e0: 72 61 63 65 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a  race },.  { /* z
39f0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76 64  Name:     */ "vd
3a00: 62 65 5f 64 65 62 75 67 22 2c 0a 20 20 20 20 2f  be_debug",.    /
3a10: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
3a20: 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20  PragTyp_FLAG,.  
3a30: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
3a40: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
3a50: 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54  g:      */ SQLIT
3a60: 45 5f 53 71 6c 54 72 61 63 65 7c 53 51 4c 49 54  E_SqlTrace|SQLIT
3a70: 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c 53 51  E_VdbeListing|SQ
3a80: 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20 7d  LITE_VdbeTrace }
3a90: 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ,.  { /* zName: 
3aa0: 20 20 20 20 2a 2f 20 22 76 64 62 65 5f 65 71 70      */ "vdbe_eqp
3ab0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
3ac0: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
3ad0: 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72  FLAG,.    /* ePr
3ae0: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
3af0: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
3b00: 2a 2f 20 53 51 4c 49 54 45 5f 56 64 62 65 45 51  */ SQLITE_VdbeEQ
3b10: 50 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  P },.  { /* zNam
3b20: 65 3a 20 20 20 20 20 2a 2f 20 22 76 64 62 65 5f  e:     */ "vdbe_
3b30: 6c 69 73 74 69 6e 67 22 2c 0a 20 20 20 20 2f 2a  listing",.    /*
3b40: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
3b50: 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20  ragTyp_FLAG,.   
3b60: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
3b70: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
3b80: 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45  :      */ SQLITE
3b90: 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 7d 2c 0a  _VdbeListing },.
3ba0: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
3bb0: 20 20 2a 2f 20 22 76 64 62 65 5f 74 72 61 63 65    */ "vdbe_trace
3bc0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
3bd0: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
3be0: 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72  FLAG,.    /* ePr
3bf0: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
3c00: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
3c10: 2a 2f 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72  */ SQLITE_VdbeTr
3c20: 61 63 65 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65  ace },.#endif.#e
3c30: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
3c40: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  d(SQLITE_OMIT_WA
3c50: 4c 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  L).  { /* zName:
3c60: 20 20 20 20 20 2a 2f 20 22 77 61 6c 5f 61 75 74       */ "wal_aut
3c70: 6f 63 68 65 63 6b 70 6f 69 6e 74 22 2c 0a 20 20  ocheckpoint",.  
3c80: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
3c90: 2a 2f 20 50 72 61 67 54 79 70 5f 57 41 4c 5f 41  */ PragTyp_WAL_A
3ca0: 55 54 4f 43 48 45 43 4b 50 4f 49 4e 54 2c 0a 20  UTOCHECKPOINT,. 
3cb0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
3cc0: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
3cd0: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
3ce0: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
3cf0: 20 20 20 2a 2f 20 22 77 61 6c 5f 63 68 65 63 6b     */ "wal_check
3d00: 70 6f 69 6e 74 22 2c 0a 20 20 20 20 2f 2a 20 65  point",.    /* e
3d10: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
3d20: 67 54 79 70 5f 57 41 4c 5f 43 48 45 43 4b 50 4f  gTyp_WAL_CHECKPO
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 50 72 61 67 46 6c  gFlag: */ PragFl
3d50: 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20  ag_NeedSchema,. 
3d60: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
3d70: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
3d80: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
3d90: 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52  ITE_OMIT_FLAG_PR
3da0: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
3db0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 77 72 69  ame:     */ "wri
3dc0: 74 61 62 6c 65 5f 73 63 68 65 6d 61 22 2c 0a 20  table_schema",. 
3dd0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
3de0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
3df0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
3e00: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
3e10: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
3e20: 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65 6d  QLITE_WriteSchem
3e30: 61 7c 53 51 4c 49 54 45 5f 52 65 63 6f 76 65 72  a|SQLITE_Recover
3e40: 79 4d 6f 64 65 20 7d 2c 0a 23 65 6e 64 69 66 0a  yMode },.#endif.
3e50: 7d 3b 0a 2f 2a 20 4e 75 6d 62 65 72 20 6f 66 20  };./* Number of 
3e60: 70 72 61 67 6d 61 73 3a 20 35 37 20 6f 6e 20 62  pragmas: 57 on b
3e70: 79 20 64 65 66 61 75 6c 74 2c 20 37 30 20 74 6f  y default, 70 to
3e80: 74 61 6c 2e 20 2a 2f 0a 2f 2a 20 45 6e 64 20 6f  tal. */./* End o
3e90: 66 20 74 68 65 20 61 75 74 6f 6d 61 74 69 63 61  f the automatica
3ea0: 6c 6c 79 20 67 65 6e 65 72 61 74 65 64 20 70 72  lly generated pr
3eb0: 61 67 6d 61 20 74 61 62 6c 65 2e 0a 2a 2a 2a 2a  agma table..****
3ec0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3ed0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3ee0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3ef0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3f00: 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 0a 2a 2a 20  *******/../*.** 
3f10: 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69  Interpret the gi
3f20: 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20  ven string as a 
3f30: 73 61 66 65 74 79 20 6c 65 76 65 6c 2e 20 20 52  safety level.  R
3f40: 65 74 75 72 6e 20 30 20 66 6f 72 20 4f 46 46 2c  eturn 0 for OFF,
3f50: 0a 2a 2a 20 31 20 66 6f 72 20 4f 4e 20 6f 72 20  .** 1 for ON or 
3f60: 4e 4f 52 4d 41 4c 20 61 6e 64 20 32 20 66 6f 72  NORMAL and 2 for
3f70: 20 46 55 4c 4c 2e 20 20 52 65 74 75 72 6e 20 31   FULL.  Return 1
3f80: 20 66 6f 72 20 61 6e 20 65 6d 70 74 79 20 6f 72   for an empty or
3f90: 20 0a 2a 2a 20 75 6e 72 65 63 6f 67 6e 69 7a 65   .** unrecognize
3fa0: 64 20 73 74 72 69 6e 67 20 61 72 67 75 6d 65 6e  d string argumen
3fb0: 74 2e 20 20 54 68 65 20 46 55 4c 4c 20 6f 70 74  t.  The FULL opt
3fc0: 69 6f 6e 20 69 73 20 64 69 73 61 6c 6c 6f 77 65  ion is disallowe
3fd0: 64 0a 2a 2a 20 69 66 20 74 68 65 20 6f 6d 69 74  d.** if the omit
3fe0: 46 75 6c 6c 20 70 61 72 61 6d 65 74 65 72 20 69  Full parameter i
3ff0: 74 20 31 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65 20  t 1..**.** Note 
4000: 74 68 61 74 20 74 68 65 20 76 61 6c 75 65 73 20  that the values 
4010: 72 65 74 75 72 6e 65 64 20 61 72 65 20 6f 6e 65  returned are one
4020: 20 6c 65 73 73 20 74 68 61 74 20 74 68 65 20 76   less that the v
4030: 61 6c 75 65 73 20 74 68 61 74 0a 2a 2a 20 73 68  alues that.** sh
4040: 6f 75 6c 64 20 62 65 20 70 61 73 73 65 64 20 69  ould be passed i
4050: 6e 74 6f 20 73 71 6c 69 74 65 33 42 74 72 65 65  nto sqlite3Btree
4060: 53 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 29  SetSafetyLevel()
4070: 2e 20 20 54 68 65 20 69 73 20 64 6f 6e 65 0a 2a  .  The is done.*
4080: 2a 20 74 6f 20 73 75 70 70 6f 72 74 20 6c 65 67  * to support leg
4090: 61 63 79 20 53 51 4c 20 63 6f 64 65 2e 20 20 54  acy SQL code.  T
40a0: 68 65 20 73 61 66 65 74 79 20 6c 65 76 65 6c 20  he safety level 
40b0: 75 73 65 64 20 74 6f 20 62 65 20 62 6f 6f 6c 65  used to be boole
40c0: 61 6e 0a 2a 2a 20 61 6e 64 20 6f 6c 64 65 72 20  an.** and older 
40d0: 73 63 72 69 70 74 73 20 6d 61 79 20 68 61 76 65  scripts may have
40e0: 20 75 73 65 64 20 6e 75 6d 62 65 72 73 20 30 20   used numbers 0 
40f0: 66 6f 72 20 4f 46 46 20 61 6e 64 20 31 20 66 6f  for OFF and 1 fo
4100: 72 20 4f 4e 2e 0a 2a 2f 0a 73 74 61 74 69 63 20  r ON..*/.static 
4110: 75 38 20 67 65 74 53 61 66 65 74 79 4c 65 76 65  u8 getSafetyLeve
4120: 6c 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 2c  l(const char *z,
4130: 20 69 6e 74 20 6f 6d 69 74 46 75 6c 6c 2c 20 75   int omitFull, u
4140: 38 20 64 66 6c 74 29 7b 0a 20 20 20 20 20 20 20  8 dflt){.       
4150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4160: 20 20 20 20 20 20 2f 2a 20 31 32 33 34 35 36 37        /* 1234567
4170: 38 39 20 31 32 33 34 35 36 37 38 39 20 2a 2f 0a  89 123456789 */.
4180: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63    static const c
4190: 68 61 72 20 7a 54 65 78 74 5b 5d 20 3d 20 22 6f  har zText[] = "o
41a0: 6e 6f 66 66 61 6c 73 65 79 65 73 74 72 75 65 66  noffalseyestruef
41b0: 75 6c 6c 22 3b 0a 20 20 73 74 61 74 69 63 20 63  ull";.  static c
41c0: 6f 6e 73 74 20 75 38 20 69 4f 66 66 73 65 74 5b  onst u8 iOffset[
41d0: 5d 20 3d 20 7b 30 2c 20 31 2c 20 32 2c 20 34 2c  ] = {0, 1, 2, 4,
41e0: 20 39 2c 20 31 32 2c 20 31 36 7d 3b 0a 20 20 73   9, 12, 16};.  s
41f0: 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38 20 69  tatic const u8 i
4200: 4c 65 6e 67 74 68 5b 5d 20 3d 20 7b 32 2c 20 32  Length[] = {2, 2
4210: 2c 20 33 2c 20 35 2c 20 33 2c 20 34 2c 20 34 7d  , 3, 5, 3, 4, 4}
4220: 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ;.  static const
4230: 20 75 38 20 69 56 61 6c 75 65 5b 5d 20 3d 20 20   u8 iValue[] =  
4240: 7b 31 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c 20  {1, 0, 0, 0, 1, 
4250: 31 2c 20 32 7d 3b 0a 20 20 69 6e 74 20 69 2c 20  1, 2};.  int i, 
4260: 6e 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65 33  n;.  if( sqlite3
4270: 49 73 64 69 67 69 74 28 2a 7a 29 20 29 7b 0a 20  Isdigit(*z) ){. 
4280: 20 20 20 72 65 74 75 72 6e 20 28 75 38 29 73 71     return (u8)sq
4290: 6c 69 74 65 33 41 74 6f 69 28 7a 29 3b 0a 20 20  lite3Atoi(z);.  
42a0: 7d 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33 53  }.  n = sqlite3S
42b0: 74 72 6c 65 6e 33 30 28 7a 29 3b 0a 20 20 66 6f  trlen30(z);.  fo
42c0: 72 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53 69  r(i=0; i<ArraySi
42d0: 7a 65 28 69 4c 65 6e 67 74 68 29 2d 6f 6d 69 74  ze(iLength)-omit
42e0: 46 75 6c 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  Full; i++){.    
42f0: 69 66 28 20 69 4c 65 6e 67 74 68 5b 69 5d 3d 3d  if( iLength[i]==
4300: 6e 20 26 26 20 73 71 6c 69 74 65 33 53 74 72 4e  n && sqlite3StrN
4310: 49 43 6d 70 28 26 7a 54 65 78 74 5b 69 4f 66 66  ICmp(&zText[iOff
4320: 73 65 74 5b 69 5d 5d 2c 7a 2c 6e 29 3d 3d 30 20  set[i]],z,n)==0 
4330: 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 20  ){.      return 
4340: 69 56 61 6c 75 65 5b 69 5d 3b 0a 20 20 20 20 7d  iValue[i];.    }
4350: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 64 66  .  }.  return df
4360: 6c 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74  lt;.}../*.** Int
4370: 65 72 70 72 65 74 20 74 68 65 20 67 69 76 65 6e  erpret the given
4380: 20 73 74 72 69 6e 67 20 61 73 20 61 20 62 6f 6f   string as a boo
4390: 6c 65 61 6e 20 76 61 6c 75 65 2e 0a 2a 2f 0a 75  lean value..*/.u
43a0: 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  8 sqlite3GetBool
43b0: 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ean(const char *
43c0: 7a 2c 20 75 38 20 64 66 6c 74 29 7b 0a 20 20 72  z, u8 dflt){.  r
43d0: 65 74 75 72 6e 20 67 65 74 53 61 66 65 74 79 4c  eturn getSafetyL
43e0: 65 76 65 6c 28 7a 2c 31 2c 64 66 6c 74 29 21 3d  evel(z,1,dflt)!=
43f0: 30 3b 0a 7d 0a 0a 2f 2a 20 54 68 65 20 73 71 6c  0;.}../* The sql
4400: 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 29  ite3GetBoolean()
4410: 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73 65   function is use
4420: 64 20 62 79 20 6f 74 68 65 72 20 6d 6f 64 75 6c  d by other modul
4430: 65 73 20 62 75 74 20 74 68 65 0a 2a 2a 20 72 65  es but the.** re
4440: 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 69 73 20  mainder of this 
4450: 66 69 6c 65 20 69 73 20 73 70 65 63 69 66 69 63  file is specific
4460: 20 74 6f 20 50 52 41 47 4d 41 20 70 72 6f 63 65   to PRAGMA proce
4470: 73 73 69 6e 67 2e 20 20 53 6f 20 6f 6d 69 74 0a  ssing.  So omit.
4480: 2a 2a 20 74 68 65 20 72 65 73 74 20 6f 66 20 74  ** the rest of t
4490: 68 65 20 66 69 6c 65 20 69 66 20 50 52 41 47 4d  he file if PRAGM
44a0: 41 73 20 61 72 65 20 6f 6d 69 74 74 65 64 20 66  As are omitted f
44b0: 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a 2a  rom the build..*
44c0: 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  /.#if !defined(S
44d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d  QLITE_OMIT_PRAGM
44e0: 41 29 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70  A)../*.** Interp
44f0: 72 65 74 20 74 68 65 20 67 69 76 65 6e 20 73 74  ret the given st
4500: 72 69 6e 67 20 61 73 20 61 20 6c 6f 63 6b 69 6e  ring as a lockin
4510: 67 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a 2a 2f  g mode value..*/
4520: 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 4c  .static int getL
4530: 6f 63 6b 69 6e 67 4d 6f 64 65 28 63 6f 6e 73 74  ockingMode(const
4540: 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 66 28   char *z){.  if(
4550: 20 7a 20 29 7b 0a 20 20 20 20 69 66 28 20 30 3d   z ){.    if( 0=
4560: 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28  =sqlite3StrICmp(
4570: 7a 2c 20 22 65 78 63 6c 75 73 69 76 65 22 29 20  z, "exclusive") 
4580: 29 20 72 65 74 75 72 6e 20 50 41 47 45 52 5f 4c  ) return PAGER_L
4590: 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c 55  OCKINGMODE_EXCLU
45a0: 53 49 56 45 3b 0a 20 20 20 20 69 66 28 20 30 3d  SIVE;.    if( 0=
45b0: 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28  =sqlite3StrICmp(
45c0: 7a 2c 20 22 6e 6f 72 6d 61 6c 22 29 20 29 20 72  z, "normal") ) r
45d0: 65 74 75 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b  eturn PAGER_LOCK
45e0: 49 4e 47 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 3b 0a  INGMODE_NORMAL;.
45f0: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 50 41 47    }.  return PAG
4600: 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 51  ER_LOCKINGMODE_Q
4610: 55 45 52 59 3b 0a 7d 0a 0a 23 69 66 6e 64 65 66  UERY;.}..#ifndef
4620: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
4630: 4f 56 41 43 55 55 4d 0a 2f 2a 0a 2a 2a 20 49 6e  OVACUUM./*.** In
4640: 74 65 72 70 72 65 74 20 74 68 65 20 67 69 76 65  terpret the give
4650: 6e 20 73 74 72 69 6e 67 20 61 73 20 61 6e 20 61  n string as an a
4660: 75 74 6f 2d 76 61 63 75 75 6d 20 6d 6f 64 65 20  uto-vacuum mode 
4670: 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68 65  value..**.** The
4680: 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 69 6e   following strin
4690: 67 73 2c 20 22 6e 6f 6e 65 22 2c 20 22 66 75 6c  gs, "none", "ful
46a0: 6c 22 20 61 6e 64 20 22 69 6e 63 72 65 6d 65 6e  l" and "incremen
46b0: 74 61 6c 22 20 61 72 65 20 0a 2a 2a 20 61 63 63  tal" are .** acc
46c0: 65 70 74 61 62 6c 65 2c 20 61 73 20 61 72 65 20  eptable, as are 
46d0: 74 68 65 69 72 20 6e 75 6d 65 72 69 63 20 65 71  their numeric eq
46e0: 75 69 76 61 6c 65 6e 74 73 3a 20 30 2c 20 31 20  uivalents: 0, 1 
46f0: 61 6e 64 20 32 20 72 65 73 70 65 63 74 69 76 65  and 2 respective
4700: 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ly..*/.static in
4710: 74 20 67 65 74 41 75 74 6f 56 61 63 75 75 6d 28  t getAutoVacuum(
4720: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a  const char *z){.
4730: 20 20 69 6e 74 20 69 3b 0a 20 20 69 66 28 20 30    int i;.  if( 0
4740: 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ==sqlite3StrICmp
4750: 28 7a 2c 20 22 6e 6f 6e 65 22 29 20 29 20 72 65  (z, "none") ) re
4760: 74 75 72 6e 20 42 54 52 45 45 5f 41 55 54 4f 56  turn BTREE_AUTOV
4770: 41 43 55 55 4d 5f 4e 4f 4e 45 3b 0a 20 20 69 66  ACUUM_NONE;.  if
4780: 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74 72 49  ( 0==sqlite3StrI
4790: 43 6d 70 28 7a 2c 20 22 66 75 6c 6c 22 29 20 29  Cmp(z, "full") )
47a0: 20 72 65 74 75 72 6e 20 42 54 52 45 45 5f 41 55   return BTREE_AU
47b0: 54 4f 56 41 43 55 55 4d 5f 46 55 4c 4c 3b 0a 20  TOVACUUM_FULL;. 
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 69 6e 63 72 65  trICmp(z, "incre
47e0: 6d 65 6e 74 61 6c 22 29 20 29 20 72 65 74 75 72  mental") ) retur
47f0: 6e 20 42 54 52 45 45 5f 41 55 54 4f 56 41 43 55  n BTREE_AUTOVACU
4800: 55 4d 5f 49 4e 43 52 3b 0a 20 20 69 20 3d 20 73  UM_INCR;.  i = s
4810: 71 6c 69 74 65 33 41 74 6f 69 28 7a 29 3b 0a 20  qlite3Atoi(z);. 
4820: 20 72 65 74 75 72 6e 20 28 75 38 29 28 28 69 3e   return (u8)((i>
4830: 3d 30 26 26 69 3c 3d 32 29 3f 69 3a 30 29 3b 0a  =0&&i<=2)?i:0);.
4840: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e 64  }.#endif /* ifnd
4850: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41  ef SQLITE_OMIT_A
4860: 55 54 4f 56 41 43 55 55 4d 20 2a 2f 0a 0a 23 69  UTOVACUUM */..#i
4870: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
4880: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a  T_PAGER_PRAGMAS.
4890: 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20  /*.** Interpret 
48a0: 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67  the given string
48b0: 20 61 73 20 61 20 74 65 6d 70 20 64 62 20 6c 6f   as a temp db lo
48c0: 63 61 74 69 6f 6e 2e 20 52 65 74 75 72 6e 20 31  cation. Return 1
48d0: 20 66 6f 72 20 66 69 6c 65 0a 2a 2a 20 62 61 63   for file.** bac
48e0: 6b 65 64 20 74 65 6d 70 6f 72 61 72 79 20 64 61  ked temporary da
48f0: 74 61 62 61 73 65 73 2c 20 32 20 66 6f 72 20 74  tabases, 2 for t
4900: 68 65 20 52 65 64 2d 42 6c 61 63 6b 20 74 72 65  he Red-Black tre
4910: 65 20 69 6e 20 6d 65 6d 6f 72 79 20 64 61 74 61  e in memory data
4920: 62 61 73 65 0a 2a 2a 20 61 6e 64 20 30 20 74 6f  base.** and 0 to
4930: 20 75 73 65 20 74 68 65 20 63 6f 6d 70 69 6c 65   use the compile
4940: 2d 74 69 6d 65 20 64 65 66 61 75 6c 74 2e 0a 2a  -time default..*
4950: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65 74  /.static int get
4960: 54 65 6d 70 53 74 6f 72 65 28 63 6f 6e 73 74 20  TempStore(const 
4970: 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 66 28 20  char *z){.  if( 
4980: 7a 5b 30 5d 3e 3d 27 30 27 20 26 26 20 7a 5b 30  z[0]>='0' && z[0
4990: 5d 3c 3d 27 32 27 20 29 7b 0a 20 20 20 20 72 65  ]<='2' ){.    re
49a0: 74 75 72 6e 20 7a 5b 30 5d 20 2d 20 27 30 27 3b  turn z[0] - '0';
49b0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c  .  }else if( sql
49c0: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22  ite3StrICmp(z, "
49d0: 66 69 6c 65 22 29 3d 3d 30 20 29 7b 0a 20 20 20  file")==0 ){.   
49e0: 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 65 6c   return 1;.  }el
49f0: 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  se if( sqlite3St
4a00: 72 49 43 6d 70 28 7a 2c 20 22 6d 65 6d 6f 72 79  rICmp(z, "memory
4a10: 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65 74  ")==0 ){.    ret
4a20: 75 72 6e 20 32 3b 0a 20 20 7d 65 6c 73 65 7b 0a  urn 2;.  }else{.
4a30: 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20 20      return 0;.  
4a40: 7d 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  }.}.#endif /* SQ
4a50: 4c 49 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d  LITE_PAGER_PRAGM
4a60: 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  AS */..#ifndef S
4a70: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
4a80: 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49  _PRAGMAS./*.** I
4a90: 6e 76 61 6c 69 64 61 74 65 20 74 65 6d 70 20 73  nvalidate temp s
4aa0: 74 6f 72 61 67 65 2c 20 65 69 74 68 65 72 20 77  torage, either w
4ab0: 68 65 6e 20 74 68 65 20 74 65 6d 70 20 73 74 6f  hen the temp sto
4ac0: 72 61 67 65 20 69 73 20 63 68 61 6e 67 65 64 0a  rage is changed.
4ad0: 2a 2a 20 66 72 6f 6d 20 64 65 66 61 75 6c 74 2c  ** from default,
4ae0: 20 6f 72 20 77 68 65 6e 20 27 66 69 6c 65 27 20   or when 'file' 
4af0: 61 6e 64 20 74 68 65 20 74 65 6d 70 5f 73 74 6f  and the temp_sto
4b00: 72 65 5f 64 69 72 65 63 74 6f 72 79 20 68 61 73  re_directory has
4b10: 20 63 68 61 6e 67 65 64 0a 2a 2f 0a 73 74 61 74   changed.*/.stat
4b20: 69 63 20 69 6e 74 20 69 6e 76 61 6c 69 64 61 74  ic int invalidat
4b30: 65 54 65 6d 70 53 74 6f 72 61 67 65 28 50 61 72  eTempStorage(Par
4b40: 73 65 20 2a 70 50 61 72 73 65 29 7b 0a 20 20 73  se *pParse){.  s
4b50: 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 50 61  qlite3 *db = pPa
4b60: 72 73 65 2d 3e 64 62 3b 0a 20 20 69 66 28 20 64  rse->db;.  if( d
4b70: 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 21 3d 30  b->aDb[1].pBt!=0
4b80: 20 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62 2d   ){.    if( !db-
4b90: 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20 73  >autoCommit || s
4ba0: 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e 52  qlite3BtreeIsInR
4bb0: 65 61 64 54 72 61 6e 73 28 64 62 2d 3e 61 44 62  eadTrans(db->aDb
4bc0: 5b 31 5d 2e 70 42 74 29 20 29 7b 0a 20 20 20 20  [1].pBt) ){.    
4bd0: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73    sqlite3ErrorMs
4be0: 67 28 70 50 61 72 73 65 2c 20 22 74 65 6d 70 6f  g(pParse, "tempo
4bf0: 72 61 72 79 20 73 74 6f 72 61 67 65 20 63 61 6e  rary storage can
4c00: 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20 22  not be changed "
4c10: 0a 20 20 20 20 20 20 20 20 22 66 72 6f 6d 20 77  .        "from w
4c20: 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63 74  ithin a transact
4c30: 69 6f 6e 22 29 3b 0a 20 20 20 20 20 20 72 65 74  ion");.      ret
4c40: 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f 52  urn SQLITE_ERROR
4c50: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  ;.    }.    sqli
4c60: 74 65 33 42 74 72 65 65 43 6c 6f 73 65 28 64 62  te3BtreeClose(db
4c70: 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 29 3b 0a 20  ->aDb[1].pBt);. 
4c80: 20 20 20 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 42     db->aDb[1].pB
4c90: 74 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69 74  t = 0;.    sqlit
4ca0: 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d 61  e3ResetAllSchema
4cb0: 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64 62  sOfConnection(db
4cc0: 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20  );.  }.  return 
4cd0: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e  SQLITE_OK;.}.#en
4ce0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41  dif /* SQLITE_PA
4cf0: 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  GER_PRAGMAS */..
4d00: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
4d10: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
4d20: 53 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20 54  S./*.** If the T
4d30: 45 4d 50 20 64 61 74 61 62 61 73 65 20 69 73 20  EMP database is 
4d40: 6f 70 65 6e 2c 20 63 6c 6f 73 65 20 69 74 20 61  open, close it a
4d50: 6e 64 20 6d 61 72 6b 20 74 68 65 20 64 61 74 61  nd mark the data
4d60: 62 61 73 65 20 73 63 68 65 6d 61 0a 2a 2a 20 61  base schema.** a
4d70: 73 20 6e 65 65 64 69 6e 67 20 72 65 6c 6f 61 64  s needing reload
4d80: 69 6e 67 2e 20 20 54 68 69 73 20 6d 75 73 74 20  ing.  This must 
4d90: 62 65 20 64 6f 6e 65 20 77 68 65 6e 20 75 73 69  be done when usi
4da0: 6e 67 20 74 68 65 20 53 51 4c 49 54 45 5f 54 45  ng the SQLITE_TE
4db0: 4d 50 5f 53 54 4f 52 45 0a 2a 2a 20 6f 72 20 44  MP_STORE.** or D
4dc0: 45 46 41 55 4c 54 5f 54 45 4d 50 5f 53 54 4f 52  EFAULT_TEMP_STOR
4dd0: 45 20 70 72 61 67 6d 61 73 2e 0a 2a 2f 0a 73 74  E pragmas..*/.st
4de0: 61 74 69 63 20 69 6e 74 20 63 68 61 6e 67 65 54  atic int changeT
4df0: 65 6d 70 53 74 6f 72 61 67 65 28 50 61 72 73 65  empStorage(Parse
4e00: 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20   *pParse, const 
4e10: 63 68 61 72 20 2a 7a 53 74 6f 72 61 67 65 54 79  char *zStorageTy
4e20: 70 65 29 7b 0a 20 20 69 6e 74 20 74 73 20 3d 20  pe){.  int ts = 
4e30: 67 65 74 54 65 6d 70 53 74 6f 72 65 28 7a 53 74  getTempStore(zSt
4e40: 6f 72 61 67 65 54 79 70 65 29 3b 0a 20 20 73 71  orageType);.  sq
4e50: 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 50 61 72  lite3 *db = pPar
4e60: 73 65 2d 3e 64 62 3b 0a 20 20 69 66 28 20 64 62  se->db;.  if( db
4e70: 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3d 3d 74 73  ->temp_store==ts
4e80: 20 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45   ) return SQLITE
4e90: 5f 4f 4b 3b 0a 20 20 69 66 28 20 69 6e 76 61 6c  _OK;.  if( inval
4ea0: 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65  idateTempStorage
4eb0: 28 20 70 50 61 72 73 65 20 29 20 21 3d 20 53 51  ( pParse ) != SQ
4ec0: 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 72  LITE_OK ){.    r
4ed0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52  eturn SQLITE_ERR
4ee0: 4f 52 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 74 65  OR;.  }.  db->te
4ef0: 6d 70 5f 73 74 6f 72 65 20 3d 20 28 75 38 29 74  mp_store = (u8)t
4f00: 73 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c 49  s;.  return SQLI
4f10: 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 20  TE_OK;.}.#endif 
4f20: 2f 2a 20 53 51 4c 49 54 45 5f 50 41 47 45 52 5f  /* SQLITE_PAGER_
4f30: 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 2f 2a 0a 2a  PRAGMAS */../*.*
4f40: 2a 20 47 65 6e 65 72 61 74 65 20 63 6f 64 65 20  * Generate code 
4f50: 74 6f 20 72 65 74 75 72 6e 20 61 20 73 69 6e 67  to return a sing
4f60: 6c 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75 65  le integer value
4f70: 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69 64  ..*/.static void
4f80: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
4f90: 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
4fa0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 61 62  const char *zLab
4fb0: 65 6c 2c 20 69 36 34 20 76 61 6c 75 65 29 7b 0a  el, i64 value){.
4fc0: 20 20 56 64 62 65 20 2a 76 20 3d 20 73 71 6c 69    Vdbe *v = sqli
4fd0: 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73  te3GetVdbe(pPars
4fe0: 65 29 3b 0a 20 20 69 6e 74 20 6d 65 6d 20 3d 20  e);.  int mem = 
4ff0: 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a  ++pParse->nMem;.
5000: 20 20 69 36 34 20 2a 70 49 36 34 20 3d 20 73 71    i64 *pI64 = sq
5010: 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61 77  lite3DbMallocRaw
5020: 28 70 50 61 72 73 65 2d 3e 64 62 2c 20 73 69 7a  (pParse->db, siz
5030: 65 6f 66 28 76 61 6c 75 65 29 29 3b 0a 20 20 69  eof(value));.  i
5040: 66 28 20 70 49 36 34 20 29 7b 0a 20 20 20 20 6d  f( pI64 ){.    m
5050: 65 6d 63 70 79 28 70 49 36 34 2c 20 26 76 61 6c  emcpy(pI64, &val
5060: 75 65 2c 20 73 69 7a 65 6f 66 28 76 61 6c 75 65  ue, sizeof(value
5070: 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74 65  ));.  }.  sqlite
5080: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
5090: 50 5f 49 6e 74 36 34 2c 20 30 2c 20 6d 65 6d 2c  P_Int64, 0, mem,
50a0: 20 30 2c 20 28 63 68 61 72 2a 29 70 49 36 34 2c   0, (char*)pI64,
50b0: 20 50 34 5f 49 4e 54 36 34 29 3b 0a 20 20 73 71   P4_INT64);.  sq
50c0: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
50d0: 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 73 71 6c  ols(v, 1);.  sql
50e0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
50f0: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
5100: 5f 4e 41 4d 45 2c 20 7a 4c 61 62 65 6c 2c 20 53  _NAME, zLabel, S
5110: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
5120: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
5130: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
5140: 6f 77 2c 20 6d 65 6d 2c 20 31 29 3b 0a 7d 0a 0a  ow, mem, 1);.}..
5150: 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20 73  ./*.** Set the s
5160: 61 66 65 74 79 5f 6c 65 76 65 6c 20 61 6e 64 20  afety_level and 
5170: 70 61 67 65 72 20 66 6c 61 67 73 20 66 6f 72 20  pager flags for 
5180: 70 61 67 65 72 20 69 44 62 2e 20 20 4f 72 20 69  pager iDb.  Or i
5190: 66 20 69 44 62 3c 30 0a 2a 2a 20 73 65 74 20 74  f iDb<0.** set t
51a0: 68 65 73 65 20 76 61 6c 75 65 73 20 66 6f 72 20  hese values for 
51b0: 61 6c 6c 20 70 61 67 65 72 73 2e 0a 2a 2f 0a 23  all pagers..*/.#
51c0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
51d0: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
51e0: 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 65 74  .static void set
51f0: 41 6c 6c 50 61 67 65 72 46 6c 61 67 73 28 73 71  AllPagerFlags(sq
5200: 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69 66  lite3 *db){.  if
5210: 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74  ( db->autoCommit
5220: 20 29 7b 0a 20 20 20 20 44 62 20 2a 70 44 62 20   ){.    Db *pDb 
5230: 3d 20 64 62 2d 3e 61 44 62 3b 0a 20 20 20 20 69  = db->aDb;.    i
5240: 6e 74 20 6e 20 3d 20 64 62 2d 3e 6e 44 62 3b 0a  nt n = db->nDb;.
5250: 20 20 20 20 61 73 73 65 72 74 28 20 53 51 4c 49      assert( SQLI
5260: 54 45 5f 46 75 6c 6c 46 53 79 6e 63 3d 3d 50 41  TE_FullFSync==PA
5270: 47 45 52 5f 46 55 4c 4c 46 53 59 4e 43 20 29 3b  GER_FULLFSYNC );
5280: 0a 20 20 20 20 61 73 73 65 72 74 28 20 53 51 4c  .    assert( SQL
5290: 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79 6e  ITE_CkptFullFSyn
52a0: 63 3d 3d 50 41 47 45 52 5f 43 4b 50 54 5f 46 55  c==PAGER_CKPT_FU
52b0: 4c 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20 20 61  LLFSYNC );.    a
52c0: 73 73 65 72 74 28 20 53 51 4c 49 54 45 5f 43 61  ssert( SQLITE_Ca
52d0: 63 68 65 53 70 69 6c 6c 3d 3d 50 41 47 45 52 5f  cheSpill==PAGER_
52e0: 43 41 43 48 45 53 50 49 4c 4c 20 29 3b 0a 20 20  CACHESPILL );.  
52f0: 20 20 61 73 73 65 72 74 28 20 28 50 41 47 45 52    assert( (PAGER
5300: 5f 46 55 4c 4c 46 53 59 4e 43 20 7c 20 50 41 47  _FULLFSYNC | PAG
5310: 45 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e  ER_CKPT_FULLFSYN
5320: 43 20 7c 20 50 41 47 45 52 5f 43 41 43 48 45 53  C | PAGER_CACHES
5330: 50 49 4c 4c 29 0a 20 20 20 20 20 20 20 20 20 20  PILL).          
5340: 20 20 20 3d 3d 20 20 50 41 47 45 52 5f 46 4c 41     ==  PAGER_FLA
5350: 47 53 5f 4d 41 53 4b 20 29 3b 0a 20 20 20 20 61  GS_MASK );.    a
5360: 73 73 65 72 74 28 20 28 70 44 62 2d 3e 73 61 66  ssert( (pDb->saf
5370: 65 74 79 5f 6c 65 76 65 6c 20 26 20 50 41 47 45  ety_level & PAGE
5380: 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 4d 41  R_SYNCHRONOUS_MA
5390: 53 4b 29 3d 3d 70 44 62 2d 3e 73 61 66 65 74 79  SK)==pDb->safety
53a0: 5f 6c 65 76 65 6c 20 29 3b 0a 20 20 20 20 77 68  _level );.    wh
53b0: 69 6c 65 28 20 28 6e 2d 2d 29 20 3e 20 30 20 29  ile( (n--) > 0 )
53c0: 7b 0a 20 20 20 20 20 20 69 66 28 20 70 44 62 2d  {.      if( pDb-
53d0: 3e 70 42 74 20 29 7b 0a 20 20 20 20 20 20 20 20  >pBt ){.        
53e0: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 50  sqlite3BtreeSetP
53f0: 61 67 65 72 46 6c 61 67 73 28 70 44 62 2d 3e 70  agerFlags(pDb->p
5400: 42 74 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  Bt,.            
5410: 20 20 20 20 20 70 44 62 2d 3e 73 61 66 65 74 79       pDb->safety
5420: 5f 6c 65 76 65 6c 20 7c 20 28 64 62 2d 3e 66 6c  _level | (db->fl
5430: 61 67 73 20 26 20 50 41 47 45 52 5f 46 4c 41 47  ags & PAGER_FLAG
5440: 53 5f 4d 41 53 4b 29 20 29 3b 0a 20 20 20 20 20  S_MASK) );.     
5450: 20 7d 0a 20 20 20 20 20 20 70 44 62 2b 2b 3b 0a   }.      pDb++;.
5460: 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 23 65 6c 73      }.  }.}.#els
5470: 65 0a 23 20 64 65 66 69 6e 65 20 73 65 74 41 6c  e.# define setAl
5480: 6c 50 61 67 65 72 46 6c 61 67 73 28 58 29 20 20  lPagerFlags(X)  
5490: 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64  /* no-op */.#end
54a0: 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  if.../*.** Retur
54b0: 6e 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62  n a human-readab
54c0: 6c 65 20 6e 61 6d 65 20 66 6f 72 20 61 20 63 6f  le name for a co
54d0: 6e 73 74 72 61 69 6e 74 20 72 65 73 6f 6c 75 74  nstraint resolut
54e0: 69 6f 6e 20 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 23  ion action..*/.#
54f0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
5500: 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 73  IT_FOREIGN_KEY.s
5510: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
5520: 20 2a 61 63 74 69 6f 6e 4e 61 6d 65 28 75 38 20   *actionName(u8 
5530: 61 63 74 69 6f 6e 29 7b 0a 20 20 63 6f 6e 73 74  action){.  const
5540: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20   char *zName;.  
5550: 73 77 69 74 63 68 28 20 61 63 74 69 6f 6e 20 29  switch( action )
5560: 7b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 53 65  {.    case OE_Se
5570: 74 4e 75 6c 6c 3a 20 20 7a 4e 61 6d 65 20 3d 20  tNull:  zName = 
5580: 22 53 45 54 20 4e 55 4c 4c 22 3b 20 20 20 20 20  "SET NULL";     
5590: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
55a0: 73 65 20 4f 45 5f 53 65 74 44 66 6c 74 3a 20 20  se OE_SetDflt:  
55b0: 7a 4e 61 6d 65 20 3d 20 22 53 45 54 20 44 45 46  zName = "SET DEF
55c0: 41 55 4c 54 22 3b 20 20 20 20 20 62 72 65 61 6b  AULT";     break
55d0: 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 43 61  ;.    case OE_Ca
55e0: 73 63 61 64 65 3a 20 20 7a 4e 61 6d 65 20 3d 20  scade:  zName = 
55f0: 22 43 41 53 43 41 44 45 22 3b 20 20 20 20 20 20  "CASCADE";      
5600: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
5610: 73 65 20 4f 45 5f 52 65 73 74 72 69 63 74 3a 20  se OE_Restrict: 
5620: 7a 4e 61 6d 65 20 3d 20 22 52 45 53 54 52 49 43  zName = "RESTRIC
5630: 54 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b  T";        break
5640: 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20  ;.    default:  
5650: 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20          zName = 
5660: 22 4e 4f 20 41 43 54 49 4f 4e 22 3b 20 20 0a 20  "NO ACTION";  . 
5670: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5680: 20 20 20 20 20 61 73 73 65 72 74 28 20 61 63 74       assert( act
5690: 69 6f 6e 3d 3d 4f 45 5f 4e 6f 6e 65 20 29 3b 20  ion==OE_None ); 
56a0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 72 65 74  break;.  }.  ret
56b0: 75 72 6e 20 7a 4e 61 6d 65 3b 0a 7d 0a 23 65 6e  urn zName;.}.#en
56c0: 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 50 61 72 61  dif.../*.** Para
56d0: 6d 65 74 65 72 20 65 4d 6f 64 65 20 6d 75 73 74  meter eMode must
56e0: 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 50   be one of the P
56f0: 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
5700: 5f 58 58 58 20 63 6f 6e 73 74 61 6e 74 73 0a 2a  _XXX constants.*
5710: 2a 20 64 65 66 69 6e 65 64 20 69 6e 20 70 61 67  * defined in pag
5720: 65 72 2e 68 2e 20 54 68 69 73 20 66 75 6e 63 74  er.h. This funct
5730: 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
5740: 61 73 73 6f 63 69 61 74 65 64 20 6c 6f 77 65 72  associated lower
5750: 63 61 73 65 0a 2a 2a 20 6a 6f 75 72 6e 61 6c 2d  case.** journal-
5760: 6d 6f 64 65 20 6e 61 6d 65 2e 0a 2a 2f 0a 63 6f  mode name..*/.co
5770: 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
5780: 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65  3JournalModename
5790: 28 69 6e 74 20 65 4d 6f 64 65 29 7b 0a 20 20 73  (int eMode){.  s
57a0: 74 61 74 69 63 20 63 68 61 72 20 2a 20 63 6f 6e  tatic char * con
57b0: 73 74 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b 5d 20  st azModeName[] 
57c0: 3d 20 7b 0a 20 20 20 20 22 64 65 6c 65 74 65 22  = {.    "delete"
57d0: 2c 20 22 70 65 72 73 69 73 74 22 2c 20 22 6f 66  , "persist", "of
57e0: 66 22 2c 20 22 74 72 75 6e 63 61 74 65 22 2c 20  f", "truncate", 
57f0: 22 6d 65 6d 6f 72 79 22 0a 23 69 66 6e 64 65 66  "memory".#ifndef
5800: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
5810: 0a 20 20 20 20 20 2c 20 22 77 61 6c 22 0a 23 65  .     , "wal".#e
5820: 6e 64 69 66 0a 20 20 7d 3b 0a 20 20 61 73 73 65  ndif.  };.  asse
5830: 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  rt( PAGER_JOURNA
5840: 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 3d 3d 30 20  LMODE_DELETE==0 
5850: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47  );.  assert( PAG
5860: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50  ER_JOURNALMODE_P
5870: 45 52 53 49 53 54 3d 3d 31 20 29 3b 0a 20 20 61  ERSIST==1 );.  a
5880: 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55  ssert( PAGER_JOU
5890: 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 3d 3d 32 20  RNALMODE_OFF==2 
58a0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47  );.  assert( PAG
58b0: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54  ER_JOURNALMODE_T
58c0: 52 55 4e 43 41 54 45 3d 3d 33 20 29 3b 0a 20 20  RUNCATE==3 );.  
58d0: 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f  assert( PAGER_JO
58e0: 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59  URNALMODE_MEMORY
58f0: 3d 3d 34 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==4 );.  assert(
5900: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
5910: 44 45 5f 57 41 4c 3d 3d 35 20 29 3b 0a 20 20 61  DE_WAL==5 );.  a
5920: 73 73 65 72 74 28 20 65 4d 6f 64 65 3e 3d 30 20  ssert( eMode>=0 
5930: 26 26 20 65 4d 6f 64 65 3c 3d 41 72 72 61 79 53  && eMode<=ArrayS
5940: 69 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29 20  ize(azModeName) 
5950: 29 3b 0a 0a 20 20 69 66 28 20 65 4d 6f 64 65 3d  );..  if( eMode=
5960: 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 4d 6f 64  =ArraySize(azMod
5970: 65 4e 61 6d 65 29 20 29 20 72 65 74 75 72 6e 20  eName) ) return 
5980: 30 3b 0a 20 20 72 65 74 75 72 6e 20 61 7a 4d 6f  0;.  return azMo
5990: 64 65 4e 61 6d 65 5b 65 4d 6f 64 65 5d 3b 0a 7d  deName[eMode];.}
59a0: 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 20  ../*.** Process 
59b0: 61 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65  a pragma stateme
59c0: 6e 74 2e 20 20 0a 2a 2a 0a 2a 2a 20 50 72 61 67  nt.  .**.** Prag
59d0: 6d 61 73 20 61 72 65 20 6f 66 20 74 68 69 73 20  mas are of this 
59e0: 66 6f 72 6d 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  form:.**.**     
59f0: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
5a00: 65 2e 5d 69 64 20 5b 3d 20 76 61 6c 75 65 5d 0a  e.]id [= value].
5a10: 2a 2a 0a 2a 2a 20 54 68 65 20 69 64 65 6e 74 69  **.** The identi
5a20: 66 69 65 72 20 6d 69 67 68 74 20 61 6c 73 6f 20  fier might also 
5a30: 62 65 20 61 20 73 74 72 69 6e 67 2e 20 20 54 68  be a string.  Th
5a40: 65 20 76 61 6c 75 65 20 69 73 20 61 20 73 74 72  e value is a str
5a50: 69 6e 67 2c 20 61 6e 64 0a 2a 2a 20 69 64 65 6e  ing, and.** iden
5a60: 74 69 66 69 65 72 2c 20 6f 72 20 61 20 6e 75 6d  tifier, or a num
5a70: 62 65 72 2e 20 20 49 66 20 6d 69 6e 75 73 46 6c  ber.  If minusFl
5a80: 61 67 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e  ag is true, then
5a90: 20 74 68 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a   the value is.**
5aa0: 20 61 20 6e 75 6d 62 65 72 20 74 68 61 74 20 77   a number that w
5ab0: 61 73 20 70 72 65 63 65 64 65 64 20 62 79 20 61  as preceded by a
5ac0: 20 6d 69 6e 75 73 20 73 69 67 6e 2e 0a 2a 2a 0a   minus sign..**.
5ad0: 2a 2a 20 49 66 20 74 68 65 20 6c 65 66 74 20 73  ** If the left s
5ae0: 69 64 65 20 69 73 20 22 64 61 74 61 62 61 73 65  ide is "database
5af0: 2e 69 64 22 20 74 68 65 6e 20 70 49 64 31 20 69  .id" then pId1 i
5b00: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6e  s the database n
5b10: 61 6d 65 0a 2a 2a 20 61 6e 64 20 70 49 64 32 20  ame.** and pId2 
5b20: 69 73 20 74 68 65 20 69 64 2e 20 20 49 66 20 74  is the id.  If t
5b30: 68 65 20 6c 65 66 74 20 73 69 64 65 20 69 73 20  he left side is 
5b40: 6a 75 73 74 20 22 69 64 22 20 74 68 65 6e 20 70  just "id" then p
5b50: 49 64 31 20 69 73 20 74 68 65 0a 2a 2a 20 69 64  Id1 is the.** id
5b60: 20 61 6e 64 20 70 49 64 32 20 69 73 20 61 6e 79   and pId2 is any
5b70: 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0a 2a   empty string..*
5b80: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  /.void sqlite3Pr
5b90: 61 67 6d 61 28 0a 20 20 50 61 72 73 65 20 2a 70  agma(.  Parse *p
5ba0: 50 61 72 73 65 2c 20 0a 20 20 54 6f 6b 65 6e 20  Parse, .  Token 
5bb0: 2a 70 49 64 31 2c 20 20 20 20 20 20 20 20 2f 2a  *pId1,        /*
5bc0: 20 46 69 72 73 74 20 70 61 72 74 20 6f 66 20 5b   First part of [
5bd0: 64 61 74 61 62 61 73 65 2e 5d 69 64 20 66 69 65  database.]id fie
5be0: 6c 64 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70  ld */.  Token *p
5bf0: 49 64 32 2c 20 20 20 20 20 20 20 20 2f 2a 20 53  Id2,        /* S
5c00: 65 63 6f 6e 64 20 70 61 72 74 20 6f 66 20 5b 64  econd part of [d
5c10: 61 74 61 62 61 73 65 2e 5d 69 64 20 66 69 65 6c  atabase.]id fiel
5c20: 64 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  d, or NULL */.  
5c30: 54 6f 6b 65 6e 20 2a 70 56 61 6c 75 65 2c 20 20  Token *pValue,  
5c40: 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 66 6f 72      /* Token for
5c50: 20 3c 76 61 6c 75 65 3e 2c 20 6f 72 20 4e 55 4c   <value>, or NUL
5c60: 4c 20 2a 2f 0a 20 20 69 6e 74 20 6d 69 6e 75 73  L */.  int minus
5c70: 46 6c 61 67 20 20 20 20 20 20 20 2f 2a 20 54 72  Flag       /* Tr
5c80: 75 65 20 69 66 20 61 20 27 2d 27 20 73 69 67 6e  ue if a '-' sign
5c90: 20 70 72 65 63 65 64 65 64 20 3c 76 61 6c 75 65   preceded <value
5ca0: 3e 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 2a  > */.){.  char *
5cb0: 7a 4c 65 66 74 20 3d 20 30 3b 20 20 20 20 20 20  zLeft = 0;      
5cc0: 20 2f 2a 20 4e 75 6c 2d 74 65 72 6d 69 6e 61 74   /* Nul-terminat
5cd0: 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20  ed UTF-8 string 
5ce0: 3c 69 64 3e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  <id> */.  char *
5cf0: 7a 52 69 67 68 74 20 3d 20 30 3b 20 20 20 20 20  zRight = 0;     
5d00: 20 2f 2a 20 4e 75 6c 2d 74 65 72 6d 69 6e 61 74   /* Nul-terminat
5d10: 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20  ed UTF-8 string 
5d20: 3c 76 61 6c 75 65 3e 2c 20 6f 72 20 4e 55 4c 4c  <value>, or NULL
5d30: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
5d40: 20 2a 7a 44 62 20 3d 20 30 3b 20 20 20 2f 2a 20   *zDb = 0;   /* 
5d50: 54 68 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d  The database nam
5d60: 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 49  e */.  Token *pI
5d70: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
5d80: 20 50 6f 69 6e 74 65 72 20 74 6f 20 3c 69 64 3e   Pointer to <id>
5d90: 20 74 6f 6b 65 6e 20 2a 2f 0a 20 20 63 68 61 72   token */.  char
5da0: 20 2a 61 46 63 6e 74 6c 5b 34 5d 3b 20 20 20 20   *aFcntl[4];    
5db0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
5dc0: 6f 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50  o SQLITE_FCNTL_P
5dd0: 52 41 47 4d 41 20 2a 2f 0a 20 20 69 6e 74 20 69  RAGMA */.  int i
5de0: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
5df0: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 6e    /* Database in
5e00: 64 65 78 20 66 6f 72 20 3c 64 61 74 61 62 61 73  dex for <databas
5e10: 65 3e 20 2a 2f 0a 20 20 69 6e 74 20 6c 77 72 2c  e> */.  int lwr,
5e20: 20 75 70 72 2c 20 6d 69 64 3b 20 20 20 20 20 20   upr, mid;      
5e30: 20 20 20 20 20 2f 2a 20 42 69 6e 61 72 79 20 73       /* Binary s
5e40: 65 61 72 63 68 20 62 6f 75 6e 64 73 20 2a 2f 0a  earch bounds */.
5e50: 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
5e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5e70: 2a 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 66  * return value f
5e80: 6f 72 6d 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c  orm SQLITE_FCNTL
5e90: 5f 50 52 41 47 4d 41 20 2a 2f 0a 20 20 73 71 6c  _PRAGMA */.  sql
5ea0: 69 74 65 33 20 2a 64 62 20 3d 20 70 50 61 72 73  ite3 *db = pPars
5eb0: 65 2d 3e 64 62 3b 20 20 20 20 2f 2a 20 54 68 65  e->db;    /* The
5ec0: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
5ed0: 74 69 6f 6e 20 2a 2f 0a 20 20 44 62 20 2a 70 44  tion */.  Db *pD
5ee0: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
5ef0: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 70         /* The sp
5f00: 65 63 69 66 69 63 20 64 61 74 61 62 61 73 65 20  ecific database 
5f10: 62 65 69 6e 67 20 70 72 61 67 6d 61 65 64 20 2a  being pragmaed *
5f20: 2f 0a 20 20 56 64 62 65 20 2a 76 20 3d 20 73 71  /.  Vdbe *v = sq
5f30: 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61  lite3GetVdbe(pPa
5f40: 72 73 65 29 3b 20 20 2f 2a 20 50 72 65 70 61 72  rse);  /* Prepar
5f50: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a  ed statement */.
5f60: 0a 20 20 69 66 28 20 76 3d 3d 30 20 29 20 72 65  .  if( v==0 ) re
5f70: 74 75 72 6e 3b 0a 20 20 73 71 6c 69 74 65 33 56  turn;.  sqlite3V
5f80: 64 62 65 52 75 6e 4f 6e 6c 79 4f 6e 63 65 28 76  dbeRunOnlyOnce(v
5f90: 29 3b 0a 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  );.  pParse->nMe
5fa0: 6d 20 3d 20 32 3b 0a 0a 20 20 2f 2a 20 49 6e 74  m = 2;..  /* Int
5fb0: 65 72 70 72 65 74 20 74 68 65 20 5b 64 61 74 61  erpret the [data
5fc0: 62 61 73 65 2e 5d 20 70 61 72 74 20 6f 66 20 74  base.] part of t
5fd0: 68 65 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d  he pragma statem
5fe0: 65 6e 74 2e 20 69 44 62 20 69 73 20 74 68 65 0a  ent. iDb is the.
5ff0: 20 20 2a 2a 20 69 6e 64 65 78 20 6f 66 20 74 68    ** index of th
6000: 65 20 64 61 74 61 62 61 73 65 20 74 68 69 73 20  e database this 
6010: 70 72 61 67 6d 61 20 69 73 20 62 65 69 6e 67 20  pragma is being 
6020: 61 70 70 6c 69 65 64 20 74 6f 20 69 6e 20 64 62  applied to in db
6030: 2e 61 44 62 5b 5d 2e 20 2a 2f 0a 20 20 69 44 62  .aDb[]. */.  iDb
6040: 20 3d 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72   = sqlite3TwoPar
6050: 74 4e 61 6d 65 28 70 50 61 72 73 65 2c 20 70 49  tName(pParse, pI
6060: 64 31 2c 20 70 49 64 32 2c 20 26 70 49 64 29 3b  d1, pId2, &pId);
6070: 0a 20 20 69 66 28 20 69 44 62 3c 30 20 29 20 72  .  if( iDb<0 ) r
6080: 65 74 75 72 6e 3b 0a 20 20 70 44 62 20 3d 20 26  eturn;.  pDb = &
6090: 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 0a 20  db->aDb[iDb];.. 
60a0: 20 2f 2a 20 49 66 20 74 68 65 20 74 65 6d 70 20   /* If the temp 
60b0: 64 61 74 61 62 61 73 65 20 68 61 73 20 62 65 65  database has bee
60c0: 6e 20 65 78 70 6c 69 63 69 74 6c 79 20 6e 61 6d  n explicitly nam
60d0: 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ed as part of th
60e0: 65 20 0a 20 20 2a 2a 20 70 72 61 67 6d 61 2c 20  e .  ** pragma, 
60f0: 6d 61 6b 65 20 73 75 72 65 20 69 74 20 69 73 20  make sure it is 
6100: 6f 70 65 6e 2e 20 0a 20 20 2a 2f 0a 20 20 69 66  open. .  */.  if
6110: 28 20 69 44 62 3d 3d 31 20 26 26 20 73 71 6c 69  ( iDb==1 && sqli
6120: 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62  te3OpenTempDatab
6130: 61 73 65 28 70 50 61 72 73 65 29 20 29 7b 0a 20  ase(pParse) ){. 
6140: 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a     return;.  }..
6150: 20 20 7a 4c 65 66 74 20 3d 20 73 71 6c 69 74 65    zLeft = sqlite
6160: 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64  3NameFromToken(d
6170: 62 2c 20 70 49 64 29 3b 0a 20 20 69 66 28 20 21  b, pId);.  if( !
6180: 7a 4c 65 66 74 20 29 20 72 65 74 75 72 6e 3b 0a  zLeft ) return;.
6190: 20 20 69 66 28 20 6d 69 6e 75 73 46 6c 61 67 20    if( minusFlag 
61a0: 29 7b 0a 20 20 20 20 7a 52 69 67 68 74 20 3d 20  ){.    zRight = 
61b0: 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64  sqlite3MPrintf(d
61c0: 62 2c 20 22 2d 25 54 22 2c 20 70 56 61 6c 75 65  b, "-%T", pValue
61d0: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
61e0: 7a 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65 33  zRight = sqlite3
61f0: 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62  NameFromToken(db
6200: 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d 0a 0a  , pValue);.  }..
6210: 20 20 61 73 73 65 72 74 28 20 70 49 64 32 20 29    assert( pId2 )
6220: 3b 0a 20 20 7a 44 62 20 3d 20 70 49 64 32 2d 3e  ;.  zDb = pId2->
6230: 6e 3e 30 20 3f 20 70 44 62 2d 3e 7a 4e 61 6d 65  n>0 ? pDb->zName
6240: 20 3a 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69   : 0;.  if( sqli
6250: 74 65 33 41 75 74 68 43 68 65 63 6b 28 70 50 61  te3AuthCheck(pPa
6260: 72 73 65 2c 20 53 51 4c 49 54 45 5f 50 52 41 47  rse, SQLITE_PRAG
6270: 4d 41 2c 20 7a 4c 65 66 74 2c 20 7a 52 69 67 68  MA, zLeft, zRigh
6280: 74 2c 20 7a 44 62 29 20 29 7b 0a 20 20 20 20 67  t, zDb) ){.    g
6290: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
62a0: 20 20 7d 0a 0a 20 20 2f 2a 20 53 65 6e 64 20 61    }..  /* Send a
62b0: 6e 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50  n SQLITE_FCNTL_P
62c0: 52 41 47 4d 41 20 66 69 6c 65 2d 63 6f 6e 74 72  RAGMA file-contr
62d0: 6f 6c 20 74 6f 20 74 68 65 20 75 6e 64 65 72 6c  ol to the underl
62e0: 79 69 6e 67 20 56 46 53 0a 20 20 2a 2a 20 63 6f  ying VFS.  ** co
62f0: 6e 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20 69 74  nnection.  If it
6300: 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f   returns SQLITE_
6310: 4f 4b 2c 20 74 68 65 6e 20 61 73 73 75 6d 65 20  OK, then assume 
6320: 74 68 61 74 20 74 68 65 20 56 46 53 0a 20 20 2a  that the VFS.  *
6330: 2a 20 68 61 6e 64 6c 65 64 20 74 68 65 20 70 72  * handled the pr
6340: 61 67 6d 61 20 61 6e 64 20 67 65 6e 65 72 61 74  agma and generat
6350: 65 20 61 20 6e 6f 2d 6f 70 20 70 72 65 70 61 72  e a no-op prepar
6360: 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20  ed statement..  
6370: 2a 2f 0a 20 20 61 46 63 6e 74 6c 5b 30 5d 20 3d  */.  aFcntl[0] =
6380: 20 30 3b 0a 20 20 61 46 63 6e 74 6c 5b 31 5d 20   0;.  aFcntl[1] 
6390: 3d 20 7a 4c 65 66 74 3b 0a 20 20 61 46 63 6e 74  = zLeft;.  aFcnt
63a0: 6c 5b 32 5d 20 3d 20 7a 52 69 67 68 74 3b 0a 20  l[2] = zRight;. 
63b0: 20 61 46 63 6e 74 6c 5b 33 5d 20 3d 20 30 3b 0a   aFcntl[3] = 0;.
63c0: 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65    db->busyHandle
63d0: 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 72  r.nBusy = 0;.  r
63e0: 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65  c = sqlite3_file
63f0: 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62  _control(db, zDb
6400: 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50  , SQLITE_FCNTL_P
6410: 52 41 47 4d 41 2c 20 28 76 6f 69 64 2a 29 61 46  RAGMA, (void*)aF
6420: 63 6e 74 6c 29 3b 0a 20 20 69 66 28 20 72 63 3d  cntl);.  if( rc=
6430: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
6440: 20 20 69 66 28 20 61 46 63 6e 74 6c 5b 30 5d 20    if( aFcntl[0] 
6450: 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6d 65 6d  ){.      int mem
6460: 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65   = ++pParse->nMe
6470: 6d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  m;.      sqlite3
6480: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
6490: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 6d 65 6d  _String8, 0, mem
64a0: 2c 20 30 2c 20 61 46 63 6e 74 6c 5b 30 5d 2c 20  , 0, aFcntl[0], 
64b0: 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0);.      sqlite
64c0: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
64d0: 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  v, 1);.      sql
64e0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
64f0: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
6500: 5f 4e 41 4d 45 2c 20 22 72 65 73 75 6c 74 22 2c  _NAME, "result",
6510: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
6520: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
6530: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
6540: 65 73 75 6c 74 52 6f 77 2c 20 6d 65 6d 2c 20 31  esultRow, mem, 1
6550: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
6560: 5f 66 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d 29  _free(aFcntl[0])
6570: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f  ;.    }.    goto
6580: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d   pragma_out;.  }
6590: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
65a0: 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a 20 20  E_NOTFOUND ){.  
65b0: 20 20 69 66 28 20 61 46 63 6e 74 6c 5b 30 5d 20    if( aFcntl[0] 
65c0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
65d0: 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c  ErrorMsg(pParse,
65e0: 20 22 25 73 22 2c 20 61 46 63 6e 74 6c 5b 30 5d   "%s", aFcntl[0]
65f0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
6600: 5f 66 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d 29  _free(aFcntl[0])
6610: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 50 61 72  ;.    }.    pPar
6620: 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20  se->nErr++;.    
6630: 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b  pParse->rc = rc;
6640: 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61  .    goto pragma
6650: 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _out;.  }..  /* 
6660: 4c 6f 63 61 74 65 20 74 68 65 20 70 72 61 67 6d  Locate the pragm
6670: 61 20 69 6e 20 74 68 65 20 6c 6f 6f 6b 75 70 20  a in the lookup 
6680: 74 61 62 6c 65 20 2a 2f 0a 20 20 6c 77 72 20 3d  table */.  lwr =
6690: 20 30 3b 0a 20 20 75 70 72 20 3d 20 41 72 72 61   0;.  upr = Arra
66a0: 79 53 69 7a 65 28 61 50 72 61 67 6d 61 4e 61 6d  ySize(aPragmaNam
66b0: 65 73 29 2d 31 3b 0a 20 20 77 68 69 6c 65 28 20  es)-1;.  while( 
66c0: 6c 77 72 3c 3d 75 70 72 20 29 7b 0a 20 20 20 20  lwr<=upr ){.    
66d0: 6d 69 64 20 3d 20 28 6c 77 72 2b 75 70 72 29 2f  mid = (lwr+upr)/
66e0: 32 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  2;.    rc = sqli
66f0: 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 4c 65 66  te3_stricmp(zLef
6700: 74 2c 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b  t, aPragmaNames[
6710: 6d 69 64 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20  mid].zName);.   
6720: 20 69 66 28 20 72 63 3d 3d 30 20 29 20 62 72 65   if( rc==0 ) bre
6730: 61 6b 3b 0a 20 20 20 20 69 66 28 20 72 63 3c 30  ak;.    if( rc<0
6740: 20 29 7b 0a 20 20 20 20 20 20 75 70 72 20 3d 20   ){.      upr = 
6750: 6d 69 64 20 2d 20 31 3b 0a 20 20 20 20 7d 65 6c  mid - 1;.    }el
6760: 73 65 7b 0a 20 20 20 20 20 20 6c 77 72 20 3d 20  se{.      lwr = 
6770: 6d 69 64 20 2b 20 31 3b 0a 20 20 20 20 7d 0a 20  mid + 1;.    }. 
6780: 20 7d 0a 20 20 69 66 28 20 6c 77 72 3e 75 70 72   }.  if( lwr>upr
6790: 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f   ) goto pragma_o
67a0: 75 74 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73  ut;..  /* Make s
67b0: 75 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ure the database
67c0: 20 73 63 68 65 6d 61 20 69 73 20 6c 6f 61 64 65   schema is loade
67d0: 64 20 69 66 20 74 68 65 20 70 72 61 67 6d 61 20  d if the pragma 
67e0: 72 65 71 75 69 72 65 73 20 74 68 61 74 20 2a 2f  requires that */
67f0: 0a 20 20 69 66 28 20 28 61 50 72 61 67 6d 61 4e  .  if( (aPragmaN
6800: 61 6d 65 73 5b 6d 69 64 5d 2e 6d 50 72 61 67 46  ames[mid].mPragF
6810: 6c 61 67 20 26 20 50 72 61 67 46 6c 61 67 5f 4e  lag & PragFlag_N
6820: 65 65 64 53 63 68 65 6d 61 29 21 3d 30 20 29 7b  eedSchema)!=0 ){
6830: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
6840: 52 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73  ReadSchema(pPars
6850: 65 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61  e) ) goto pragma
6860: 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _out;.  }..  /* 
6870: 4a 75 6d 70 20 74 6f 20 74 68 65 20 61 70 70 72  Jump to the appr
6880: 6f 70 72 69 61 74 65 20 70 72 61 67 6d 61 20 68  opriate pragma h
6890: 61 6e 64 6c 65 72 20 2a 2f 0a 20 20 73 77 69 74  andler */.  swit
68a0: 63 68 28 20 61 50 72 61 67 6d 61 4e 61 6d 65 73  ch( aPragmaNames
68b0: 5b 6d 69 64 5d 2e 65 50 72 61 67 54 79 70 20 29  [mid].ePragTyp )
68c0: 7b 0a 20 20 0a 23 69 66 20 21 64 65 66 69 6e 65  {.  .#if !define
68d0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  d(SQLITE_OMIT_PA
68e0: 47 45 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20  GER_PRAGMAS) && 
68f0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
6900: 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 29  OMIT_DEPRECATED)
6910: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
6920: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 64 65  MA [database.]de
6930: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
6940: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
6950: 61 74 61 62 61 73 65 2e 5d 64 65 66 61 75 6c 74  atabase.]default
6960: 5f 63 61 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20  _cache_size=N.  
6970: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73  **.  ** The firs
6980: 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74  t form reports t
6990: 68 65 20 63 75 72 72 65 6e 74 20 70 65 72 73 69  he current persi
69a0: 73 74 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f  stent setting fo
69b0: 72 20 74 68 65 0a 20 20 2a 2a 20 70 61 67 65 20  r the.  ** page 
69c0: 63 61 63 68 65 20 73 69 7a 65 2e 20 20 54 68 65  cache size.  The
69d0: 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   value returned 
69e0: 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e  is the maximum n
69f0: 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 70 61  umber of.  ** pa
6a00: 67 65 73 20 69 6e 20 74 68 65 20 70 61 67 65 20  ges in the page 
6a10: 63 61 63 68 65 2e 20 20 54 68 65 20 73 65 63 6f  cache.  The seco
6a20: 6e 64 20 66 6f 72 6d 20 73 65 74 73 20 62 6f 74  nd form sets bot
6a30: 68 20 74 68 65 20 63 75 72 72 65 6e 74 0a 20 20  h the current.  
6a40: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69  ** page cache si
6a50: 7a 65 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65  ze value and the
6a60: 20 70 65 72 73 69 73 74 65 6e 74 20 70 61 67 65   persistent page
6a70: 20 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75   cache size valu
6a80: 65 0a 20 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e  e.  ** stored in
6a90: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
6aa0: 6c 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4f 6c  le..  **.  ** Ol
6ab0: 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  der versions of 
6ac0: 53 51 4c 69 74 65 20 77 6f 75 6c 64 20 73 65 74  SQLite would set
6ad0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 61 63   the default cac
6ae0: 68 65 20 73 69 7a 65 20 74 6f 20 61 0a 20 20 2a  he size to a.  *
6af0: 2a 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65  * negative numbe
6b00: 72 20 74 6f 20 69 6e 64 69 63 61 74 65 20 73 79  r to indicate sy
6b10: 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 2e 20 20  nchronous=OFF.  
6b20: 54 68 65 73 65 20 64 61 79 73 2c 20 73 79 6e 63  These days, sync
6b30: 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20 69 73 20  hronous.  ** is 
6b40: 61 6c 77 61 79 73 20 6f 6e 20 62 79 20 64 65 66  always on by def
6b50: 61 75 6c 74 20 72 65 67 61 72 64 6c 65 73 73 20  ault regardless 
6b60: 6f 66 20 74 68 65 20 73 69 67 6e 20 6f 66 20 74  of the sign of t
6b70: 68 65 20 64 65 66 61 75 6c 74 20 63 61 63 68 65  he default cache
6b80: 0a 20 20 2a 2a 20 73 69 7a 65 2e 20 20 42 75 74  .  ** size.  But
6b90: 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 74 61 6b   continue to tak
6ba0: 65 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20 76  e the absolute v
6bb0: 61 6c 75 65 20 6f 66 20 74 68 65 20 64 65 66 61  alue of the defa
6bc0: 75 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73  ult cache.  ** s
6bd0: 69 7a 65 20 6f 66 20 68 69 73 74 6f 72 69 63 61  ize of historica
6be0: 6c 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e  l compatibility.
6bf0: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
6c00: 67 54 79 70 5f 44 45 46 41 55 4c 54 5f 43 41 43  gTyp_DEFAULT_CAC
6c10: 48 45 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 73  HE_SIZE: {.    s
6c20: 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20  tatic const int 
6c30: 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46 46 53 45  iLn = VDBE_OFFSE
6c40: 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20 20 20  T_LINENO(2);.   
6c50: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64   static const Vd
6c60: 62 65 4f 70 4c 69 73 74 20 67 65 74 43 61 63 68  beOpList getCach
6c70: 65 53 69 7a 65 5b 5d 20 3d 20 7b 0a 20 20 20 20  eSize[] = {.    
6c80: 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69    { OP_Transacti
6c90: 6f 6e 2c 20 30 2c 20 30 2c 20 20 20 20 20 20 20  on, 0, 0,       
6ca0: 20 30 7d 2c 20 20 20 20 20 20 20 20 20 20 20 20   0},            
6cb0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
6cc0: 30 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f  0 */.      { OP_
6cd0: 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 30 2c 20  ReadCookie,  0, 
6ce0: 31 2c 20 20 20 20 20 20 20 20 42 54 52 45 45 5f  1,        BTREE_
6cf0: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
6d00: 5a 45 7d 2c 20 20 2f 2a 20 31 20 2a 2f 0a 20 20  ZE},  /* 1 */.  
6d10: 20 20 20 20 7b 20 4f 50 5f 49 66 50 6f 73 2c 20      { OP_IfPos, 
6d20: 20 20 20 20 20 20 31 2c 20 38 2c 20 20 20 20 20        1, 8,     
6d30: 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     0},.      { O
6d40: 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20 30  P_Integer,     0
6d50: 2c 20 32 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 2,        0},.
6d60: 20 20 20 20 20 20 7b 20 4f 50 5f 53 75 62 74 72        { OP_Subtr
6d70: 61 63 74 2c 20 20 20 20 31 2c 20 32 2c 20 20 20  act,    1, 2,   
6d80: 20 20 20 20 20 31 7d 2c 0a 20 20 20 20 20 20 7b       1},.      {
6d90: 20 4f 50 5f 49 66 50 6f 73 2c 20 20 20 20 20 20   OP_IfPos,      
6da0: 20 31 2c 20 38 2c 20 20 20 20 20 20 20 20 30 7d   1, 8,        0}
6db0: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74  ,.      { OP_Int
6dc0: 65 67 65 72 2c 20 20 20 20 20 30 2c 20 31 2c 20  eger,     0, 1, 
6dd0: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 20 20         0},      
6de0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6df0: 20 20 20 2f 2a 20 36 20 2a 2f 0a 20 20 20 20 20     /* 6 */.     
6e00: 20 7b 20 4f 50 5f 4e 6f 6f 70 2c 20 20 20 20 20   { OP_Noop,     
6e10: 20 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20     0, 0,        
6e20: 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52  0},.      { OP_R
6e30: 65 73 75 6c 74 52 6f 77 2c 20 20 20 31 2c 20 31  esultRow,   1, 1
6e40: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
6e50: 20 7d 3b 0a 20 20 20 20 69 6e 74 20 61 64 64 72   };.    int addr
6e60: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
6e70: 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 44  eUsesBtree(v, iD
6e80: 62 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69  b);.    if( !zRi
6e90: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
6ea0: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
6eb0: 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20  ls(v, 1);.      
6ec0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
6ed0: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
6ee0: 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 61 63 68 65  AME_NAME, "cache
6ef0: 5f 73 69 7a 65 22 2c 20 53 51 4c 49 54 45 5f 53  _size", SQLITE_S
6f00: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 70 50  TATIC);.      pP
6f10: 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 32 3b  arse->nMem += 2;
6f20: 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71  .      addr = sq
6f30: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69  lite3VdbeAddOpLi
6f40: 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
6f50: 67 65 74 43 61 63 68 65 53 69 7a 65 29 2c 20 67  getCacheSize), g
6f60: 65 74 43 61 63 68 65 53 69 7a 65 2c 69 4c 6e 29  etCacheSize,iLn)
6f70: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
6f80: 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61  dbeChangeP1(v, a
6f90: 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  ddr, iDb);.     
6fa0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
6fb0: 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c 20  geP1(v, addr+1, 
6fc0: 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
6fd0: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
6fe0: 76 2c 20 61 64 64 72 2b 36 2c 20 53 51 4c 49 54  v, addr+6, SQLIT
6ff0: 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f  E_DEFAULT_CACHE_
7000: 53 49 5a 45 29 3b 0a 20 20 20 20 7d 65 6c 73 65  SIZE);.    }else
7010: 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65  {.      int size
7020: 20 3d 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74   = sqlite3AbsInt
7030: 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  32(sqlite3Atoi(z
7040: 52 69 67 68 74 29 29 3b 0a 20 20 20 20 20 20 73  Right));.      s
7050: 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65  qlite3BeginWrite
7060: 4f 70 65 72 61 74 69 6f 6e 28 70 50 61 72 73 65  Operation(pParse
7070: 2c 20 30 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  , 0, iDb);.     
7080: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
7090: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
70a0: 2c 20 73 69 7a 65 2c 20 31 29 3b 0a 20 20 20 20  , size, 1);.    
70b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
70c0: 4f 70 33 28 76 2c 20 4f 50 5f 53 65 74 43 6f 6f  Op3(v, OP_SetCoo
70d0: 6b 69 65 2c 20 69 44 62 2c 20 42 54 52 45 45 5f  kie, iDb, BTREE_
70e0: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
70f0: 5a 45 2c 20 31 29 3b 0a 20 20 20 20 20 20 61 73  ZE, 1);.      as
7100: 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
7110: 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
7120: 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20   iDb, 0) );.    
7130: 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
7140: 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a  cache_size = siz
7150: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
7160: 42 74 72 65 65 53 65 74 43 61 63 68 65 53 69 7a  BtreeSetCacheSiz
7170: 65 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d  e(pDb->pBt, pDb-
7180: 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f  >pSchema->cache_
7190: 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20  size);.    }.   
71a0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
71b0: 69 66 20 2f 2a 20 21 53 51 4c 49 54 45 5f 4f 4d  if /* !SQLITE_OM
71c0: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
71d0: 20 26 26 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54   && !SQLITE_OMIT
71e0: 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a  _DEPRECATED */..
71f0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
7200: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
7210: 52 41 47 4d 41 53 29 0a 20 20 2f 2a 0a 20 20 2a  RAGMAS).  /*.  *
7220: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
7230: 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65 0a 20  ase.]page_size. 
7240: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
7250: 61 62 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65  abase.]page_size
7260: 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  =N.  **.  ** The
7270: 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f   first form repo
7280: 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
7290: 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a  setting for the.
72a0: 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61    ** database pa
72b0: 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73  ge size in bytes
72c0: 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  .  The second fo
72d0: 72 6d 20 73 65 74 73 20 74 68 65 0a 20 20 2a 2a  rm sets the.  **
72e0: 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73   database page s
72f0: 69 7a 65 20 76 61 6c 75 65 2e 20 20 54 68 65 20  ize value.  The 
7300: 76 61 6c 75 65 20 63 61 6e 20 6f 6e 6c 79 20 62  value can only b
7310: 65 20 73 65 74 20 69 66 0a 20 20 2a 2a 20 74 68  e set if.  ** th
7320: 65 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e  e database has n
7330: 6f 74 20 79 65 74 20 62 65 65 6e 20 63 72 65 61  ot yet been crea
7340: 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ted..  */.  case
7350: 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 53 49   PragTyp_PAGE_SI
7360: 5a 45 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20  ZE: {.    Btree 
7370: 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b  *pBt = pDb->pBt;
7380: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74  .    assert( pBt
7390: 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21  !=0 );.    if( !
73a0: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
73b0: 69 6e 74 20 73 69 7a 65 20 3d 20 41 4c 57 41 59  int size = ALWAY
73c0: 53 28 70 42 74 29 20 3f 20 73 71 6c 69 74 65 33  S(pBt) ? sqlite3
73d0: 42 74 72 65 65 47 65 74 50 61 67 65 53 69 7a 65  BtreeGetPageSize
73e0: 28 70 42 74 29 20 3a 20 30 3b 0a 20 20 20 20 20  (pBt) : 0;.     
73f0: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
7400: 28 70 50 61 72 73 65 2c 20 22 70 61 67 65 5f 73  (pParse, "page_s
7410: 69 7a 65 22 2c 20 73 69 7a 65 29 3b 0a 20 20 20  ize", size);.   
7420: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a   }else{.      /*
7430: 20 4d 61 6c 6c 6f 63 20 6d 61 79 20 66 61 69 6c   Malloc may fail
7440: 20 77 68 65 6e 20 73 65 74 74 69 6e 67 20 74 68   when setting th
7450: 65 20 70 61 67 65 2d 73 69 7a 65 2c 20 61 73 20  e page-size, as 
7460: 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65  there is an inte
7470: 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 62 75  rnal.      ** bu
7480: 66 66 65 72 20 74 68 61 74 20 74 68 65 20 70 61  ffer that the pa
7490: 67 65 72 20 6d 6f 64 75 6c 65 20 72 65 73 69 7a  ger module resiz
74a0: 65 73 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  es using sqlite3
74b0: 5f 72 65 61 6c 6c 6f 63 28 29 2e 0a 20 20 20 20  _realloc()..    
74c0: 20 20 2a 2f 0a 20 20 20 20 20 20 64 62 2d 3e 6e    */.      db->n
74d0: 65 78 74 50 61 67 65 73 69 7a 65 20 3d 20 73 71  extPagesize = sq
74e0: 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74  lite3Atoi(zRight
74f0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 53 51 4c  );.      if( SQL
7500: 49 54 45 5f 4e 4f 4d 45 4d 3d 3d 73 71 6c 69 74  ITE_NOMEM==sqlit
7510: 65 33 42 74 72 65 65 53 65 74 50 61 67 65 53 69  e3BtreeSetPageSi
7520: 7a 65 28 70 42 74 2c 20 64 62 2d 3e 6e 65 78 74  ze(pBt, db->next
7530: 50 61 67 65 73 69 7a 65 2c 2d 31 2c 30 29 20 29  Pagesize,-1,0) )
7540: 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6d 61  {.        db->ma
7550: 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
7560: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
7570: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
7580: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
7590: 5b 64 61 74 61 62 61 73 65 2e 5d 73 65 63 75 72  [database.]secur
75a0: 65 5f 64 65 6c 65 74 65 0a 20 20 2a 2a 20 20 50  e_delete.  **  P
75b0: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
75c0: 5d 73 65 63 75 72 65 5f 64 65 6c 65 74 65 3d 4f  ]secure_delete=O
75d0: 4e 2f 4f 46 46 0a 20 20 2a 2a 0a 20 20 2a 2a 20  N/OFF.  **.  ** 
75e0: 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72  The first form r
75f0: 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65  eports the curre
7600: 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74  nt setting for t
7610: 68 65 0a 20 20 2a 2a 20 73 65 63 75 72 65 5f 64  he.  ** secure_d
7620: 65 6c 65 74 65 20 66 6c 61 67 2e 20 20 54 68 65  elete flag.  The
7630: 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 63 68 61   second form cha
7640: 6e 67 65 73 20 74 68 65 20 73 65 63 75 72 65 5f  nges the secure_
7650: 64 65 6c 65 74 65 0a 20 20 2a 2a 20 66 6c 61 67  delete.  ** flag
7660: 20 73 65 74 74 69 6e 67 20 61 6e 64 20 72 65 70   setting and rep
7670: 6f 72 74 73 20 74 68 65 6e 65 77 20 76 61 6c 75  orts thenew valu
7680: 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  e..  */.  case P
7690: 72 61 67 54 79 70 5f 53 45 43 55 52 45 5f 44 45  ragTyp_SECURE_DE
76a0: 4c 45 54 45 3a 20 7b 0a 20 20 20 20 42 74 72 65  LETE: {.    Btre
76b0: 65 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42  e *pBt = pDb->pB
76c0: 74 3b 0a 20 20 20 20 69 6e 74 20 62 20 3d 20 2d  t;.    int b = -
76d0: 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  1;.    assert( p
76e0: 42 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28  Bt!=0 );.    if(
76f0: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
7700: 20 62 20 3d 20 73 71 6c 69 74 65 33 47 65 74 42   b = sqlite3GetB
7710: 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30  oolean(zRight, 0
7720: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
7730: 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 62   pId2->n==0 && b
7740: 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  >=0 ){.      int
7750: 20 69 69 3b 0a 20 20 20 20 20 20 66 6f 72 28 69   ii;.      for(i
7760: 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b  i=0; ii<db->nDb;
7770: 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20   ii++){.        
7780: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 63 75  sqlite3BtreeSecu
7790: 72 65 44 65 6c 65 74 65 28 64 62 2d 3e 61 44 62  reDelete(db->aDb
77a0: 5b 69 69 5d 2e 70 42 74 2c 20 62 29 3b 0a 20 20  [ii].pBt, b);.  
77b0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
77c0: 62 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  b = sqlite3Btree
77d0: 53 65 63 75 72 65 44 65 6c 65 74 65 28 70 42 74  SecureDelete(pBt
77e0: 2c 20 62 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , b);.    return
77f0: 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
7800: 2c 20 22 73 65 63 75 72 65 5f 64 65 6c 65 74 65  , "secure_delete
7810: 22 2c 20 62 29 3b 0a 20 20 20 20 62 72 65 61 6b  ", b);.    break
7820: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
7830: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
7840: 73 65 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75  se.]max_page_cou
7850: 6e 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  nt.  **  PRAGMA 
7860: 5b 64 61 74 61 62 61 73 65 2e 5d 6d 61 78 5f 70  [database.]max_p
7870: 61 67 65 5f 63 6f 75 6e 74 3d 4e 0a 20 20 2a 2a  age_count=N.  **
7880: 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20  .  ** The first 
7890: 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65  form reports the
78a0: 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67   current setting
78b0: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6d 61   for the.  ** ma
78c0: 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
78d0: 70 61 67 65 73 20 69 6e 20 74 68 65 20 64 61 74  pages in the dat
78e0: 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65  abase file.  The
78f0: 20 0a 20 20 2a 2a 20 73 65 63 6f 6e 64 20 66 6f   .  ** second fo
7900: 72 6d 20 61 74 74 65 6d 70 74 73 20 74 6f 20 63  rm attempts to c
7910: 68 61 6e 67 65 20 74 68 69 73 20 73 65 74 74 69  hange this setti
7920: 6e 67 2e 20 20 42 6f 74 68 0a 20 20 2a 2a 20 66  ng.  Both.  ** f
7930: 6f 72 6d 73 20 72 65 74 75 72 6e 20 74 68 65 20  orms return the 
7940: 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67 2e  current setting.
7950: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 61  .  **.  ** The a
7960: 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66  bsolute value of
7970: 20 4e 20 69 73 20 75 73 65 64 2e 20 20 54 68 69   N is used.  Thi
7980: 73 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65  s is undocumente
7990: 64 20 61 6e 64 20 6d 69 67 68 74 0a 20 20 2a 2a  d and might.  **
79a0: 20 63 68 61 6e 67 65 2e 20 20 54 68 65 20 6f 6e   change.  The on
79b0: 6c 79 20 70 75 72 70 6f 73 65 20 69 73 20 74 6f  ly purpose is to
79c0: 20 70 72 6f 76 69 64 65 20 61 6e 20 65 61 73 79   provide an easy
79d0: 20 77 61 79 20 74 6f 20 74 65 73 74 0a 20 20 2a   way to test.  *
79e0: 2a 20 74 68 65 20 73 71 6c 69 74 65 33 41 62 73  * the sqlite3Abs
79f0: 49 6e 74 33 32 28 29 20 66 75 6e 63 74 69 6f 6e  Int32() function
7a00: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  **.  **  PRA
7a10: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 70  GMA [database.]p
7a20: 61 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a 0a 20  age_count.  **. 
7a30: 20 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e   ** Return the n
7a40: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
7a50: 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  n the specified 
7a60: 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20  database..  */. 
7a70: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 50 41   case PragTyp_PA
7a80: 47 45 5f 43 4f 55 4e 54 3a 20 7b 0a 20 20 20 20  GE_COUNT: {.    
7a90: 69 6e 74 20 69 52 65 67 3b 0a 20 20 20 20 73 71  int iReg;.    sq
7aa0: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
7ab0: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44  chema(pParse, iD
7ac0: 62 29 3b 0a 20 20 20 20 69 52 65 67 20 3d 20 2b  b);.    iReg = +
7ad0: 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20  +pParse->nMem;. 
7ae0: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 6f     if( sqlite3To
7af0: 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29 3d  lower(zLeft[0])=
7b00: 3d 27 70 27 20 29 7b 0a 20 20 20 20 20 20 73 71  ='p' ){.      sq
7b10: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
7b20: 76 2c 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 2c  v, OP_Pagecount,
7b30: 20 69 44 62 2c 20 69 52 65 67 29 3b 0a 20 20 20   iDb, iReg);.   
7b40: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71   }else{.      sq
7b50: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
7b60: 76 2c 20 4f 50 5f 4d 61 78 50 67 63 6e 74 2c 20  v, OP_MaxPgcnt, 
7b70: 69 44 62 2c 20 69 52 65 67 2c 20 0a 20 20 20 20  iDb, iReg, .    
7b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7b90: 20 20 20 20 73 71 6c 69 74 65 33 41 62 73 49 6e      sqlite3AbsIn
7ba0: 74 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28  t32(sqlite3Atoi(
7bb0: 7a 52 69 67 68 74 29 29 29 3b 0a 20 20 20 20 7d  zRight)));.    }
7bc0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
7bd0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
7be0: 75 6c 74 52 6f 77 2c 20 69 52 65 67 2c 20 31 29  ultRow, iReg, 1)
7bf0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
7c00: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
7c10: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
7c20: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
7c30: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
7c40: 20 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f 54   zLeft, SQLITE_T
7c50: 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 62  RANSIENT);.    b
7c60: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
7c70: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
7c80: 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 69 6e 67 5f  tabase.]locking_
7c90: 6d 6f 64 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d  mode.  **  PRAGM
7ca0: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f 63  A [database.]loc
7cb0: 6b 69 6e 67 5f 6d 6f 64 65 20 3d 20 28 6e 6f 72  king_mode = (nor
7cc0: 6d 61 6c 7c 65 78 63 6c 75 73 69 76 65 29 0a 20  mal|exclusive). 
7cd0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
7ce0: 79 70 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f 44 45 3a  yp_LOCKING_MODE:
7cf0: 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61   {.    const cha
7d00: 72 20 2a 7a 52 65 74 20 3d 20 22 6e 6f 72 6d 61  r *zRet = "norma
7d10: 6c 22 3b 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64  l";.    int eMod
7d20: 65 20 3d 20 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f  e = getLockingMo
7d30: 64 65 28 7a 52 69 67 68 74 29 3b 0a 0a 20 20 20  de(zRight);..   
7d40: 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20   if( pId2->n==0 
7d50: 26 26 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f  && eMode==PAGER_
7d60: 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 51 55 45 52  LOCKINGMODE_QUER
7d70: 59 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 53 69  Y ){.      /* Si
7d80: 6d 70 6c 65 20 22 50 52 41 47 4d 41 20 6c 6f 63  mple "PRAGMA loc
7d90: 6b 69 6e 67 5f 6d 6f 64 65 3b 22 20 73 74 61 74  king_mode;" stat
7da0: 65 6d 65 6e 74 2e 20 54 68 69 73 20 69 73 20 61  ement. This is a
7db0: 20 71 75 65 72 79 20 66 6f 72 0a 20 20 20 20 20   query for.     
7dc0: 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74 20   ** the current 
7dd0: 64 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 20  default locking 
7de0: 6d 6f 64 65 20 28 77 68 69 63 68 20 6d 61 79 20  mode (which may 
7df0: 62 65 20 64 69 66 66 65 72 65 6e 74 20 74 6f 0a  be different to.
7e00: 20 20 20 20 20 20 2a 2a 20 74 68 65 20 6c 6f 63        ** the loc
7e10: 6b 69 6e 67 2d 6d 6f 64 65 20 6f 66 20 74 68 65  king-mode of the
7e20: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 29 2e   main database).
7e30: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
7e40: 65 4d 6f 64 65 20 3d 20 64 62 2d 3e 64 66 6c 74  eMode = db->dflt
7e50: 4c 6f 63 6b 4d 6f 64 65 3b 0a 20 20 20 20 7d 65  LockMode;.    }e
7e60: 6c 73 65 7b 0a 20 20 20 20 20 20 50 61 67 65 72  lse{.      Pager
7e70: 20 2a 70 50 61 67 65 72 3b 0a 20 20 20 20 20 20   *pPager;.      
7e80: 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29  if( pId2->n==0 )
7e90: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69  {.        /* Thi
7ea0: 73 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74  s indicates that
7eb0: 20 6e 6f 20 64 61 74 61 62 61 73 65 20 6e 61 6d   no database nam
7ec0: 65 20 77 61 73 20 73 70 65 63 69 66 69 65 64 20  e was specified 
7ed0: 61 73 20 70 61 72 74 0a 20 20 20 20 20 20 20 20  as part.        
7ee0: 2a 2a 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41  ** of the PRAGMA
7ef0: 20 63 6f 6d 6d 61 6e 64 2e 20 49 6e 20 74 68 69   command. In thi
7f00: 73 20 63 61 73 65 20 74 68 65 20 6c 6f 63 6b 69  s case the locki
7f10: 6e 67 2d 6d 6f 64 65 20 6d 75 73 74 20 62 65 0a  ng-mode must be.
7f20: 20 20 20 20 20 20 20 20 2a 2a 20 73 65 74 20 6f          ** set o
7f30: 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  n all attached d
7f40: 61 74 61 62 61 73 65 73 2c 20 61 73 20 77 65 6c  atabases, as wel
7f50: 6c 20 61 73 20 74 68 65 20 6d 61 69 6e 20 64 62  l as the main db
7f60: 20 66 69 6c 65 2e 0a 20 20 20 20 20 20 20 20 2a   file..        *
7f70: 2a 0a 20 20 20 20 20 20 20 20 2a 2a 20 41 6c 73  *.        ** Als
7f80: 6f 2c 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64  o, the sqlite3.d
7f90: 66 6c 74 4c 6f 63 6b 4d 6f 64 65 20 76 61 72 69  fltLockMode vari
7fa0: 61 62 6c 65 20 69 73 20 73 65 74 20 73 6f 20 74  able is set so t
7fb0: 68 61 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 61  hat.        ** a
7fc0: 6e 79 20 73 75 62 73 65 71 75 65 6e 74 6c 79 20  ny subsequently 
7fd0: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
7fe0: 65 73 20 61 6c 73 6f 20 75 73 65 20 74 68 65 20  es also use the 
7ff0: 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20  specified.      
8000: 20 20 2a 2a 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64    ** locking mod
8010: 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  e..        */.  
8020: 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20        int ii;.  
8030: 20 20 20 20 20 20 61 73 73 65 72 74 28 70 44 62        assert(pDb
8040: 3d 3d 26 64 62 2d 3e 61 44 62 5b 30 5d 29 3b 0a  ==&db->aDb[0]);.
8050: 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 32          for(ii=2
8060: 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
8070: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  ++){.          p
8080: 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42  Pager = sqlite3B
8090: 74 72 65 65 50 61 67 65 72 28 64 62 2d 3e 61 44  treePager(db->aD
80a0: 62 5b 69 69 5d 2e 70 42 74 29 3b 0a 20 20 20 20  b[ii].pBt);.    
80b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67        sqlite3Pag
80c0: 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70 50  erLockingMode(pP
80d0: 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20 20  ager, eMode);.  
80e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
80f0: 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65  db->dfltLockMode
8100: 20 3d 20 28 75 38 29 65 4d 6f 64 65 3b 0a 20 20   = (u8)eMode;.  
8110: 20 20 20 20 7d 0a 20 20 20 20 20 20 70 50 61 67      }.      pPag
8120: 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
8130: 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29  ePager(pDb->pBt)
8140: 3b 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20  ;.      eMode = 
8150: 73 71 6c 69 74 65 33 50 61 67 65 72 4c 6f 63 6b  sqlite3PagerLock
8160: 69 6e 67 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  ingMode(pPager, 
8170: 65 4d 6f 64 65 29 3b 0a 20 20 20 20 7d 0a 0a 20  eMode);.    }.. 
8180: 20 20 20 61 73 73 65 72 74 28 20 65 4d 6f 64 65     assert( eMode
8190: 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  ==PAGER_LOCKINGM
81a0: 4f 44 45 5f 4e 4f 52 4d 41 4c 0a 20 20 20 20 20  ODE_NORMAL.     
81b0: 20 20 20 20 20 20 20 7c 7c 20 65 4d 6f 64 65 3d         || eMode=
81c0: 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f  =PAGER_LOCKINGMO
81d0: 44 45 5f 45 58 43 4c 55 53 49 56 45 20 29 3b 0a  DE_EXCLUSIVE );.
81e0: 20 20 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 50      if( eMode==P
81f0: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
8200: 5f 45 58 43 4c 55 53 49 56 45 20 29 7b 0a 20 20  _EXCLUSIVE ){.  
8210: 20 20 20 20 7a 52 65 74 20 3d 20 22 65 78 63 6c      zRet = "excl
8220: 75 73 69 76 65 22 3b 0a 20 20 20 20 7d 0a 20 20  usive";.    }.  
8230: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
8240: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
8250: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
8260: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
8270: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6c 6f  OLNAME_NAME, "lo
8280: 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c 20 53 51 4c  cking_mode", SQL
8290: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
82a0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
82b0: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
82c0: 2c 20 30 2c 20 31 2c 20 30 2c 20 7a 52 65 74 2c  , 0, 1, 0, zRet,
82d0: 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   0);.    sqlite3
82e0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
82f0: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31  _ResultRow, 1, 1
8300: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
8310: 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  }..  /*.  **  PR
8320: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
8330: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20 2a  journal_mode.  *
8340: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
8350: 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  ase.]journal_mod
8360: 65 20 3d 0a 20 20 2a 2a 20 20 20 20 20 20 20 20  e =.  **        
8370: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64                (d
8380: 65 6c 65 74 65 7c 70 65 72 73 69 73 74 7c 6f 66  elete|persist|of
8390: 66 7c 74 72 75 6e 63 61 74 65 7c 6d 65 6d 6f 72  f|truncate|memor
83a0: 79 7c 77 61 6c 7c 6f 66 66 29 0a 20 20 2a 2f 0a  y|wal|off).  */.
83b0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4a    case PragTyp_J
83c0: 4f 55 52 4e 41 4c 5f 4d 4f 44 45 3a 20 7b 0a 20  OURNAL_MODE: {. 
83d0: 20 20 20 69 6e 74 20 65 4d 6f 64 65 3b 20 20 20     int eMode;   
83e0: 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74       /* One of t
83f0: 68 65 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  he PAGER_JOURNAL
8400: 4d 4f 44 45 5f 58 58 58 20 73 79 6d 62 6f 6c 73  MODE_XXX symbols
8410: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 69 3b 20   */.    int ii; 
8420: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
8430: 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 0a 20 20  p counter */..  
8440: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
8450: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
8460: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
8470: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
8480: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6a 6f  OLNAME_NAME, "jo
8490: 75 72 6e 61 6c 5f 6d 6f 64 65 22 2c 20 53 51 4c  urnal_mode", SQL
84a0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20  ITE_STATIC);..  
84b0: 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20    if( zRight==0 
84c0: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  ){.      /* If t
84d0: 68 65 72 65 20 69 73 20 6e 6f 20 22 3d 4d 4f 44  here is no "=MOD
84e0: 45 22 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  E" part of the p
84f0: 72 61 67 6d 61 2c 20 64 6f 20 61 20 71 75 65 72  ragma, do a quer
8500: 79 20 66 6f 72 20 74 68 65 0a 20 20 20 20 20 20  y for the.      
8510: 2a 2a 20 63 75 72 72 65 6e 74 20 6d 6f 64 65 20  ** current mode 
8520: 2a 2f 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  */.      eMode =
8530: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
8540: 44 45 5f 51 55 45 52 59 3b 0a 20 20 20 20 7d 65  DE_QUERY;.    }e
8550: 6c 73 65 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74  lse{.      const
8560: 20 63 68 61 72 20 2a 7a 4d 6f 64 65 3b 0a 20 20   char *zMode;.  
8570: 20 20 20 20 69 6e 74 20 6e 20 3d 20 73 71 6c 69      int n = sqli
8580: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67  te3Strlen30(zRig
8590: 68 74 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 65  ht);.      for(e
85a0: 4d 6f 64 65 3d 30 3b 20 28 7a 4d 6f 64 65 20 3d  Mode=0; (zMode =
85b0: 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d   sqlite3JournalM
85c0: 6f 64 65 6e 61 6d 65 28 65 4d 6f 64 65 29 29 21  odename(eMode))!
85d0: 3d 30 3b 20 65 4d 6f 64 65 2b 2b 29 7b 0a 20 20  =0; eMode++){.  
85e0: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
85f0: 33 53 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74  3StrNICmp(zRight
8600: 2c 20 7a 4d 6f 64 65 2c 20 6e 29 3d 3d 30 20 29  , zMode, n)==0 )
8610: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
8620: 20 20 20 20 20 20 69 66 28 20 21 7a 4d 6f 64 65        if( !zMode
8630: 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49   ){.        /* I
8640: 66 20 74 68 65 20 22 3d 4d 4f 44 45 22 20 70 61  f the "=MODE" pa
8650: 72 74 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63  rt does not matc
8660: 68 20 61 6e 79 20 6b 6e 6f 77 6e 20 6a 6f 75 72  h any known jour
8670: 6e 61 6c 20 6d 6f 64 65 2c 0a 20 20 20 20 20 20  nal mode,.      
8680: 20 20 2a 2a 20 74 68 65 6e 20 64 6f 20 61 20 71    ** then do a q
8690: 75 65 72 79 20 2a 2f 0a 20 20 20 20 20 20 20 20  uery */.        
86a0: 65 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f  eMode = PAGER_JO
86b0: 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b  URNALMODE_QUERY;
86c0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
86d0: 20 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 50 41     if( eMode==PA
86e0: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
86f0: 51 55 45 52 59 20 26 26 20 70 49 64 32 2d 3e 6e  QUERY && pId2->n
8700: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ==0 ){.      /* 
8710: 43 6f 6e 76 65 72 74 20 22 50 52 41 47 4d 41 20  Convert "PRAGMA 
8720: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 69 6e  journal_mode" in
8730: 74 6f 20 22 50 52 41 47 4d 41 20 6d 61 69 6e 2e  to "PRAGMA main.
8740: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 2a 2f  journal_mode" */
8750: 0a 20 20 20 20 20 20 69 44 62 20 3d 20 30 3b 0a  .      iDb = 0;.
8760: 20 20 20 20 20 20 70 49 64 32 2d 3e 6e 20 3d 20        pId2->n = 
8770: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72  1;.    }.    for
8780: 28 69 69 3d 64 62 2d 3e 6e 44 62 2d 31 3b 20 69  (ii=db->nDb-1; i
8790: 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a 20 20 20  i>=0; ii--){.   
87a0: 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69     if( db->aDb[i
87b0: 69 5d 2e 70 42 74 20 26 26 20 28 69 69 3d 3d 69  i].pBt && (ii==i
87c0: 44 62 20 7c 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30  Db || pId2->n==0
87d0: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ) ){.        sql
87e0: 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65  ite3VdbeUsesBtre
87f0: 65 28 76 2c 20 69 69 29 3b 0a 20 20 20 20 20 20  e(v, ii);.      
8800: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
8810: 4f 70 33 28 76 2c 20 4f 50 5f 4a 6f 75 72 6e 61  Op3(v, OP_Journa
8820: 6c 4d 6f 64 65 2c 20 69 69 2c 20 31 2c 20 65 4d  lMode, ii, 1, eM
8830: 6f 64 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ode);.      }.  
8840: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
8850: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
8860: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29  ResultRow, 1, 1)
8870: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
8880: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
8890: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a  GMA [database.]j
88a0: 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69  ournal_size_limi
88b0: 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  t.  **  PRAGMA [
88c0: 64 61 74 61 62 61 73 65 2e 5d 6a 6f 75 72 6e 61  database.]journa
88d0: 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 3d 4e 0a 20  l_size_limit=N. 
88e0: 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72 20   **.  ** Get or 
88f0: 73 65 74 20 74 68 65 20 73 69 7a 65 20 6c 69 6d  set the size lim
8900: 69 74 20 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20 6a  it on rollback j
8910: 6f 75 72 6e 61 6c 20 66 69 6c 65 73 2e 0a 20 20  ournal files..  
8920: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
8930: 70 5f 4a 4f 55 52 4e 41 4c 5f 53 49 5a 45 5f 4c  p_JOURNAL_SIZE_L
8940: 49 4d 49 54 3a 20 7b 0a 20 20 20 20 50 61 67 65  IMIT: {.    Page
8950: 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69  r *pPager = sqli
8960: 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44  te3BtreePager(pD
8970: 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 69 36 34  b->pBt);.    i64
8980: 20 69 4c 69 6d 69 74 20 3d 20 2d 32 3b 0a 20 20   iLimit = -2;.  
8990: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
89a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 65 63        sqlite3Dec
89b0: 4f 72 48 65 78 54 6f 49 36 34 28 7a 52 69 67 68  OrHexToI64(zRigh
89c0: 74 2c 20 26 69 4c 69 6d 69 74 29 3b 0a 20 20 20  t, &iLimit);.   
89d0: 20 20 20 69 66 28 20 69 4c 69 6d 69 74 3c 2d 31     if( iLimit<-1
89e0: 20 29 20 69 4c 69 6d 69 74 20 3d 20 2d 31 3b 0a   ) iLimit = -1;.
89f0: 20 20 20 20 7d 0a 20 20 20 20 69 4c 69 6d 69 74      }.    iLimit
8a00: 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 4a   = sqlite3PagerJ
8a10: 6f 75 72 6e 61 6c 53 69 7a 65 4c 69 6d 69 74 28  ournalSizeLimit(
8a20: 70 50 61 67 65 72 2c 20 69 4c 69 6d 69 74 29 3b  pPager, iLimit);
8a30: 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c  .    returnSingl
8a40: 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 6a 6f  eInt(pParse, "jo
8a50: 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74  urnal_size_limit
8a60: 22 2c 20 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20  ", iLimit);.    
8a70: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 65 6e 64  break;.  }..#end
8a80: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
8a90: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20  T_PAGER_PRAGMAS 
8aa0: 2a 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50  */..  /*.  **  P
8ab0: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
8ac0: 5d 61 75 74 6f 5f 76 61 63 75 75 6d 0a 20 20 2a  ]auto_vacuum.  *
8ad0: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
8ae0: 61 73 65 2e 5d 61 75 74 6f 5f 76 61 63 75 75 6d  ase.]auto_vacuum
8af0: 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74  =N.  **.  ** Get
8b00: 20 6f 72 20 73 65 74 20 74 68 65 20 76 61 6c 75   or set the valu
8b10: 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73  e of the databas
8b20: 65 20 27 61 75 74 6f 2d 76 61 63 75 75 6d 27 20  e 'auto-vacuum' 
8b30: 70 61 72 61 6d 65 74 65 72 2e 0a 20 20 2a 2a 20  parameter..  ** 
8b40: 54 68 65 20 76 61 6c 75 65 20 69 73 20 6f 6e 65  The value is one
8b50: 20 6f 66 3a 20 20 30 20 4e 4f 4e 45 20 31 20 46   of:  0 NONE 1 F
8b60: 55 4c 4c 20 32 20 49 4e 43 52 45 4d 45 4e 54 41  ULL 2 INCREMENTA
8b70: 4c 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53  L.  */.#ifndef S
8b80: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
8b90: 41 43 55 55 4d 0a 20 20 63 61 73 65 20 50 72 61  ACUUM.  case Pra
8ba0: 67 54 79 70 5f 41 55 54 4f 5f 56 41 43 55 55 4d  gTyp_AUTO_VACUUM
8bb0: 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20 2a 70  : {.    Btree *p
8bc0: 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20  Bt = pDb->pBt;. 
8bd0: 20 20 20 61 73 73 65 72 74 28 20 70 42 74 21 3d     assert( pBt!=
8be0: 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52  0 );.    if( !zR
8bf0: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65  ight ){.      re
8c00: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50  turnSingleInt(pP
8c10: 61 72 73 65 2c 20 22 61 75 74 6f 5f 76 61 63 75  arse, "auto_vacu
8c20: 75 6d 22 2c 20 73 71 6c 69 74 65 33 42 74 72 65  um", sqlite3Btre
8c30: 65 47 65 74 41 75 74 6f 56 61 63 75 75 6d 28 70  eGetAutoVacuum(p
8c40: 42 74 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  Bt));.    }else{
8c50: 0a 20 20 20 20 20 20 69 6e 74 20 65 41 75 74 6f  .      int eAuto
8c60: 20 3d 20 67 65 74 41 75 74 6f 56 61 63 75 75 6d   = getAutoVacuum
8c70: 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20  (zRight);.      
8c80: 61 73 73 65 72 74 28 20 65 41 75 74 6f 3e 3d 30  assert( eAuto>=0
8c90: 20 26 26 20 65 41 75 74 6f 3c 3d 32 20 29 3b 0a   && eAuto<=2 );.
8ca0: 20 20 20 20 20 20 64 62 2d 3e 6e 65 78 74 41 75        db->nextAu
8cb0: 74 6f 76 61 63 20 3d 20 28 75 38 29 65 41 75 74  tovac = (u8)eAut
8cc0: 6f 3b 0a 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c  o;.      /* Call
8cd0: 20 53 65 74 41 75 74 6f 56 61 63 75 75 6d 28 29   SetAutoVacuum()
8ce0: 20 74 6f 20 73 65 74 20 69 6e 69 74 69 61 6c 69   to set initiali
8cf0: 7a 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20  ze the internal 
8d00: 61 75 74 6f 20 61 6e 64 0a 20 20 20 20 20 20 2a  auto and.      *
8d10: 2a 20 69 6e 63 72 2d 76 61 63 75 75 6d 20 66 6c  * incr-vacuum fl
8d20: 61 67 73 2e 20 54 68 69 73 20 69 73 20 72 65 71  ags. This is req
8d30: 75 69 72 65 64 20 69 6e 20 63 61 73 65 20 74 68  uired in case th
8d40: 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 20 20  is connection.  
8d50: 20 20 20 20 2a 2a 20 63 72 65 61 74 65 73 20 74      ** creates t
8d60: 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  he database file
8d70: 2e 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e  . It is importan
8d80: 74 20 74 68 61 74 20 69 74 20 69 73 20 63 72 65  t that it is cre
8d90: 61 74 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73  ated.      ** as
8da0: 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20   an auto-vacuum 
8db0: 63 61 70 61 62 6c 65 20 64 62 2e 0a 20 20 20 20  capable db..    
8dc0: 20 20 2a 2f 0a 20 20 20 20 20 20 72 63 20 3d 20    */.      rc = 
8dd0: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 41  sqlite3BtreeSetA
8de0: 75 74 6f 56 61 63 75 75 6d 28 70 42 74 2c 20 65  utoVacuum(pBt, e
8df0: 41 75 74 6f 29 3b 0a 20 20 20 20 20 20 69 66 28  Auto);.      if(
8e00: 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26   rc==SQLITE_OK &
8e10: 26 20 28 65 41 75 74 6f 3d 3d 31 20 7c 7c 20 65  & (eAuto==1 || e
8e20: 41 75 74 6f 3d 3d 32 29 20 29 7b 0a 20 20 20 20  Auto==2) ){.    
8e30: 20 20 20 20 2f 2a 20 57 68 65 6e 20 73 65 74 74      /* When sett
8e40: 69 6e 67 20 74 68 65 20 61 75 74 6f 5f 76 61 63  ing the auto_vac
8e50: 75 75 6d 20 6d 6f 64 65 20 74 6f 20 65 69 74 68  uum mode to eith
8e60: 65 72 20 22 66 75 6c 6c 22 20 6f 72 20 0a 20 20  er "full" or .  
8e70: 20 20 20 20 20 20 2a 2a 20 22 69 6e 63 72 65 6d        ** "increm
8e80: 65 6e 74 61 6c 22 2c 20 77 72 69 74 65 20 74 68  ental", write th
8e90: 65 20 76 61 6c 75 65 20 6f 66 20 6d 65 74 61 5b  e value of meta[
8ea0: 36 5d 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  6] in the databa
8eb0: 73 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69  se.        ** fi
8ec0: 6c 65 2e 20 42 65 66 6f 72 65 20 77 72 69 74 69  le. Before writi
8ed0: 6e 67 20 74 6f 20 6d 65 74 61 5b 36 5d 2c 20 63  ng to meta[6], c
8ee0: 68 65 63 6b 20 74 68 61 74 20 6d 65 74 61 5b 33  heck that meta[3
8ef0: 5d 20 69 6e 64 69 63 61 74 65 73 0a 20 20 20 20  ] indicates.    
8f00: 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 69 73      ** that this
8f10: 20 72 65 61 6c 6c 79 20 69 73 20 61 6e 20 61 75   really is an au
8f20: 74 6f 2d 76 61 63 75 75 6d 20 63 61 70 61 62 6c  to-vacuum capabl
8f30: 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20  e database..    
8f40: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 73      */.        s
8f50: 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20  tatic const int 
8f60: 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46 46 53 45  iLn = VDBE_OFFSE
8f70: 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20 20 20  T_LINENO(2);.   
8f80: 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
8f90: 74 20 56 64 62 65 4f 70 4c 69 73 74 20 73 65 74  t VdbeOpList set
8fa0: 4d 65 74 61 36 5b 5d 20 3d 20 7b 0a 20 20 20 20  Meta6[] = {.    
8fb0: 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73        { OP_Trans
8fc0: 61 63 74 69 6f 6e 2c 20 20 20 20 30 2c 20 20 20  action,    0,   
8fd0: 20 20 20 20 20 20 31 2c 20 20 20 20 20 20 20 20        1,        
8fe0: 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20           0},    
8ff0: 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 0 */.        
9000: 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69    { OP_ReadCooki
9010: 65 2c 20 20 20 20 20 30 2c 20 20 20 20 20 20 20  e,     0,       
9020: 20 20 31 2c 20 20 20 20 20 20 20 20 20 42 54 52    1,         BTR
9030: 45 45 5f 4c 41 52 47 45 53 54 5f 52 4f 4f 54 5f  EE_LARGEST_ROOT_
9040: 50 41 47 45 7d 2c 0a 20 20 20 20 20 20 20 20 20  PAGE},.         
9050: 20 7b 20 4f 50 5f 49 66 2c 20 20 20 20 20 20 20   { OP_If,       
9060: 20 20 20 20 20 20 31 2c 20 20 20 20 20 20 20 20        1,        
9070: 20 30 2c 20 20 20 20 20 20 20 20 20 20 20 20 20   0,             
9080: 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 32 20      0},    /* 2 
9090: 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f  */.          { O
90a0: 50 5f 48 61 6c 74 2c 20 20 20 20 20 20 20 20 20  P_Halt,         
90b0: 20 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 4f 45 5f    SQLITE_OK, OE_
90c0: 41 62 6f 72 74 2c 20 20 20 20 20 20 20 20 20 20  Abort,          
90d0: 30 7d 2c 20 20 20 20 2f 2a 20 33 20 2a 2f 0a 20  0},    /* 3 */. 
90e0: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e           { OP_In
90f0: 74 65 67 65 72 2c 20 20 20 20 20 20 20 20 30 2c  teger,        0,
9100: 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20           1,     
9110: 20 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20              0}, 
9120: 20 20 20 2f 2a 20 34 20 2a 2f 0a 20 20 20 20 20     /* 4 */.     
9130: 20 20 20 20 20 7b 20 4f 50 5f 53 65 74 43 6f 6f       { OP_SetCoo
9140: 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20 20 20  kie,      0,    
9150: 20 20 20 20 20 42 54 52 45 45 5f 49 4e 43 52 5f       BTREE_INCR_
9160: 56 41 43 55 55 4d 2c 20 31 7d 2c 20 20 20 20 2f  VACUUM, 1},    /
9170: 2a 20 35 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d  * 5 */.        }
9180: 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 41  ;.        int iA
9190: 64 64 72 3b 0a 20 20 20 20 20 20 20 20 69 41 64  ddr;.        iAd
91a0: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
91b0: 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72  AddOpList(v, Arr
91c0: 61 79 53 69 7a 65 28 73 65 74 4d 65 74 61 36 29  aySize(setMeta6)
91d0: 2c 20 73 65 74 4d 65 74 61 36 2c 20 69 4c 6e 29  , setMeta6, iLn)
91e0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
91f0: 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c  3VdbeChangeP1(v,
9200: 20 69 41 64 64 72 2c 20 69 44 62 29 3b 0a 20 20   iAddr, iDb);.  
9210: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9220: 65 43 68 61 6e 67 65 50 31 28 76 2c 20 69 41 64  eChangeP1(v, iAd
9230: 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20 20  dr+1, iDb);.    
9240: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
9250: 68 61 6e 67 65 50 32 28 76 2c 20 69 41 64 64 72  hangeP2(v, iAddr
9260: 2b 32 2c 20 69 41 64 64 72 2b 34 29 3b 0a 20 20  +2, iAddr+4);.  
9270: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
9280: 65 43 68 61 6e 67 65 50 31 28 76 2c 20 69 41 64  eChangeP1(v, iAd
9290: 64 72 2b 34 2c 20 65 41 75 74 6f 2d 31 29 3b 0a  dr+4, eAuto-1);.
92a0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
92b0: 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 69  dbeChangeP1(v, i
92c0: 41 64 64 72 2b 35 2c 20 69 44 62 29 3b 0a 20 20  Addr+5, iDb);.  
92d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
92e0: 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 44  eUsesBtree(v, iD
92f0: 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  b);.      }.    
9300: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
9310: 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20  .#endif..  /*.  
9320: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
9330: 62 61 73 65 2e 5d 69 6e 63 72 65 6d 65 6e 74 61  base.]incrementa
9340: 6c 5f 76 61 63 75 75 6d 28 4e 29 0a 20 20 2a 2a  l_vacuum(N).  **
9350: 0a 20 20 2a 2a 20 44 6f 20 4e 20 73 74 65 70 73  .  ** Do N steps
9360: 20 6f 66 20 69 6e 63 72 65 6d 65 6e 74 61 6c 20   of incremental 
9370: 76 61 63 75 75 6d 69 6e 67 20 6f 6e 20 61 20 64  vacuuming on a d
9380: 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 23 69  atabase..  */.#i
9390: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
93a0: 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20 63  T_AUTOVACUUM.  c
93b0: 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e 43 52  ase PragTyp_INCR
93c0: 45 4d 45 4e 54 41 4c 5f 56 41 43 55 55 4d 3a 20  EMENTAL_VACUUM: 
93d0: 7b 0a 20 20 20 20 69 6e 74 20 69 4c 69 6d 69 74  {.    int iLimit
93e0: 2c 20 61 64 64 72 3b 0a 20 20 20 20 69 66 28 20  , addr;.    if( 
93f0: 7a 52 69 67 68 74 3d 3d 30 20 7c 7c 20 21 73 71  zRight==0 || !sq
9400: 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 7a 52  lite3GetInt32(zR
9410: 69 67 68 74 2c 20 26 69 4c 69 6d 69 74 29 20 7c  ight, &iLimit) |
9420: 7c 20 69 4c 69 6d 69 74 3c 3d 30 20 29 7b 0a 20  | iLimit<=0 ){. 
9430: 20 20 20 20 20 69 4c 69 6d 69 74 20 3d 20 30 78       iLimit = 0x
9440: 37 66 66 66 66 66 66 66 3b 0a 20 20 20 20 7d 0a  7fffffff;.    }.
9450: 20 20 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e      sqlite3Begin
9460: 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 70  WriteOperation(p
9470: 50 61 72 73 65 2c 20 30 2c 20 69 44 62 29 3b 0a  Parse, 0, iDb);.
9480: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
9490: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
94a0: 67 65 72 2c 20 69 4c 69 6d 69 74 2c 20 31 29 3b  ger, iLimit, 1);
94b0: 0a 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69  .    addr = sqli
94c0: 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
94d0: 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 2c 20   OP_IncrVacuum, 
94e0: 69 44 62 29 3b 20 56 64 62 65 43 6f 76 65 72 61  iDb); VdbeCovera
94f0: 67 65 28 76 29 3b 0a 20 20 20 20 73 71 6c 69 74  ge(v);.    sqlit
9500: 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20  e3VdbeAddOp1(v, 
9510: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 29  OP_ResultRow, 1)
9520: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
9530: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64  eAddOp2(v, OP_Ad
9540: 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 0a 20 20  dImm, 1, -1);.  
9550: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
9560: 4f 70 32 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c  Op2(v, OP_IfPos,
9570: 20 31 2c 20 61 64 64 72 29 3b 20 56 64 62 65 43   1, addr); VdbeC
9580: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
9590: 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
95a0: 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20 20  ere(v, addr);.  
95b0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
95c0: 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  dif..#ifndef SQL
95d0: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
95e0: 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a  RAGMAS.  /*.  **
95f0: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
9600: 73 65 2e 5d 63 61 63 68 65 5f 73 69 7a 65 0a 20  se.]cache_size. 
9610: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
9620: 61 62 61 73 65 2e 5d 63 61 63 68 65 5f 73 69 7a  abase.]cache_siz
9630: 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  e=N.  **.  ** Th
9640: 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70  e first form rep
9650: 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74  orts the current
9660: 20 6c 6f 63 61 6c 20 73 65 74 74 69 6e 67 20 66   local setting f
9670: 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70 61 67 65  or the.  ** page
9680: 20 63 61 63 68 65 20 73 69 7a 65 2e 20 54 68 65   cache size. The
9690: 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65 74   second form set
96a0: 73 20 74 68 65 20 6c 6f 63 61 6c 0a 20 20 2a 2a  s the local.  **
96b0: 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65   page cache size
96c0: 20 76 61 6c 75 65 2e 20 20 49 66 20 4e 20 69 73   value.  If N is
96d0: 20 70 6f 73 69 74 69 76 65 20 74 68 65 6e 20 74   positive then t
96e0: 68 61 74 20 69 73 20 74 68 65 0a 20 20 2a 2a 20  hat is the.  ** 
96f0: 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
9700: 69 6e 20 74 68 65 20 63 61 63 68 65 2e 20 20 49  in the cache.  I
9710: 66 20 4e 20 69 73 20 6e 65 67 61 74 69 76 65 2c  f N is negative,
9720: 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20 6e   then the.  ** n
9730: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
9740: 73 20 61 64 6a 75 73 74 65 64 20 73 6f 20 74 68  s adjusted so th
9750: 61 74 20 74 68 65 20 63 61 63 68 65 20 75 73 65  at the cache use
9760: 73 20 2d 4e 20 6b 69 62 69 62 79 74 65 73 0a 20  s -N kibibytes. 
9770: 20 2a 2a 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a 20   ** of memory.. 
9780: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
9790: 79 70 5f 43 41 43 48 45 5f 53 49 5a 45 3a 20 7b  yp_CACHE_SIZE: {
97a0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c  .    assert( sql
97b0: 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48  ite3SchemaMutexH
97c0: 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20  eld(db, iDb, 0) 
97d0: 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67  );.    if( !zRig
97e0: 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75  ht ){.      retu
97f0: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72  rnSingleInt(pPar
9800: 73 65 2c 20 22 63 61 63 68 65 5f 73 69 7a 65 22  se, "cache_size"
9810: 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e  , pDb->pSchema->
9820: 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20  cache_size);.   
9830: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e   }else{.      in
9840: 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33  t size = sqlite3
9850: 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20 20  Atoi(zRight);.  
9860: 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61      pDb->pSchema
9870: 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73  ->cache_size = s
9880: 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ize;.      sqlit
9890: 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65 53  e3BtreeSetCacheS
98a0: 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70 44  ize(pDb->pBt, pD
98b0: 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68  b->pSchema->cach
98c0: 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20  e_size);.    }. 
98d0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
98e0: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
98f0: 20 5b 64 61 74 61 62 61 73 65 2e 5d 6d 6d 61 70   [database.]mmap
9900: 5f 73 69 7a 65 28 4e 29 0a 20 20 2a 2a 0a 20 20  _size(N).  **.  
9910: 2a 2a 20 55 73 65 64 20 74 6f 20 73 65 74 20 6d  ** Used to set m
9920: 61 70 70 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69  apping size limi
9930: 74 2e 20 54 68 65 20 6d 61 70 70 69 6e 67 20 73  t. The mapping s
9940: 69 7a 65 20 6c 69 6d 69 74 20 69 73 0a 20 20 2a  ize limit is.  *
9950: 2a 20 75 73 65 64 20 74 6f 20 6c 69 6d 69 74 20  * used to limit 
9960: 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73 69  the aggregate si
9970: 7a 65 20 6f 66 20 61 6c 6c 20 6d 65 6d 6f 72 79  ze of all memory
9980: 20 6d 61 70 70 65 64 20 72 65 67 69 6f 6e 73 20   mapped regions 
9990: 6f 66 20 74 68 65 0a 20 20 2a 2a 20 64 61 74 61  of the.  ** data
99a0: 62 61 73 65 20 66 69 6c 65 2e 20 49 66 20 74 68  base file. If th
99b0: 69 73 20 70 61 72 61 6d 65 74 65 72 20 69 73 20  is parameter is 
99c0: 73 65 74 20 74 6f 20 7a 65 72 6f 2c 20 74 68 65  set to zero, the
99d0: 6e 20 6d 65 6d 6f 72 79 20 6d 61 70 70 69 6e 67  n memory mapping
99e0: 0a 20 20 2a 2a 20 69 73 20 6e 6f 74 20 75 73 65  .  ** is not use
99f0: 64 20 61 74 20 61 6c 6c 2e 20 20 49 66 20 4e 20  d at all.  If N 
9a00: 69 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68 65  is negative, the
9a10: 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 6d 65  n the default me
9a20: 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20 6c 69  mory map.  ** li
9a30: 6d 69 74 20 64 65 74 65 72 6d 69 6e 65 64 20 62  mit determined b
9a40: 79 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69 67  y sqlite3_config
9a50: 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f 4d  (SQLITE_CONFIG_M
9a60: 4d 41 50 5f 53 49 5a 45 29 20 69 73 20 73 65 74  MAP_SIZE) is set
9a70: 2e 0a 20 20 2a 2a 20 54 68 65 20 70 61 72 61 6d  ..  ** The param
9a80: 65 74 65 72 20 4e 20 69 73 20 6d 65 61 73 75 72  eter N is measur
9a90: 65 64 20 69 6e 20 62 79 74 65 73 2e 0a 20 20 2a  ed in bytes..  *
9aa0: 2a 0a 20 20 2a 2a 20 54 68 69 73 20 76 61 6c 75  *.  ** This valu
9ab0: 65 20 69 73 20 61 64 76 69 73 6f 72 79 2e 20 20  e is advisory.  
9ac0: 54 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 56  The underlying V
9ad0: 46 53 20 69 73 20 66 72 65 65 20 74 6f 20 6d 65  FS is free to me
9ae0: 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20 61 73  mory map.  ** as
9af0: 20 6c 69 74 74 6c 65 20 6f 72 20 61 73 20 6d 75   little or as mu
9b00: 63 68 20 61 73 20 69 74 20 77 61 6e 74 73 2e 20  ch as it wants. 
9b10: 20 45 78 63 65 70 74 2c 20 69 66 20 4e 20 69 73   Except, if N is
9b20: 20 73 65 74 20 74 6f 20 30 20 74 68 65 6e 20 74   set to 0 then t
9b30: 68 65 0a 20 20 2a 2a 20 75 70 70 65 72 20 6c 61  he.  ** upper la
9b40: 79 65 72 73 20 77 69 6c 6c 20 6e 65 76 65 72 20  yers will never 
9b50: 69 6e 76 6f 6b 65 20 74 68 65 20 78 46 65 74 63  invoke the xFetc
9b60: 68 20 69 6e 74 65 72 66 61 63 65 73 20 74 6f 20  h interfaces to 
9b70: 74 68 65 20 56 46 53 2e 0a 20 20 2a 2f 0a 20 20  the VFS..  */.  
9b80: 63 61 73 65 20 50 72 61 67 54 79 70 5f 4d 4d 41  case PragTyp_MMA
9b90: 50 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 73 71  P_SIZE: {.    sq
9ba0: 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 3b 0a  lite3_int64 sz;.
9bb0: 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f 4d  #if SQLITE_MAX_M
9bc0: 4d 41 50 5f 53 49 5a 45 3e 30 0a 20 20 20 20 61  MAP_SIZE>0.    a
9bd0: 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63  ssert( sqlite3Sc
9be0: 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62  hemaMutexHeld(db
9bf0: 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20  , iDb, 0) );.   
9c00: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
9c10: 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20 20       int ii;.   
9c20: 20 20 20 73 71 6c 69 74 65 33 44 65 63 4f 72 48     sqlite3DecOrH
9c30: 65 78 54 6f 49 36 34 28 7a 52 69 67 68 74 2c 20  exToI64(zRight, 
9c40: 26 73 7a 29 3b 0a 20 20 20 20 20 20 69 66 28 20  &sz);.      if( 
9c50: 73 7a 3c 30 20 29 20 73 7a 20 3d 20 73 71 6c 69  sz<0 ) sz = sqli
9c60: 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67 2e  te3GlobalConfig.
9c70: 73 7a 4d 6d 61 70 3b 0a 20 20 20 20 20 20 69 66  szMmap;.      if
9c80: 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 20 64  ( pId2->n==0 ) d
9c90: 62 2d 3e 73 7a 4d 6d 61 70 20 3d 20 73 7a 3b 0a  b->szMmap = sz;.
9ca0: 20 20 20 20 20 20 66 6f 72 28 69 69 3d 64 62 2d        for(ii=db-
9cb0: 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20 69  >nDb-1; ii>=0; i
9cc0: 69 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 69 66  i--){.        if
9cd0: 28 20 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70 42  ( db->aDb[ii].pB
9ce0: 74 20 26 26 20 28 69 69 3d 3d 69 44 62 20 7c 7c  t && (ii==iDb ||
9cf0: 20 70 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b 0a   pId2->n==0) ){.
9d00: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
9d10: 33 42 74 72 65 65 53 65 74 4d 6d 61 70 4c 69 6d  3BtreeSetMmapLim
9d20: 69 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  it(db->aDb[ii].p
9d30: 42 74 2c 20 73 7a 29 3b 0a 20 20 20 20 20 20 20  Bt, sz);.       
9d40: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
9d50: 0a 20 20 20 20 73 7a 20 3d 20 2d 31 3b 0a 20 20  .    sz = -1;.  
9d60: 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 66    rc = sqlite3_f
9d70: 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20  ile_control(db, 
9d80: 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54  zDb, SQLITE_FCNT
9d90: 4c 5f 4d 4d 41 50 5f 53 49 5a 45 2c 20 26 73 7a  L_MMAP_SIZE, &sz
9da0: 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 73 7a 20  );.#else.    sz 
9db0: 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 53 51  = 0;.    rc = SQ
9dc0: 4c 49 54 45 5f 4f 4b 3b 0a 23 65 6e 64 69 66 0a  LITE_OK;.#endif.
9dd0: 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49      if( rc==SQLI
9de0: 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 72  TE_OK ){.      r
9df0: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70  eturnSingleInt(p
9e00: 50 61 72 73 65 2c 20 22 6d 6d 61 70 5f 73 69 7a  Parse, "mmap_siz
9e10: 65 22 2c 20 73 7a 29 3b 0a 20 20 20 20 7d 65 6c  e", sz);.    }el
9e20: 73 65 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  se if( rc!=SQLIT
9e30: 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a 20 20  E_NOTFOUND ){.  
9e40: 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 45 72 72      pParse->nErr
9e50: 2b 2b 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65  ++;.      pParse
9e60: 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 7d  ->rc = rc;.    }
9e70: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
9e80: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
9e90: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 0a 20  GMA temp_store. 
9ea0: 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 65 6d   **   PRAGMA tem
9eb0: 70 5f 73 74 6f 72 65 20 3d 20 22 64 65 66 61 75  p_store = "defau
9ec0: 6c 74 22 7c 22 6d 65 6d 6f 72 79 22 7c 22 66 69  lt"|"memory"|"fi
9ed0: 6c 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65  le".  **.  ** Re
9ee0: 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20  turn or set the 
9ef0: 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74  local value of t
9f00: 68 65 20 74 65 6d 70 5f 73 74 6f 72 65 20 66 6c  he temp_store fl
9f10: 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20  ag.  Changing.  
9f20: 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c  ** the local val
9f30: 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65  ue does not make
9f40: 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20   changes to the 
9f50: 64 69 73 6b 20 66 69 6c 65 20 61 6e 64 20 74 68  disk file and th
9f60: 65 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20 76  e default.  ** v
9f70: 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65 73  alue will be res
9f80: 74 6f 72 65 64 20 74 68 65 20 6e 65 78 74 20 74  tored the next t
9f90: 69 6d 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ime the database
9fa0: 20 69 73 20 6f 70 65 6e 65 64 2e 0a 20 20 2a 2a   is opened..  **
9fb0: 0a 20 20 2a 2a 20 4e 6f 74 65 20 74 68 61 74 20  .  ** Note that 
9fc0: 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20 66  it is possible f
9fd0: 6f 72 20 74 68 65 20 6c 69 62 72 61 72 79 20 63  or the library c
9fe0: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74 69  ompile-time opti
9ff0: 6f 6e 73 20 74 6f 0a 20 20 2a 2a 20 6f 76 65 72  ons to.  ** over
a000: 72 69 64 65 20 74 68 69 73 20 73 65 74 74 69 6e  ride this settin
a010: 67 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  g.  */.  case Pr
a020: 61 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45  agTyp_TEMP_STORE
a030: 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69  : {.    if( !zRi
a040: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ght ){.      ret
a050: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
a060: 72 73 65 2c 20 22 74 65 6d 70 5f 73 74 6f 72 65  rse, "temp_store
a070: 22 2c 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  ", db->temp_stor
a080: 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  e);.    }else{. 
a090: 20 20 20 20 20 63 68 61 6e 67 65 54 65 6d 70 53       changeTempS
a0a0: 74 6f 72 61 67 65 28 70 50 61 72 73 65 2c 20 7a  torage(pParse, z
a0b0: 52 69 67 68 74 29 3b 0a 20 20 20 20 7d 0a 20 20  Right);.    }.  
a0c0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
a0d0: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
a0e0: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
a0f0: 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52 41  ctory.  **   PRA
a100: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  GMA temp_store_d
a110: 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22 64  irectory = ""|"d
a120: 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a 20  irectory_name". 
a130: 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20   **.  ** Return 
a140: 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c  or set the local
a150: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 74 65   value of the te
a160: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
a170: 72 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69  ry flag.  Changi
a180: 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75  ng.  ** the valu
a190: 65 20 73 65 74 73 20 61 20 73 70 65 63 69 66 69  e sets a specifi
a1a0: 63 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20 62  c directory to b
a1b0: 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70 6f  e used for tempo
a1c0: 72 61 72 79 20 66 69 6c 65 73 2e 0a 20 20 2a 2a  rary files..  **
a1d0: 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e 75   Setting to a nu
a1e0: 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72 74  ll string revert
a1f0: 73 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c 74  s to the default
a200: 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65 63   temporary direc
a210: 74 6f 72 79 20 73 65 61 72 63 68 2e 0a 20 20 2a  tory search..  *
a220: 2a 20 49 66 20 74 65 6d 70 6f 72 61 72 79 20 64  * If temporary d
a230: 69 72 65 63 74 6f 72 79 20 69 73 20 63 68 61 6e  irectory is chan
a240: 67 65 64 2c 20 74 68 65 6e 20 69 6e 76 61 6c 69  ged, then invali
a250: 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65 2e  dateTempStorage.
a260: 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73  .  **.  */.  cas
a270: 65 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f 53  e PragTyp_TEMP_S
a280: 54 4f 52 45 5f 44 49 52 45 43 54 4f 52 59 3a 20  TORE_DIRECTORY: 
a290: 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68  {.    if( !zRigh
a2a0: 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73  t ){.      if( s
a2b0: 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72 65  qlite3_temp_dire
a2c0: 63 74 6f 72 79 20 29 7b 0a 20 20 20 20 20 20 20  ctory ){.       
a2d0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
a2e0: 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
a2f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
a300: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
a310: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
a320: 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 74 65  .            "te
a330: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
a340: 72 79 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ry", SQLITE_STAT
a350: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  IC);.        sql
a360: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
a370: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
a380: 20 31 2c 20 30 2c 20 73 71 6c 69 74 65 33 5f 74   1, 0, sqlite3_t
a390: 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 2c 20 30  emp_directory, 0
a3a0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
a3b0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
a3c0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
a3d0: 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   1);.      }.   
a3e0: 20 7d 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66 20   }else{.#ifndef 
a3f0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44 0a  SQLITE_OMIT_WSD.
a400: 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74        if( zRight
a410: 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 69  [0] ){.        i
a420: 6e 74 20 72 65 73 3b 0a 20 20 20 20 20 20 20 20  nt res;.        
a430: 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41 63  rc = sqlite3OsAc
a440: 63 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20 7a  cess(db->pVfs, z
a450: 52 69 67 68 74 2c 20 53 51 4c 49 54 45 5f 41 43  Right, SQLITE_AC
a460: 43 45 53 53 5f 52 45 41 44 57 52 49 54 45 2c 20  CESS_READWRITE, 
a470: 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20 69  &res);.        i
a480: 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc!=SQLITE_OK
a490: 20 7c 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20 20   || res==0 ){.  
a4a0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 45          sqlite3E
a4b0: 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20  rrorMsg(pParse, 
a4c0: 22 6e 6f 74 20 61 20 77 72 69 74 61 62 6c 65 20  "not a writable 
a4d0: 64 69 72 65 63 74 6f 72 79 22 29 3b 0a 20 20 20  directory");.   
a4e0: 20 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61 67         goto prag
a4f0: 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20 20  ma_out;.        
a500: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
a510: 69 66 28 20 53 51 4c 49 54 45 5f 54 45 4d 50 5f  if( SQLITE_TEMP_
a520: 53 54 4f 52 45 3d 3d 30 0a 20 20 20 20 20 20 20  STORE==0.       
a530: 7c 7c 20 28 53 51 4c 49 54 45 5f 54 45 4d 50 5f  || (SQLITE_TEMP_
a540: 53 54 4f 52 45 3d 3d 31 20 26 26 20 64 62 2d 3e  STORE==1 && db->
a550: 74 65 6d 70 5f 73 74 6f 72 65 3c 3d 31 29 0a 20  temp_store<=1). 
a560: 20 20 20 20 20 20 7c 7c 20 28 53 51 4c 49 54 45        || (SQLITE
a570: 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 32 20 26  _TEMP_STORE==2 &
a580: 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65  & db->temp_store
a590: 3d 3d 31 29 0a 20 20 20 20 20 20 29 7b 0a 20 20  ==1).      ){.  
a5a0: 20 20 20 20 20 20 69 6e 76 61 6c 69 64 61 74 65        invalidate
a5b0: 54 65 6d 70 53 74 6f 72 61 67 65 28 70 50 61 72  TempStorage(pPar
a5c0: 73 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  se);.      }.   
a5d0: 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28     sqlite3_free(
a5e0: 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72  sqlite3_temp_dir
a5f0: 65 63 74 6f 72 79 29 3b 0a 20 20 20 20 20 20 69  ectory);.      i
a600: 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a  f( zRight[0] ){.
a610: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
a620: 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 3d  temp_directory =
a630: 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74 66   sqlite3_mprintf
a640: 28 22 25 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a  ("%s", zRight);.
a650: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
a660: 20 20 20 20 20 73 71 6c 69 74 65 33 5f 74 65 6d       sqlite3_tem
a670: 70 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 30 3b  p_directory = 0;
a680: 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 20  .      }.#endif 
a690: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  /* SQLITE_OMIT_W
a6a0: 53 44 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20 20  SD */.    }.    
a6b0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66 20  break;.  }..#if 
a6c0: 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 0a 20 20  SQLITE_OS_WIN.  
a6d0: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
a6e0: 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65   data_store_dire
a6f0: 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52 41  ctory.  **   PRA
a700: 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64  GMA data_store_d
a710: 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22 64  irectory = ""|"d
a720: 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a 20  irectory_name". 
a730: 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20   **.  ** Return 
a740: 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61 6c  or set the local
a750: 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61   value of the da
a760: 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  ta_store_directo
a770: 72 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69  ry flag.  Changi
a780: 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75  ng.  ** the valu
a790: 65 20 73 65 74 73 20 61 20 73 70 65 63 69 66 69  e sets a specifi
a7a0: 63 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20 62  c directory to b
a7b0: 65 20 75 73 65 64 20 66 6f 72 20 64 61 74 61 62  e used for datab
a7c0: 61 73 65 20 66 69 6c 65 73 20 74 68 61 74 0a 20  ase files that. 
a7d0: 20 2a 2a 20 77 65 72 65 20 73 70 65 63 69 66 69   ** were specifi
a7e0: 65 64 20 77 69 74 68 20 61 20 72 65 6c 61 74 69  ed with a relati
a7f0: 76 65 20 70 61 74 68 6e 61 6d 65 2e 20 20 53 65  ve pathname.  Se
a800: 74 74 69 6e 67 20 74 6f 20 61 20 6e 75 6c 6c 20  tting to a null 
a810: 73 74 72 69 6e 67 20 72 65 76 65 72 74 73 0a 20  string reverts. 
a820: 20 2a 2a 20 74 6f 20 74 68 65 20 64 65 66 61 75   ** to the defau
a830: 6c 74 20 64 61 74 61 62 61 73 65 20 64 69 72 65  lt database dire
a840: 63 74 6f 72 79 2c 20 77 68 69 63 68 20 66 6f 72  ctory, which for
a850: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73 20   database files 
a860: 73 70 65 63 69 66 69 65 64 20 77 69 74 68 0a 20  specified with. 
a870: 20 2a 2a 20 61 20 72 65 6c 61 74 69 76 65 20 70   ** a relative p
a880: 61 74 68 20 77 69 6c 6c 20 70 72 6f 62 61 62 6c  ath will probabl
a890: 79 20 62 65 20 62 61 73 65 64 20 6f 6e 20 74 68  y be based on th
a8a0: 65 20 63 75 72 72 65 6e 74 20 64 69 72 65 63 74  e current direct
a8b0: 6f 72 79 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  ory for the.  **
a8c0: 20 70 72 6f 63 65 73 73 2e 20 20 44 61 74 61 62   process.  Datab
a8d0: 61 73 65 20 66 69 6c 65 20 73 70 65 63 69 66 69  ase file specifi
a8e0: 65 64 20 77 69 74 68 20 61 6e 20 61 62 73 6f 6c  ed with an absol
a8f0: 75 74 65 20 70 61 74 68 20 61 72 65 20 6e 6f 74  ute path are not
a900: 20 69 6d 70 61 63 74 65 64 0a 20 20 2a 2a 20 62   impacted.  ** b
a910: 79 20 74 68 69 73 20 73 65 74 74 69 6e 67 2c 20  y this setting, 
a920: 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 69 74  regardless of it
a930: 73 20 76 61 6c 75 65 2e 0a 20 20 2a 2a 0a 20 20  s value..  **.  
a940: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
a950: 70 5f 44 41 54 41 5f 53 54 4f 52 45 5f 44 49 52  p_DATA_STORE_DIR
a960: 45 43 54 4f 52 59 3a 20 7b 0a 20 20 20 20 69 66  ECTORY: {.    if
a970: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
a980: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f 64     if( sqlite3_d
a990: 61 74 61 5f 64 69 72 65 63 74 6f 72 79 20 29 7b  ata_directory ){
a9a0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
a9b0: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
a9c0: 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 1);.        sq
a9d0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
a9e0: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
a9f0: 45 5f 4e 41 4d 45 2c 20 0a 20 20 20 20 20 20 20  E_NAME, .       
aa00: 20 20 20 20 20 22 64 61 74 61 5f 73 74 6f 72 65       "data_store
aa10: 5f 64 69 72 65 63 74 6f 72 79 22 2c 20 53 51 4c  _directory", SQL
aa20: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
aa30: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
aa40: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
aa50: 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 73  ing8, 0, 1, 0, s
aa60: 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65  qlite3_data_dire
aa70: 63 74 6f 72 79 2c 20 30 29 3b 0a 20 20 20 20 20  ctory, 0);.     
aa80: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
aa90: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
aaa0: 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20  tRow, 1, 1);.   
aab0: 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b 0a     }.    }else{.
aac0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
aad0: 4d 49 54 5f 57 53 44 0a 20 20 20 20 20 20 69 66  MIT_WSD.      if
aae0: 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a 20  ( zRight[0] ){. 
aaf0: 20 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a         int res;.
ab00: 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71 6c          rc = sql
ab10: 69 74 65 33 4f 73 41 63 63 65 73 73 28 64 62 2d  ite3OsAccess(db-
ab20: 3e 70 56 66 73 2c 20 7a 52 69 67 68 74 2c 20 53  >pVfs, zRight, S
ab30: 51 4c 49 54 45 5f 41 43 43 45 53 53 5f 52 45 41  QLITE_ACCESS_REA
ab40: 44 57 52 49 54 45 2c 20 26 72 65 73 29 3b 0a 20  DWRITE, &res);. 
ab50: 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d 53         if( rc!=S
ab60: 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d  QLITE_OK || res=
ab70: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
ab80: 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
ab90: 70 50 61 72 73 65 2c 20 22 6e 6f 74 20 61 20 77  pParse, "not a w
aba0: 72 69 74 61 62 6c 65 20 64 69 72 65 63 74 6f 72  ritable director
abb0: 79 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20 67  y");.          g
abc0: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
abd0: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
abe0: 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  }.      sqlite3_
abf0: 66 72 65 65 28 73 71 6c 69 74 65 33 5f 64 61 74  free(sqlite3_dat
ac00: 61 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20  a_directory);.  
ac10: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30      if( zRight[0
ac20: 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ] ){.        sql
ac30: 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74  ite3_data_direct
ac40: 6f 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70  ory = sqlite3_mp
ac50: 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 52 69 67  rintf("%s", zRig
ac60: 68 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ht);.      }else
ac70: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
ac80: 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79  3_data_directory
ac90: 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65   = 0;.      }.#e
aca0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
acb0: 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d  MIT_WSD */.    }
acc0: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
acd0: 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c 49  #endif..#if SQLI
ace0: 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e  TE_ENABLE_LOCKIN
acf0: 47 5f 53 54 59 4c 45 0a 20 20 2f 2a 0a 20 20 2a  G_STYLE.  /*.  *
ad00: 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  *   PRAGMA [data
ad10: 62 61 73 65 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79  base.]lock_proxy
ad20: 5f 66 69 6c 65 0a 20 20 2a 2a 20 20 20 50 52 41  _file.  **   PRA
ad30: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c  GMA [database.]l
ad40: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 20 3d  ock_proxy_file =
ad50: 20 22 3a 61 75 74 6f 3a 22 7c 22 6c 6f 63 6b 5f   ":auto:"|"lock_
ad60: 66 69 6c 65 5f 70 61 74 68 22 0a 20 20 2a 2a 0a  file_path".  **.
ad70: 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20 73    ** Return or s
ad80: 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  et the value of 
ad90: 74 68 65 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66  the lock_proxy_f
ada0: 69 6c 65 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ile flag.  Chang
adb0: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c  ing.  ** the val
adc0: 75 65 20 73 65 74 73 20 61 20 73 70 65 63 69 66  ue sets a specif
add0: 69 63 20 66 69 6c 65 20 74 6f 20 62 65 20 75 73  ic file to be us
ade0: 65 64 20 66 6f 72 20 64 61 74 61 62 61 73 65 20  ed for database 
adf0: 61 63 63 65 73 73 20 6c 6f 63 6b 73 2e 0a 20 20  access locks..  
ae00: 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  **.  */.  case P
ae10: 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 50 52 4f 58  ragTyp_LOCK_PROX
ae20: 59 5f 46 49 4c 45 3a 20 7b 0a 20 20 20 20 69 66  Y_FILE: {.    if
ae30: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
ae40: 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65 72     Pager *pPager
ae50: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 50   = sqlite3BtreeP
ae60: 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b 0a  ager(pDb->pBt);.
ae70: 20 20 20 20 20 20 63 68 61 72 20 2a 70 72 6f 78        char *prox
ae80: 79 5f 66 69 6c 65 5f 70 61 74 68 20 3d 20 4e 55  y_file_path = NU
ae90: 4c 4c 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  LL;.      sqlite
aea0: 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20 3d 20  3_file *pFile = 
aeb0: 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c 65  sqlite3PagerFile
aec0: 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20 20  (pPager);.      
aed0: 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e  sqlite3OsFileCon
aee0: 74 72 6f 6c 48 69 6e 74 28 70 46 69 6c 65 2c 20  trolHint(pFile, 
aef0: 53 51 4c 49 54 45 5f 47 45 54 5f 4c 4f 43 4b 50  SQLITE_GET_LOCKP
af00: 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20 20  ROXYFILE, .     
af10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
af20: 20 20 20 20 20 20 26 70 72 6f 78 79 5f 66 69 6c        &proxy_fil
af30: 65 5f 70 61 74 68 29 3b 0a 20 20 20 20 20 20 0a  e_path);.      .
af40: 20 20 20 20 20 20 69 66 28 20 70 72 6f 78 79 5f        if( proxy_
af50: 66 69 6c 65 5f 70 61 74 68 20 29 7b 0a 20 20 20  file_path ){.   
af60: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
af70: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
af80: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
af90: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
afa0: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
afb0: 4d 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  ME, .           
afc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
afd0: 20 20 20 22 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66     "lock_proxy_f
afe0: 69 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ile", SQLITE_STA
aff0: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71  TIC);.        sq
b000: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
b010: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
b020: 2c 20 31 2c 20 30 2c 20 70 72 6f 78 79 5f 66 69  , 1, 0, proxy_fi
b030: 6c 65 5f 70 61 74 68 2c 20 30 29 3b 0a 20 20 20  le_path, 0);.   
b040: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
b050: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
b060: 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20  ultRow, 1, 1);. 
b070: 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65       }.    }else
b080: 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20 2a 70  {.      Pager *p
b090: 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42  Pager = sqlite3B
b0a0: 74 72 65 65 50 61 67 65 72 28 70 44 62 2d 3e 70  treePager(pDb->p
b0b0: 42 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Bt);.      sqlit
b0c0: 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20 3d  e3_file *pFile =
b0d0: 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c   sqlite3PagerFil
b0e0: 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20  e(pPager);.     
b0f0: 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20 20   int res;.      
b100: 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b  if( zRight[0] ){
b110: 0a 20 20 20 20 20 20 20 20 72 65 73 3d 73 71 6c  .        res=sql
b120: 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72 6f  ite3OsFileContro
b130: 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f  l(pFile, SQLITE_
b140: 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c  SET_LOCKPROXYFIL
b150: 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  E, .            
b160: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b170: 20 20 20 20 20 20 20 20 20 7a 52 69 67 68 74 29           zRight)
b180: 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20 7b  ;.      } else {
b190: 0a 20 20 20 20 20 20 20 20 72 65 73 3d 73 71 6c  .        res=sql
b1a0: 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72 6f  ite3OsFileContro
b1b0: 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45 5f  l(pFile, SQLITE_
b1c0: 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49 4c  SET_LOCKPROXYFIL
b1d0: 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  E, .            
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 4e 55 4c 4c 29 3b 0a           NULL);.
b200: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66        }.      if
b210: 28 20 72 65 73 21 3d 53 51 4c 49 54 45 5f 4f 4b  ( res!=SQLITE_OK
b220: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
b230: 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72  te3ErrorMsg(pPar
b240: 73 65 2c 20 22 66 61 69 6c 65 64 20 74 6f 20 73  se, "failed to s
b250: 65 74 20 6c 6f 63 6b 20 70 72 6f 78 79 20 66 69  et lock proxy fi
b260: 6c 65 22 29 3b 0a 20 20 20 20 20 20 20 20 67 6f  le");.        go
b270: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
b280: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
b290: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
b2a0: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e 41  if /* SQLITE_ENA
b2b0: 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c  BLE_LOCKING_STYL
b2c0: 45 20 2a 2f 20 20 20 20 20 20 0a 20 20 20 20 0a  E */      .    .
b2d0: 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
b2e0: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 79  MA [database.]sy
b2f0: 6e 63 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20 20  nchronous.  **  
b300: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
b310: 65 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f  e.]synchronous=O
b320: 46 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c 7c 46 55 4c  FF|ON|NORMAL|FUL
b330: 4c 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  L.  **.  ** Retu
b340: 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f  rn or set the lo
b350: 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65  cal value of the
b360: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 66 6c 61   synchronous fla
b370: 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20 2a  g.  Changing.  *
b380: 2a 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75  * the local valu
b390: 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65 20  e does not make 
b3a0: 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20 64  changes to the d
b3b0: 69 73 6b 20 66 69 6c 65 20 61 6e 64 20 74 68 65  isk file and the
b3c0: 0a 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 76 61  .  ** default va
b3d0: 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65 73 74  lue will be rest
b3e0: 6f 72 65 64 20 74 68 65 20 6e 65 78 74 20 74 69  ored the next ti
b3f0: 6d 65 20 74 68 65 20 64 61 74 61 62 61 73 65 20  me the database 
b400: 69 73 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 2e 0a  is.  ** opened..
b410: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
b420: 54 79 70 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 3a  Typ_SYNCHRONOUS:
b430: 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67   {.    if( !zRig
b440: 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75  ht ){.      retu
b450: 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72  rnSingleInt(pPar
b460: 73 65 2c 20 22 73 79 6e 63 68 72 6f 6e 6f 75 73  se, "synchronous
b470: 22 2c 20 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c  ", pDb->safety_l
b480: 65 76 65 6c 2d 31 29 3b 0a 20 20 20 20 7d 65 6c  evel-1);.    }el
b490: 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 21 64  se{.      if( !d
b4a0: 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29 7b  b->autoCommit ){
b4b0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
b4c0: 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c  ErrorMsg(pParse,
b4d0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 53   .            "S
b4e0: 61 66 65 74 79 20 6c 65 76 65 6c 20 6d 61 79 20  afety level may 
b4f0: 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20 69  not be changed i
b500: 6e 73 69 64 65 20 61 20 74 72 61 6e 73 61 63 74  nside a transact
b510: 69 6f 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c  ion");.      }el
b520: 73 65 7b 0a 20 20 20 20 20 20 20 20 70 44 62 2d  se{.        pDb-
b530: 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20  >safety_level = 
b540: 67 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 7a  getSafetyLevel(z
b550: 52 69 67 68 74 2c 30 2c 31 29 2b 31 3b 0a 20 20  Right,0,1)+1;.  
b560: 20 20 20 20 20 20 73 65 74 41 6c 6c 50 61 67 65        setAllPage
b570: 72 46 6c 61 67 73 28 64 62 29 3b 0a 20 20 20 20  rFlags(db);.    
b580: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72    }.    }.    br
b590: 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20  eak;.  }.#endif 
b5a0: 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  /* SQLITE_OMIT_P
b5b0: 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a  AGER_PRAGMAS */.
b5c0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
b5d0: 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41  OMIT_FLAG_PRAGMA
b5e0: 53 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  S.  case PragTyp
b5f0: 5f 46 4c 41 47 3a 20 7b 0a 20 20 20 20 69 66 28  _FLAG: {.    if(
b600: 20 7a 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20   zRight==0 ){.  
b610: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
b620: 49 6e 74 28 70 50 61 72 73 65 2c 20 61 50 72 61  Int(pParse, aPra
b630: 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 7a 4e  gmaNames[mid].zN
b640: 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ame,.           
b650: 20 20 20 20 20 20 20 20 20 20 28 64 62 2d 3e 66            (db->f
b660: 6c 61 67 73 20 26 20 61 50 72 61 67 6d 61 4e 61  lags & aPragmaNa
b670: 6d 65 73 5b 6d 69 64 5d 2e 69 41 72 67 29 21 3d  mes[mid].iArg)!=
b680: 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  0 );.    }else{.
b690: 20 20 20 20 20 20 69 6e 74 20 6d 61 73 6b 20 3d        int mask =
b6a0: 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69   aPragmaNames[mi
b6b0: 64 5d 2e 69 41 72 67 3b 20 20 20 20 2f 2a 20 4d  d].iArg;    /* M
b6c0: 61 73 6b 20 6f 66 20 62 69 74 73 20 74 6f 20 73  ask of bits to s
b6d0: 65 74 20 6f 72 20 63 6c 65 61 72 2e 20 2a 2f 0a  et or clear. */.
b6e0: 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75        if( db->au
b6f0: 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 7b 0a 20  toCommit==0 ){. 
b700: 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 65 69 67         /* Foreig
b710: 6e 20 6b 65 79 20 73 75 70 70 6f 72 74 20 6d 61  n key support ma
b720: 79 20 6e 6f 74 20 62 65 20 65 6e 61 62 6c 65 64  y not be enabled
b730: 20 6f 72 20 64 69 73 61 62 6c 65 64 20 77 68 69   or disabled whi
b740: 6c 65 20 6e 6f 74 0a 20 20 20 20 20 20 20 20 2a  le not.        *
b750: 2a 20 69 6e 20 61 75 74 6f 2d 63 6f 6d 6d 69 74  * in auto-commit
b760: 20 6d 6f 64 65 2e 20 20 2a 2f 0a 20 20 20 20 20   mode.  */.     
b770: 20 20 20 6d 61 73 6b 20 26 3d 20 7e 28 53 51 4c     mask &= ~(SQL
b780: 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 29  ITE_ForeignKeys)
b790: 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
b7a0: 20 69 66 28 20 73 71 6c 69 74 65 33 47 65 74 42   if( sqlite3GetB
b7b0: 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30  oolean(zRight, 0
b7c0: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d  ) ){.        db-
b7d0: 3e 66 6c 61 67 73 20 7c 3d 20 6d 61 73 6b 3b 0a  >flags |= mask;.
b7e0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
b7f0: 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 26       db->flags &
b800: 3d 20 7e 6d 61 73 6b 3b 0a 20 20 20 20 20 20 20  = ~mask;.       
b810: 20 69 66 28 20 6d 61 73 6b 3d 3d 53 51 4c 49 54   if( mask==SQLIT
b820: 45 5f 44 65 66 65 72 46 4b 73 20 29 20 64 62 2d  E_DeferFKs ) db-
b830: 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e  >nDeferredImmCon
b840: 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 0a  s = 0;.      }..
b850: 20 20 20 20 20 20 2f 2a 20 4d 61 6e 79 20 6f 66        /* Many of
b860: 20 74 68 65 20 66 6c 61 67 2d 70 72 61 67 6d 61   the flag-pragma
b870: 73 20 6d 6f 64 69 66 79 20 74 68 65 20 63 6f 64  s modify the cod
b880: 65 20 67 65 6e 65 72 61 74 65 64 20 62 79 20 74  e generated by t
b890: 68 65 20 53 51 4c 20 0a 20 20 20 20 20 20 2a 2a  he SQL .      **
b8a0: 20 63 6f 6d 70 69 6c 65 72 20 28 65 67 2e 20 63   compiler (eg. c
b8b0: 6f 75 6e 74 5f 63 68 61 6e 67 65 73 29 2e 20 53  ount_changes). S
b8c0: 6f 20 61 64 64 20 61 6e 20 6f 70 63 6f 64 65 20  o add an opcode 
b8d0: 74 6f 20 65 78 70 69 72 65 20 61 6c 6c 0a 20 20  to expire all.  
b8e0: 20 20 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 64 20      ** compiled 
b8f0: 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 61  SQL statements a
b900: 66 74 65 72 20 6d 6f 64 69 66 79 69 6e 67 20 61  fter modifying a
b910: 20 70 72 61 67 6d 61 20 76 61 6c 75 65 2e 0a 20   pragma value.. 
b920: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71       */.      sq
b930: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
b940: 76 2c 20 4f 50 5f 45 78 70 69 72 65 2c 20 30 2c  v, OP_Expire, 0,
b950: 20 30 29 3b 0a 20 20 20 20 20 20 73 65 74 41 6c   0);.      setAl
b960: 6c 50 61 67 65 72 46 6c 61 67 73 28 64 62 29 3b  lPagerFlags(db);
b970: 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b  .    }.    break
b980: 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  ;.  }.#endif /* 
b990: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47  SQLITE_OMIT_FLAG
b9a0: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66  _PRAGMAS */..#if
b9b0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
b9c0: 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d 41 53 0a  _SCHEMA_PRAGMAS.
b9d0: 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
b9e0: 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28 3c 74  MA table_info(<t
b9f0: 61 62 6c 65 3e 29 0a 20 20 2a 2a 0a 20 20 2a 2a  able>).  **.  **
ba00: 20 52 65 74 75 72 6e 20 61 20 73 69 6e 67 6c 65   Return a single
ba10: 20 72 6f 77 20 66 6f 72 20 65 61 63 68 20 63 6f   row for each co
ba20: 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 61 6d 65  lumn of the name
ba30: 64 20 74 61 62 6c 65 2e 20 54 68 65 20 63 6f 6c  d table. The col
ba40: 75 6d 6e 73 20 6f 66 0a 20 20 2a 2a 20 74 68 65  umns of.  ** the
ba50: 20 72 65 74 75 72 6e 65 64 20 64 61 74 61 20 73   returned data s
ba60: 65 74 20 61 72 65 3a 0a 20 20 2a 2a 0a 20 20 2a  et are:.  **.  *
ba70: 2a 20 63 69 64 3a 20 20 20 20 20 20 20 20 43 6f  * cid:        Co
ba80: 6c 75 6d 6e 20 69 64 20 28 6e 75 6d 62 65 72 65  lumn id (numbere
ba90: 64 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72  d from left to r
baa0: 69 67 68 74 2c 20 73 74 61 72 74 69 6e 67 20 61  ight, starting a
bab0: 74 20 30 29 0a 20 20 2a 2a 20 6e 61 6d 65 3a 20  t 0).  ** name: 
bac0: 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 6e 61 6d        Column nam
bad0: 65 0a 20 20 2a 2a 20 74 79 70 65 3a 20 20 20 20  e.  ** type:    
bae0: 20 20 20 43 6f 6c 75 6d 6e 20 64 65 63 6c 61 72     Column declar
baf0: 61 74 69 6f 6e 20 74 79 70 65 2e 0a 20 20 2a 2a  ation type..  **
bb00: 20 6e 6f 74 6e 75 6c 6c 3a 20 20 20 20 54 72 75   notnull:    Tru
bb10: 65 20 69 66 20 27 4e 4f 54 20 4e 55 4c 4c 27 20  e if 'NOT NULL' 
bb20: 69 73 20 70 61 72 74 20 6f 66 20 63 6f 6c 75 6d  is part of colum
bb30: 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 0a 20 20  n declaration.  
bb40: 2a 2a 20 64 66 6c 74 5f 76 61 6c 75 65 3a 20 54  ** dflt_value: T
bb50: 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65  he default value
bb60: 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2c   for the column,
bb70: 20 69 66 20 61 6e 79 2e 0a 20 20 2a 2f 0a 20 20   if any..  */.  
bb80: 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 41 42  case PragTyp_TAB
bb90: 4c 45 5f 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69  LE_INFO: if( zRi
bba0: 67 68 74 20 29 7b 0a 20 20 20 20 54 61 62 6c 65  ght ){.    Table
bbb0: 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 54 61 62   *pTab;.    pTab
bbc0: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61   = sqlite3FindTa
bbd0: 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20  ble(db, zRight, 
bbe0: 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54  zDb);.    if( pT
bbf0: 61 62 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20  ab ){.      int 
bc00: 69 2c 20 6b 3b 0a 20 20 20 20 20 20 69 6e 74 20  i, k;.      int 
bc10: 6e 48 69 64 64 65 6e 20 3d 20 30 3b 0a 20 20 20  nHidden = 0;.   
bc20: 20 20 20 43 6f 6c 75 6d 6e 20 2a 70 43 6f 6c 3b     Column *pCol;
bc30: 0a 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 50  .      Index *pP
bc40: 6b 20 3d 20 73 71 6c 69 74 65 33 50 72 69 6d 61  k = sqlite3Prima
bc50: 72 79 4b 65 79 49 6e 64 65 78 28 70 54 61 62 29  ryKeyIndex(pTab)
bc60: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
bc70: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
bc80: 20 36 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73   6);.      pPars
bc90: 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20  e->nMem = 6;.   
bca0: 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65     sqlite3CodeVe
bcb0: 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73  rifySchema(pPars
bcc0: 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73  e, iDb);.      s
bcd0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
bce0: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
bcf0: 4d 45 5f 4e 41 4d 45 2c 20 22 63 69 64 22 2c 20  ME_NAME, "cid", 
bd00: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
bd10: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
bd20: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31  eSetColName(v, 1
bd30: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
bd40: 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53  "name", SQLITE_S
bd50: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
bd60: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
bd70: 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d  ame(v, 2, COLNAM
bd80: 45 5f 4e 41 4d 45 2c 20 22 74 79 70 65 22 2c 20  E_NAME, "type", 
bd90: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
bda0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
bdb0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33  eSetColName(v, 3
bdc0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
bdd0: 22 6e 6f 74 6e 75 6c 6c 22 2c 20 53 51 4c 49 54  "notnull", SQLIT
bde0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
bdf0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
be00: 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c 20 43 4f 4c  olName(v, 4, COL
be10: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 64 66 6c 74  NAME_NAME, "dflt
be20: 5f 76 61 6c 75 65 22 2c 20 53 51 4c 49 54 45 5f  _value", SQLITE_
be30: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
be40: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
be50: 4e 61 6d 65 28 76 2c 20 35 2c 20 43 4f 4c 4e 41  Name(v, 5, COLNA
be60: 4d 45 5f 4e 41 4d 45 2c 20 22 70 6b 22 2c 20 53  ME_NAME, "pk", S
be70: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
be80: 20 20 20 20 20 73 71 6c 69 74 65 33 56 69 65 77       sqlite3View
be90: 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 70  GetColumnNames(p
bea0: 50 61 72 73 65 2c 20 70 54 61 62 29 3b 0a 20 20  Parse, pTab);.  
beb0: 20 20 20 20 66 6f 72 28 69 3d 30 2c 20 70 43 6f      for(i=0, pCo
bec0: 6c 3d 70 54 61 62 2d 3e 61 43 6f 6c 3b 20 69 3c  l=pTab->aCol; i<
bed0: 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20 69 2b 2b 2c  pTab->nCol; i++,
bee0: 20 70 43 6f 6c 2b 2b 29 7b 0a 20 20 20 20 20 20   pCol++){.      
bef0: 20 20 69 66 28 20 49 73 48 69 64 64 65 6e 43 6f    if( IsHiddenCo
bf00: 6c 75 6d 6e 28 70 43 6f 6c 29 20 29 7b 0a 20 20  lumn(pCol) ){.  
bf10: 20 20 20 20 20 20 20 20 6e 48 69 64 64 65 6e 2b          nHidden+
bf20: 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e  +;.          con
bf30: 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 7d  tinue;.        }
bf40: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
bf50: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
bf60: 5f 49 6e 74 65 67 65 72 2c 20 69 2d 6e 48 69 64  _Integer, i-nHid
bf70: 64 65 6e 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  den, 1);.       
bf80: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
bf90: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
bfa0: 2c 20 30 2c 20 32 2c 20 30 2c 20 70 43 6f 6c 2d  , 0, 2, 0, pCol-
bfb0: 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20  >zName, 0);.    
bfc0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
bfd0: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
bfe0: 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20  ng8, 0, 3, 0,.  
bff0: 20 20 20 20 20 20 20 20 20 70 43 6f 6c 2d 3e 7a           pCol->z
c000: 54 79 70 65 20 3f 20 70 43 6f 6c 2d 3e 7a 54 79  Type ? pCol->zTy
c010: 70 65 20 3a 20 22 22 2c 20 30 29 3b 0a 20 20 20  pe : "", 0);.   
c020: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c030: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
c040: 65 67 65 72 2c 20 28 70 43 6f 6c 2d 3e 6e 6f 74  eger, (pCol->not
c050: 4e 75 6c 6c 20 3f 20 31 20 3a 20 30 29 2c 20 34  Null ? 1 : 0), 4
c060: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
c070: 43 6f 6c 2d 3e 7a 44 66 6c 74 20 29 7b 0a 20 20  Col->zDflt ){.  
c080: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
c090: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
c0a0: 53 74 72 69 6e 67 38 2c 20 30 2c 20 35 2c 20 30  String8, 0, 5, 0
c0b0: 2c 20 28 63 68 61 72 2a 29 70 43 6f 6c 2d 3e 7a  , (char*)pCol->z
c0c0: 44 66 6c 74 2c 20 30 29 3b 0a 20 20 20 20 20 20  Dflt, 0);.      
c0d0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
c0e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c0f0: 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 75 6c 6c 2c  dOp2(v, OP_Null,
c100: 20 30 2c 20 35 29 3b 0a 20 20 20 20 20 20 20 20   0, 5);.        
c110: 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 70  }.        if( (p
c120: 43 6f 6c 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20  Col->colFlags & 
c130: 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 29  COLFLAG_PRIMKEY)
c140: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
c150: 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20   k = 0;.        
c160: 7d 65 6c 73 65 20 69 66 28 20 70 50 6b 3d 3d 30  }else if( pPk==0
c170: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20   ){.          k 
c180: 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  = 1;.        }el
c190: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f  se{.          fo
c1a0: 72 28 6b 3d 31 3b 20 41 4c 57 41 59 53 28 6b 3c  r(k=1; ALWAYS(k<
c1b0: 3d 70 54 61 62 2d 3e 6e 43 6f 6c 29 20 26 26 20  =pTab->nCol) && 
c1c0: 70 50 6b 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 2d  pPk->aiColumn[k-
c1d0: 31 5d 21 3d 69 3b 20 6b 2b 2b 29 7b 7d 0a 20 20  1]!=i; k++){}.  
c1e0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
c1f0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c200: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
c210: 20 6b 2c 20 36 29 3b 0a 20 20 20 20 20 20 20 20   k, 6);.        
c220: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c230: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
c240: 77 2c 20 31 2c 20 36 29 3b 0a 20 20 20 20 20 20  w, 1, 6);.      
c250: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  }.    }.  }.  br
c260: 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61  eak;..  case Pra
c270: 67 54 79 70 5f 53 54 41 54 53 3a 20 7b 0a 20 20  gTyp_STATS: {.  
c280: 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20    Index *pIdx;. 
c290: 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 69 3b 0a     HashElem *i;.
c2a0: 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47      v = sqlite3G
c2b0: 65 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a  etVdbe(pParse);.
c2c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
c2d0: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 34 29 3b  etNumCols(v, 4);
c2e0: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  .    pParse->nMe
c2f0: 6d 20 3d 20 34 3b 0a 20 20 20 20 73 71 6c 69 74  m = 4;.    sqlit
c300: 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
c310: 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b  ma(pParse, iDb);
c320: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
c330: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
c340: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
c350: 74 61 62 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53  table", SQLITE_S
c360: 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69  TATIC);.    sqli
c370: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
c380: 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 1, COLNAME_
c390: 4e 41 4d 45 2c 20 22 69 6e 64 65 78 22 2c 20 53  NAME, "index", S
c3a0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
c3b0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
c3c0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43  tColName(v, 2, C
c3d0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 77 69  OLNAME_NAME, "wi
c3e0: 64 74 68 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  dth", SQLITE_STA
c3f0: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
c400: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
c410: 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 3, COLNAME_NA
c420: 4d 45 2c 20 22 68 65 69 67 68 74 22 2c 20 53 51  ME, "height", SQ
c430: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
c440: 20 20 66 6f 72 28 69 3d 73 71 6c 69 74 65 48 61    for(i=sqliteHa
c450: 73 68 46 69 72 73 74 28 26 70 44 62 2d 3e 70 53  shFirst(&pDb->pS
c460: 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68 29 3b  chema->tblHash);
c470: 20 69 3b 20 69 3d 73 71 6c 69 74 65 48 61 73 68   i; i=sqliteHash
c480: 4e 65 78 74 28 69 29 29 7b 0a 20 20 20 20 20 20  Next(i)){.      
c490: 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71  Table *pTab = sq
c4a0: 6c 69 74 65 48 61 73 68 44 61 74 61 28 69 29 3b  liteHashData(i);
c4b0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
c4c0: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
c4d0: 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c  tring8, 0, 1, 0,
c4e0: 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 20 30 29   pTab->zName, 0)
c4f0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
c500: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
c510: 4e 75 6c 6c 2c 20 30 2c 20 32 29 3b 0a 20 20 20  Null, 0, 2);.   
c520: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c530: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
c540: 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  er,.            
c550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
c560: 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67 45 73  int)sqlite3LogEs
c570: 74 54 6f 49 6e 74 28 70 54 61 62 2d 3e 73 7a 54  tToInt(pTab->szT
c580: 61 62 52 6f 77 29 2c 20 33 29 3b 0a 20 20 20 20  abRow), 3);.    
c590: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c5a0: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
c5b0: 72 2c 20 0a 20 20 20 20 20 20 20 20 20 20 28 69  r, .          (i
c5c0: 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  nt)sqlite3LogEst
c5d0: 54 6f 49 6e 74 28 70 54 61 62 2d 3e 6e 52 6f 77  ToInt(pTab->nRow
c5e0: 4c 6f 67 45 73 74 29 2c 20 34 29 3b 0a 20 20 20  LogEst), 4);.   
c5f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c600: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
c610: 74 52 6f 77 2c 20 31 2c 20 34 29 3b 0a 20 20 20  tRow, 1, 4);.   
c620: 20 20 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62     for(pIdx=pTab
c630: 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20  ->pIndex; pIdx; 
c640: 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74  pIdx=pIdx->pNext
c650: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
c660: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
c670: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32  OP_String8, 0, 2
c680: 2c 20 30 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65  , 0, pIdx->zName
c690: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 0);.        sq
c6a0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
c6b0: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 0a 20  v, OP_Integer,. 
c6c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c6d0: 20 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74              (int
c6e0: 29 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f  )sqlite3LogEstTo
c6f0: 49 6e 74 28 70 49 64 78 2d 3e 73 7a 49 64 78 52  Int(pIdx->szIdxR
c700: 6f 77 29 2c 20 33 29 3b 0a 20 20 20 20 20 20 20  ow), 3);.       
c710: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c720: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
c730: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 28  , .            (
c740: 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67 45 73  int)sqlite3LogEs
c750: 74 54 6f 49 6e 74 28 70 49 64 78 2d 3e 61 69 52  tToInt(pIdx->aiR
c760: 6f 77 4c 6f 67 45 73 74 5b 30 5d 29 2c 20 34 29  owLogEst[0]), 4)
c770: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
c780: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
c790: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
c7a0: 34 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  4);.      }.    
c7b0: 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a  }.  }.  break;..
c7c0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 49    case PragTyp_I
c7d0: 4e 44 45 58 5f 49 4e 46 4f 3a 20 69 66 28 20 7a  NDEX_INFO: if( z
c7e0: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 49 6e 64  Right ){.    Ind
c7f0: 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 54 61  ex *pIdx;.    Ta
c800: 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70  ble *pTab;.    p
c810: 49 64 78 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  Idx = sqlite3Fin
c820: 64 49 6e 64 65 78 28 64 62 2c 20 7a 52 69 67 68  dIndex(db, zRigh
c830: 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28  t, zDb);.    if(
c840: 20 70 49 64 78 20 29 7b 0a 20 20 20 20 20 20 69   pIdx ){.      i
c850: 6e 74 20 69 3b 0a 20 20 20 20 20 20 70 54 61 62  nt i;.      pTab
c860: 20 3d 20 70 49 64 78 2d 3e 70 54 61 62 6c 65 3b   = pIdx->pTable;
c870: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
c880: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
c890: 33 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65  3);.      pParse
c8a0: 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20  ->nMem = 3;.    
c8b0: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
c8c0: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
c8d0: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71  , iDb);.      sq
c8e0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
c8f0: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
c900: 45 5f 4e 41 4d 45 2c 20 22 73 65 71 6e 6f 22 2c  E_NAME, "seqno",
c910: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
c920: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
c930: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
c940: 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  1, COLNAME_NAME,
c950: 20 22 63 69 64 22 2c 20 53 51 4c 49 54 45 5f 53   "cid", SQLITE_S
c960: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
c970: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
c980: 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d  ame(v, 2, COLNAM
c990: 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20  E_NAME, "name", 
c9a0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
c9b0: 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69        for(i=0; i
c9c0: 3c 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 20  <pIdx->nKeyCol; 
c9d0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 31  i++){.        i1
c9e0: 36 20 63 6e 75 6d 20 3d 20 70 49 64 78 2d 3e 61  6 cnum = pIdx->a
c9f0: 69 43 6f 6c 75 6d 6e 5b 69 5d 3b 0a 20 20 20 20  iColumn[i];.    
ca00: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
ca10: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
ca20: 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20 20  ger, i, 1);.    
ca30: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
ca40: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
ca50: 67 65 72 2c 20 63 6e 75 6d 2c 20 32 29 3b 0a 20  ger, cnum, 2);. 
ca60: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 20 70         assert( p
ca70: 54 61 62 2d 3e 6e 43 6f 6c 3e 63 6e 75 6d 20 29  Tab->nCol>cnum )
ca80: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
ca90: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
caa0: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c  P_String8, 0, 3,
cab0: 20 30 2c 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 63   0, pTab->aCol[c
cac0: 6e 75 6d 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a  num].zName, 0);.
cad0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
cae0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
caf0: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29  ResultRow, 1, 3)
cb00: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
cb10: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20    }.  break;..  
cb20: 63 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e 44  case PragTyp_IND
cb30: 45 58 5f 4c 49 53 54 3a 20 69 66 28 20 7a 52 69  EX_LIST: if( zRi
cb40: 67 68 74 20 29 7b 0a 20 20 20 20 49 6e 64 65 78  ght ){.    Index
cb50: 20 2a 70 49 64 78 3b 0a 20 20 20 20 54 61 62 6c   *pIdx;.    Tabl
cb60: 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 69 6e 74  e *pTab;.    int
cb70: 20 69 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73   i;.    pTab = s
cb80: 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28  qlite3FindTable(
cb90: 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29  db, zRight, zDb)
cba0: 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62 20 29  ;.    if( pTab )
cbb0: 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69  {.      v = sqli
cbc0: 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73  te3GetVdbe(pPars
cbd0: 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  e);.      sqlite
cbe0: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
cbf0: 76 2c 20 33 29 3b 0a 20 20 20 20 20 20 70 50 61  v, 3);.      pPa
cc00: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20  rse->nMem = 3;. 
cc10: 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65       sqlite3Code
cc20: 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61  VerifySchema(pPa
cc30: 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  rse, iDb);.     
cc40: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
cc50: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
cc60: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22  NAME_NAME, "seq"
cc70: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
cc80: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
cc90: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
cca0: 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   1, COLNAME_NAME
ccb0: 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45  , "name", SQLITE
ccc0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
ccd0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
cce0: 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e  lName(v, 2, COLN
ccf0: 41 4d 45 5f 4e 41 4d 45 2c 20 22 75 6e 69 71 75  AME_NAME, "uniqu
cd00: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
cd10: 43 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 70 49  C);.      for(pI
cd20: 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 2c  dx=pTab->pIndex,
cd30: 20 69 3d 30 3b 20 70 49 64 78 3b 20 70 49 64 78   i=0; pIdx; pIdx
cd40: 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 69 2b  =pIdx->pNext, i+
cd50: 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  +){.        sqli
cd60: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
cd70: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20   OP_Integer, i, 
cd80: 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  1);.        sqli
cd90: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
cda0: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
cdb0: 32 2c 20 30 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d  2, 0, pIdx->zNam
cdc0: 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73  e, 0);.        s
cdd0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
cde0: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
cdf0: 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 70 49  IsUniqueIndex(pI
ce00: 64 78 29 2c 20 33 29 3b 0a 20 20 20 20 20 20 20  dx), 3);.       
ce10: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ce20: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
ce30: 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 20 20 20  ow, 1, 3);.     
ce40: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62   }.    }.  }.  b
ce50: 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72  reak;..  case Pr
ce60: 61 67 54 79 70 5f 44 41 54 41 42 41 53 45 5f 4c  agTyp_DATABASE_L
ce70: 49 53 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69  IST: {.    int i
ce80: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
ce90: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33  eSetNumCols(v, 3
cea0: 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  );.    pParse->n
ceb0: 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 73 71 6c  Mem = 3;.    sql
cec0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
ced0: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
cee0: 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53 51  _NAME, "seq", SQ
cef0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
cf00: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
cf10: 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f  ColName(v, 1, CO
cf20: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d  LNAME_NAME, "nam
cf30: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
cf40: 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  C);.    sqlite3V
cf50: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
cf60: 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   2, COLNAME_NAME
cf70: 2c 20 22 66 69 6c 65 22 2c 20 53 51 4c 49 54 45  , "file", SQLITE
cf80: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 66 6f  _STATIC);.    fo
cf90: 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62  r(i=0; i<db->nDb
cfa0: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66  ; i++){.      if
cfb0: 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74  ( db->aDb[i].pBt
cfc0: 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
cfd0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64 62        assert( db
cfe0: 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 21 3d  ->aDb[i].zName!=
cff0: 30 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  0 );.      sqlit
d000: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
d010: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 31  OP_Integer, i, 1
d020: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
d030: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
d040: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20  _String8, 0, 2, 
d050: 30 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e  0, db->aDb[i].zN
d060: 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  ame, 0);.      s
d070: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
d080: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
d090: 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20  0, 3, 0,.       
d0a0: 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65      sqlite3Btree
d0b0: 47 65 74 46 69 6c 65 6e 61 6d 65 28 64 62 2d 3e  GetFilename(db->
d0c0: 61 44 62 5b 69 5d 2e 70 42 74 29 2c 20 30 29 3b  aDb[i].pBt), 0);
d0d0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
d0e0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
d0f0: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b  esultRow, 1, 3);
d100: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
d110: 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67  ak;..  case Prag
d120: 54 79 70 5f 43 4f 4c 4c 41 54 49 4f 4e 5f 4c 49  Typ_COLLATION_LI
d130: 53 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 20  ST: {.    int i 
d140: 3d 20 30 3b 0a 20 20 20 20 48 61 73 68 45 6c 65  = 0;.    HashEle
d150: 6d 20 2a 70 3b 0a 20 20 20 20 73 71 6c 69 74 65  m *p;.    sqlite
d160: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
d170: 76 2c 20 32 29 3b 0a 20 20 20 20 70 50 61 72 73  v, 2);.    pPars
d180: 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 20 20 20  e->nMem = 2;.   
d190: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
d1a0: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
d1b0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22  NAME_NAME, "seq"
d1c0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
d1d0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
d1e0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31  eSetColName(v, 1
d1f0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
d200: 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53  "name", SQLITE_S
d210: 54 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28  TATIC);.    for(
d220: 70 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73  p=sqliteHashFirs
d230: 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29  t(&db->aCollSeq)
d240: 3b 20 70 3b 20 70 3d 73 71 6c 69 74 65 48 61 73  ; p; p=sqliteHas
d250: 68 4e 65 78 74 28 70 29 29 7b 0a 20 20 20 20 20  hNext(p)){.     
d260: 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 20   CollSeq *pColl 
d270: 3d 20 28 43 6f 6c 6c 53 65 71 20 2a 29 73 71 6c  = (CollSeq *)sql
d280: 69 74 65 48 61 73 68 44 61 74 61 28 70 29 3b 0a  iteHashData(p);.
d290: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d2a0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
d2b0: 74 65 67 65 72 2c 20 69 2b 2b 2c 20 31 29 3b 0a  teger, i++, 1);.
d2c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d2d0: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
d2e0: 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20  ring8, 0, 2, 0, 
d2f0: 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 2c 20 30 29  pColl->zName, 0)
d300: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
d310: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
d320: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 32 29  ResultRow, 1, 2)
d330: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
d340: 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  eak;.#endif /* S
d350: 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
d360: 41 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69  A_PRAGMAS */..#i
d370: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
d380: 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20  T_FOREIGN_KEY.  
d390: 63 61 73 65 20 50 72 61 67 54 79 70 5f 46 4f 52  case PragTyp_FOR
d3a0: 45 49 47 4e 5f 4b 45 59 5f 4c 49 53 54 3a 20 69  EIGN_KEY_LIST: i
d3b0: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
d3c0: 20 46 4b 65 79 20 2a 70 46 4b 3b 0a 20 20 20 20   FKey *pFK;.    
d3d0: 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20  Table *pTab;.   
d3e0: 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46   pTab = sqlite3F
d3f0: 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69  indTable(db, zRi
d400: 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69  ght, zDb);.    i
d410: 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20  f( pTab ){.     
d420: 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56   v = sqlite3GetV
d430: 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20  dbe(pParse);.   
d440: 20 20 20 70 46 4b 20 3d 20 70 54 61 62 2d 3e 70     pFK = pTab->p
d450: 46 4b 65 79 3b 0a 20 20 20 20 20 20 69 66 28 20  FKey;.      if( 
d460: 70 46 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 69  pFK ){.        i
d470: 6e 74 20 69 20 3d 20 30 3b 20 0a 20 20 20 20 20  nt i = 0; .     
d480: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
d490: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 38 29 3b 0a  tNumCols(v, 8);.
d4a0: 20 20 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e          pParse->
d4b0: 6e 4d 65 6d 20 3d 20 38 3b 0a 20 20 20 20 20 20  nMem = 8;.      
d4c0: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
d4d0: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
d4e0: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20  , iDb);.        
d4f0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
d500: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
d510: 41 4d 45 5f 4e 41 4d 45 2c 20 22 69 64 22 2c 20  AME_NAME, "id", 
d520: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
d530: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d540: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
d550: 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   1, COLNAME_NAME
d560: 2c 20 22 73 65 71 22 2c 20 53 51 4c 49 54 45 5f  , "seq", SQLITE_
d570: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
d580: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
d590: 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c  olName(v, 2, COL
d5a0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 61 62 6c  NAME_NAME, "tabl
d5b0: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
d5c0: 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  C);.        sqli
d5d0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
d5e0: 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 3, COLNAME_
d5f0: 4e 41 4d 45 2c 20 22 66 72 6f 6d 22 2c 20 53 51  NAME, "from", SQ
d600: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
d610: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d620: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 34  eSetColName(v, 4
d630: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
d640: 22 74 6f 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  "to", SQLITE_STA
d650: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71  TIC);.        sq
d660: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
d670: 61 6d 65 28 76 2c 20 35 2c 20 43 4f 4c 4e 41 4d  ame(v, 5, COLNAM
d680: 45 5f 4e 41 4d 45 2c 20 22 6f 6e 5f 75 70 64 61  E_NAME, "on_upda
d690: 74 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  te", SQLITE_STAT
d6a0: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  IC);.        sql
d6b0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
d6c0: 6d 65 28 76 2c 20 36 2c 20 43 4f 4c 4e 41 4d 45  me(v, 6, COLNAME
d6d0: 5f 4e 41 4d 45 2c 20 22 6f 6e 5f 64 65 6c 65 74  _NAME, "on_delet
d6e0: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
d6f0: 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  C);.        sqli
d700: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
d710: 65 28 76 2c 20 37 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 7, COLNAME_
d720: 4e 41 4d 45 2c 20 22 6d 61 74 63 68 22 2c 20 53  NAME, "match", S
d730: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
d740: 20 20 20 20 20 20 20 77 68 69 6c 65 28 70 46 4b         while(pFK
d750: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  ){.          int
d760: 20 6a 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f   j;.          fo
d770: 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43  r(j=0; j<pFK->nC
d780: 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  ol; j++){.      
d790: 20 20 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c        char *zCol
d7a0: 20 3d 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e   = pFK->aCol[j].
d7b0: 7a 43 6f 6c 3b 0a 20 20 20 20 20 20 20 20 20 20  zCol;.          
d7c0: 20 20 63 68 61 72 20 2a 7a 4f 6e 44 65 6c 65 74    char *zOnDelet
d7d0: 65 20 3d 20 28 63 68 61 72 20 2a 29 61 63 74 69  e = (char *)acti
d7e0: 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74  onName(pFK->aAct
d7f0: 69 6f 6e 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20  ion[0]);.       
d800: 20 20 20 20 20 63 68 61 72 20 2a 7a 4f 6e 55 70       char *zOnUp
d810: 64 61 74 65 20 3d 20 28 63 68 61 72 20 2a 29 61  date = (char *)a
d820: 63 74 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61  ctionName(pFK->a
d830: 41 63 74 69 6f 6e 5b 31 5d 29 3b 0a 20 20 20 20  Action[1]);.    
d840: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
d850: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
d860: 49 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a  Integer, i, 1);.
d870: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
d880: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
d890: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6a 2c 20   OP_Integer, j, 
d8a0: 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  2);.            
d8b0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d8c0: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
d8d0: 20 30 2c 20 33 2c 20 30 2c 20 70 46 4b 2d 3e 7a   0, 3, 0, pFK->z
d8e0: 54 6f 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  To, 0);.        
d8f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d900: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
d910: 6e 67 38 2c 20 30 2c 20 34 2c 20 30 2c 0a 20 20  ng8, 0, 4, 0,.  
d920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d930: 20 20 20 20 20 20 20 20 20 20 20 20 70 54 61 62              pTab
d940: 2d 3e 61 43 6f 6c 5b 70 46 4b 2d 3e 61 43 6f 6c  ->aCol[pFK->aCol
d950: 5b 6a 5d 2e 69 46 72 6f 6d 5d 2e 7a 4e 61 6d 65  [j].iFrom].zName
d960: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
d970: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d980: 4f 70 34 28 76 2c 20 7a 43 6f 6c 20 3f 20 4f 50  Op4(v, zCol ? OP
d990: 5f 53 74 72 69 6e 67 38 20 3a 20 4f 50 5f 4e 75  _String8 : OP_Nu
d9a0: 6c 6c 2c 20 30 2c 20 35 2c 20 30 2c 20 7a 43 6f  ll, 0, 5, 0, zCo
d9b0: 6c 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  l, 0);.         
d9c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d9d0: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
d9e0: 67 38 2c 20 30 2c 20 36 2c 20 30 2c 20 7a 4f 6e  g8, 0, 6, 0, zOn
d9f0: 55 70 64 61 74 65 2c 20 30 29 3b 0a 20 20 20 20  Update, 0);.    
da00: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
da10: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
da20: 53 74 72 69 6e 67 38 2c 20 30 2c 20 37 2c 20 30  String8, 0, 7, 0
da30: 2c 20 7a 4f 6e 44 65 6c 65 74 65 2c 20 30 29 3b  , zOnDelete, 0);
da40: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
da50: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
da60: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
da70: 20 38 2c 20 30 2c 20 22 4e 4f 4e 45 22 2c 20 30   8, 0, "NONE", 0
da80: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
da90: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
daa0: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
dab0: 2c 20 31 2c 20 38 29 3b 0a 20 20 20 20 20 20 20  , 1, 8);.       
dac0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 2b     }.          +
dad0: 2b 69 3b 0a 20 20 20 20 20 20 20 20 20 20 70 46  +i;.          pF
dae0: 4b 20 3d 20 70 46 4b 2d 3e 70 4e 65 78 74 46 72  K = pFK->pNextFr
daf0: 6f 6d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  om;.        }.  
db00: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
db10: 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20    break;.#endif 
db20: 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  /* !defined(SQLI
db30: 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
db40: 4b 45 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  KEY) */..#ifndef
db50: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
db60: 45 49 47 4e 5f 4b 45 59 0a 23 69 66 6e 64 65 66  EIGN_KEY.#ifndef
db70: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49   SQLITE_OMIT_TRI
db80: 47 47 45 52 0a 20 20 63 61 73 65 20 50 72 61 67  GGER.  case Prag
db90: 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f  Typ_FOREIGN_KEY_
dba0: 43 48 45 43 4b 3a 20 7b 0a 20 20 20 20 46 4b 65  CHECK: {.    FKe
dbb0: 79 20 2a 70 46 4b 3b 20 20 20 20 20 20 20 20 20  y *pFK;         
dbc0: 20 20 20 20 2f 2a 20 41 20 66 6f 72 65 69 67 6e      /* A foreign
dbd0: 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20   key constraint 
dbe0: 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  */.    Table *pT
dbf0: 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ab;           /*
dc00: 20 43 68 69 6c 64 20 74 61 62 6c 65 20 63 6f 6e   Child table con
dc10: 74 61 69 6e 20 22 52 45 46 45 52 45 4e 43 45 53  tain "REFERENCES
dc20: 22 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 20 20 20  " keyword */.   
dc30: 20 54 61 62 6c 65 20 2a 70 50 61 72 65 6e 74 3b   Table *pParent;
dc40: 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e          /* Paren
dc50: 74 20 74 61 62 6c 65 20 74 68 61 74 20 63 68 69  t table that chi
dc60: 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a  ld points to */.
dc70: 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b      Index *pIdx;
dc80: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e             /* In
dc90: 64 65 78 20 69 6e 20 74 68 65 20 70 61 72 65 6e  dex in the paren
dca0: 74 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69  t table */.    i
dcb0: 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20 20  nt i;           
dcc0: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
dcd0: 75 6e 74 65 72 3a 20 20 46 6f 72 65 69 67 6e 20  unter:  Foreign 
dce0: 6b 65 79 20 6e 75 6d 62 65 72 20 66 6f 72 20 70  key number for p
dcf0: 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6a  Tab */.    int j
dd00: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
dd10: 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65    /* Loop counte
dd20: 72 3a 20 20 46 69 65 6c 64 20 6f 66 20 74 68 65  r:  Field of the
dd30: 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 2a 2f 0a   foreign key */.
dd40: 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 6b 3b      HashElem *k;
dd50: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
dd60: 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 4e 65 78  op counter:  Nex
dd70: 74 20 74 61 62 6c 65 20 69 6e 20 73 63 68 65 6d  t table in schem
dd80: 61 20 2a 2f 0a 20 20 20 20 69 6e 74 20 78 3b 20  a */.    int x; 
dd90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dda0: 2f 2a 20 72 65 73 75 6c 74 20 76 61 72 69 61 62  /* result variab
ddb0: 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65  le */.    int re
ddc0: 67 52 65 73 75 6c 74 3b 20 20 20 20 20 20 20 20  gResult;        
ddd0: 20 2f 2a 20 33 20 72 65 67 69 73 74 65 72 73 20   /* 3 registers 
dde0: 74 6f 20 68 6f 6c 64 20 61 20 72 65 73 75 6c 74  to hold a result
ddf0: 20 72 6f 77 20 2a 2f 0a 20 20 20 20 69 6e 74 20   row */.    int 
de00: 72 65 67 4b 65 79 3b 20 20 20 20 20 20 20 20 20  regKey;         
de10: 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74     /* Register t
de20: 6f 20 68 6f 6c 64 20 6b 65 79 20 66 6f 72 20 63  o hold key for c
de30: 68 65 63 6b 69 6e 67 20 74 68 65 20 46 4b 20 2a  hecking the FK *
de40: 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 6f 77  /.    int regRow
de50: 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  ;            /* 
de60: 52 65 67 69 73 74 65 72 73 20 74 6f 20 68 6f 6c  Registers to hol
de70: 64 20 61 20 72 6f 77 20 66 72 6f 6d 20 70 54 61  d a row from pTa
de80: 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64  b */.    int add
de90: 72 54 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20  rTop;           
dea0: 2f 2a 20 54 6f 70 20 6f 66 20 61 20 6c 6f 6f 70  /* Top of a loop
deb0: 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 65 69 67   checking foreig
dec0: 6e 20 6b 65 79 73 20 2a 2f 0a 20 20 20 20 69 6e  n keys */.    in
ded0: 74 20 61 64 64 72 4f 6b 3b 20 20 20 20 20 20 20  t addrOk;       
dee0: 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72       /* Jump her
def0: 65 20 69 66 20 74 68 65 20 6b 65 79 20 69 73 20  e if the key is 
df00: 4f 4b 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61  OK */.    int *a
df10: 69 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20  iCols;          
df20: 20 2f 2a 20 63 68 69 6c 64 20 74 6f 20 70 61 72   /* child to par
df30: 65 6e 74 20 63 6f 6c 75 6d 6e 20 6d 61 70 70 69  ent column mappi
df40: 6e 67 20 2a 2f 0a 0a 20 20 20 20 72 65 67 52 65  ng */..    regRe
df50: 73 75 6c 74 20 3d 20 70 50 61 72 73 65 2d 3e 6e  sult = pParse->n
df60: 4d 65 6d 2b 31 3b 0a 20 20 20 20 70 50 61 72 73  Mem+1;.    pPars
df70: 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 34 3b 0a 20 20  e->nMem += 4;.  
df80: 20 20 72 65 67 4b 65 79 20 3d 20 2b 2b 70 50 61    regKey = ++pPa
df90: 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 72  rse->nMem;.    r
dfa0: 65 67 52 6f 77 20 3d 20 2b 2b 70 50 61 72 73 65  egRow = ++pParse
dfb0: 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 76 20 3d 20  ->nMem;.    v = 
dfc0: 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70  sqlite3GetVdbe(p
dfd0: 50 61 72 73 65 29 3b 0a 20 20 20 20 73 71 6c 69  Parse);.    sqli
dfe0: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
dff0: 73 28 76 2c 20 34 29 3b 0a 20 20 20 20 73 71 6c  s(v, 4);.    sql
e000: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
e010: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
e020: 5f 4e 41 4d 45 2c 20 22 74 61 62 6c 65 22 2c 20  _NAME, "table", 
e030: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
e040: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
e050: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20  etColName(v, 1, 
e060: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 72  COLNAME_NAME, "r
e070: 6f 77 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54  owid", SQLITE_ST
e080: 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
e090: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
e0a0: 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 2, COLNAME_N
e0b0: 41 4d 45 2c 20 22 70 61 72 65 6e 74 22 2c 20 53  AME, "parent", S
e0c0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
e0d0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
e0e0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43  tColName(v, 3, C
e0f0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 66 6b  OLNAME_NAME, "fk
e100: 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  id", SQLITE_STAT
e110: 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  IC);.    sqlite3
e120: 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d 61  CodeVerifySchema
e130: 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20  (pParse, iDb);. 
e140: 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48 61 73     k = sqliteHas
e150: 68 46 69 72 73 74 28 26 64 62 2d 3e 61 44 62 5b  hFirst(&db->aDb[
e160: 69 44 62 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62  iDb].pSchema->tb
e170: 6c 48 61 73 68 29 3b 0a 20 20 20 20 77 68 69 6c  lHash);.    whil
e180: 65 28 20 6b 20 29 7b 0a 20 20 20 20 20 20 69 66  e( k ){.      if
e190: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
e1a0: 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74      pTab = sqlit
e1b0: 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 70 50  e3LocateTable(pP
e1c0: 61 72 73 65 2c 20 30 2c 20 7a 52 69 67 68 74 2c  arse, 0, zRight,
e1d0: 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20 20 6b   zDb);.        k
e1e0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73   = 0;.      }els
e1f0: 65 7b 0a 20 20 20 20 20 20 20 20 70 54 61 62 20  e{.        pTab 
e200: 3d 20 28 54 61 62 6c 65 2a 29 73 71 6c 69 74 65  = (Table*)sqlite
e210: 48 61 73 68 44 61 74 61 28 6b 29 3b 0a 20 20 20  HashData(k);.   
e220: 20 20 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48       k = sqliteH
e230: 61 73 68 4e 65 78 74 28 6b 29 3b 0a 20 20 20 20  ashNext(k);.    
e240: 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70 54    }.      if( pT
e250: 61 62 3d 3d 30 20 7c 7c 20 70 54 61 62 2d 3e 70  ab==0 || pTab->p
e260: 46 4b 65 79 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  FKey==0 ) contin
e270: 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ue;.      sqlite
e280: 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73  3TableLock(pPars
e290: 65 2c 20 69 44 62 2c 20 70 54 61 62 2d 3e 74 6e  e, iDb, pTab->tn
e2a0: 75 6d 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61  um, 0, pTab->zNa
e2b0: 6d 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  me);.      if( p
e2c0: 54 61 62 2d 3e 6e 43 6f 6c 2b 72 65 67 52 6f 77  Tab->nCol+regRow
e2d0: 3e 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 29 20  >pParse->nMem ) 
e2e0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 70  pParse->nMem = p
e2f0: 54 61 62 2d 3e 6e 43 6f 6c 20 2b 20 72 65 67 52  Tab->nCol + regR
e300: 6f 77 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  ow;.      sqlite
e310: 33 4f 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73  3OpenTable(pPars
e320: 65 2c 20 30 2c 20 69 44 62 2c 20 70 54 61 62 2c  e, 0, iDb, pTab,
e330: 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20   OP_OpenRead);. 
e340: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
e350: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
e360: 69 6e 67 38 2c 20 30 2c 20 72 65 67 52 65 73 75  ing8, 0, regResu
e370: 6c 74 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61  lt, 0, pTab->zNa
e380: 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20  me,.            
e390: 20 20 20 20 20 20 20 20 20 20 20 20 50 34 5f 54              P4_T
e3a0: 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20  RANSIENT);.     
e3b0: 20 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54   for(i=1, pFK=pT
e3c0: 61 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20  ab->pFKey; pFK; 
e3d0: 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e  i++, pFK=pFK->pN
e3e0: 65 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20  extFrom){.      
e3f0: 20 20 70 50 61 72 65 6e 74 20 3d 20 73 71 6c 69    pParent = sqli
e400: 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c  te3FindTable(db,
e410: 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b   pFK->zTo, zDb);
e420: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 50 61  .        if( pPa
e430: 72 65 6e 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e  rent==0 ) contin
e440: 75 65 3b 0a 20 20 20 20 20 20 20 20 70 49 64 78  ue;.        pIdx
e450: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 73 71   = 0;.        sq
e460: 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70  lite3TableLock(p
e470: 50 61 72 73 65 2c 20 69 44 62 2c 20 70 50 61 72  Parse, iDb, pPar
e480: 65 6e 74 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 50  ent->tnum, 0, pP
e490: 61 72 65 6e 74 2d 3e 7a 4e 61 6d 65 29 3b 0a 20  arent->zName);. 
e4a0: 20 20 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74         x = sqlit
e4b0: 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28  e3FkLocateIndex(
e4c0: 70 50 61 72 73 65 2c 20 70 50 61 72 65 6e 74 2c  pParse, pParent,
e4d0: 20 70 46 4b 2c 20 26 70 49 64 78 2c 20 30 29 3b   pFK, &pIdx, 0);
e4e0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 78 3d 3d  .        if( x==
e4f0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  0 ){.          i
e500: 66 28 20 70 49 64 78 3d 3d 30 20 29 7b 0a 20 20  f( pIdx==0 ){.  
e510: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
e520: 33 4f 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73  3OpenTable(pPars
e530: 65 2c 20 69 2c 20 69 44 62 2c 20 70 50 61 72 65  e, i, iDb, pPare
e540: 6e 74 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29  nt, OP_OpenRead)
e550: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73  ;.          }els
e560: 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  e{.            s
e570: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
e580: 28 76 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c  (v, OP_OpenRead,
e590: 20 69 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20   i, pIdx->tnum, 
e5a0: 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20 20 20  iDb);.          
e5b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
e5c0: 50 34 4b 65 79 49 6e 66 6f 28 70 50 61 72 73 65  P4KeyInfo(pParse
e5d0: 2c 20 70 49 64 78 29 3b 0a 20 20 20 20 20 20 20  , pIdx);.       
e5e0: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65 6c     }.        }el
e5f0: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20  se{.          k 
e600: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20 62  = 0;.          b
e610: 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  reak;.        }.
e620: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61 73        }.      as
e630: 73 65 72 74 28 20 70 50 61 72 73 65 2d 3e 6e 45  sert( pParse->nE
e640: 72 72 3e 30 20 7c 7c 20 70 46 4b 3d 3d 30 20 29  rr>0 || pFK==0 )
e650: 3b 0a 20 20 20 20 20 20 69 66 28 20 70 46 4b 20  ;.      if( pFK 
e660: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 69  ) break;.      i
e670: 66 28 20 70 50 61 72 73 65 2d 3e 6e 54 61 62 3c  f( pParse->nTab<
e680: 69 20 29 20 70 50 61 72 73 65 2d 3e 6e 54 61 62  i ) pParse->nTab
e690: 20 3d 20 69 3b 0a 20 20 20 20 20 20 61 64 64 72   = i;.      addr
e6a0: 54 6f 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62  Top = sqlite3Vdb
e6b0: 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 52 65  eAddOp1(v, OP_Re
e6c0: 77 69 6e 64 2c 20 30 29 3b 20 56 64 62 65 43 6f  wind, 0); VdbeCo
e6d0: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
e6e0: 20 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54   for(i=1, pFK=pT
e6f0: 61 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20  ab->pFKey; pFK; 
e700: 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e  i++, pFK=pFK->pN
e710: 65 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20  extFrom){.      
e720: 20 20 70 50 61 72 65 6e 74 20 3d 20 73 71 6c 69    pParent = sqli
e730: 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c  te3FindTable(db,
e740: 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b   pFK->zTo, zDb);
e750: 0a 20 20 20 20 20 20 20 20 70 49 64 78 20 3d 20  .        pIdx = 
e760: 30 3b 0a 20 20 20 20 20 20 20 20 61 69 43 6f 6c  0;.        aiCol
e770: 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69  s = 0;.        i
e780: 66 28 20 70 50 61 72 65 6e 74 20 29 7b 0a 20 20  f( pParent ){.  
e790: 20 20 20 20 20 20 20 20 78 20 3d 20 73 71 6c 69          x = sqli
e7a0: 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
e7b0: 28 70 50 61 72 73 65 2c 20 70 50 61 72 65 6e 74  (pParse, pParent
e7c0: 2c 20 70 46 4b 2c 20 26 70 49 64 78 2c 20 26 61  , pFK, &pIdx, &a
e7d0: 69 43 6f 6c 73 29 3b 0a 20 20 20 20 20 20 20 20  iCols);.        
e7e0: 20 20 61 73 73 65 72 74 28 20 78 3d 3d 30 20 29    assert( x==0 )
e7f0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
e800: 20 20 20 20 61 64 64 72 4f 6b 20 3d 20 73 71 6c      addrOk = sql
e810: 69 74 65 33 56 64 62 65 4d 61 6b 65 4c 61 62 65  ite3VdbeMakeLabe
e820: 6c 28 76 29 3b 0a 20 20 20 20 20 20 20 20 69 66  l(v);.        if
e830: 28 20 70 50 61 72 65 6e 74 20 26 26 20 70 49 64  ( pParent && pId
e840: 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  x==0 ){.        
e850: 20 20 69 6e 74 20 69 4b 65 79 20 3d 20 70 46 4b    int iKey = pFK
e860: 2d 3e 61 43 6f 6c 5b 30 5d 2e 69 46 72 6f 6d 3b  ->aCol[0].iFrom;
e870: 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72  .          asser
e880: 74 28 20 69 4b 65 79 3e 3d 30 20 26 26 20 69 4b  t( iKey>=0 && iK
e890: 65 79 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b  ey<pTab->nCol );
e8a0: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69  .          if( i
e8b0: 4b 65 79 21 3d 70 54 61 62 2d 3e 69 50 4b 65 79  Key!=pTab->iPKey
e8c0: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
e8d0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e8e0: 33 28 76 2c 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20  3(v, OP_Column, 
e8f0: 30 2c 20 69 4b 65 79 2c 20 72 65 67 52 6f 77 29  0, iKey, regRow)
e900: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
e910: 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75  lite3ColumnDefau
e920: 6c 74 28 76 2c 20 70 54 61 62 2c 20 69 4b 65 79  lt(v, pTab, iKey
e930: 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20  , regRow);.     
e940: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
e950: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
e960: 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2c 20 61  sNull, regRow, a
e970: 64 64 72 4f 6b 29 3b 20 56 64 62 65 43 6f 76 65  ddrOk); VdbeCove
e980: 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
e990: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
e9a0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4d 75 73  AddOp2(v, OP_Mus
e9b0: 74 42 65 49 6e 74 2c 20 72 65 67 52 6f 77 2c 20  tBeInt, regRow, 
e9c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e9d0: 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72 65  sqlite3VdbeCurre
e9e0: 6e 74 41 64 64 72 28 76 29 2b 33 29 3b 20 56 64  ntAddr(v)+3); Vd
e9f0: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
ea00: 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a           }else{.
ea10: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
ea20: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
ea30: 20 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72 65   OP_Rowid, 0, re
ea40: 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20  gRow);.         
ea50: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c   }.          sql
ea60: 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
ea70: 2c 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 2c 20  , OP_NotExists, 
ea80: 69 2c 20 30 2c 20 72 65 67 52 6f 77 29 3b 20 56  i, 0, regRow); V
ea90: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
eaa0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
eab0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
eac0: 50 5f 47 6f 74 6f 2c 20 30 2c 20 61 64 64 72 4f  P_Goto, 0, addrO
ead0: 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  k);.          sq
eae0: 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
eaf0: 65 28 76 2c 20 73 71 6c 69 74 65 33 56 64 62 65  e(v, sqlite3Vdbe
eb00: 43 75 72 72 65 6e 74 41 64 64 72 28 76 29 2d 32  CurrentAddr(v)-2
eb10: 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  );.        }else
eb20: 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28  {.          for(
eb30: 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c  j=0; j<pFK->nCol
eb40: 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; j++){.        
eb50: 20 20 20 20 73 71 6c 69 74 65 33 45 78 70 72 43      sqlite3ExprC
eb60: 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61  odeGetColumnOfTa
eb70: 62 6c 65 28 76 2c 20 70 54 61 62 2c 20 30 2c 0a  ble(v, pTab, 0,.
eb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb90: 20 20 20 20 20 20 20 20 20 20 20 20 61 69 43 6f              aiCo
eba0: 6c 73 20 3f 20 61 69 43 6f 6c 73 5b 6a 5d 20 3a  ls ? aiCols[j] :
ebb0: 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46   pFK->aCol[j].iF
ebc0: 72 6f 6d 2c 20 72 65 67 52 6f 77 2b 6a 29 3b 0a  rom, regRow+j);.
ebd0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
ebe0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
ebf0: 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 65 67 52   OP_IsNull, regR
ec00: 6f 77 2b 6a 2c 20 61 64 64 72 4f 6b 29 3b 20 56  ow+j, addrOk); V
ec10: 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
ec20: 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
ec30: 20 20 20 20 20 20 69 66 28 20 70 50 61 72 65 6e        if( pParen
ec40: 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  t ){.           
ec50: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ec60: 70 34 28 76 2c 20 4f 50 5f 4d 61 6b 65 52 65 63  p4(v, OP_MakeRec
ec70: 6f 72 64 2c 20 72 65 67 52 6f 77 2c 20 70 46 4b  ord, regRow, pFK
ec80: 2d 3e 6e 43 6f 6c 2c 20 72 65 67 4b 65 79 2c 0a  ->nCol, regKey,.
ec90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eca0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
ecb0: 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69 6e 69  lite3IndexAffini
ecc0: 74 79 53 74 72 28 76 2c 70 49 64 78 29 2c 20 70  tyStr(v,pIdx), p
ecd0: 46 4b 2d 3e 6e 43 6f 6c 29 3b 0a 20 20 20 20 20  FK->nCol);.     
ece0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
ecf0: 62 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f  beAddOp4Int(v, O
ed00: 50 5f 46 6f 75 6e 64 2c 20 69 2c 20 61 64 64 72  P_Found, i, addr
ed10: 4f 6b 2c 20 72 65 67 4b 65 79 2c 20 30 29 3b 0a  Ok, regKey, 0);.
ed20: 20 20 20 20 20 20 20 20 20 20 20 20 56 64 62 65              Vdbe
ed30: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
ed40: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
ed50: 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74   }.        sqlit
ed60: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
ed70: 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72 65 67  OP_Rowid, 0, reg
ed80: 52 65 73 75 6c 74 2b 31 29 3b 0a 20 20 20 20 20  Result+1);.     
ed90: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
eda0: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
edb0: 67 38 2c 20 30 2c 20 72 65 67 52 65 73 75 6c 74  g8, 0, regResult
edc0: 2b 32 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20  +2, 0, .        
edd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ede0: 20 20 70 46 4b 2d 3e 7a 54 6f 2c 20 50 34 5f 54    pFK->zTo, P4_T
edf0: 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20  RANSIENT);.     
ee00: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
ee10: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
ee20: 65 72 2c 20 69 2d 31 2c 20 72 65 67 52 65 73 75  er, i-1, regResu
ee30: 6c 74 2b 33 29 3b 0a 20 20 20 20 20 20 20 20 73  lt+3);.        s
ee40: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
ee50: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
ee60: 2c 20 72 65 67 52 65 73 75 6c 74 2c 20 34 29 3b  , regResult, 4);
ee70: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
ee80: 56 64 62 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c  VdbeResolveLabel
ee90: 28 76 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20  (v, addrOk);.   
eea0: 20 20 20 20 20 73 71 6c 69 74 65 33 44 62 46 72       sqlite3DbFr
eeb0: 65 65 28 64 62 2c 20 61 69 43 6f 6c 73 29 3b 0a  ee(db, aiCols);.
eec0: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71        }.      sq
eed0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
eee0: 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 30 2c 20 61  v, OP_Next, 0, a
eef0: 64 64 72 54 6f 70 2b 31 29 3b 20 56 64 62 65 43  ddrTop+1); VdbeC
ef00: 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
ef10: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
ef20: 70 48 65 72 65 28 76 2c 20 61 64 64 72 54 6f 70  pHere(v, addrTop
ef30: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
ef40: 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  reak;.#endif /* 
ef50: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
ef60: 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 20 2a 2f  OMIT_TRIGGER) */
ef70: 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69  .#endif /* !defi
ef80: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
ef90: 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a  FOREIGN_KEY) */.
efa0: 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47 0a  .#ifndef NDEBUG.
efb0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 50    case PragTyp_P
efc0: 41 52 53 45 52 5f 54 52 41 43 45 3a 20 7b 0a 20  ARSER_TRACE: {. 
efd0: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
efe0: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
eff0: 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69  e3GetBoolean(zRi
f000: 67 68 74 2c 20 30 29 20 29 7b 0a 20 20 20 20 20  ght, 0) ){.     
f010: 20 20 20 73 71 6c 69 74 65 33 50 61 72 73 65 72     sqlite3Parser
f020: 54 72 61 63 65 28 73 74 64 65 72 72 2c 20 22 70  Trace(stderr, "p
f030: 61 72 73 65 72 3a 20 22 29 3b 0a 20 20 20 20 20  arser: ");.     
f040: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
f050: 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61  sqlite3ParserTra
f060: 63 65 28 30 2c 20 30 29 3b 0a 20 20 20 20 20 20  ce(0, 0);.      
f070: 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  }.    }.  }.  br
f080: 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  eak;.#endif..  /
f090: 2a 20 52 65 69 6e 73 74 61 6c 6c 20 74 68 65 20  * Reinstall the 
f0a0: 4c 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20 66 75  LIKE and GLOB fu
f0b0: 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 76 61  nctions.  The va
f0c0: 72 69 61 6e 74 20 6f 66 20 4c 49 4b 45 0a 20 20  riant of LIKE.  
f0d0: 2a 2a 20 75 73 65 64 20 77 69 6c 6c 20 62 65 20  ** used will be 
f0e0: 63 61 73 65 20 73 65 6e 73 69 74 69 76 65 20 6f  case sensitive o
f0f0: 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67 20  r not depending 
f100: 6f 6e 20 74 68 65 20 52 48 53 2e 0a 20 20 2a 2f  on the RHS..  */
f110: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
f120: 43 41 53 45 5f 53 45 4e 53 49 54 49 56 45 5f 4c  CASE_SENSITIVE_L
f130: 49 4b 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a  IKE: {.    if( z
f140: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73  Right ){.      s
f150: 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c 69  qlite3RegisterLi
f160: 6b 65 46 75 6e 63 74 69 6f 6e 73 28 64 62 2c 20  keFunctions(db, 
f170: 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61  sqlite3GetBoolea
f180: 6e 28 7a 52 69 67 68 74 2c 20 30 29 29 3b 0a 20  n(zRight, 0));. 
f190: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
f1a0: 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  ;..#ifndef SQLIT
f1b0: 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  E_INTEGRITY_CHEC
f1c0: 4b 5f 45 52 52 4f 52 5f 4d 41 58 0a 23 20 64 65  K_ERROR_MAX.# de
f1d0: 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54 45  fine SQLITE_INTE
f1e0: 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f  GRITY_CHECK_ERRO
f1f0: 52 5f 4d 41 58 20 31 30 30 0a 23 65 6e 64 69 66  R_MAX 100.#endif
f200: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
f210: 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f  _OMIT_INTEGRITY_
f220: 43 48 45 43 4b 0a 20 20 2f 2a 20 50 72 61 67 6d  CHECK.  /* Pragm
f230: 61 20 22 71 75 69 63 6b 5f 63 68 65 63 6b 22 20  a "quick_check" 
f240: 69 73 20 72 65 64 75 63 65 64 20 76 65 72 73 69  is reduced versi
f250: 6f 6e 20 6f 66 20 0a 20 20 2a 2a 20 69 6e 74 65  on of .  ** inte
f260: 67 72 69 74 79 5f 63 68 65 63 6b 20 64 65 73 69  grity_check desi
f270: 67 6e 65 64 20 74 6f 20 64 65 74 65 63 74 20 6d  gned to detect m
f280: 6f 73 74 20 64 61 74 61 62 61 73 65 20 63 6f 72  ost database cor
f290: 72 75 70 74 69 6f 6e 0a 20 20 2a 2a 20 77 69 74  ruption.  ** wit
f2a0: 68 6f 75 74 20 6d 6f 73 74 20 6f 66 20 74 68 65  hout most of the
f2b0: 20 6f 76 65 72 68 65 61 64 20 6f 66 20 61 20 66   overhead of a f
f2c0: 75 6c 6c 20 69 6e 74 65 67 72 69 74 79 2d 63 68  ull integrity-ch
f2d0: 65 63 6b 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  eck..  */.  case
f2e0: 20 50 72 61 67 54 79 70 5f 49 4e 54 45 47 52 49   PragTyp_INTEGRI
f2f0: 54 59 5f 43 48 45 43 4b 3a 20 7b 0a 20 20 20 20  TY_CHECK: {.    
f300: 69 6e 74 20 69 2c 20 6a 2c 20 61 64 64 72 2c 20  int i, j, addr, 
f310: 6d 78 45 72 72 3b 0a 0a 20 20 20 20 2f 2a 20 43  mxErr;..    /* C
f320: 6f 64 65 20 74 68 61 74 20 61 70 70 65 61 72 73  ode that appears
f330: 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20 74   at the end of t
f340: 68 65 20 69 6e 74 65 67 72 69 74 79 20 63 68 65  he integrity che
f350: 63 6b 2e 20 20 49 66 20 6e 6f 20 65 72 72 6f 72  ck.  If no error
f360: 0a 20 20 20 20 2a 2a 20 6d 65 73 73 61 67 65 73  .    ** messages
f370: 20 68 61 76 65 20 62 65 65 6e 20 67 65 6e 65 72   have been gener
f380: 61 74 65 64 2c 20 6f 75 74 70 75 74 20 4f 4b 2e  ated, output OK.
f390: 20 20 4f 74 68 65 72 77 69 73 65 20 6f 75 74 70    Otherwise outp
f3a0: 75 74 20 74 68 65 0a 20 20 20 20 2a 2a 20 65 72  ut the.    ** er
f3b0: 72 6f 72 20 6d 65 73 73 61 67 65 0a 20 20 20 20  ror message.    
f3c0: 2a 2f 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f  */.    static co
f3d0: 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44  nst int iLn = VD
f3e0: 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f  BE_OFFSET_LINENO
f3f0: 28 32 29 3b 0a 20 20 20 20 73 74 61 74 69 63 20  (2);.    static 
f400: 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74  const VdbeOpList
f410: 20 65 6e 64 43 6f 64 65 5b 5d 20 3d 20 7b 0a 20   endCode[] = {. 
f420: 20 20 20 20 20 7b 20 4f 50 5f 49 66 4e 65 67 2c       { OP_IfNeg,
f430: 20 20 20 20 20 20 20 31 2c 20 30 2c 20 20 20 20         1, 0,    
f440: 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20      0},    /* 0 
f450: 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 53 74  */.      { OP_St
f460: 72 69 6e 67 38 2c 20 20 20 20 20 30 2c 20 33 2c  ring8,     0, 3,
f470: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f          0},    /
f480: 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f  * 1 */.      { O
f490: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20 20 33  P_ResultRow,   3
f4a0: 2c 20 31 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 1,        0},.
f4b0: 20 20 20 20 7d 3b 0a 0a 20 20 20 20 69 6e 74 20      };..    int 
f4c0: 69 73 51 75 69 63 6b 20 3d 20 28 73 71 6c 69 74  isQuick = (sqlit
f4d0: 65 33 54 6f 6c 6f 77 65 72 28 7a 4c 65 66 74 5b  e3Tolower(zLeft[
f4e0: 30 5d 29 3d 3d 27 71 27 29 3b 0a 0a 20 20 20 20  0])=='q');..    
f4f0: 2f 2a 20 49 66 20 74 68 65 20 50 52 41 47 4d 41  /* If the PRAGMA
f500: 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 6f 66 20   command was of 
f510: 74 68 65 20 66 6f 72 6d 20 22 50 52 41 47 4d 41  the form "PRAGMA
f520: 20 3c 64 62 3e 2e 69 6e 74 65 67 72 69 74 79 5f   <db>.integrity_
f530: 63 68 65 63 6b 22 2c 0a 20 20 20 20 2a 2a 20 74  check",.    ** t
f540: 68 65 6e 20 69 44 62 20 69 73 20 73 65 74 20 74  hen iDb is set t
f550: 6f 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74  o the index of t
f560: 68 65 20 64 61 74 61 62 61 73 65 20 69 64 65 6e  he database iden
f570: 74 69 66 69 65 64 20 62 79 20 3c 64 62 3e 2e 0a  tified by <db>..
f580: 20 20 20 20 2a 2a 20 49 6e 20 74 68 69 73 20 63      ** In this c
f590: 61 73 65 2c 20 74 68 65 20 69 6e 74 65 67 72 69  ase, the integri
f5a0: 74 79 20 6f 66 20 64 61 74 61 62 61 73 65 20 69  ty of database i
f5b0: 44 62 20 6f 6e 6c 79 20 69 73 20 76 65 72 69 66  Db only is verif
f5c0: 69 65 64 20 62 79 0a 20 20 20 20 2a 2a 20 74 68  ied by.    ** th
f5d0: 65 20 56 44 42 45 20 63 72 65 61 74 65 64 20 62  e VDBE created b
f5e0: 65 6c 6f 77 2e 0a 20 20 20 20 2a 2a 0a 20 20 20  elow..    **.   
f5f0: 20 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 69   ** Otherwise, i
f600: 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 77 61  f the command wa
f610: 73 20 73 69 6d 70 6c 79 20 22 50 52 41 47 4d 41  s simply "PRAGMA
f620: 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b   integrity_check
f630: 22 20 28 6f 72 0a 20 20 20 20 2a 2a 20 22 50 52  " (or.    ** "PR
f640: 41 47 4d 41 20 71 75 69 63 6b 5f 63 68 65 63 6b  AGMA quick_check
f650: 22 29 2c 20 74 68 65 6e 20 69 44 62 20 69 73 20  "), then iDb is 
f660: 73 65 74 20 74 6f 20 30 2e 20 49 6e 20 74 68 69  set to 0. In thi
f670: 73 20 63 61 73 65 2c 20 73 65 74 20 69 44 62 0a  s case, set iDb.
f680: 20 20 20 20 2a 2a 20 74 6f 20 2d 31 20 68 65 72      ** to -1 her
f690: 65 2c 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74  e, to indicate t
f6a0: 68 61 74 20 74 68 65 20 56 44 42 45 20 73 68 6f  hat the VDBE sho
f6b0: 75 6c 64 20 76 65 72 69 66 79 20 74 68 65 20 69  uld verify the i
f6c0: 6e 74 65 67 72 69 74 79 0a 20 20 20 20 2a 2a 20  ntegrity.    ** 
f6d0: 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  of all attached 
f6e0: 64 61 74 61 62 61 73 65 73 2e 20 20 2a 2f 0a 20  databases.  */. 
f6f0: 20 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d     assert( iDb>=
f700: 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28  0 );.    assert(
f710: 20 69 44 62 3d 3d 30 20 7c 7c 20 70 49 64 32 2d   iDb==0 || pId2-
f720: 3e 7a 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49  >z );.    if( pI
f730: 64 32 2d 3e 7a 3d 3d 30 20 29 20 69 44 62 20 3d  d2->z==0 ) iDb =
f740: 20 2d 31 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69   -1;..    /* Ini
f750: 74 69 61 6c 69 7a 65 20 74 68 65 20 56 44 42 45  tialize the VDBE
f760: 20 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 20 20   program */.    
f770: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36  pParse->nMem = 6
f780: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
f790: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
f7a0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
f7b0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
f7c0: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
f7d0: 20 22 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63   "integrity_chec
f7e0: 6b 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  k", SQLITE_STATI
f7f0: 43 29 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 74 20  C);..    /* Set 
f800: 74 68 65 20 6d 61 78 69 6d 75 6d 20 65 72 72 6f  the maximum erro
f810: 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 6d  r count */.    m
f820: 78 45 72 72 20 3d 20 53 51 4c 49 54 45 5f 49 4e  xErr = SQLITE_IN
f830: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52  TEGRITY_CHECK_ER
f840: 52 4f 52 5f 4d 41 58 3b 0a 20 20 20 20 69 66 28  ROR_MAX;.    if(
f850: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
f860: 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32   sqlite3GetInt32
f870: 28 7a 52 69 67 68 74 2c 20 26 6d 78 45 72 72 29  (zRight, &mxErr)
f880: 3b 0a 20 20 20 20 20 20 69 66 28 20 6d 78 45 72  ;.      if( mxEr
f890: 72 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  r<=0 ){.        
f8a0: 6d 78 45 72 72 20 3d 20 53 51 4c 49 54 45 5f 49  mxErr = SQLITE_I
f8b0: 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45  NTEGRITY_CHECK_E
f8c0: 52 52 4f 52 5f 4d 41 58 3b 0a 20 20 20 20 20 20  RROR_MAX;.      
f8d0: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69  }.    }.    sqli
f8e0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
f8f0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6d 78 45   OP_Integer, mxE
f900: 72 72 2c 20 31 29 3b 20 20 2f 2a 20 72 65 67 5b  rr, 1);  /* reg[
f910: 31 5d 20 68 6f 6c 64 73 20 65 72 72 6f 72 73 20  1] holds errors 
f920: 6c 65 66 74 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20  left */..    /* 
f930: 44 6f 20 61 6e 20 69 6e 74 65 67 72 69 74 79 20  Do an integrity 
f940: 63 68 65 63 6b 20 6f 6e 20 65 61 63 68 20 64 61  check on each da
f950: 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20  tabase file */. 
f960: 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62     for(i=0; i<db
f970: 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20  ->nDb; i++){.   
f980: 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 78 3b 0a     HashElem *x;.
f990: 20 20 20 20 20 20 48 61 73 68 20 2a 70 54 62 6c        Hash *pTbl
f9a0: 73 3b 0a 20 20 20 20 20 20 69 6e 74 20 63 6e 74  s;.      int cnt
f9b0: 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 69 66 28   = 0;..      if(
f9c0: 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 26 26 20   OMIT_TEMPDB && 
f9d0: 69 3d 3d 31 20 29 20 63 6f 6e 74 69 6e 75 65 3b  i==1 ) continue;
f9e0: 0a 20 20 20 20 20 20 69 66 28 20 69 44 62 3e 3d  .      if( iDb>=
f9f0: 30 20 26 26 20 69 21 3d 69 44 62 20 29 20 63 6f  0 && i!=iDb ) co
fa00: 6e 74 69 6e 75 65 3b 0a 0a 20 20 20 20 20 20 73  ntinue;..      s
fa10: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
fa20: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
fa30: 29 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20  );.      addr = 
fa40: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
fa50: 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31  1(v, OP_IfPos, 1
fa60: 29 3b 20 2f 2a 20 48 61 6c 74 20 69 66 20 6f 75  ); /* Halt if ou
fa70: 74 20 6f 66 20 65 72 72 6f 72 73 20 2a 2f 0a 20  t of errors */. 
fa80: 20 20 20 20 20 56 64 62 65 43 6f 76 65 72 61 67       VdbeCoverag
fa90: 65 28 76 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  e(v);.      sqli
faa0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
fab0: 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b   OP_Halt, 0, 0);
fac0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
fad0: 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64  beJumpHere(v, ad
fae0: 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44  dr);..      /* D
faf0: 6f 20 61 6e 20 69 6e 74 65 67 72 69 74 79 20 63  o an integrity c
fb00: 68 65 63 6b 20 6f 66 20 74 68 65 20 42 2d 54 72  heck of the B-Tr
fb10: 65 65 0a 20 20 20 20 20 20 2a 2a 0a 20 20 20 20  ee.      **.    
fb20: 20 20 2a 2a 20 42 65 67 69 6e 20 62 79 20 66 69    ** Begin by fi
fb30: 6c 6c 69 6e 67 20 72 65 67 69 73 74 65 72 73 20  lling registers 
fb40: 32 2c 20 33 2c 20 2e 2e 2e 20 77 69 74 68 20 74  2, 3, ... with t
fb50: 68 65 20 72 6f 6f 74 20 70 61 67 65 73 20 6e 75  he root pages nu
fb60: 6d 62 65 72 73 0a 20 20 20 20 20 20 2a 2a 20 66  mbers.      ** f
fb70: 6f 72 20 61 6c 6c 20 74 61 62 6c 65 73 20 61 6e  or all tables an
fb80: 64 20 69 6e 64 69 63 65 73 20 69 6e 20 74 68 65  d indices in the
fb90: 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20 20   database..     
fba0: 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65 72 74   */.      assert
fbb0: 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d  ( sqlite3SchemaM
fbc0: 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 2c 20  utexHeld(db, i, 
fbd0: 30 29 20 29 3b 0a 20 20 20 20 20 20 70 54 62 6c  0) );.      pTbl
fbe0: 73 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 5d 2e  s = &db->aDb[i].
fbf0: 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68  pSchema->tblHash
fc00: 3b 0a 20 20 20 20 20 20 66 6f 72 28 78 3d 73 71  ;.      for(x=sq
fc10: 6c 69 74 65 48 61 73 68 46 69 72 73 74 28 70 54  liteHashFirst(pT
fc20: 62 6c 73 29 3b 20 78 3b 20 78 3d 73 71 6c 69 74  bls); x; x=sqlit
fc30: 65 48 61 73 68 4e 65 78 74 28 78 29 29 7b 0a 20  eHashNext(x)){. 
fc40: 20 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54         Table *pT
fc50: 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44  ab = sqliteHashD
fc60: 61 74 61 28 78 29 3b 0a 20 20 20 20 20 20 20 20  ata(x);.        
fc70: 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20  Index *pIdx;.   
fc80: 20 20 20 20 20 69 66 28 20 48 61 73 52 6f 77 69       if( HasRowi
fc90: 64 28 70 54 61 62 29 20 29 7b 0a 20 20 20 20 20  d(pTab) ){.     
fca0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
fcb0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
fcc0: 65 67 65 72 2c 20 70 54 61 62 2d 3e 74 6e 75 6d  eger, pTab->tnum
fcd0: 2c 20 32 2b 63 6e 74 29 3b 0a 20 20 20 20 20 20  , 2+cnt);.      
fce0: 20 20 20 20 56 64 62 65 43 6f 6d 6d 65 6e 74 28      VdbeComment(
fcf0: 28 76 2c 20 22 25 73 22 2c 20 70 54 61 62 2d 3e  (v, "%s", pTab->
fd00: 7a 4e 61 6d 65 29 29 3b 0a 20 20 20 20 20 20 20  zName));.       
fd10: 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20     cnt++;.      
fd20: 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f 72 28    }.        for(
fd30: 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65  pIdx=pTab->pInde
fd40: 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49  x; pIdx; pIdx=pI
fd50: 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20 20 20  dx->pNext){.    
fd60: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
fd70: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
fd80: 74 65 67 65 72 2c 20 70 49 64 78 2d 3e 74 6e 75  teger, pIdx->tnu
fd90: 6d 2c 20 32 2b 63 6e 74 29 3b 0a 20 20 20 20 20  m, 2+cnt);.     
fda0: 20 20 20 20 20 56 64 62 65 43 6f 6d 6d 65 6e 74       VdbeComment
fdb0: 28 28 76 2c 20 22 25 73 22 2c 20 70 49 64 78 2d  ((v, "%s", pIdx-
fdc0: 3e 7a 4e 61 6d 65 29 29 3b 0a 20 20 20 20 20 20  >zName));.      
fdd0: 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20 20      cnt++;.     
fde0: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a 20 20     }.      }..  
fdf0: 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
fe00: 20 73 75 66 66 69 63 69 65 6e 74 20 6e 75 6d 62   sufficient numb
fe10: 65 72 20 6f 66 20 72 65 67 69 73 74 65 72 73 20  er of registers 
fe20: 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f 63 61  have been alloca
fe30: 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 70 50 61  ted */.      pPa
fe40: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 4d 41 58 28  rse->nMem = MAX(
fe50: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20 63   pParse->nMem, c
fe60: 6e 74 2b 38 20 29 3b 0a 0a 20 20 20 20 20 20 2f  nt+8 );..      /
fe70: 2a 20 44 6f 20 74 68 65 20 62 2d 74 72 65 65 20  * Do the b-tree 
fe80: 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 73  integrity checks
fe90: 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65   */.      sqlite
fea0: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
feb0: 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 2c 20 32  P_IntegrityCk, 2
fec0: 2c 20 63 6e 74 2c 20 31 29 3b 0a 20 20 20 20 20  , cnt, 1);.     
fed0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
fee0: 67 65 50 35 28 76 2c 20 28 75 38 29 69 29 3b 0a  geP5(v, (u8)i);.
fef0: 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c        addr = sql
ff00: 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76  ite3VdbeAddOp1(v
ff10: 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 32 29 3b  , OP_IsNull, 2);
ff20: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
ff30: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
ff40: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
ff50: 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30  String8, 0, 3, 0
ff60: 2c 0a 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  ,.         sqlit
ff70: 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 2a  e3MPrintf(db, "*
ff80: 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65 20 25  ** in database %
ff90: 73 20 2a 2a 2a 5c 6e 22 2c 20 64 62 2d 3e 61 44  s ***\n", db->aD
ffa0: 62 5b 69 5d 2e 7a 4e 61 6d 65 29 2c 0a 20 20 20  b[i].zName),.   
ffb0: 20 20 20 20 20 20 50 34 5f 44 59 4e 41 4d 49 43        P4_DYNAMIC
ffc0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
ffd0: 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
ffe0: 5f 4d 6f 76 65 2c 20 32 2c 20 34 2c 20 31 29 3b  _Move, 2, 4, 1);
fff0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
10000 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43  beAddOp3(v, OP_C
10010 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20 32 29 3b  oncat, 4, 3, 2);
10020 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
10030 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
10040 65 73 75 6c 74 52 6f 77 2c 20 32 2c 20 31 29 3b  esultRow, 2, 1);
10050 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
10060 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64  beJumpHere(v, ad
10070 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 4d  dr);..      /* M
10080 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 74 68 65  ake sure all the
10090 20 69 6e 64 69 63 65 73 20 61 72 65 20 63 6f 6e   indices are con
100a0 73 74 72 75 63 74 65 64 20 63 6f 72 72 65 63 74  structed correct
100b0 6c 79 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  ly..      */.   
100c0 20 20 20 66 6f 72 28 78 3d 73 71 6c 69 74 65 48     for(x=sqliteH
100d0 61 73 68 46 69 72 73 74 28 70 54 62 6c 73 29 3b  ashFirst(pTbls);
100e0 20 78 20 26 26 20 21 69 73 51 75 69 63 6b 3b 20   x && !isQuick; 
100f0 78 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74  x=sqliteHashNext
10100 28 78 29 29 7b 0a 20 20 20 20 20 20 20 20 54 61  (x)){.        Ta
10110 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c 69  ble *pTab = sqli
10120 74 65 48 61 73 68 44 61 74 61 28 78 29 3b 0a 20  teHashData(x);. 
10130 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 49         Index *pI
10140 64 78 2c 20 2a 70 50 6b 3b 0a 20 20 20 20 20 20  dx, *pPk;.      
10150 20 20 49 6e 64 65 78 20 2a 70 50 72 69 6f 72 20    Index *pPrior 
10160 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69 6e 74  = 0;.        int
10170 20 6c 6f 6f 70 54 6f 70 3b 0a 20 20 20 20 20 20   loopTop;.      
10180 20 20 69 6e 74 20 69 44 61 74 61 43 75 72 2c 20    int iDataCur, 
10190 69 49 64 78 43 75 72 3b 0a 20 20 20 20 20 20 20  iIdxCur;.       
101a0 20 69 6e 74 20 72 31 20 3d 20 2d 31 3b 0a 0a 20   int r1 = -1;.. 
101b0 20 20 20 20 20 20 20 69 66 28 20 70 54 61 62 2d         if( pTab-
101c0 3e 70 49 6e 64 65 78 3d 3d 30 20 29 20 63 6f 6e  >pIndex==0 ) con
101d0 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 70  tinue;.        p
101e0 50 6b 20 3d 20 48 61 73 52 6f 77 69 64 28 70 54  Pk = HasRowid(pT
101f0 61 62 29 20 3f 20 30 20 3a 20 73 71 6c 69 74 65  ab) ? 0 : sqlite
10200 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78  3PrimaryKeyIndex
10210 28 70 54 61 62 29 3b 0a 20 20 20 20 20 20 20 20  (pTab);.        
10220 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  addr = sqlite3Vd
10230 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49  beAddOp1(v, OP_I
10240 66 50 6f 73 2c 20 31 29 3b 20 20 2f 2a 20 53 74  fPos, 1);  /* St
10250 6f 70 20 69 66 20 6f 75 74 20 6f 66 20 65 72 72  op if out of err
10260 6f 72 73 20 2a 2f 0a 20 20 20 20 20 20 20 20 56  ors */.        V
10270 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
10280 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
10290 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
102a0 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20  Halt, 0, 0);.   
102b0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
102c0 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72  JumpHere(v, addr
102d0 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
102e0 65 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72  e3ExprCacheClear
102f0 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20  (pParse);.      
10300 20 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62    sqlite3OpenTab
10310 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 70 50 61  leAndIndices(pPa
10320 72 73 65 2c 20 70 54 61 62 2c 20 4f 50 5f 4f 70  rse, pTab, OP_Op
10330 65 6e 52 65 61 64 2c 0a 20 20 20 20 20 20 20 20  enRead,.        
10340 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10350 20 20 20 20 20 20 20 20 20 20 20 31 2c 20 30 2c             1, 0,
10360 20 26 69 44 61 74 61 43 75 72 2c 20 26 69 49 64   &iDataCur, &iId
10370 78 43 75 72 29 3b 0a 20 20 20 20 20 20 20 20 73  xCur);.        s
10380 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
10390 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
103a0 30 2c 20 37 29 3b 0a 20 20 20 20 20 20 20 20 66  0, 7);.        f
103b0 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61  or(j=0, pIdx=pTa
103c0 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b  b->pIndex; pIdx;
103d0 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78   pIdx=pIdx->pNex
103e0 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20  t, j++){.       
103f0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
10400 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
10410 65 72 2c 20 30 2c 20 38 2b 6a 29 3b 20 2f 2a 20  er, 0, 8+j); /* 
10420 69 6e 64 65 78 20 65 6e 74 72 69 65 73 20 63 6f  index entries co
10430 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 20 20 20  unter */.       
10440 20 7d 0a 20 20 20 20 20 20 20 20 70 50 61 72 73   }.        pPars
10450 65 2d 3e 6e 4d 65 6d 20 3d 20 4d 41 58 28 70 50  e->nMem = MAX(pP
10460 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20 38 2b 6a 29  arse->nMem, 8+j)
10470 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
10480 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
10490 50 5f 52 65 77 69 6e 64 2c 20 69 44 61 74 61 43  P_Rewind, iDataC
104a0 75 72 2c 20 30 29 3b 20 56 64 62 65 43 6f 76 65  ur, 0); VdbeCove
104b0 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
104c0 20 6c 6f 6f 70 54 6f 70 20 3d 20 73 71 6c 69 74   loopTop = sqlit
104d0 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
104e0 4f 50 5f 41 64 64 49 6d 6d 2c 20 37 2c 20 31 29  OP_AddImm, 7, 1)
104f0 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 56 65 72  ;.        /* Ver
10500 69 66 79 20 74 68 61 74 20 61 6c 6c 20 4e 4f 54  ify that all NOT
10510 20 4e 55 4c 4c 20 63 6f 6c 75 6d 6e 73 20 72 65   NULL columns re
10520 61 6c 6c 79 20 61 72 65 20 4e 4f 54 20 4e 55 4c  ally are NOT NUL
10530 4c 20 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f 72  L */.        for
10540 28 6a 3d 30 3b 20 6a 3c 70 54 61 62 2d 3e 6e 43  (j=0; j<pTab->nC
10550 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  ol; j++){.      
10560 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72 3b 0a      char *zErr;.
10570 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a 6d            int jm
10580 70 32 2c 20 6a 6d 70 33 3b 0a 20 20 20 20 20 20  p2, jmp3;.      
10590 20 20 20 20 69 66 28 20 6a 3d 3d 70 54 61 62 2d      if( j==pTab-
105a0 3e 69 50 4b 65 79 20 29 20 63 6f 6e 74 69 6e 75  >iPKey ) continu
105b0 65 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  e;.          if(
105c0 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 6a 5d 2e 6e   pTab->aCol[j].n
105d0 6f 74 4e 75 6c 6c 3d 3d 30 20 29 20 63 6f 6e 74  otNull==0 ) cont
105e0 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20  inue;.          
105f0 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
10600 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28  etColumnOfTable(
10610 76 2c 20 70 54 61 62 2c 20 69 44 61 74 61 43 75  v, pTab, iDataCu
10620 72 2c 20 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20  r, j, 3);.      
10630 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
10640 68 61 6e 67 65 50 35 28 76 2c 20 4f 50 46 4c 41  hangeP5(v, OPFLA
10650 47 5f 54 59 50 45 4f 46 41 52 47 29 3b 0a 20 20  G_TYPEOFARG);.  
10660 20 20 20 20 20 20 20 20 6a 6d 70 32 20 3d 20 73          jmp2 = s
10670 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
10680 28 76 2c 20 4f 50 5f 4e 6f 74 4e 75 6c 6c 2c 20  (v, OP_NotNull, 
10690 33 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  3); VdbeCoverage
106a0 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  (v);.          s
106b0 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
106c0 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31  (v, OP_AddImm, 1
106d0 2c 20 2d 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d  , -1); /* Decrem
106e0 65 6e 74 20 65 72 72 6f 72 20 6c 69 6d 69 74 20  ent error limit 
106f0 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7a 45 72  */.          zEr
10700 72 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69 6e  r = sqlite3MPrin
10710 74 66 28 64 62 2c 20 22 4e 55 4c 4c 20 76 61 6c  tf(db, "NULL val
10720 75 65 20 69 6e 20 25 73 2e 25 73 22 2c 20 70 54  ue in %s.%s", pT
10730 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20  ab->zName,.     
10740 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10750 20 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e 61           pTab->a
10760 43 6f 6c 5b 6a 5d 2e 7a 4e 61 6d 65 29 3b 0a 20  Col[j].zName);. 
10770 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
10780 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
10790 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20  _String8, 0, 3, 
107a0 30 2c 20 7a 45 72 72 2c 20 50 34 5f 44 59 4e 41  0, zErr, P4_DYNA
107b0 4d 49 43 29 3b 0a 20 20 20 20 20 20 20 20 20 20  MIC);.          
107c0 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
107d0 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
107e0 77 2c 20 33 2c 20 31 29 3b 0a 20 20 20 20 20 20  w, 3, 1);.      
107f0 20 20 20 20 6a 6d 70 33 20 3d 20 73 71 6c 69 74      jmp3 = sqlit
10800 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20  e3VdbeAddOp1(v, 
10810 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 56 64  OP_IfPos, 1); Vd
10820 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
10830 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
10840 56 64 62 65 41 64 64 4f 70 30 28 76 2c 20 4f 50  VdbeAddOp0(v, OP
10850 5f 48 61 6c 74 29 3b 0a 20 20 20 20 20 20 20 20  _Halt);.        
10860 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
10870 70 48 65 72 65 28 76 2c 20 6a 6d 70 32 29 3b 0a  pHere(v, jmp2);.
10880 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
10890 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
108a0 20 6a 6d 70 33 29 3b 0a 20 20 20 20 20 20 20 20   jmp3);.        
108b0 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 56 61 6c  }.        /* Val
108c0 69 64 61 74 65 20 69 6e 64 65 78 20 65 6e 74 72  idate index entr
108d0 69 65 73 20 66 6f 72 20 74 68 65 20 63 75 72 72  ies for the curr
108e0 65 6e 74 20 72 6f 77 20 2a 2f 0a 20 20 20 20 20  ent row */.     
108f0 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78     for(j=0, pIdx
10900 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70  =pTab->pIndex; p
10910 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e  Idx; pIdx=pIdx->
10920 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20  pNext, j++){.   
10930 20 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 32 2c         int jmp2,
10940 20 6a 6d 70 33 2c 20 6a 6d 70 34 2c 20 6a 6d 70   jmp3, jmp4, jmp
10950 35 3b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  5;.          int
10960 20 63 6b 55 6e 69 71 20 3d 20 73 71 6c 69 74 65   ckUniq = sqlite
10970 33 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76  3VdbeMakeLabel(v
10980 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
10990 20 70 50 6b 3d 3d 70 49 64 78 20 29 20 63 6f 6e   pPk==pIdx ) con
109a0 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20  tinue;.         
109b0 20 72 31 20 3d 20 73 71 6c 69 74 65 33 47 65 6e   r1 = sqlite3Gen
109c0 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28 70 50  erateIndexKey(pP
109d0 61 72 73 65 2c 20 70 49 64 78 2c 20 69 44 61 74  arse, pIdx, iDat
109e0 61 43 75 72 2c 20 30 2c 20 30 2c 20 26 6a 6d 70  aCur, 0, 0, &jmp
109f0 33 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  3,.             
10a00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10a10 20 20 20 20 20 20 20 20 20 20 70 50 72 69 6f 72            pPrior
10a20 2c 20 72 31 29 3b 0a 20 20 20 20 20 20 20 20 20  , r1);.         
10a30 20 70 50 72 69 6f 72 20 3d 20 70 49 64 78 3b 0a   pPrior = pIdx;.
10a40 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
10a50 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
10a60 50 5f 41 64 64 49 6d 6d 2c 20 38 2b 6a 2c 20 31  P_AddImm, 8+j, 1
10a70 29 3b 20 20 2f 2a 20 69 6e 63 72 65 6d 65 6e 74  );  /* increment
10a80 20 65 6e 74 72 79 20 63 6f 75 6e 74 20 2a 2f 0a   entry count */.
10a90 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56 65 72            /* Ver
10aa0 69 66 79 20 74 68 61 74 20 61 6e 20 69 6e 64 65  ify that an inde
10ab0 78 20 65 6e 74 72 79 20 65 78 69 73 74 73 20 66  x entry exists f
10ac0 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  or the current t
10ad0 61 62 6c 65 20 72 6f 77 20 2a 2f 0a 20 20 20 20  able row */.    
10ae0 20 20 20 20 20 20 6a 6d 70 32 20 3d 20 73 71 6c        jmp2 = sql
10af0 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 49 6e  ite3VdbeAddOp4In
10b00 74 28 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20 69  t(v, OP_Found, i
10b10 49 64 78 43 75 72 2b 6a 2c 20 63 6b 55 6e 69 71  IdxCur+j, ckUniq
10b20 2c 20 72 31 2c 0a 20 20 20 20 20 20 20 20 20 20  , r1,.          
10b30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10b40 20 20 20 20 20 20 20 20 20 20 20 20 70 49 64 78              pIdx
10b50 2d 3e 6e 43 6f 6c 75 6d 6e 29 3b 20 56 64 62 65  ->nColumn); Vdbe
10b60 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
10b70 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
10b80 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41  beAddOp2(v, OP_A
10b90 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f  ddImm, 1, -1); /
10ba0 2a 20 44 65 63 72 65 6d 65 6e 74 20 65 72 72 6f  * Decrement erro
10bb0 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20 20 20  r limit */.     
10bc0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10bd0 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
10be0 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 22  ing8, 0, 3, 0, "
10bf0 72 6f 77 20 22 2c 20 50 34 5f 53 54 41 54 49 43  row ", P4_STATIC
10c00 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
10c10 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76  ite3VdbeAddOp3(v
10c20 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 37 2c 20  , OP_Concat, 7, 
10c30 33 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20  3, 3);.         
10c40 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
10c50 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
10c60 2c 20 30 2c 20 34 2c 20 30 2c 20 0a 20 20 20 20  , 0, 4, 0, .    
10c70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c80 20 20 20 20 20 20 20 20 22 20 6d 69 73 73 69 6e          " missin
10c90 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 22 2c 20  g from index ", 
10ca0 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P4_STATIC);.    
10cb0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10cc0 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f  eAddOp3(v, OP_Co
10cd0 6e 63 61 74 2c 20 34 2c 20 33 2c 20 33 29 3b 0a  ncat, 4, 3, 3);.
10ce0 20 20 20 20 20 20 20 20 20 20 6a 6d 70 35 20 3d            jmp5 =
10cf0 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
10d00 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
10d10 2c 20 30 2c 20 34 2c 20 30 2c 0a 20 20 20 20 20  , 0, 4, 0,.     
10d20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 49                pI
10d40 64 78 2d 3e 7a 4e 61 6d 65 2c 20 50 34 5f 54 52  dx->zName, P4_TR
10d50 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20  ANSIENT);.      
10d60 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
10d70 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63  ddOp3(v, OP_Conc
10d80 61 74 2c 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20  at, 4, 3, 3);.  
10d90 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
10da0 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
10db0 52 65 73 75 6c 74 52 6f 77 2c 20 33 2c 20 31 29  ResultRow, 3, 1)
10dc0 3b 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70 34  ;.          jmp4
10dd0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
10de0 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73  dOp1(v, OP_IfPos
10df0 2c 20 31 29 3b 20 56 64 62 65 43 6f 76 65 72 61  , 1); VdbeCovera
10e00 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
10e10 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
10e20 70 30 28 76 2c 20 4f 50 5f 48 61 6c 74 29 3b 0a  p0(v, OP_Halt);.
10e30 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
10e40 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
10e50 20 6a 6d 70 32 29 3b 0a 20 20 20 20 20 20 20 20   jmp2);.        
10e60 20 20 2f 2a 20 46 6f 72 20 55 4e 49 51 55 45 20    /* For UNIQUE 
10e70 69 6e 64 65 78 65 73 2c 20 76 65 72 69 66 79 20  indexes, verify 
10e80 74 68 61 74 20 6f 6e 6c 79 20 6f 6e 65 20 65 6e  that only one en
10e90 74 72 79 20 65 78 69 73 74 73 20 77 69 74 68 20  try exists with 
10ea0 74 68 65 0a 20 20 20 20 20 20 20 20 20 20 2a 2a  the.          **
10eb0 20 63 75 72 72 65 6e 74 20 6b 65 79 2e 20 20 54   current key.  T
10ec0 68 65 20 65 6e 74 72 79 20 69 73 20 75 6e 69 71  he entry is uniq
10ed0 75 65 20 69 66 20 28 31 29 20 61 6e 79 20 63 6f  ue if (1) any co
10ee0 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 0a 20 20 20  lumn is NULL.   
10ef0 20 20 20 20 20 20 20 2a 2a 20 6f 72 20 28 32 29         ** or (2)
10f00 20 74 68 65 20 6e 65 78 74 20 65 6e 74 72 79 20   the next entry 
10f10 68 61 73 20 61 20 64 69 66 66 65 72 65 6e 74 20  has a different 
10f20 6b 65 79 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  key */.         
10f30 20 69 66 28 20 49 73 55 6e 69 71 75 65 49 6e 64   if( IsUniqueInd
10f40 65 78 28 70 49 64 78 29 20 29 7b 0a 20 20 20 20  ex(pIdx) ){.    
10f50 20 20 20 20 20 20 20 20 69 6e 74 20 75 6e 69 71          int uniq
10f60 4f 6b 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  Ok = sqlite3Vdbe
10f70 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20  MakeLabel(v);.  
10f80 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a 6d            int jm
10f90 70 36 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  p6;.            
10fa0 69 6e 74 20 6b 6b 3b 0a 20 20 20 20 20 20 20 20  int kk;.        
10fb0 20 20 20 20 66 6f 72 28 6b 6b 3d 30 3b 20 6b 6b      for(kk=0; kk
10fc0 3c 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 20  <pIdx->nKeyCol; 
10fd0 6b 6b 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20  kk++){.         
10fe0 20 20 20 20 20 69 6e 74 20 69 43 6f 6c 20 3d 20       int iCol = 
10ff0 70 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b  pIdx->aiColumn[k
11000 6b 5d 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  k];.            
11010 20 20 61 73 73 65 72 74 28 20 69 43 6f 6c 3e 3d    assert( iCol>=
11020 30 20 26 26 20 69 43 6f 6c 3c 70 54 61 62 2d 3e  0 && iCol<pTab->
11030 6e 43 6f 6c 20 29 3b 0a 20 20 20 20 20 20 20 20  nCol );.        
11040 20 20 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e        if( pTab->
11050 61 43 6f 6c 5b 69 43 6f 6c 5d 2e 6e 6f 74 4e 75  aCol[iCol].notNu
11060 6c 6c 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  ll ) continue;. 
11070 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c               sql
11080 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
11090 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 31 2b  , OP_IsNull, r1+
110a0 6b 6b 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20  kk, uniqOk);.   
110b0 20 20 20 20 20 20 20 20 20 20 20 56 64 62 65 43             VdbeC
110c0 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20  overage(v);.    
110d0 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
110e0 20 20 20 20 20 20 6a 6d 70 36 20 3d 20 73 71 6c        jmp6 = sql
110f0 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76  ite3VdbeAddOp1(v
11100 2c 20 4f 50 5f 4e 65 78 74 2c 20 69 49 64 78 43  , OP_Next, iIdxC
11110 75 72 2b 6a 29 3b 20 56 64 62 65 43 6f 76 65 72  ur+j); VdbeCover
11120 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
11130 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
11140 64 64 4f 70 32 28 76 2c 20 4f 50 5f 47 6f 74 6f  ddOp2(v, OP_Goto
11150 2c 20 30 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20  , 0, uniqOk);.  
11160 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
11170 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
11180 20 6a 6d 70 36 29 3b 0a 20 20 20 20 20 20 20 20   jmp6);.        
11190 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
111a0 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 49  ddOp4Int(v, OP_I
111b0 64 78 47 54 2c 20 69 49 64 78 43 75 72 2b 6a 2c  dxGT, iIdxCur+j,
111c0 20 75 6e 69 71 4f 6b 2c 20 72 31 2c 0a 20 20 20   uniqOk, r1,.   
111d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 49                pI
111f0 64 78 2d 3e 6e 4b 65 79 43 6f 6c 29 3b 20 56 64  dx->nKeyCol); Vd
11200 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
11210 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
11220 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
11230 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31  OP_AddImm, 1, -1
11240 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20  ); /* Decrement 
11250 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20  error limit */. 
11260 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
11270 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
11280 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33  OP_String8, 0, 3
11290 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20  , 0,.           
112a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
112b0 20 20 20 22 6e 6f 6e 2d 75 6e 69 71 75 65 20 65     "non-unique e
112c0 6e 74 72 79 20 69 6e 20 69 6e 64 65 78 20 22 2c  ntry in index ",
112d0 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20   P4_STATIC);.   
112e0 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
112f0 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
11300 5f 47 6f 74 6f 2c 20 30 2c 20 6a 6d 70 35 29 3b  _Goto, 0, jmp5);
11310 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
11320 69 74 65 33 56 64 62 65 52 65 73 6f 6c 76 65 4c  ite3VdbeResolveL
11330 61 62 65 6c 28 76 2c 20 75 6e 69 71 4f 6b 29 3b  abel(v, uniqOk);
11340 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
11350 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
11360 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d  beJumpHere(v, jm
11370 70 34 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  p4);.          s
11380 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50 61 72  qlite3ResolvePar
11390 74 49 64 78 4c 61 62 65 6c 28 70 50 61 72 73 65  tIdxLabel(pParse
113a0 2c 20 6a 6d 70 33 29 3b 0a 20 20 20 20 20 20 20  , jmp3);.       
113b0 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74   }.        sqlit
113c0 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
113d0 4f 50 5f 4e 65 78 74 2c 20 69 44 61 74 61 43 75  OP_Next, iDataCu
113e0 72 2c 20 6c 6f 6f 70 54 6f 70 29 3b 20 56 64 62  r, loopTop); Vdb
113f0 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
11400 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
11410 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6c 6f 6f  eJumpHere(v, loo
11420 70 54 6f 70 2d 31 29 3b 0a 23 69 66 6e 64 65 66  pTop-1);.#ifndef
11430 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52   SQLITE_OMIT_BTR
11440 45 45 43 4f 55 4e 54 0a 20 20 20 20 20 20 20 20  EECOUNT.        
11450 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
11460 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
11470 20 30 2c 20 32 2c 20 30 2c 20 0a 20 20 20 20 20   0, 2, 0, .     
11480 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11490 22 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72  "wrong # of entr
114a0 69 65 73 20 69 6e 20 69 6e 64 65 78 20 22 2c 20  ies in index ", 
114b0 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P4_STATIC);.    
114c0 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64      for(j=0, pId
114d0 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20  x=pTab->pIndex; 
114e0 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d  pIdx; pIdx=pIdx-
114f0 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20  >pNext, j++){.  
11500 20 20 20 20 20 20 20 20 69 66 28 20 70 50 6b 3d          if( pPk=
11510 3d 70 49 64 78 20 29 20 63 6f 6e 74 69 6e 75 65  =pIdx ) continue
11520 3b 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 72  ;.          addr
11530 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75   = sqlite3VdbeCu
11540 72 72 65 6e 74 41 64 64 72 28 76 29 3b 0a 20 20  rrentAddr(v);.  
11550 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
11560 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
11570 49 66 50 6f 73 2c 20 31 2c 20 61 64 64 72 2b 32  IfPos, 1, addr+2
11580 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
11590 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  v);.          sq
115a0 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
115b0 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30  v, OP_Halt, 0, 0
115c0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
115d0 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
115e0 2c 20 4f 50 5f 43 6f 75 6e 74 2c 20 69 49 64 78  , OP_Count, iIdx
115f0 43 75 72 2b 6a 2c 20 33 29 3b 0a 20 20 20 20 20  Cur+j, 3);.     
11600 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
11610 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 45 71 2c  AddOp3(v, OP_Eq,
11620 20 38 2b 6a 2c 20 61 64 64 72 2b 38 2c 20 33 29   8+j, addr+8, 3)
11630 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
11640 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
11650 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 35  ite3VdbeChangeP5
11660 28 76 2c 20 53 51 4c 49 54 45 5f 4e 4f 54 4e 55  (v, SQLITE_NOTNU
11670 4c 4c 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  LL);.          s
11680 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
11690 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31  (v, OP_AddImm, 1
116a0 2c 20 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 20  , -1);.         
116b0 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
116c0 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
116d0 2c 20 30 2c 20 33 2c 20 30 2c 20 70 49 64 78 2d  , 0, 3, 0, pIdx-
116e0 3e 7a 4e 61 6d 65 2c 20 50 34 5f 54 52 41 4e 53  >zName, P4_TRANS
116f0 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 20 20 20  IENT);.         
11700 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
11710 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c  p3(v, OP_Concat,
11720 20 33 2c 20 32 2c 20 37 29 3b 0a 20 20 20 20 20   3, 2, 7);.     
11730 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
11740 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
11750 75 6c 74 52 6f 77 2c 20 37 2c 20 31 29 3b 0a 20  ultRow, 7, 1);. 
11760 20 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66 20         }.#endif 
11770 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  /* SQLITE_OMIT_B
11780 54 52 45 45 43 4f 55 4e 54 20 2a 2f 0a 20 20 20  TREECOUNT */.   
11790 20 20 20 7d 20 0a 20 20 20 20 7d 0a 20 20 20 20     } .    }.    
117a0 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64  addr = sqlite3Vd
117b0 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41  beAddOpList(v, A
117c0 72 72 61 79 53 69 7a 65 28 65 6e 64 43 6f 64 65  rraySize(endCode
117d0 29 2c 20 65 6e 64 43 6f 64 65 2c 20 69 4c 6e 29  ), endCode, iLn)
117e0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
117f0 65 43 68 61 6e 67 65 50 33 28 76 2c 20 61 64 64  eChangeP3(v, add
11800 72 2c 20 2d 6d 78 45 72 72 29 3b 0a 20 20 20 20  r, -mxErr);.    
11810 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
11820 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20 20  ere(v, addr);.  
11830 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
11840 6e 67 65 50 34 28 76 2c 20 61 64 64 72 2b 31 2c  ngeP4(v, addr+1,
11850 20 22 6f 6b 22 2c 20 50 34 5f 53 54 41 54 49 43   "ok", P4_STATIC
11860 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
11870 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
11880 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f  _OMIT_INTEGRITY_
11890 43 48 45 43 4b 20 2a 2f 0a 0a 23 69 66 6e 64 65  CHECK */..#ifnde
118a0 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54  f SQLITE_OMIT_UT
118b0 46 31 36 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  F16.  /*.  **   
118c0 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 0a  PRAGMA encoding.
118d0 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 65 6e    **   PRAGMA en
118e0 63 6f 64 69 6e 67 20 3d 20 22 75 74 66 2d 38 22  coding = "utf-8"
118f0 7c 22 75 74 66 2d 31 36 22 7c 22 75 74 66 2d 31  |"utf-16"|"utf-1
11900 36 6c 65 22 7c 22 75 74 66 2d 31 36 62 65 22 0a  6le"|"utf-16be".
11910 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 69 74 73    **.  ** In its
11920 20 66 69 72 73 74 20 66 6f 72 6d 2c 20 74 68 69   first form, thi
11930 73 20 70 72 61 67 6d 61 20 72 65 74 75 72 6e 73  s pragma returns
11940 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f 66   the encoding of
11950 20 74 68 65 20 6d 61 69 6e 0a 20 20 2a 2a 20 64   the main.  ** d
11960 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65 20  atabase. If the 
11970 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74 20  database is not 
11980 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 69 74 20  initialized, it 
11990 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 6e  is initialized n
119a0 6f 77 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  ow..  **.  ** Th
119b0 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f 66  e second form of
119c0 20 74 68 69 73 20 70 72 61 67 6d 61 20 69 73 20   this pragma is 
119d0 61 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20 6d  a no-op if the m
119e0 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c  ain database fil
119f0 65 0a 20 20 2a 2a 20 68 61 73 20 6e 6f 74 20 61  e.  ** has not a
11a00 6c 72 65 61 64 79 20 62 65 65 6e 20 69 6e 69 74  lready been init
11a10 69 61 6c 69 7a 65 64 2e 20 49 6e 20 74 68 69 73  ialized. In this
11a20 20 63 61 73 65 20 69 74 20 73 65 74 73 20 74 68   case it sets th
11a30 65 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20 65  e default.  ** e
11a40 6e 63 6f 64 69 6e 67 20 74 68 61 74 20 77 69 6c  ncoding that wil
11a50 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 68  l be used for th
11a60 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20  e main database 
11a70 66 69 6c 65 20 69 66 20 61 20 6e 65 77 20 66 69  file if a new fi
11a80 6c 65 0a 20 20 2a 2a 20 69 73 20 63 72 65 61 74  le.  ** is creat
11a90 65 64 2e 20 49 66 20 61 6e 20 65 78 69 73 74 69  ed. If an existi
11aa0 6e 67 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  ng main database
11ab0 20 66 69 6c 65 20 69 73 20 6f 70 65 6e 65 64 2c   file is opened,
11ac0 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20 64   then the.  ** d
11ad0 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e 63 6f  efault text enco
11ae0 64 69 6e 67 20 66 6f 72 20 74 68 65 20 65 78 69  ding for the exi
11af0 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20 69  sting database i
11b00 73 20 75 73 65 64 2e 0a 20 20 2a 2a 20 0a 20 20  s used..  ** .  
11b10 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73 20  ** In all cases 
11b20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 63 72  new databases cr
11b30 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 65 20  eated using the 
11b40 41 54 54 41 43 48 20 63 6f 6d 6d 61 6e 64 20 61  ATTACH command a
11b50 72 65 0a 20 20 2a 2a 20 63 72 65 61 74 65 64 20  re.  ** created 
11b60 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65 20  to use the same 
11b70 64 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e 63  default text enc
11b80 6f 64 69 6e 67 20 61 73 20 74 68 65 20 6d 61 69  oding as the mai
11b90 6e 20 64 61 74 61 62 61 73 65 2e 20 49 66 0a 20  n database. If. 
11ba0 20 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61 74   ** the main dat
11bb0 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 62 65  abase has not be
11bc0 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20 61  en initialized a
11bd0 6e 64 2f 6f 72 20 63 72 65 61 74 65 64 20 77 68  nd/or created wh
11be0 65 6e 20 41 54 54 41 43 48 0a 20 20 2a 2a 20 69  en ATTACH.  ** i
11bf0 73 20 65 78 65 63 75 74 65 64 2c 20 74 68 69 73  s executed, this
11c00 20 69 73 20 64 6f 6e 65 20 62 65 66 6f 72 65 20   is done before 
11c10 74 68 65 20 41 54 54 41 43 48 20 6f 70 65 72 61  the ATTACH opera
11c20 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  tion..  **.  ** 
11c30 49 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 66 6f  In the second fo
11c40 72 6d 20 74 68 69 73 20 70 72 61 67 6d 61 20 73  rm this pragma s
11c50 65 74 73 20 74 68 65 20 74 65 78 74 20 65 6e 63  ets the text enc
11c60 6f 64 69 6e 67 20 74 6f 20 62 65 20 75 73 65 64  oding to be used
11c70 20 69 6e 0a 20 20 2a 2a 20 6e 65 77 20 64 61 74   in.  ** new dat
11c80 61 62 61 73 65 20 66 69 6c 65 73 20 63 72 65 61  abase files crea
11c90 74 65 64 20 75 73 69 6e 67 20 74 68 69 73 20 64  ted using this d
11ca0 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e 20  atabase handle. 
11cb0 49 74 20 69 73 20 6f 6e 6c 79 0a 20 20 2a 2a 20  It is only.  ** 
11cc0 75 73 65 66 75 6c 20 69 66 20 69 6e 76 6f 6b 65  useful if invoke
11cd0 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61 66  d immediately af
11ce0 74 65 72 20 74 68 65 20 6d 61 69 6e 20 64 61 74  ter the main dat
11cf0 61 62 61 73 65 20 69 0a 20 20 2a 2f 0a 20 20 63  abase i.  */.  c
11d00 61 73 65 20 50 72 61 67 54 79 70 5f 45 4e 43 4f  ase PragTyp_ENCO
11d10 44 49 4e 47 3a 20 7b 0a 20 20 20 20 73 74 61 74  DING: {.    stat
11d20 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20  ic const struct 
11d30 45 6e 63 4e 61 6d 65 20 7b 0a 20 20 20 20 20 20  EncName {.      
11d40 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20 20  char *zName;.   
11d50 20 20 20 75 38 20 65 6e 63 3b 0a 20 20 20 20 7d     u8 enc;.    }
11d60 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b 0a   encnames[] = {.
11d70 20 20 20 20 20 20 7b 20 22 55 54 46 38 22 2c 20        { "UTF8", 
11d80 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38 20      SQLITE_UTF8 
11d90 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20         },.      
11da0 7b 20 22 55 54 46 2d 38 22 2c 20 20 20 20 53 51  { "UTF-8",    SQ
11db0 4c 49 54 45 5f 55 54 46 38 20 20 20 20 20 20 20  LITE_UTF8       
11dc0 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65 20   },  /* Must be 
11dd0 65 6c 65 6d 65 6e 74 20 5b 31 5d 20 2a 2f 0a 20  element [1] */. 
11de0 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36 6c 65       { "UTF-16le
11df0 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4c  ", SQLITE_UTF16L
11e00 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73  E     },  /* Mus
11e10 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 32 5d  t be element [2]
11e20 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46   */.      { "UTF
11e30 2d 31 36 62 65 22 2c 20 53 51 4c 49 54 45 5f 55  -16be", SQLITE_U
11e40 54 46 31 36 42 45 20 20 20 20 20 7d 2c 20 20 2f  TF16BE     },  /
11e50 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d 65 6e  * Must be elemen
11e60 74 20 5b 33 5d 20 2a 2f 0a 20 20 20 20 20 20 7b  t [3] */.      {
11e70 20 22 55 54 46 31 36 6c 65 22 2c 20 20 53 51 4c   "UTF16le",  SQL
11e80 49 54 45 5f 55 54 46 31 36 4c 45 20 20 20 20 20  ITE_UTF16LE     
11e90 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31  },.      { "UTF1
11ea0 36 62 65 22 2c 20 20 53 51 4c 49 54 45 5f 55 54  6be",  SQLITE_UT
11eb0 46 31 36 42 45 20 20 20 20 20 7d 2c 0a 20 20 20  F16BE     },.   
11ec0 20 20 20 7b 20 22 55 54 46 2d 31 36 22 2c 20 20     { "UTF-16",  
11ed0 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20 20   0              
11ee0 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45      }, /* SQLITE
11ef0 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a  _UTF16NATIVE */.
11f00 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 22 2c        { "UTF16",
11f10 20 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20      0           
11f20 20 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c         }, /* SQL
11f30 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20  ITE_UTF16NATIVE 
11f40 2a 2f 0a 20 20 20 20 20 20 7b 20 30 2c 20 30 20  */.      { 0, 0 
11f50 7d 0a 20 20 20 20 7d 3b 0a 20 20 20 20 63 6f 6e  }.    };.    con
11f60 73 74 20 73 74 72 75 63 74 20 45 6e 63 4e 61 6d  st struct EncNam
11f70 65 20 2a 70 45 6e 63 3b 0a 20 20 20 20 69 66 28  e *pEnc;.    if(
11f80 20 21 7a 52 69 67 68 74 20 29 7b 20 20 20 20 2f   !zRight ){    /
11f90 2a 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69  * "PRAGMA encodi
11fa0 6e 67 22 20 2a 2f 0a 20 20 20 20 20 20 69 66 28  ng" */.      if(
11fb0 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68 65   sqlite3ReadSche
11fc0 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f 74  ma(pParse) ) got
11fd0 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20  o pragma_out;.  
11fe0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
11ff0 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
12000 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
12010 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
12020 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
12030 20 22 65 6e 63 6f 64 69 6e 67 22 2c 20 53 51 4c   "encoding", SQL
12040 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
12050 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
12060 64 4f 70 32 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp2(v, OP_Strin
12070 67 38 2c 20 30 2c 20 31 29 3b 0a 20 20 20 20 20  g8, 0, 1);.     
12080 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65   assert( encname
12090 73 5b 53 51 4c 49 54 45 5f 55 54 46 38 5d 2e 65  s[SQLITE_UTF8].e
120a0 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38 20  nc==SQLITE_UTF8 
120b0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
120c0 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45   encnames[SQLITE
120d0 5f 55 54 46 31 36 4c 45 5d 2e 65 6e 63 3d 3d 53  _UTF16LE].enc==S
120e0 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29 3b  QLITE_UTF16LE );
120f0 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 65  .      assert( e
12100 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55  ncnames[SQLITE_U
12110 54 46 31 36 42 45 5d 2e 65 6e 63 3d 3d 53 51 4c  TF16BE].enc==SQL
12120 49 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a 20  ITE_UTF16BE );. 
12130 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
12140 43 68 61 6e 67 65 50 34 28 76 2c 20 2d 31 2c 20  ChangeP4(v, -1, 
12150 65 6e 63 6e 61 6d 65 73 5b 45 4e 43 28 70 50 61  encnames[ENC(pPa
12160 72 73 65 2d 3e 64 62 29 5d 2e 7a 4e 61 6d 65 2c  rse->db)].zName,
12170 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20   P4_STATIC);.   
12180 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
12190 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
121a0 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20 20  tRow, 1, 1);.   
121b0 20 7d 65 6c 73 65 7b 20 20 20 20 20 20 20 20 20   }else{         
121c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
121d0 2a 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64 69  * "PRAGMA encodi
121e0 6e 67 20 3d 20 58 58 58 22 20 2a 2f 0a 20 20 20  ng = XXX" */.   
121f0 20 20 20 2f 2a 20 4f 6e 6c 79 20 63 68 61 6e 67     /* Only chang
12200 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 73  e the value of s
12210 71 6c 69 74 65 2e 65 6e 63 20 69 66 20 74 68 65  qlite.enc if the
12220 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
12230 20 69 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a   is not.      **
12240 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49 66   initialized. If
12250 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
12260 73 65 20 65 78 69 73 74 73 2c 20 74 68 65 20 6e  se exists, the n
12270 65 77 20 73 71 6c 69 74 65 2e 65 6e 63 20 76 61  ew sqlite.enc va
12280 6c 75 65 0a 20 20 20 20 20 20 2a 2a 20 77 69 6c  lue.      ** wil
12290 6c 20 62 65 20 6f 76 65 72 77 72 69 74 74 65 6e  l be overwritten
122a0 20 77 68 65 6e 20 74 68 65 20 73 63 68 65 6d 61   when the schema
122b0 20 69 73 20 6e 65 78 74 20 6c 6f 61 64 65 64 2e   is next loaded.
122c0 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74 0a   If it does not.
122d0 20 20 20 20 20 20 2a 2a 20 61 6c 72 65 61 64 79        ** already
122e0 20 65 78 69 73 74 73 2c 20 69 74 20 77 69 6c 6c   exists, it will
122f0 20 62 65 20 63 72 65 61 74 65 64 20 74 6f 20 75   be created to u
12300 73 65 20 74 68 65 20 6e 65 77 20 65 6e 63 6f 64  se the new encod
12310 69 6e 67 20 76 61 6c 75 65 2e 0a 20 20 20 20 20  ing value..     
12320 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 0a 20   */.      if( . 
12330 20 20 20 20 20 20 20 21 28 44 62 48 61 73 50 72         !(DbHasPr
12340 6f 70 65 72 74 79 28 64 62 2c 20 30 2c 20 44 42  operty(db, 0, DB
12350 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 29 20  _SchemaLoaded)) 
12360 7c 7c 20 0a 20 20 20 20 20 20 20 20 44 62 48 61  || .        DbHa
12370 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 30 2c  sProperty(db, 0,
12380 20 44 42 5f 45 6d 70 74 79 29 20 0a 20 20 20 20   DB_Empty) .    
12390 20 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f 72    ){.        for
123a0 28 70 45 6e 63 3d 26 65 6e 63 6e 61 6d 65 73 5b  (pEnc=&encnames[
123b0 30 5d 3b 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 3b  0]; pEnc->zName;
123c0 20 70 45 6e 63 2b 2b 29 7b 0a 20 20 20 20 20 20   pEnc++){.      
123d0 20 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74      if( 0==sqlit
123e0 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74  e3StrICmp(zRight
123f0 2c 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 29 20 29  , pEnc->zName) )
12400 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 45 4e  {.            EN
12410 43 28 70 50 61 72 73 65 2d 3e 64 62 29 20 3d 20  C(pParse->db) = 
12420 70 45 6e 63 2d 3e 65 6e 63 20 3f 20 70 45 6e 63  pEnc->enc ? pEnc
12430 2d 3e 65 6e 63 20 3a 20 53 51 4c 49 54 45 5f 55  ->enc : SQLITE_U
12440 54 46 31 36 4e 41 54 49 56 45 3b 0a 20 20 20 20  TF16NATIVE;.    
12450 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
12460 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
12470 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28     }.        if(
12480 20 21 70 45 6e 63 2d 3e 7a 4e 61 6d 65 20 29 7b   !pEnc->zName ){
12490 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
124a0 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
124b0 65 2c 20 22 75 6e 73 75 70 70 6f 72 74 65 64 20  e, "unsupported 
124c0 65 6e 63 6f 64 69 6e 67 3a 20 25 73 22 2c 20 7a  encoding: %s", z
124d0 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 20 20  Right);.        
124e0 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  }.      }.    }.
124f0 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e    }.  break;.#en
12500 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
12510 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 23 69 66  IT_UTF16 */..#if
12520 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
12530 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f  _SCHEMA_VERSION_
12540 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a  PRAGMAS.  /*.  *
12550 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  *   PRAGMA [data
12560 62 61 73 65 2e 5d 73 63 68 65 6d 61 5f 76 65 72  base.]schema_ver
12570 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41 47  sion.  **   PRAG
12580 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 63  MA [database.]sc
12590 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20 3c  hema_version = <
125a0 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20  integer>.  **.  
125b0 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74  **   PRAGMA [dat
125c0 61 62 61 73 65 2e 5d 75 73 65 72 5f 76 65 72 73  abase.]user_vers
125d0 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ion.  **   PRAGM
125e0 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 75 73 65  A [database.]use
125f0 72 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69 6e 74  r_version = <int
12600 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  eger>.  **.  ** 
12610 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
12620 73 65 2e 5d 66 72 65 65 6c 69 73 74 5f 63 6f 75  se.]freelist_cou
12630 6e 74 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20  nt = <integer>. 
12640 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   **.  **   PRAGM
12650 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 61 70 70  A [database.]app
12660 6c 69 63 61 74 69 6f 6e 5f 69 64 0a 20 20 2a 2a  lication_id.  **
12670 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
12680 61 73 65 2e 5d 61 70 70 6c 69 63 61 74 69 6f 6e  ase.]application
12690 5f 69 64 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a  _id = <integer>.
126a0 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 70 72    **.  ** The pr
126b0 61 67 6d 61 27 73 20 73 63 68 65 6d 61 5f 76 65  agma's schema_ve
126c0 72 73 69 6f 6e 20 61 6e 64 20 75 73 65 72 5f 76  rsion and user_v
126d0 65 72 73 69 6f 6e 20 61 72 65 20 75 73 65 64 20  ersion are used 
126e0 74 6f 20 73 65 74 20 6f 72 20 67 65 74 0a 20 20  to set or get.  
126f0 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ** the value of 
12700 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69  the schema-versi
12710 6f 6e 20 61 6e 64 20 75 73 65 72 2d 76 65 72 73  on and user-vers
12720 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65 6c  ion, respectivel
12730 79 2e 20 42 6f 74 68 0a 20 20 2a 2a 20 74 68 65  y. Both.  ** the
12740 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20   schema-version 
12750 61 6e 64 20 74 68 65 20 75 73 65 72 2d 76 65 72  and the user-ver
12760 73 69 6f 6e 20 61 72 65 20 33 32 2d 62 69 74 20  sion are 32-bit 
12770 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73 0a  signed integers.
12780 20 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20 74    ** stored in t
12790 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61 64  he database head
127a0 65 72 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  er..  **.  ** Th
127b0 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65 20  e schema-cookie 
127c0 69 73 20 75 73 75 61 6c 6c 79 20 6f 6e 6c 79 20  is usually only 
127d0 6d 61 6e 69 70 75 6c 61 74 65 64 20 69 6e 74 65  manipulated inte
127e0 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74 65  rnally by SQLite
127f0 2e 20 49 74 0a 20 20 2a 2a 20 69 73 20 69 6e 63  . It.  ** is inc
12800 72 65 6d 65 6e 74 65 64 20 62 79 20 53 51 4c 69  remented by SQLi
12810 74 65 20 77 68 65 6e 65 76 65 72 20 74 68 65 20  te whenever the 
12820 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61 20  database schema 
12830 69 73 20 6d 6f 64 69 66 69 65 64 20 28 62 79 0a  is modified (by.
12840 20 20 2a 2a 20 63 72 65 61 74 69 6e 67 20 6f 72    ** creating or
12850 20 64 72 6f 70 70 69 6e 67 20 61 20 74 61 62 6c   dropping a tabl
12860 65 20 6f 72 20 69 6e 64 65 78 29 2e 20 54 68 65  e or index). The
12870 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e 20   schema version 
12880 69 73 20 75 73 65 64 20 62 79 0a 20 20 2a 2a 20  is used by.  ** 
12890 53 51 4c 69 74 65 20 65 61 63 68 20 74 69 6d 65  SQLite each time
128a0 20 61 20 71 75 65 72 79 20 69 73 20 65 78 65 63   a query is exec
128b0 75 74 65 64 20 74 6f 20 65 6e 73 75 72 65 20 74  uted to ensure t
128c0 68 61 74 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  hat the internal
128d0 20 63 61 63 68 65 0a 20 20 2a 2a 20 6f 66 20 74   cache.  ** of t
128e0 68 65 20 73 63 68 65 6d 61 20 75 73 65 64 20 77  he schema used w
128f0 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74 68  hen compiling th
12900 65 20 53 51 4c 20 71 75 65 72 79 20 6d 61 74 63  e SQL query matc
12910 68 65 73 20 74 68 65 20 73 63 68 65 6d 61 20 6f  hes the schema o
12920 66 0a 20 20 2a 2a 20 74 68 65 20 64 61 74 61 62  f.  ** the datab
12930 61 73 65 20 61 67 61 69 6e 73 74 20 77 68 69 63  ase against whic
12940 68 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20 71  h the compiled q
12950 75 65 72 79 20 69 73 20 61 63 74 75 61 6c 6c 79  uery is actually
12960 20 65 78 65 63 75 74 65 64 2e 0a 20 20 2a 2a 20   executed..  ** 
12970 53 75 62 76 65 72 74 69 6e 67 20 74 68 69 73 20  Subverting this 
12980 6d 65 63 68 61 6e 69 73 6d 20 62 79 20 75 73 69  mechanism by usi
12990 6e 67 20 22 50 52 41 47 4d 41 20 73 63 68 65 6d  ng "PRAGMA schem
129a0 61 5f 76 65 72 73 69 6f 6e 22 20 74 6f 20 6d 6f  a_version" to mo
129b0 64 69 66 79 0a 20 20 2a 2a 20 74 68 65 20 73 63  dify.  ** the sc
129c0 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 69 73 20  hema-version is 
129d0 70 6f 74 65 6e 74 69 61 6c 6c 79 20 64 61 6e 67  potentially dang
129e0 65 72 6f 75 73 20 61 6e 64 20 6d 61 79 20 6c 65  erous and may le
129f0 61 64 20 74 6f 20 70 72 6f 67 72 61 6d 0a 20 20  ad to program.  
12a00 2a 2a 20 63 72 61 73 68 65 73 20 6f 72 20 64 61  ** crashes or da
12a10 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69 6f  tabase corruptio
12a20 6e 2e 20 55 73 65 20 77 69 74 68 20 63 61 75 74  n. Use with caut
12a30 69 6f 6e 21 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ion!.  **.  ** T
12a40 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e 20  he user-version 
12a50 69 73 20 6e 6f 74 20 75 73 65 64 20 69 6e 74 65  is not used inte
12a60 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74 65  rnally by SQLite
12a70 2e 20 49 74 20 6d 61 79 20 62 65 20 75 73 65 64  . It may be used
12a80 20 62 79 0a 20 20 2a 2a 20 61 70 70 6c 69 63 61   by.  ** applica
12a90 74 69 6f 6e 73 20 66 6f 72 20 61 6e 79 20 70 75  tions for any pu
12aa0 72 70 6f 73 65 2e 0a 20 20 2a 2f 0a 20 20 63 61  rpose..  */.  ca
12ab0 73 65 20 50 72 61 67 54 79 70 5f 48 45 41 44 45  se PragTyp_HEADE
12ac0 52 5f 56 41 4c 55 45 3a 20 7b 0a 20 20 20 20 69  R_VALUE: {.    i
12ad0 6e 74 20 69 43 6f 6f 6b 69 65 3b 20 20 20 2f 2a  nt iCookie;   /*
12ae0 20 43 6f 6f 6b 69 65 20 69 6e 64 65 78 2e 20 31   Cookie index. 1
12af0 20 66 6f 72 20 73 63 68 65 6d 61 2d 63 6f 6f 6b   for schema-cook
12b00 69 65 2c 20 36 20 66 6f 72 20 75 73 65 72 2d 63  ie, 6 for user-c
12b10 6f 6f 6b 69 65 2e 20 2a 2f 0a 20 20 20 20 73 71  ookie. */.    sq
12b20 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72  lite3VdbeUsesBtr
12b30 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20  ee(v, iDb);.    
12b40 73 77 69 74 63 68 28 20 7a 4c 65 66 74 5b 30 5d  switch( zLeft[0]
12b50 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20 27   ){.      case '
12b60 61 27 3a 20 63 61 73 65 20 27 41 27 3a 0a 20 20  a': case 'A':.  
12b70 20 20 20 20 20 20 69 43 6f 6f 6b 69 65 20 3d 20        iCookie = 
12b80 42 54 52 45 45 5f 41 50 50 4c 49 43 41 54 49 4f  BTREE_APPLICATIO
12b90 4e 5f 49 44 3b 0a 20 20 20 20 20 20 20 20 62 72  N_ID;.        br
12ba0 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65 20  eak;.      case 
12bb0 27 66 27 3a 20 63 61 73 65 20 27 46 27 3a 0a 20  'f': case 'F':. 
12bc0 20 20 20 20 20 20 20 69 43 6f 6f 6b 69 65 20 3d         iCookie =
12bd0 20 42 54 52 45 45 5f 46 52 45 45 5f 50 41 47 45   BTREE_FREE_PAGE
12be0 5f 43 4f 55 4e 54 3b 0a 20 20 20 20 20 20 20 20  _COUNT;.        
12bf0 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
12c00 65 20 27 73 27 3a 20 63 61 73 65 20 27 53 27 3a  e 's': case 'S':
12c10 0a 20 20 20 20 20 20 20 20 69 43 6f 6f 6b 69 65  .        iCookie
12c20 20 3d 20 42 54 52 45 45 5f 53 43 48 45 4d 41 5f   = BTREE_SCHEMA_
12c30 56 45 52 53 49 4f 4e 3b 0a 20 20 20 20 20 20 20  VERSION;.       
12c40 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 64 65   break;.      de
12c50 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 20 20 69  fault:.        i
12c60 43 6f 6f 6b 69 65 20 3d 20 42 54 52 45 45 5f 55  Cookie = BTREE_U
12c70 53 45 52 5f 56 45 52 53 49 4f 4e 3b 0a 20 20 20  SER_VERSION;.   
12c80 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20       break;.    
12c90 7d 0a 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68  }..    if( zRigh
12ca0 74 20 26 26 20 69 43 6f 6f 6b 69 65 21 3d 42 54  t && iCookie!=BT
12cb0 52 45 45 5f 46 52 45 45 5f 50 41 47 45 5f 43 4f  REE_FREE_PAGE_CO
12cc0 55 4e 54 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  UNT ){.      /* 
12cd0 57 72 69 74 65 20 74 68 65 20 73 70 65 63 69 66  Write the specif
12ce0 69 65 64 20 63 6f 6f 6b 69 65 20 76 61 6c 75 65  ied cookie value
12cf0 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69 63   */.      static
12d00 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73   const VdbeOpLis
12d10 74 20 73 65 74 43 6f 6f 6b 69 65 5b 5d 20 3d 20  t setCookie[] = 
12d20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54  {.        { OP_T
12d30 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 30  ransaction,    0
12d40 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a  ,  1,  0},    /*
12d50 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20   0 */.        { 
12d60 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20  OP_Integer,     
12d70 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20     0,  1,  0},  
12d80 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20    /* 1 */.      
12d90 20 20 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65    { OP_SetCookie
12da0 2c 20 20 20 20 20 20 30 2c 20 20 30 2c 20 20 31  ,      0,  0,  1
12db0 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20  },    /* 2 */.  
12dc0 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74      };.      int
12dd0 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56   addr = sqlite3V
12de0 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20  dbeAddOpList(v, 
12df0 41 72 72 61 79 53 69 7a 65 28 73 65 74 43 6f 6f  ArraySize(setCoo
12e00 6b 69 65 29 2c 20 73 65 74 43 6f 6f 6b 69 65 2c  kie), setCookie,
12e10 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
12e20 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
12e30 2c 20 61 64 64 72 2c 20 69 44 62 29 3b 0a 20 20  , addr, iDb);.  
12e40 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
12e50 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b  hangeP1(v, addr+
12e60 31 2c 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  1, sqlite3Atoi(z
12e70 52 69 67 68 74 29 29 3b 0a 20 20 20 20 20 20 73  Right));.      s
12e80 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
12e90 50 31 28 76 2c 20 61 64 64 72 2b 32 2c 20 69 44  P1(v, addr+2, iD
12ea0 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  b);.      sqlite
12eb0 33 56 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c  3VdbeChangeP2(v,
12ec0 20 61 64 64 72 2b 32 2c 20 69 43 6f 6f 6b 69 65   addr+2, iCookie
12ed0 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
12ee0 20 20 20 20 2f 2a 20 52 65 61 64 20 74 68 65 20      /* Read the 
12ef0 73 70 65 63 69 66 69 65 64 20 63 6f 6f 6b 69 65  specified cookie
12f00 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20   value */.      
12f10 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62  static const Vdb
12f20 65 4f 70 4c 69 73 74 20 72 65 61 64 43 6f 6f 6b  eOpList readCook
12f30 69 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20  ie[] = {.       
12f40 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f   { OP_Transactio
12f50 6e 2c 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30  n,     0,  0,  0
12f60 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20  },    /* 0 */.  
12f70 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43        { OP_ReadC
12f80 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20  ookie,      0,  
12f90 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20  1,  0},    /* 1 
12fa0 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  */.        { OP_
12fb0 52 65 73 75 6c 74 52 6f 77 2c 20 20 20 20 20 20  ResultRow,      
12fc0 20 31 2c 20 20 31 2c 20 20 30 7d 0a 20 20 20 20   1,  1,  0}.    
12fd0 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74 20 61    };.      int a
12fe0 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ddr = sqlite3Vdb
12ff0 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72  eAddOpList(v, Ar
13000 72 61 79 53 69 7a 65 28 72 65 61 64 43 6f 6f 6b  raySize(readCook
13010 69 65 29 2c 20 72 65 61 64 43 6f 6f 6b 69 65 2c  ie), readCookie,
13020 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   0);.      sqlit
13030 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
13040 2c 20 61 64 64 72 2c 20 69 44 62 29 3b 0a 20 20  , addr, iDb);.  
13050 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
13060 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b  hangeP1(v, addr+
13070 31 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73  1, iDb);.      s
13080 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
13090 50 33 28 76 2c 20 61 64 64 72 2b 31 2c 20 69 43  P3(v, addr+1, iC
130a0 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 20 20 73 71  ookie);.      sq
130b0 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
130c0 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20  ols(v, 1);.     
130d0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
130e0 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
130f0 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65 66 74  NAME_NAME, zLeft
13100 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53 49 45  , SQLITE_TRANSIE
13110 4e 54 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  NT);.    }.  }. 
13120 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f   break;.#endif /
13130 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43  * SQLITE_OMIT_SC
13140 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41  HEMA_VERSION_PRA
13150 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GMAS */..#ifndef
13160 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d   SQLITE_OMIT_COM
13170 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53  PILEOPTION_DIAGS
13180 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
13190 47 4d 41 20 63 6f 6d 70 69 6c 65 5f 6f 70 74 69  GMA compile_opti
131a0 6f 6e 73 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65  ons.  **.  ** Re
131b0 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 73 20 6f  turn the names o
131c0 66 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 2d 74 69  f all compile-ti
131d0 6d 65 20 6f 70 74 69 6f 6e 73 20 75 73 65 64 20  me options used 
131e0 69 6e 20 74 68 69 73 20 62 75 69 6c 64 2c 0a 20  in this build,. 
131f0 20 2a 2a 20 6f 6e 65 20 6f 70 74 69 6f 6e 20 70   ** one option p
13200 65 72 20 72 6f 77 2e 0a 20 20 2a 2f 0a 20 20 63  er row..  */.  c
13210 61 73 65 20 50 72 61 67 54 79 70 5f 43 4f 4d 50  ase PragTyp_COMP
13220 49 4c 45 5f 4f 50 54 49 4f 4e 53 3a 20 7b 0a 20  ILE_OPTIONS: {. 
13230 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a 20 20     int i = 0;.  
13240 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4f    const char *zO
13250 70 74 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  pt;.    sqlite3V
13260 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
13270 20 31 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d   1);.    pParse-
13280 3e 6e 4d 65 6d 20 3d 20 31 3b 0a 20 20 20 20 73  >nMem = 1;.    s
13290 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
132a0 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
132b0 4d 45 5f 4e 41 4d 45 2c 20 22 63 6f 6d 70 69 6c  ME_NAME, "compil
132c0 65 5f 6f 70 74 69 6f 6e 22 2c 20 53 51 4c 49 54  e_option", SQLIT
132d0 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 77  E_STATIC);.    w
132e0 68 69 6c 65 28 20 28 7a 4f 70 74 20 3d 20 73 71  hile( (zOpt = sq
132f0 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f 70 74  lite3_compileopt
13300 69 6f 6e 5f 67 65 74 28 69 2b 2b 29 29 21 3d 30  ion_get(i++))!=0
13310 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
13320 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
13330 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c  P_String8, 0, 1,
13340 20 30 2c 20 7a 4f 70 74 2c 20 30 29 3b 0a 20 20   0, zOpt, 0);.  
13350 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
13360 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
13370 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20  ltRow, 1, 1);.  
13380 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
13390 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
133a0 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50  E_OMIT_COMPILEOP
133b0 54 49 4f 4e 5f 44 49 41 47 53 20 2a 2f 0a 0a 23  TION_DIAGS */..#
133c0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
133d0 49 54 5f 57 41 4c 0a 20 20 2f 2a 0a 20 20 2a 2a  IT_WAL.  /*.  **
133e0 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
133f0 61 73 65 2e 5d 77 61 6c 5f 63 68 65 63 6b 70 6f  ase.]wal_checkpo
13400 69 6e 74 20 3d 20 70 61 73 73 69 76 65 7c 66 75  int = passive|fu
13410 6c 6c 7c 72 65 73 74 61 72 74 0a 20 20 2a 2a 0a  ll|restart.  **.
13420 20 20 2a 2a 20 43 68 65 63 6b 70 6f 69 6e 74 20    ** Checkpoint 
13430 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20  the database..  
13440 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
13450 70 5f 57 41 4c 5f 43 48 45 43 4b 50 4f 49 4e 54  p_WAL_CHECKPOINT
13460 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 42 74 20  : {.    int iBt 
13470 3d 20 28 70 49 64 32 2d 3e 7a 3f 69 44 62 3a 53  = (pId2->z?iDb:S
13480 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41 43 48  QLITE_MAX_ATTACH
13490 45 44 29 3b 0a 20 20 20 20 69 6e 74 20 65 4d 6f  ED);.    int eMo
134a0 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43  de = SQLITE_CHEC
134b0 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45 3b 0a  KPOINT_PASSIVE;.
134c0 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
134d0 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  {.      if( sqli
134e0 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68  te3StrICmp(zRigh
134f0 74 2c 20 22 66 75 6c 6c 22 29 3d 3d 30 20 29 7b  t, "full")==0 ){
13500 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  .        eMode =
13510 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49   SQLITE_CHECKPOI
13520 4e 54 5f 46 55 4c 4c 3b 0a 20 20 20 20 20 20 7d  NT_FULL;.      }
13530 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33  else if( sqlite3
13540 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20  StrICmp(zRight, 
13550 22 72 65 73 74 61 72 74 22 29 3d 3d 30 20 29 7b  "restart")==0 ){
13560 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  .        eMode =
13570 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49   SQLITE_CHECKPOI
13580 4e 54 5f 52 45 53 54 41 52 54 3b 0a 20 20 20 20  NT_RESTART;.    
13590 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71    }.    }.    sq
135a0 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
135b0 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20 20 70  ols(v, 3);.    p
135c0 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b  Parse->nMem = 3;
135d0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
135e0 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
135f0 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
13600 62 75 73 79 22 2c 20 53 51 4c 49 54 45 5f 53 54  busy", SQLITE_ST
13610 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
13620 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
13630 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 1, COLNAME_N
13640 41 4d 45 2c 20 22 6c 6f 67 22 2c 20 53 51 4c 49  AME, "log", SQLI
13650 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
13660 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
13670 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e  lName(v, 2, COLN
13680 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 68 65 63 6b  AME_NAME, "check
13690 70 6f 69 6e 74 65 64 22 2c 20 53 51 4c 49 54 45  pointed", SQLITE
136a0 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20 20 20 73  _STATIC);..    s
136b0 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
136c0 28 76 2c 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e  (v, OP_Checkpoin
136d0 74 2c 20 69 42 74 2c 20 65 4d 6f 64 65 2c 20 31  t, iBt, eMode, 1
136e0 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
136f0 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
13700 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b  esultRow, 1, 3);
13710 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20  .  }.  break;.. 
13720 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
13730 41 20 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70  A wal_autocheckp
13740 6f 69 6e 74 0a 20 20 2a 2a 20 20 20 50 52 41 47  oint.  **   PRAG
13750 4d 41 20 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b  MA wal_autocheck
13760 70 6f 69 6e 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20  point = N.  **. 
13770 20 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20 61 20   ** Configure a 
13780 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
13790 69 6f 6e 20 74 6f 20 61 75 74 6f 6d 61 74 69 63  ion to automatic
137a0 61 6c 6c 79 20 63 68 65 63 6b 70 6f 69 6e 74 20  ally checkpoint 
137b0 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20  a database.  ** 
137c0 61 66 74 65 72 20 61 63 63 75 6d 75 6c 61 74 69  after accumulati
137d0 6e 67 20 4e 20 66 72 61 6d 65 73 20 69 6e 20 74  ng N frames in t
137e0 68 65 20 6c 6f 67 2e 20 4f 72 20 71 75 65 72 79  he log. Or query
137f0 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
13800 20 76 61 6c 75 65 0a 20 20 2a 2a 20 6f 66 20 4e   value.  ** of N
13810 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
13820 61 67 54 79 70 5f 57 41 4c 5f 41 55 54 4f 43 48  agTyp_WAL_AUTOCH
13830 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20 20 20  ECKPOINT: {.    
13840 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
13850 20 20 20 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f      sqlite3_wal_
13860 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 28 64  autocheckpoint(d
13870 62 2c 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  b, sqlite3Atoi(z
13880 52 69 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20  Right));.    }. 
13890 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
138a0 6e 74 28 70 50 61 72 73 65 2c 20 22 77 61 6c 5f  nt(pParse, "wal_
138b0 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 22 2c  autocheckpoint",
138c0 20 0a 20 20 20 20 20 20 20 64 62 2d 3e 78 57 61   .       db->xWa
138d0 6c 43 61 6c 6c 62 61 63 6b 3d 3d 73 71 6c 69 74  lCallback==sqlit
138e0 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b  e3WalDefaultHook
138f0 20 3f 20 0a 20 20 20 20 20 20 20 20 20 20 20 53   ? .           S
13900 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
13910 28 64 62 2d 3e 70 57 61 6c 41 72 67 29 20 3a 20  (db->pWalArg) : 
13920 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  0);.  }.  break;
13930 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20  .#endif..  /*.  
13940 2a 2a 20 20 50 52 41 47 4d 41 20 73 68 72 69 6e  **  PRAGMA shrin
13950 6b 5f 6d 65 6d 6f 72 79 0a 20 20 2a 2a 0a 20 20  k_memory.  **.  
13960 2a 2a 20 54 68 69 73 20 70 72 61 67 6d 61 20 61  ** This pragma a
13970 74 74 65 6d 70 74 73 20 74 6f 20 66 72 65 65 20  ttempts to free 
13980 61 73 20 6d 75 63 68 20 6d 65 6d 6f 72 79 20 61  as much memory a
13990 73 20 70 6f 73 73 69 62 6c 65 20 66 72 6f 6d 20  s possible from 
139a0 74 68 65 0a 20 20 2a 2a 20 63 75 72 72 65 6e 74  the.  ** current
139b0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
139c0 74 69 6f 6e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  tion..  */.  cas
139d0 65 20 50 72 61 67 54 79 70 5f 53 48 52 49 4e 4b  e PragTyp_SHRINK
139e0 5f 4d 45 4d 4f 52 59 3a 20 7b 0a 20 20 20 20 73  _MEMORY: {.    s
139f0 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65 61 73  qlite3_db_releas
13a00 65 5f 6d 65 6d 6f 72 79 28 64 62 29 3b 0a 20 20  e_memory(db);.  
13a10 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
13a20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
13a30 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 0a 20 20   busy_timeout.  
13a40 2a 2a 20 20 20 50 52 41 47 4d 41 20 62 75 73 79  **   PRAGMA busy
13a50 5f 74 69 6d 65 6f 75 74 20 3d 20 4e 0a 20 20 2a  _timeout = N.  *
13a60 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20 73 71 6c 69  *.  ** Call sqli
13a70 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74  te3_busy_timeout
13a80 28 64 62 2c 20 4e 29 2e 20 20 52 65 74 75 72 6e  (db, N).  Return
13a90 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 69 6d   the current tim
13aa0 65 6f 75 74 20 76 61 6c 75 65 0a 20 20 2a 2a 20  eout value.  ** 
13ab0 69 66 20 6f 6e 65 20 69 73 20 73 65 74 2e 20 20  if one is set.  
13ac0 49 66 20 6e 6f 20 62 75 73 79 20 68 61 6e 64 6c  If no busy handl
13ad0 65 72 20 6f 72 20 61 20 64 69 66 66 65 72 65 6e  er or a differen
13ae0 74 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20 69  t busy handler i
13af0 73 20 73 65 74 0a 20 20 2a 2a 20 74 68 65 6e 20  s set.  ** then 
13b00 30 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20  0 is returned.  
13b10 53 65 74 74 69 6e 67 20 74 68 65 20 62 75 73 79  Setting the busy
13b20 5f 74 69 6d 65 6f 75 74 20 74 6f 20 30 20 6f 72  _timeout to 0 or
13b30 20 6e 65 67 61 74 69 76 65 0a 20 20 2a 2a 20 64   negative.  ** d
13b40 69 73 61 62 6c 65 73 20 74 68 65 20 74 69 6d 65  isables the time
13b50 6f 75 74 2e 0a 20 20 2a 2f 0a 20 20 2f 2a 63 61  out..  */.  /*ca
13b60 73 65 20 50 72 61 67 54 79 70 5f 42 55 53 59 5f  se PragTyp_BUSY_
13b70 54 49 4d 45 4f 55 54 2a 2f 20 64 65 66 61 75 6c  TIMEOUT*/ defaul
13b80 74 3a 20 7b 0a 20 20 20 20 61 73 73 65 72 74 28  t: {.    assert(
13b90 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69   aPragmaNames[mi
13ba0 64 5d 2e 65 50 72 61 67 54 79 70 3d 3d 50 72 61  d].ePragTyp==Pra
13bb0 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55  gTyp_BUSY_TIMEOU
13bc0 54 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69  T );.    if( zRi
13bd0 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
13be0 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75  ite3_busy_timeou
13bf0 74 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74 6f  t(db, sqlite3Ato
13c00 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20  i(zRight));.    
13c10 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67  }.    returnSing
13c20 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 74  leInt(pParse, "t
13c30 69 6d 65 6f 75 74 22 2c 20 20 64 62 2d 3e 62 75  imeout",  db->bu
13c40 73 79 54 69 6d 65 6f 75 74 29 3b 0a 20 20 20 20  syTimeout);.    
13c50 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
13c60 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 73  .  **   PRAGMA s
13c70 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 0a 20  oft_heap_limit. 
13c80 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 6f 66   **   PRAGMA sof
13c90 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20 3d 20 4e  t_heap_limit = N
13ca0 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20  .  **.  ** Call 
13cb0 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61  sqlite3_soft_hea
13cc0 70 5f 6c 69 6d 69 74 36 34 28 4e 29 2e 20 20 52  p_limit64(N).  R
13cd0 65 74 75 72 6e 20 74 68 65 20 72 65 73 75 6c 74  eturn the result
13ce0 2e 20 20 49 66 20 4e 20 69 73 20 6f 6d 69 74 74  .  If N is omitt
13cf0 65 64 2c 0a 20 20 2a 2a 20 75 73 65 20 2d 31 2e  ed,.  ** use -1.
13d00 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
13d10 67 54 79 70 5f 53 4f 46 54 5f 48 45 41 50 5f 4c  gTyp_SOFT_HEAP_L
13d20 49 4d 49 54 3a 20 7b 0a 20 20 20 20 73 71 6c 69  IMIT: {.    sqli
13d30 74 65 33 5f 69 6e 74 36 34 20 4e 3b 0a 20 20 20  te3_int64 N;.   
13d40 20 69 66 28 20 7a 52 69 67 68 74 20 26 26 20 73   if( zRight && s
13d50 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f  qlite3DecOrHexTo
13d60 49 36 34 28 7a 52 69 67 68 74 2c 20 26 4e 29 3d  I64(zRight, &N)=
13d70 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
13d80 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6f 66 74      sqlite3_soft
13d90 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 4e 29  _heap_limit64(N)
13da0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  ;.    }.    retu
13db0 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72  rnSingleInt(pPar
13dc0 73 65 2c 20 22 73 6f 66 74 5f 68 65 61 70 5f 6c  se, "soft_heap_l
13dd0 69 6d 69 74 22 2c 20 20 73 71 6c 69 74 65 33 5f  imit",  sqlite3_
13de0 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36  soft_heap_limit6
13df0 34 28 2d 31 29 29 3b 0a 20 20 20 20 62 72 65 61  4(-1));.    brea
13e00 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
13e10 2a 20 20 20 50 52 41 47 4d 41 20 74 68 72 65 61  *   PRAGMA threa
13e20 64 73 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  ds.  **   PRAGMA
13e30 20 74 68 72 65 61 64 73 20 3d 20 4e 0a 20 20 2a   threads = N.  *
13e40 2a 0a 20 20 2a 2a 20 43 6f 6e 66 69 67 75 72 65  *.  ** Configure
13e50 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d   the maximum num
13e60 62 65 72 20 6f 66 20 77 6f 72 6b 65 72 20 74 68  ber of worker th
13e70 72 65 61 64 73 2e 20 20 52 65 74 75 72 6e 20 74  reads.  Return t
13e80 68 65 20 6e 65 77 0a 20 20 2a 2a 20 6d 61 78 69  he new.  ** maxi
13e90 6d 75 6d 2c 20 77 68 69 63 68 20 6d 69 67 68 74  mum, which might
13ea0 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 72 65   be less than re
13eb0 71 75 65 73 74 65 64 2e 0a 20 20 2a 2f 0a 20 20  quested..  */.  
13ec0 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 48 52  case PragTyp_THR
13ed0 45 41 44 53 3a 20 7b 0a 20 20 20 20 73 71 6c 69  EADS: {.    sqli
13ee0 74 65 33 5f 69 6e 74 36 34 20 4e 3b 0a 20 20 20  te3_int64 N;.   
13ef0 20 69 66 28 20 73 71 6c 69 74 65 33 47 6c 6f 62   if( sqlite3Glob
13f00 61 6c 43 6f 6e 66 69 67 2e 62 43 6f 72 65 4d 75  alConfig.bCoreMu
13f10 74 65 78 0a 20 20 20 20 20 26 26 20 7a 52 69 67  tex.     && zRig
13f20 68 74 0a 20 20 20 20 20 26 26 20 73 71 6c 69 74  ht.     && sqlit
13f30 65 33 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28  e3DecOrHexToI64(
13f40 7a 52 69 67 68 74 2c 20 26 4e 29 3d 3d 53 51 4c  zRight, &N)==SQL
13f50 49 54 45 5f 4f 4b 0a 20 20 20 20 20 26 26 20 4e  ITE_OK.     && N
13f60 3e 3d 30 0a 20 20 20 20 29 7b 0a 20 20 20 20 20  >=0.    ){.     
13f70 20 69 66 28 20 4e 3e 53 51 4c 49 54 45 5f 4d 41   if( N>SQLITE_MA
13f80 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
13f90 20 29 20 4e 20 3d 20 53 51 4c 49 54 45 5f 4d 41   ) N = SQLITE_MA
13fa0 58 5f 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53  X_WORKER_THREADS
13fb0 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6d 78 57 6f  ;.      db->mxWo
13fc0 72 6b 65 72 20 3d 20 4e 26 30 78 66 66 3b 0a 20  rker = N&0xff;. 
13fd0 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53     }.    returnS
13fe0 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c  ingleInt(pParse,
13ff0 20 22 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69   "soft_heap_limi
14000 74 22 2c 20 20 64 62 2d 3e 6d 78 57 6f 72 6b 65  t",  db->mxWorke
14010 72 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  r);.    break;. 
14020 20 7d 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28   }..#if defined(
14030 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c  SQLITE_DEBUG) ||
14040 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
14050 54 45 53 54 29 0a 20 20 2f 2a 0a 20 20 2a 2a 20  TEST).  /*.  ** 
14060 52 65 70 6f 72 74 20 74 68 65 20 63 75 72 72 65  Report the curre
14070 6e 74 20 73 74 61 74 65 20 6f 66 20 66 69 6c 65  nt state of file
14080 20 6c 6f 67 73 20 66 6f 72 20 61 6c 6c 20 64 61   logs for all da
14090 74 61 62 61 73 65 73 0a 20 20 2a 2f 0a 20 20 63  tabases.  */.  c
140a0 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b  ase PragTyp_LOCK
140b0 5f 53 54 41 54 55 53 3a 20 7b 0a 20 20 20 20 73  _STATUS: {.    s
140c0 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
140d0 20 2a 63 6f 6e 73 74 20 61 7a 4c 6f 63 6b 4e 61   *const azLockNa
140e0 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 22  me[] = {.      "
140f0 75 6e 6c 6f 63 6b 65 64 22 2c 20 22 73 68 61 72  unlocked", "shar
14100 65 64 22 2c 20 22 72 65 73 65 72 76 65 64 22 2c  ed", "reserved",
14110 20 22 70 65 6e 64 69 6e 67 22 2c 20 22 65 78 63   "pending", "exc
14120 6c 75 73 69 76 65 22 0a 20 20 20 20 7d 3b 0a 20  lusive".    };. 
14130 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 73 71     int i;.    sq
14140 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
14150 6f 6c 73 28 76 2c 20 32 29 3b 0a 20 20 20 20 70  ols(v, 2);.    p
14160 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b  Parse->nMem = 2;
14170 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
14180 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
14190 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
141a0 64 61 74 61 62 61 73 65 22 2c 20 53 51 4c 49 54  database", SQLIT
141b0 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
141c0 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
141d0 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41  Name(v, 1, COLNA
141e0 4d 45 5f 4e 41 4d 45 2c 20 22 73 74 61 74 75 73  ME_NAME, "status
141f0 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
14200 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20  );.    for(i=0; 
14210 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b  i<db->nDb; i++){
14220 0a 20 20 20 20 20 20 42 74 72 65 65 20 2a 70 42  .      Btree *pB
14230 74 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63  t;.      const c
14240 68 61 72 20 2a 7a 53 74 61 74 65 20 3d 20 22 75  har *zState = "u
14250 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 20 20 20 20 69  nknown";.      i
14260 6e 74 20 6a 3b 0a 20 20 20 20 20 20 69 66 28 20  nt j;.      if( 
14270 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65  db->aDb[i].zName
14280 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==0 ) continue;.
14290 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
142a0 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
142b0 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20  ring8, 0, 1, 0, 
142c0 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65  db->aDb[i].zName
142d0 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P4_STATIC);.  
142e0 20 20 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44      pBt = db->aD
142f0 62 5b 69 5d 2e 70 42 74 3b 0a 20 20 20 20 20 20  b[i].pBt;.      
14300 69 66 28 20 70 42 74 3d 3d 30 20 7c 7c 20 73 71  if( pBt==0 || sq
14310 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28  lite3BtreePager(
14320 70 42 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  pBt)==0 ){.     
14330 20 20 20 7a 53 74 61 74 65 20 3d 20 22 63 6c 6f     zState = "clo
14340 73 65 64 22 3b 0a 20 20 20 20 20 20 7d 65 6c 73  sed";.      }els
14350 65 20 69 66 28 20 73 71 6c 69 74 65 33 5f 66 69  e if( sqlite3_fi
14360 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 69  le_control(db, i
14370 20 3f 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e   ? db->aDb[i].zN
14380 61 6d 65 20 3a 20 30 2c 20 0a 20 20 20 20 20 20  ame : 0, .      
14390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 53                 S
143b0 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4c 4f 43 4b  QLITE_FCNTL_LOCK
143c0 53 54 41 54 45 2c 20 26 6a 29 3d 3d 53 51 4c 49  STATE, &j)==SQLI
143d0 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20  TE_OK ){.       
143e0 20 20 7a 53 74 61 74 65 20 3d 20 61 7a 4c 6f 63    zState = azLoc
143f0 6b 4e 61 6d 65 5b 6a 5d 3b 0a 20 20 20 20 20 20  kName[j];.      
14400 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  }.      sqlite3V
14410 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
14420 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30  String8, 0, 2, 0
14430 2c 20 7a 53 74 61 74 65 2c 20 50 34 5f 53 54 41  , zState, P4_STA
14440 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
14450 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
14460 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
14470 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  , 2);.    }.    
14480 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69  break;.  }.#endi
14490 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  f..#ifdef SQLITE
144a0 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 63 61 73  _HAS_CODEC.  cas
144b0 65 20 50 72 61 67 54 79 70 5f 4b 45 59 3a 20 7b  e PragTyp_KEY: {
144c0 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
144d0 29 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32  ) sqlite3_key_v2
144e0 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69 67 68 74  (db, zDb, zRight
144f0 2c 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33  , sqlite3Strlen3
14500 30 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20  0(zRight));.    
14510 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 63 61 73  break;.  }.  cas
14520 65 20 50 72 61 67 54 79 70 5f 52 45 4b 45 59 3a  e PragTyp_REKEY:
14530 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68   {.    if( zRigh
14540 74 20 29 20 73 71 6c 69 74 65 33 5f 72 65 6b 65  t ) sqlite3_reke
14550 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52  y_v2(db, zDb, zR
14560 69 67 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72  ight, sqlite3Str
14570 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a  len30(zRight));.
14580 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20      break;.  }. 
14590 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 48 45   case PragTyp_HE
145a0 58 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20  XKEY: {.    if( 
145b0 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
145c0 75 38 20 69 42 79 74 65 3b 0a 20 20 20 20 20 20  u8 iByte;.      
145d0 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 63 68 61  int i;.      cha
145e0 72 20 7a 4b 65 79 5b 34 30 5d 3b 0a 20 20 20 20  r zKey[40];.    
145f0 20 20 66 6f 72 28 69 3d 30 2c 20 69 42 79 74 65    for(i=0, iByte
14600 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 7a 4b 65  =0; i<sizeof(zKe
14610 79 29 2a 32 20 26 26 20 73 71 6c 69 74 65 33 49  y)*2 && sqlite3I
14620 73 78 64 69 67 69 74 28 7a 52 69 67 68 74 5b 69  sxdigit(zRight[i
14630 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  ]); i++){.      
14640 20 20 69 42 79 74 65 20 3d 20 28 69 42 79 74 65    iByte = (iByte
14650 3c 3c 34 29 20 2b 20 73 71 6c 69 74 65 33 48 65  <<4) + sqlite3He
14660 78 54 6f 49 6e 74 28 7a 52 69 67 68 74 5b 69 5d  xToInt(zRight[i]
14670 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 28  );.        if( (
14680 69 26 31 29 21 3d 30 20 29 20 7a 4b 65 79 5b 69  i&1)!=0 ) zKey[i
14690 2f 32 5d 20 3d 20 69 42 79 74 65 3b 0a 20 20 20  /2] = iByte;.   
146a0 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28     }.      if( (
146b0 7a 4c 65 66 74 5b 33 5d 20 26 20 30 78 66 29 3d  zLeft[3] & 0xf)=
146c0 3d 30 78 62 20 29 7b 0a 20 20 20 20 20 20 20 20  =0xb ){.        
146d0 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28 64  sqlite3_key_v2(d
146e0 62 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f  b, zDb, zKey, i/
146f0 32 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  2);.      }else{
14700 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
14710 5f 72 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44  _rekey_v2(db, zD
14720 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20  b, zKey, i/2);. 
14730 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
14740 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
14750 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
14760 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29  QLITE_HAS_CODEC)
14770 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49   || defined(SQLI
14780 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 29  TE_ENABLE_CEROD)
14790 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
147a0 41 43 54 49 56 41 54 45 5f 45 58 54 45 4e 53 49  ACTIVATE_EXTENSI
147b0 4f 4e 53 3a 20 69 66 28 20 7a 52 69 67 68 74 20  ONS: if( zRight 
147c0 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  ){.#ifdef SQLITE
147d0 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 20 20 69  _HAS_CODEC.    i
147e0 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43  f( sqlite3StrNIC
147f0 6d 70 28 7a 52 69 67 68 74 2c 20 22 73 65 65 2d  mp(zRight, "see-
14800 22 2c 20 34 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ", 4)==0 ){.    
14810 20 20 73 71 6c 69 74 65 33 5f 61 63 74 69 76 61    sqlite3_activa
14820 74 65 5f 73 65 65 28 26 7a 52 69 67 68 74 5b 34  te_see(&zRight[4
14830 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66  ]);.    }.#endif
14840 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45  .#ifdef SQLITE_E
14850 4e 41 42 4c 45 5f 43 45 52 4f 44 0a 20 20 20 20  NABLE_CEROD.    
14860 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49  if( sqlite3StrNI
14870 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 63 65 72  Cmp(zRight, "cer
14880 6f 64 2d 22 2c 20 36 29 3d 3d 30 20 29 7b 0a 20  od-", 6)==0 ){. 
14890 20 20 20 20 20 73 71 6c 69 74 65 33 5f 61 63 74       sqlite3_act
148a0 69 76 61 74 65 5f 63 65 72 6f 64 28 26 7a 52 69  ivate_cerod(&zRi
148b0 67 68 74 5b 36 5d 29 3b 0a 20 20 20 20 7d 0a 23  ght[6]);.    }.#
148c0 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61  endif.  }.  brea
148d0 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 7d 20 2f  k;.#endif..  } /
148e0 2a 20 45 6e 64 20 6f 66 20 74 68 65 20 50 52 41  * End of the PRA
148f0 47 4d 41 20 73 77 69 74 63 68 20 2a 2f 0a 0a 70  GMA switch */..p
14900 72 61 67 6d 61 5f 6f 75 74 3a 0a 20 20 73 71 6c  ragma_out:.  sql
14910 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a  ite3DbFree(db, z
14920 4c 65 66 74 29 3b 0a 20 20 73 71 6c 69 74 65 33  Left);.  sqlite3
14930 44 62 46 72 65 65 28 64 62 2c 20 7a 52 69 67 68  DbFree(db, zRigh
14940 74 29 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a  t);.}..#endif /*
14950 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41   SQLITE_OMIT_PRA
14960 47 4d 41 20 2a 2f 0a                             GMA */.