/ Hex Artifact Content
Login

Artifact 1f13dbb5522fe763fbe64b58a844787917648e7b:


0000: 2f 2a 0a 2a 2a 20 32 30 30 33 20 41 70 72 69 6c  /*.** 2003 April
0010: 20 36 0a 2a 2a 0a 2a 2a 20 54 68 65 20 61 75 74   6.**.** The aut
0020: 68 6f 72 20 64 69 73 63 6c 61 69 6d 73 20 63 6f  hor disclaims co
0030: 70 79 72 69 67 68 74 20 74 6f 20 74 68 69 73 20  pyright to this 
0040: 73 6f 75 72 63 65 20 63 6f 64 65 2e 20 20 49 6e  source code.  In
0050: 20 70 6c 61 63 65 20 6f 66 0a 2a 2a 20 61 20 6c   place of.** a l
0060: 65 67 61 6c 20 6e 6f 74 69 63 65 2c 20 68 65 72  egal notice, her
0070: 65 20 69 73 20 61 20 62 6c 65 73 73 69 6e 67 3a  e is a blessing:
0080: 0a 2a 2a 0a 2a 2a 20 20 20 20 4d 61 79 20 79 6f  .**.**    May yo
0090: 75 20 64 6f 20 67 6f 6f 64 20 61 6e 64 20 6e 6f  u do good and no
00a0: 74 20 65 76 69 6c 2e 0a 2a 2a 20 20 20 20 4d 61  t evil..**    Ma
00b0: 79 20 79 6f 75 20 66 69 6e 64 20 66 6f 72 67 69  y you find forgi
00c0: 76 65 6e 65 73 73 20 66 6f 72 20 79 6f 75 72 73  veness for yours
00d0: 65 6c 66 20 61 6e 64 20 66 6f 72 67 69 76 65 20  elf and forgive 
00e0: 6f 74 68 65 72 73 2e 0a 2a 2a 20 20 20 20 4d 61  others..**    Ma
00f0: 79 20 79 6f 75 20 73 68 61 72 65 20 66 72 65 65  y you share free
0100: 6c 79 2c 20 6e 65 76 65 72 20 74 61 6b 69 6e 67  ly, never taking
0110: 20 6d 6f 72 65 20 74 68 61 6e 20 79 6f 75 20 67   more than you g
0120: 69 76 65 2e 0a 2a 2a 0a 2a 2a 2a 2a 2a 2a 2a 2a  ive..**.********
0130: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0140: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0150: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0160: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0170: 2a 0a 2a 2a 20 54 68 69 73 20 66 69 6c 65 20 63  *.** This file c
0180: 6f 6e 74 61 69 6e 73 20 63 6f 64 65 20 75 73 65  ontains code use
0190: 64 20 74 6f 20 69 6d 70 6c 65 6d 65 6e 74 20 74  d to implement t
01a0: 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d 61 6e  he PRAGMA comman
01b0: 64 2e 0a 2a 2f 0a 23 69 6e 63 6c 75 64 65 20 22  d..*/.#include "
01c0: 73 71 6c 69 74 65 49 6e 74 2e 68 22 0a 0a 23 69  sqliteInt.h"..#i
01d0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
01e0: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
01f0: 5f 53 54 59 4c 45 29 0a 23 20 20 69 66 20 64 65  _STYLE).#  if de
0200: 66 69 6e 65 64 28 5f 5f 41 50 50 4c 45 5f 5f 29  fined(__APPLE__)
0210: 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53 51 4c  .#    define SQL
0220: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
0230: 4e 47 5f 53 54 59 4c 45 20 31 0a 23 20 20 65 6c  NG_STYLE 1.#  el
0240: 73 65 0a 23 20 20 20 20 64 65 66 69 6e 65 20 53  se.#    define S
0250: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
0260: 4b 49 4e 47 5f 53 54 59 4c 45 20 30 0a 23 20 20  KING_STYLE 0.#  
0270: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 0a 2f 2a  endif.#endif../*
0280: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
0290: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
02c0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 0a 2a 2a 20 54 68  **********.** Th
02d0: 65 20 6e 65 78 74 20 62 6c 6f 63 6b 20 6f 66 20  e next block of 
02e0: 63 6f 64 65 2c 20 69 6e 63 6c 75 64 69 6e 67 20  code, including 
02f0: 74 68 65 20 50 72 61 67 54 79 70 5f 58 58 58 58  the PragTyp_XXXX
0300: 20 6d 61 63 72 6f 20 64 65 66 69 6e 69 74 69 6f   macro definitio
0310: 6e 73 20 61 6e 64 0a 2a 2a 20 74 68 65 20 61 50  ns and.** the aP
0320: 72 61 67 6d 61 4e 61 6d 65 5b 5d 20 6f 62 6a 65  ragmaName[] obje
0330: 63 74 20 69 73 20 63 6f 6d 70 6f 73 65 64 20 6f  ct is composed o
0340: 66 20 67 65 6e 65 72 61 74 65 64 20 63 6f 64 65  f generated code
0350: 2e 20 44 4f 20 4e 4f 54 20 45 44 49 54 2e 0a 2a  . DO NOT EDIT..*
0360: 2a 0a 2a 2a 20 54 6f 20 61 64 64 20 6e 65 77 20  *.** To add new 
0370: 70 72 61 67 6d 61 73 2c 20 65 64 69 74 20 74 68  pragmas, edit th
0380: 65 20 63 6f 64 65 20 69 6e 20 2e 2e 2f 74 6f 6f  e code in ../too
0390: 6c 2f 6d 6b 70 72 61 67 6d 61 74 61 62 2e 74 63  l/mkpragmatab.tc
03a0: 6c 20 61 6e 64 20 72 65 72 75 6e 0a 2a 2a 20 74  l and rerun.** t
03b0: 68 61 74 20 73 63 72 69 70 74 2e 20 20 54 68 65  hat script.  The
03c0: 6e 20 63 6f 70 79 2f 70 61 73 74 65 20 74 68 65  n copy/paste the
03d0: 20 6f 75 74 70 75 74 20 69 6e 20 70 6c 61 63 65   output in place
03e0: 20 6f 66 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e   of the followin
03f0: 67 3a 0a 2a 2f 0a 23 64 65 66 69 6e 65 20 50 72  g:.*/.#define Pr
0400: 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c  agTyp_HEADER_VAL
0410: 55 45 20 20 20 20 20 20 20 20 20 20 20 20 20 20  UE              
0420: 20 20 20 20 20 30 0a 23 64 65 66 69 6e 65 20 50       0.#define P
0430: 72 61 67 54 79 70 5f 41 55 54 4f 5f 56 41 43 55  ragTyp_AUTO_VACU
0440: 55 4d 20 20 20 20 20 20 20 20 20 20 20 20 20 20  UM              
0450: 20 20 20 20 20 20 31 0a 23 64 65 66 69 6e 65 20        1.#define 
0460: 50 72 61 67 54 79 70 5f 46 4c 41 47 20 20 20 20  PragTyp_FLAG    
0470: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0480: 20 20 20 20 20 20 20 32 0a 23 64 65 66 69 6e 65         2.#define
0490: 20 50 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49   PragTyp_BUSY_TI
04a0: 4d 45 4f 55 54 20 20 20 20 20 20 20 20 20 20 20  MEOUT           
04b0: 20 20 20 20 20 20 20 20 33 0a 23 64 65 66 69 6e          3.#defin
04c0: 65 20 50 72 61 67 54 79 70 5f 43 41 43 48 45 5f  e PragTyp_CACHE_
04d0: 53 49 5a 45 20 20 20 20 20 20 20 20 20 20 20 20  SIZE            
04e0: 20 20 20 20 20 20 20 20 20 34 0a 23 64 65 66 69           4.#defi
04f0: 6e 65 20 50 72 61 67 54 79 70 5f 43 41 53 45 5f  ne PragTyp_CASE_
0500: 53 45 4e 53 49 54 49 56 45 5f 4c 49 4b 45 20 20  SENSITIVE_LIKE  
0510: 20 20 20 20 20 20 20 20 20 20 35 0a 23 64 65 66            5.#def
0520: 69 6e 65 20 50 72 61 67 54 79 70 5f 43 4f 4c 4c  ine PragTyp_COLL
0530: 41 54 49 4f 4e 5f 4c 49 53 54 20 20 20 20 20 20  ATION_LIST      
0540: 20 20 20 20 20 20 20 20 20 20 20 36 0a 23 64 65             6.#de
0550: 66 69 6e 65 20 50 72 61 67 54 79 70 5f 43 4f 4d  fine PragTyp_COM
0560: 50 49 4c 45 5f 4f 50 54 49 4f 4e 53 20 20 20 20  PILE_OPTIONS    
0570: 20 20 20 20 20 20 20 20 20 20 20 20 37 0a 23 64              7.#d
0580: 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 44 41  efine PragTyp_DA
0590: 54 41 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f  TA_STORE_DIRECTO
05a0: 52 59 20 20 20 20 20 20 20 20 20 20 20 38 0a 23  RY           8.#
05b0: 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 44  define PragTyp_D
05c0: 41 54 41 42 41 53 45 5f 4c 49 53 54 20 20 20 20  ATABASE_LIST    
05d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 39 0a                9.
05e0: 23 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f  #define PragTyp_
05f0: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
0600: 5a 45 20 20 20 20 20 20 20 20 20 20 20 20 31 30  ZE            10
0610: 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54 79 70  .#define PragTyp
0620: 5f 45 4e 43 4f 44 49 4e 47 20 20 20 20 20 20 20  _ENCODING       
0630: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 31                 1
0640: 31 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54 79  1.#define PragTy
0650: 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 43 48  p_FOREIGN_KEY_CH
0660: 45 43 4b 20 20 20 20 20 20 20 20 20 20 20 20 20  ECK             
0670: 31 32 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54  12.#define PragT
0680: 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 4c  yp_FOREIGN_KEY_L
0690: 49 53 54 20 20 20 20 20 20 20 20 20 20 20 20 20  IST             
06a0: 20 31 33 0a 23 64 65 66 69 6e 65 20 50 72 61 67   13.#define Prag
06b0: 54 79 70 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f  Typ_INCREMENTAL_
06c0: 56 41 43 55 55 4d 20 20 20 20 20 20 20 20 20 20  VACUUM          
06d0: 20 20 31 34 0a 23 64 65 66 69 6e 65 20 50 72 61    14.#define Pra
06e0: 67 54 79 70 5f 49 4e 44 45 58 5f 49 4e 46 4f 20  gTyp_INDEX_INFO 
06f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0700: 20 20 20 31 35 0a 23 64 65 66 69 6e 65 20 50 72     15.#define Pr
0710: 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c 49 53 54  agTyp_INDEX_LIST
0720: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0730: 20 20 20 20 31 36 0a 23 64 65 66 69 6e 65 20 50      16.#define P
0740: 72 61 67 54 79 70 5f 49 4e 54 45 47 52 49 54 59  ragTyp_INTEGRITY
0750: 5f 43 48 45 43 4b 20 20 20 20 20 20 20 20 20 20  _CHECK          
0760: 20 20 20 20 20 31 37 0a 23 64 65 66 69 6e 65 20       17.#define 
0770: 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f  PragTyp_JOURNAL_
0780: 4d 4f 44 45 20 20 20 20 20 20 20 20 20 20 20 20  MODE            
0790: 20 20 20 20 20 20 31 38 0a 23 64 65 66 69 6e 65        18.#define
07a0: 20 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e 41 4c   PragTyp_JOURNAL
07b0: 5f 53 49 5a 45 5f 4c 49 4d 49 54 20 20 20 20 20  _SIZE_LIMIT     
07c0: 20 20 20 20 20 20 20 31 39 0a 23 64 65 66 69 6e         19.#defin
07d0: 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 50  e PragTyp_LOCK_P
07e0: 52 4f 58 59 5f 46 49 4c 45 20 20 20 20 20 20 20  ROXY_FILE       
07f0: 20 20 20 20 20 20 20 20 32 30 0a 23 64 65 66 69          20.#defi
0800: 6e 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49  ne PragTyp_LOCKI
0810: 4e 47 5f 4d 4f 44 45 20 20 20 20 20 20 20 20 20  NG_MODE         
0820: 20 20 20 20 20 20 20 20 20 32 31 0a 23 64 65 66           21.#def
0830: 69 6e 65 20 50 72 61 67 54 79 70 5f 50 41 47 45  ine PragTyp_PAGE
0840: 5f 43 4f 55 4e 54 20 20 20 20 20 20 20 20 20 20  _COUNT          
0850: 20 20 20 20 20 20 20 20 20 20 32 32 0a 23 64 65            22.#de
0860: 66 69 6e 65 20 50 72 61 67 54 79 70 5f 4d 4d 41  fine PragTyp_MMA
0870: 50 5f 53 49 5a 45 20 20 20 20 20 20 20 20 20 20  P_SIZE          
0880: 20 20 20 20 20 20 20 20 20 20 20 32 33 0a 23 64             23.#d
0890: 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 50 41  efine PragTyp_PA
08a0: 47 45 5f 53 49 5a 45 20 20 20 20 20 20 20 20 20  GE_SIZE         
08b0: 20 20 20 20 20 20 20 20 20 20 20 20 32 34 0a 23              24.#
08c0: 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 53  define PragTyp_S
08d0: 45 43 55 52 45 5f 44 45 4c 45 54 45 20 20 20 20  ECURE_DELETE    
08e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 32 35 0a               25.
08f0: 23 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f  #define PragTyp_
0900: 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59 20 20 20  SHRINK_MEMORY   
0910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32 36                26
0920: 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54 79 70  .#define PragTyp
0930: 5f 53 4f 46 54 5f 48 45 41 50 5f 4c 49 4d 49 54  _SOFT_HEAP_LIMIT
0940: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 32                 2
0950: 37 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54 79  7.#define PragTy
0960: 70 5f 53 54 41 54 53 20 20 20 20 20 20 20 20 20  p_STATS         
0970: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0980: 32 38 0a 23 64 65 66 69 6e 65 20 50 72 61 67 54  28.#define PragT
0990: 79 70 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 20 20  yp_SYNCHRONOUS  
09a0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09b0: 20 32 39 0a 23 64 65 66 69 6e 65 20 50 72 61 67   29.#define Prag
09c0: 54 79 70 5f 54 41 42 4c 45 5f 49 4e 46 4f 20 20  Typ_TABLE_INFO  
09d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
09e0: 20 20 33 30 0a 23 64 65 66 69 6e 65 20 50 72 61    30.#define Pra
09f0: 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45 20  gTyp_TEMP_STORE 
0a00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a10: 20 20 20 33 31 0a 23 64 65 66 69 6e 65 20 50 72     31.#define Pr
0a20: 61 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45  agTyp_TEMP_STORE
0a30: 5f 44 49 52 45 43 54 4f 52 59 20 20 20 20 20 20  _DIRECTORY      
0a40: 20 20 20 20 33 32 0a 23 64 65 66 69 6e 65 20 50      32.#define P
0a50: 72 61 67 54 79 70 5f 54 48 52 45 41 44 53 20 20  ragTyp_THREADS  
0a60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a70: 20 20 20 20 20 33 33 0a 23 64 65 66 69 6e 65 20       33.#define 
0a80: 50 72 61 67 54 79 70 5f 57 41 4c 5f 41 55 54 4f  PragTyp_WAL_AUTO
0a90: 43 48 45 43 4b 50 4f 49 4e 54 20 20 20 20 20 20  CHECKPOINT      
0aa0: 20 20 20 20 20 20 33 34 0a 23 64 65 66 69 6e 65        34.#define
0ab0: 20 50 72 61 67 54 79 70 5f 57 41 4c 5f 43 48 45   PragTyp_WAL_CHE
0ac0: 43 4b 50 4f 49 4e 54 20 20 20 20 20 20 20 20 20  CKPOINT         
0ad0: 20 20 20 20 20 20 20 33 35 0a 23 64 65 66 69 6e         35.#defin
0ae0: 65 20 50 72 61 67 54 79 70 5f 41 43 54 49 56 41  e PragTyp_ACTIVA
0af0: 54 45 5f 45 58 54 45 4e 53 49 4f 4e 53 20 20 20  TE_EXTENSIONS   
0b00: 20 20 20 20 20 20 20 20 33 36 0a 23 64 65 66 69          36.#defi
0b10: 6e 65 20 50 72 61 67 54 79 70 5f 48 45 58 4b 45  ne PragTyp_HEXKE
0b20: 59 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  Y               
0b30: 20 20 20 20 20 20 20 20 20 33 37 0a 23 64 65 66           37.#def
0b40: 69 6e 65 20 50 72 61 67 54 79 70 5f 4b 45 59 20  ine PragTyp_KEY 
0b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0b60: 20 20 20 20 20 20 20 20 20 20 33 38 0a 23 64 65            38.#de
0b70: 66 69 6e 65 20 50 72 61 67 54 79 70 5f 52 45 4b  fine PragTyp_REK
0b80: 45 59 20 20 20 20 20 20 20 20 20 20 20 20 20 20  EY              
0b90: 20 20 20 20 20 20 20 20 20 20 20 33 39 0a 23 64             39.#d
0ba0: 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 4c 4f  efine PragTyp_LO
0bb0: 43 4b 5f 53 54 41 54 55 53 20 20 20 20 20 20 20  CK_STATUS       
0bc0: 20 20 20 20 20 20 20 20 20 20 20 20 34 30 0a 23              40.#
0bd0: 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 50  define PragTyp_P
0be0: 41 52 53 45 52 5f 54 52 41 43 45 20 20 20 20 20  ARSER_TRACE     
0bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 34 31 0a               41.
0c00: 23 64 65 66 69 6e 65 20 50 72 61 67 46 6c 61 67  #define PragFlag
0c10: 5f 4e 65 65 64 53 63 68 65 6d 61 20 20 20 20 20  _NeedSchema     
0c20: 20 20 20 20 20 20 30 78 30 31 0a 23 64 65 66 69        0x01.#defi
0c30: 6e 65 20 50 72 61 67 46 6c 61 67 5f 52 65 61 64  ne PragFlag_Read
0c40: 4f 6e 6c 79 20 20 20 20 20 20 20 20 20 20 20 20  Only            
0c50: 20 30 78 30 32 0a 73 74 61 74 69 63 20 63 6f 6e   0x02.static con
0c60: 73 74 20 73 74 72 75 63 74 20 73 50 72 61 67 6d  st struct sPragm
0c70: 61 4e 61 6d 65 73 20 7b 0a 20 20 63 6f 6e 73 74  aNames {.  const
0c80: 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 7a 4e 61   char *const zNa
0c90: 6d 65 3b 20 20 2f 2a 20 4e 61 6d 65 20 6f 66 20  me;  /* Name of 
0ca0: 70 72 61 67 6d 61 20 2a 2f 0a 20 20 75 38 20 65  pragma */.  u8 e
0cb0: 50 72 61 67 54 79 70 3b 20 20 20 20 20 20 20 20  PragTyp;        
0cc0: 20 20 20 20 20 20 2f 2a 20 50 72 61 67 54 79 70        /* PragTyp
0cd0: 5f 58 58 58 20 76 61 6c 75 65 20 2a 2f 0a 20 20  _XXX value */.  
0ce0: 75 38 20 6d 50 72 61 67 46 6c 61 67 3b 20 20 20  u8 mPragFlag;   
0cf0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 5a 65 72            /* Zer
0d00: 6f 20 6f 72 20 6d 6f 72 65 20 50 72 61 67 46 6c  o or more PragFl
0d10: 61 67 5f 58 58 58 20 76 61 6c 75 65 73 20 2a 2f  ag_XXX values */
0d20: 0a 20 20 75 33 32 20 69 41 72 67 3b 20 20 20 20  .  u32 iArg;    
0d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
0d40: 45 78 74 72 61 20 61 72 67 75 6d 65 6e 74 20 2a  Extra argument *
0d50: 2f 0a 7d 20 61 50 72 61 67 6d 61 4e 61 6d 65 73  /.} aPragmaNames
0d60: 5b 5d 20 3d 20 7b 0a 23 69 66 20 64 65 66 69 6e  [] = {.#if defin
0d70: 65 64 28 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f  ed(SQLITE_HAS_CO
0d80: 44 45 43 29 20 7c 7c 20 64 65 66 69 6e 65 64 28  DEC) || defined(
0d90: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45  SQLITE_ENABLE_CE
0da0: 52 4f 44 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  ROD).  { /* zNam
0db0: 65 3a 20 20 20 20 20 2a 2f 20 22 61 63 74 69 76  e:     */ "activ
0dc0: 61 74 65 5f 65 78 74 65 6e 73 69 6f 6e 73 22 2c  ate_extensions",
0dd0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
0de0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 41 43  :  */ PragTyp_AC
0df0: 54 49 56 41 54 45 5f 45 58 54 45 4e 53 49 4f 4e  TIVATE_EXTENSION
0e00: 53 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  S,.    /* ePragF
0e10: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
0e20: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
0e30: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
0e40: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
0e50: 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53  OMIT_SCHEMA_VERS
0e60: 49 4f 4e 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  ION_PRAGMAS).  {
0e70: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
0e80: 2f 20 22 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69  / "application_i
0e90: 64 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  d",.    /* ePrag
0ea0: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
0eb0: 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 2c 0a 20  _HEADER_VALUE,. 
0ec0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
0ed0: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
0ee0: 72 67 3a 20 20 20 20 20 20 2a 2f 20 42 54 52 45  rg:      */ BTRE
0ef0: 45 5f 41 50 50 4c 49 43 41 54 49 4f 4e 5f 49 44  E_APPLICATION_ID
0f00: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
0f10: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
0f20: 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a  MIT_AUTOVACUUM).
0f30: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
0f40: 20 20 2a 2f 20 22 61 75 74 6f 5f 76 61 63 75 75    */ "auto_vacuu
0f50: 6d 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  m",.    /* ePrag
0f60: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
0f70: 5f 41 55 54 4f 5f 56 41 43 55 55 4d 2c 0a 20 20  _AUTO_VACUUM,.  
0f80: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
0f90: 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64  */ PragFlag_Need
0fa0: 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69  Schema,.    /* i
0fb0: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
0fc0: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ,.#endif.#if !de
0fd0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
0fe0: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a  T_FLAG_PRAGMAS).
0ff0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1000: 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 4d 41 54  ITE_OMIT_AUTOMAT
1010: 49 43 5f 49 4e 44 45 58 29 0a 20 20 7b 20 2f 2a  IC_INDEX).  { /*
1020: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
1030: 61 75 74 6f 6d 61 74 69 63 5f 69 6e 64 65 78 22  automatic_index"
1040: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
1050: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46  p:  */ PragTyp_F
1060: 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  LAG,.    /* ePra
1070: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
1080: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
1090: 2f 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e 64  / SQLITE_AutoInd
10a0: 65 78 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e  ex },.#endif.#en
10b0: 64 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  dif.  { /* zName
10c0: 3a 20 20 20 20 20 2a 2f 20 22 62 75 73 79 5f 74  :     */ "busy_t
10d0: 69 6d 65 6f 75 74 22 2c 0a 20 20 20 20 2f 2a 20  imeout",.    /* 
10e0: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
10f0: 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f  agTyp_BUSY_TIMEO
1100: 55 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  UT,.    /* ePrag
1110: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1120: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1130: 20 30 20 7d 2c 0a 23 69 66 20 21 64 65 66 69 6e   0 },.#if !defin
1140: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ed(SQLITE_OMIT_P
1150: 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a 20 20  AGER_PRAGMAS).  
1160: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
1170: 2a 2f 20 22 63 61 63 68 65 5f 73 69 7a 65 22 2c  */ "cache_size",
1180: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
1190: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 43 41  :  */ PragTyp_CA
11a0: 43 48 45 5f 53 49 5a 45 2c 0a 20 20 20 20 2f 2a  CHE_SIZE,.    /*
11b0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50   ePragFlag: */ P
11c0: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
11d0: 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a  ma,.    /* iArg:
11e0: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
11f0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
1200: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  d(SQLITE_OMIT_FL
1210: 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20  AG_PRAGMAS).  { 
1220: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
1230: 20 22 63 61 63 68 65 5f 73 70 69 6c 6c 22 2c 0a   "cache_spill",.
1240: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1250: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
1260: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
1270: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
1280: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
1290: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
12a0: 6c 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7b 20  l },.#endif.  { 
12b0: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
12c0: 20 22 63 61 73 65 5f 73 65 6e 73 69 74 69 76 65   "case_sensitive
12d0: 5f 6c 69 6b 65 22 2c 0a 20 20 20 20 2f 2a 20 65  _like",.    /* e
12e0: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
12f0: 67 54 79 70 5f 43 41 53 45 5f 53 45 4e 53 49 54  gTyp_CASE_SENSIT
1300: 49 56 45 5f 4c 49 4b 45 2c 0a 20 20 20 20 2f 2a  IVE_LIKE,.    /*
1310: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
1320: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
1330: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 69 66 20      */ 0 },.#if 
1340: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1350: 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41  OMIT_FLAG_PRAGMA
1360: 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  S).  { /* zName:
1370: 20 20 20 20 20 2a 2f 20 22 63 68 65 63 6b 70 6f       */ "checkpo
1380: 69 6e 74 5f 66 75 6c 6c 66 73 79 6e 63 22 2c 0a  int_fullfsync",.
1390: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
13a0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
13b0: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
13c0: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
13d0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
13e0: 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46  SQLITE_CkptFullF
13f0: 53 79 6e 63 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  Sync },.#endif.#
1400: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
1410: 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50  TE_OMIT_SCHEMA_P
1420: 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a  RAGMAS).  { /* z
1430: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 63 6f  Name:     */ "co
1440: 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 22 2c 0a 20  llation_list",. 
1450: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
1460: 20 2a 2f 20 50 72 61 67 54 79 70 5f 43 4f 4c 4c   */ PragTyp_COLL
1470: 41 54 49 4f 4e 5f 4c 49 53 54 2c 0a 20 20 20 20  ATION_LIST,.    
1480: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
1490: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
14a0: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
14b0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
14c0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f  d(SQLITE_OMIT_CO
14d0: 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41 47  MPILEOPTION_DIAG
14e0: 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  S).  { /* zName:
14f0: 20 20 20 20 20 2a 2f 20 22 63 6f 6d 70 69 6c 65       */ "compile
1500: 5f 6f 70 74 69 6f 6e 73 22 2c 0a 20 20 20 20 2f  _options",.    /
1510: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
1520: 50 72 61 67 54 79 70 5f 43 4f 4d 50 49 4c 45 5f  PragTyp_COMPILE_
1530: 4f 50 54 49 4f 4e 53 2c 0a 20 20 20 20 2f 2a 20  OPTIONS,.    /* 
1540: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
1550: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
1560: 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69     */ 0 },.#endi
1570: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
1580: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f  QLITE_OMIT_FLAG_
1590: 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20  PRAGMAS).  { /* 
15a0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 63  zName:     */ "c
15b0: 6f 75 6e 74 5f 63 68 61 6e 67 65 73 22 2c 0a 20  ount_changes",. 
15c0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
15d0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
15e0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
15f0: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
1600: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
1610: 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 20  QLITE_CountRows 
1620: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
1630: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1640: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
1650: 29 20 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f 57  ) && SQLITE_OS_W
1660: 49 4e 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  IN.  { /* zName:
1670: 20 20 20 20 20 2a 2f 20 22 64 61 74 61 5f 73 74       */ "data_st
1680: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 22 2c 0a  ore_directory",.
1690: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
16a0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 44 41 54    */ PragTyp_DAT
16b0: 41 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f 52  A_STORE_DIRECTOR
16c0: 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  Y,.    /* ePragF
16d0: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
16e0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
16f0: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
1700: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1710: 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53  OMIT_SCHEMA_VERS
1720: 49 4f 4e 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  ION_PRAGMAS).  {
1730: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
1740: 2f 20 22 64 61 74 61 5f 76 65 72 73 69 6f 6e 22  / "data_version"
1750: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
1760: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 48  p:  */ PragTyp_H
1770: 45 41 44 45 52 5f 56 41 4c 55 45 2c 0a 20 20 20  EADER_VALUE,.   
1780: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
1790: 2f 20 50 72 61 67 46 6c 61 67 5f 52 65 61 64 4f  / PragFlag_ReadO
17a0: 6e 6c 79 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  nly,.    /* iArg
17b0: 3a 20 20 20 20 20 20 2a 2f 20 42 54 52 45 45 5f  :      */ BTREE_
17c0: 44 41 54 41 5f 56 45 52 53 49 4f 4e 20 7d 2c 0a  DATA_VERSION },.
17d0: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
17e0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
17f0: 53 43 48 45 4d 41 5f 50 52 41 47 4d 41 53 29 0a  SCHEMA_PRAGMAS).
1800: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
1810: 20 20 2a 2f 20 22 64 61 74 61 62 61 73 65 5f 6c    */ "database_l
1820: 69 73 74 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ist",.    /* ePr
1830: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
1840: 79 70 5f 44 41 54 41 42 41 53 45 5f 4c 49 53 54  yp_DATABASE_LIST
1850: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
1860: 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f  ag: */ PragFlag_
1870: 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20  NeedSchema,.    
1880: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1890: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
18a0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
18b0: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
18c0: 4d 41 53 29 20 26 26 20 21 64 65 66 69 6e 65 64  MAS) && !defined
18d0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50  (SQLITE_OMIT_DEP
18e0: 52 45 43 41 54 45 44 29 0a 20 20 7b 20 2f 2a 20  RECATED).  { /* 
18f0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 64  zName:     */ "d
1900: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
1910: 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  e",.    /* ePrag
1920: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
1930: 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53  _DEFAULT_CACHE_S
1940: 49 5a 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  IZE,.    /* ePra
1950: 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c  gFlag: */ PragFl
1960: 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20  ag_NeedSchema,. 
1970: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
1980: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
1990: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
19a0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52  ITE_OMIT_FLAG_PR
19b0: 41 47 4d 41 53 29 0a 23 69 66 20 21 64 65 66 69  AGMAS).#if !defi
19c0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
19d0: 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20  FOREIGN_KEY) && 
19e0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
19f0: 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20  OMIT_TRIGGER).  
1a00: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
1a10: 2a 2f 20 22 64 65 66 65 72 5f 66 6f 72 65 69 67  */ "defer_foreig
1a20: 6e 5f 6b 65 79 73 22 2c 0a 20 20 20 20 2f 2a 20  n_keys",.    /* 
1a30: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
1a40: 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20  agTyp_FLAG,.    
1a50: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
1a60: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
1a70: 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f        */ SQLITE_
1a80: 44 65 66 65 72 46 4b 73 20 7d 2c 0a 23 65 6e 64  DeferFKs },.#end
1a90: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  if.#endif.#if !d
1aa0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1ab0: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29  IT_FLAG_PRAGMAS)
1ac0: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
1ad0: 20 20 20 2a 2f 20 22 65 6d 70 74 79 5f 72 65 73     */ "empty_res
1ae0: 75 6c 74 5f 63 61 6c 6c 62 61 63 6b 73 22 2c 0a  ult_callbacks",.
1af0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1b00: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
1b10: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
1b20: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
1b30: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
1b40: 53 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62  SQLITE_NullCallb
1b50: 61 63 6b 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  ack },.#endif.#i
1b60: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
1b70: 45 5f 4f 4d 49 54 5f 55 54 46 31 36 29 0a 20 20  E_OMIT_UTF16).  
1b80: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
1b90: 2a 2f 20 22 65 6e 63 6f 64 69 6e 67 22 2c 0a 20  */ "encoding",. 
1ba0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
1bb0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 45 4e 43 4f   */ PragTyp_ENCO
1bc0: 44 49 4e 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72  DING,.    /* ePr
1bd0: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
1be0: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
1bf0: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
1c00: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
1c10: 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
1c20: 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64  KEY) && !defined
1c30: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
1c40: 47 47 45 52 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GGER).  { /* zNa
1c50: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66 6f 72 65  me:     */ "fore
1c60: 69 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 22 2c 0a  ign_key_check",.
1c70: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1c80: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4f 52    */ PragTyp_FOR
1c90: 45 49 47 4e 5f 4b 45 59 5f 43 48 45 43 4b 2c 0a  EIGN_KEY_CHECK,.
1ca0: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
1cb0: 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65  : */ PragFlag_Ne
1cc0: 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a  edSchema,.    /*
1cd0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
1ce0: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
1cf0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1d00: 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29  MIT_FOREIGN_KEY)
1d10: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
1d20: 20 20 20 2a 2f 20 22 66 6f 72 65 69 67 6e 5f 6b     */ "foreign_k
1d30: 65 79 5f 6c 69 73 74 22 2c 0a 20 20 20 20 2f 2a  ey_list",.    /*
1d40: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
1d50: 72 61 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b  ragTyp_FOREIGN_K
1d60: 45 59 5f 4c 49 53 54 2c 0a 20 20 20 20 2f 2a 20  EY_LIST,.    /* 
1d70: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72  ePragFlag: */ Pr
1d80: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
1d90: 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  a,.    /* iArg: 
1da0: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
1db0: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
1dc0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41  (SQLITE_OMIT_FLA
1dd0: 47 5f 50 52 41 47 4d 41 53 29 0a 23 69 66 20 21  G_PRAGMAS).#if !
1de0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1df0: 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29  MIT_FOREIGN_KEY)
1e00: 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51 4c   && !defined(SQL
1e10: 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52  ITE_OMIT_TRIGGER
1e20: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
1e30: 20 20 20 20 2a 2f 20 22 66 6f 72 65 69 67 6e 5f      */ "foreign_
1e40: 6b 65 79 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50  keys",.    /* eP
1e50: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
1e60: 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a  Typ_FLAG,.    /*
1e70: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
1e80: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
1e90: 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 46 6f      */ SQLITE_Fo
1ea0: 72 65 69 67 6e 4b 65 79 73 20 7d 2c 0a 23 65 6e  reignKeys },.#en
1eb0: 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 21  dif.#endif.#if !
1ec0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1ed0: 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  MIT_SCHEMA_VERSI
1ee0: 4f 4e 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20  ON_PRAGMAS).  { 
1ef0: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
1f00: 20 22 66 72 65 65 6c 69 73 74 5f 63 6f 75 6e 74   "freelist_count
1f10: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
1f20: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
1f30: 48 45 41 44 45 52 5f 56 41 4c 55 45 2c 0a 20 20  HEADER_VALUE,.  
1f40: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
1f50: 2a 2f 20 50 72 61 67 46 6c 61 67 5f 52 65 61 64  */ PragFlag_Read
1f60: 4f 6e 6c 79 2c 0a 20 20 20 20 2f 2a 20 69 41 72  Only,.    /* iAr
1f70: 67 3a 20 20 20 20 20 20 2a 2f 20 42 54 52 45 45  g:      */ BTREE
1f80: 5f 46 52 45 45 5f 50 41 47 45 5f 43 4f 55 4e 54  _FREE_PAGE_COUNT
1f90: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
1fa0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1fb0: 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53  MIT_FLAG_PRAGMAS
1fc0: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
1fd0: 20 20 20 20 2a 2f 20 22 66 75 6c 6c 5f 63 6f 6c      */ "full_col
1fe0: 75 6d 6e 5f 6e 61 6d 65 73 22 2c 0a 20 20 20 20  umn_names",.    
1ff0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2000: 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20   PragTyp_FLAG,. 
2010: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
2020: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
2030: 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49  rg:      */ SQLI
2040: 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65 73 20  TE_FullColNames 
2050: 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  },.  { /* zName:
2060: 20 20 20 20 20 2a 2f 20 22 66 75 6c 6c 66 73 79       */ "fullfsy
2070: 6e 63 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  nc",.    /* ePra
2080: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
2090: 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65  p_FLAG,.    /* e
20a0: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
20b0: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
20c0: 20 20 2a 2f 20 53 51 4c 49 54 45 5f 46 75 6c 6c    */ SQLITE_Full
20d0: 46 53 79 6e 63 20 7d 2c 0a 23 65 6e 64 69 66 0a  FSync },.#endif.
20e0: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
20f0: 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 0a 20 20  TE_HAS_CODEC).  
2100: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
2110: 2a 2f 20 22 68 65 78 6b 65 79 22 2c 0a 20 20 20  */ "hexkey",.   
2120: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
2130: 2f 20 50 72 61 67 54 79 70 5f 48 45 58 4b 45 59  / PragTyp_HEXKEY
2140: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
2150: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
2160: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
2170: 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65   },.  { /* zName
2180: 3a 20 20 20 20 20 2a 2f 20 22 68 65 78 72 65 6b  :     */ "hexrek
2190: 65 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ey",.    /* ePra
21a0: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
21b0: 70 5f 48 45 58 4b 45 59 2c 0a 20 20 20 20 2f 2a  p_HEXKEY,.    /*
21c0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
21d0: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
21e0: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
21f0: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
2200: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47  SQLITE_OMIT_FLAG
2210: 5f 50 52 41 47 4d 41 53 29 0a 23 69 66 20 21 64  _PRAGMAS).#if !d
2220: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2230: 49 54 5f 43 48 45 43 4b 29 0a 20 20 7b 20 2f 2a  IT_CHECK).  { /*
2240: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
2250: 69 67 6e 6f 72 65 5f 63 68 65 63 6b 5f 63 6f 6e  ignore_check_con
2260: 73 74 72 61 69 6e 74 73 22 2c 0a 20 20 20 20 2f  straints",.    /
2270: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
2280: 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20  PragTyp_FLAG,.  
2290: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
22a0: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
22b0: 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54  g:      */ SQLIT
22c0: 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73 20 7d  E_IgnoreChecks }
22d0: 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  ,.#endif.#endif.
22e0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
22f0: 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
2300: 55 55 4d 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  UUM).  { /* zNam
2310: 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e 63 72 65  e:     */ "incre
2320: 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 22 2c 0a  mental_vacuum",.
2330: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2340: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 49 4e 43    */ PragTyp_INC
2350: 52 45 4d 45 4e 54 41 4c 5f 56 41 43 55 55 4d 2c  REMENTAL_VACUUM,
2360: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
2370: 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e  g: */ PragFlag_N
2380: 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f  eedSchema,.    /
2390: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
23a0: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
23b0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
23c0: 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47  OMIT_SCHEMA_PRAG
23d0: 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  MAS).  { /* zNam
23e0: 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e 64 65 78  e:     */ "index
23f0: 5f 69 6e 66 6f 22 2c 0a 20 20 20 20 2f 2a 20 65  _info",.    /* e
2400: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
2410: 67 54 79 70 5f 49 4e 44 45 58 5f 49 4e 46 4f 2c  gTyp_INDEX_INFO,
2420: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
2430: 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e  g: */ PragFlag_N
2440: 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f  eedSchema,.    /
2450: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
2460: 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  0 },.  { /* zNam
2470: 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e 64 65 78  e:     */ "index
2480: 5f 6c 69 73 74 22 2c 0a 20 20 20 20 2f 2a 20 65  _list",.    /* e
2490: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
24a0: 67 54 79 70 5f 49 4e 44 45 58 5f 4c 49 53 54 2c  gTyp_INDEX_LIST,
24b0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
24c0: 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e  g: */ PragFlag_N
24d0: 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f  eedSchema,.    /
24e0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
24f0: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
2500: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
2510: 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
2520: 48 45 43 4b 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  HECK).  { /* zNa
2530: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e 74 65  me:     */ "inte
2540: 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 0a 20 20  grity_check",.  
2550: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
2560: 2a 2f 20 50 72 61 67 54 79 70 5f 49 4e 54 45 47  */ PragTyp_INTEG
2570: 52 49 54 59 5f 43 48 45 43 4b 2c 0a 20 20 20 20  RITY_CHECK,.    
2580: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
2590: 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63   PragFlag_NeedSc
25a0: 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72  hema,.    /* iAr
25b0: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
25c0: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
25d0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
25e0: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a 20  PAGER_PRAGMAS). 
25f0: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
2600: 20 2a 2f 20 22 6a 6f 75 72 6e 61 6c 5f 6d 6f 64   */ "journal_mod
2610: 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  e",.    /* ePrag
2620: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
2630: 5f 4a 4f 55 52 4e 41 4c 5f 4d 4f 44 45 2c 0a 20  _JOURNAL_MODE,. 
2640: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
2650: 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65   */ PragFlag_Nee
2660: 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20  dSchema,.    /* 
2670: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
2680: 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  },.  { /* zName:
2690: 20 20 20 20 20 2a 2f 20 22 6a 6f 75 72 6e 61 6c       */ "journal
26a0: 5f 73 69 7a 65 5f 6c 69 6d 69 74 22 2c 0a 20 20  _size_limit",.  
26b0: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
26c0: 2a 2f 20 50 72 61 67 54 79 70 5f 4a 4f 55 52 4e  */ PragTyp_JOURN
26d0: 41 4c 5f 53 49 5a 45 5f 4c 49 4d 49 54 2c 0a 20  AL_SIZE_LIMIT,. 
26e0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
26f0: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
2700: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
2710: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
2720: 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 53 5f 43  ned(SQLITE_HAS_C
2730: 4f 44 45 43 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  ODEC).  { /* zNa
2740: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6b 65 79 22  me:     */ "key"
2750: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
2760: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 4b  p:  */ PragTyp_K
2770: 45 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  EY,.    /* ePrag
2780: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
2790: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
27a0: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
27b0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
27c0: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
27d0: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
27e0: 3a 20 20 20 20 20 2a 2f 20 22 6c 65 67 61 63 79  :     */ "legacy
27f0: 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 22 2c 0a 20  _file_format",. 
2800: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2810: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
2820: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
2830: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
2840: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
2850: 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65  QLITE_LegacyFile
2860: 46 6d 74 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  Fmt },.#endif.#i
2870: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2880: 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
2890: 47 4d 41 53 29 20 26 26 20 53 51 4c 49 54 45 5f  GMAS) && SQLITE_
28a0: 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53  ENABLE_LOCKING_S
28b0: 54 59 4c 45 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  TYLE.  { /* zNam
28c0: 65 3a 20 20 20 20 20 2a 2f 20 22 6c 6f 63 6b 5f  e:     */ "lock_
28d0: 70 72 6f 78 79 5f 66 69 6c 65 22 2c 0a 20 20 20  proxy_file",.   
28e0: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
28f0: 2f 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 50  / PragTyp_LOCK_P
2900: 52 4f 58 59 5f 46 49 4c 45 2c 0a 20 20 20 20 2f  ROXY_FILE,.    /
2910: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
2920: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
2930: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
2940: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
2950: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c  SQLITE_DEBUG) ||
2960: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2970: 54 45 53 54 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  TEST).  { /* zNa
2980: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 6f 63 6b  me:     */ "lock
2990: 5f 73 74 61 74 75 73 22 2c 0a 20 20 20 20 2f 2a  _status",.    /*
29a0: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
29b0: 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 53 54 41 54  ragTyp_LOCK_STAT
29c0: 55 53 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  US,.    /* ePrag
29d0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
29e0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
29f0: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
2a00: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2a10: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
2a20: 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  MAS).  { /* zNam
2a30: 65 3a 20 20 20 20 20 2a 2f 20 22 6c 6f 63 6b 69  e:     */ "locki
2a40: 6e 67 5f 6d 6f 64 65 22 2c 0a 20 20 20 20 2f 2a  ng_mode",.    /*
2a50: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
2a60: 72 61 67 54 79 70 5f 4c 4f 43 4b 49 4e 47 5f 4d  ragTyp_LOCKING_M
2a70: 4f 44 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ODE,.    /* ePra
2a80: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
2a90: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
2aa0: 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e  / 0 },.  { /* zN
2ab0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6d 61 78  ame:     */ "max
2ac0: 5f 70 61 67 65 5f 63 6f 75 6e 74 22 2c 0a 20 20  _page_count",.  
2ad0: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
2ae0: 2a 2f 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f  */ PragTyp_PAGE_
2af0: 43 4f 55 4e 54 2c 0a 20 20 20 20 2f 2a 20 65 50  COUNT,.    /* eP
2b00: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67  ragFlag: */ Prag
2b10: 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c  Flag_NeedSchema,
2b20: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
2b30: 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f     */ 0 },.  { /
2b40: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
2b50: 22 6d 6d 61 70 5f 73 69 7a 65 22 2c 0a 20 20 20  "mmap_size",.   
2b60: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
2b70: 2f 20 50 72 61 67 54 79 70 5f 4d 4d 41 50 5f 53  / PragTyp_MMAP_S
2b80: 49 5a 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  IZE,.    /* ePra
2b90: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
2ba0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
2bb0: 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e  / 0 },.  { /* zN
2bc0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 70 61 67  ame:     */ "pag
2bd0: 65 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 2f 2a  e_count",.    /*
2be0: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
2bf0: 72 61 67 54 79 70 5f 50 41 47 45 5f 43 4f 55 4e  ragTyp_PAGE_COUN
2c00: 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  T,.    /* ePragF
2c10: 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67  lag: */ PragFlag
2c20: 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20  _NeedSchema,.   
2c30: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
2c40: 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e  / 0 },.  { /* zN
2c50: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 70 61 67  ame:     */ "pag
2c60: 65 5f 73 69 7a 65 22 2c 0a 20 20 20 20 2f 2a 20  e_size",.    /* 
2c70: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
2c80: 61 67 54 79 70 5f 50 41 47 45 5f 53 49 5a 45 2c  agTyp_PAGE_SIZE,
2c90: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
2ca0: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
2cb0: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
2cc0: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  },.#endif.#if de
2cd0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42  fined(SQLITE_DEB
2ce0: 55 47 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  UG).  { /* zName
2cf0: 3a 20 20 20 20 20 2a 2f 20 22 70 61 72 73 65 72  :     */ "parser
2d00: 5f 74 72 61 63 65 22 2c 0a 20 20 20 20 2f 2a 20  _trace",.    /* 
2d10: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
2d20: 61 67 54 79 70 5f 50 41 52 53 45 52 5f 54 52 41  agTyp_PARSER_TRA
2d30: 43 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  CE,.    /* ePrag
2d40: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
2d50: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
2d60: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
2d70: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
2d80: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
2d90: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
2da0: 3a 20 20 20 20 20 2a 2f 20 22 71 75 65 72 79 5f  :     */ "query_
2db0: 6f 6e 6c 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50  only",.    /* eP
2dc0: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
2dd0: 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a  Typ_FLAG,.    /*
2de0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
2df0: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
2e00: 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 51 75      */ SQLITE_Qu
2e10: 65 72 79 4f 6e 6c 79 20 7d 2c 0a 23 65 6e 64 69  eryOnly },.#endi
2e20: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
2e30: 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47  QLITE_OMIT_INTEG
2e40: 52 49 54 59 5f 43 48 45 43 4b 29 0a 20 20 7b 20  RITY_CHECK).  { 
2e50: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
2e60: 20 22 71 75 69 63 6b 5f 63 68 65 63 6b 22 2c 0a   "quick_check",.
2e70: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2e80: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 49 4e 54    */ PragTyp_INT
2e90: 45 47 52 49 54 59 5f 43 48 45 43 4b 2c 0a 20 20  EGRITY_CHECK,.  
2ea0: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
2eb0: 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64  */ PragFlag_Need
2ec0: 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69  Schema,.    /* i
2ed0: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
2ee0: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ,.#endif.#if !de
2ef0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2f00: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a  T_FLAG_PRAGMAS).
2f10: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
2f20: 20 20 2a 2f 20 22 72 65 61 64 5f 75 6e 63 6f 6d    */ "read_uncom
2f30: 6d 69 74 74 65 64 22 2c 0a 20 20 20 20 2f 2a 20  mitted",.    /* 
2f40: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
2f50: 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20  agTyp_FLAG,.    
2f60: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
2f70: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
2f80: 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f        */ SQLITE_
2f90: 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 20  ReadUncommitted 
2fa0: 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  },.  { /* zName:
2fb0: 20 20 20 20 20 2a 2f 20 22 72 65 63 75 72 73 69       */ "recursi
2fc0: 76 65 5f 74 72 69 67 67 65 72 73 22 2c 0a 20 20  ve_triggers",.  
2fd0: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
2fe0: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
2ff0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
3000: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
3010: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
3020: 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65 72 73  LITE_RecTriggers
3030: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 64   },.#endif.#if d
3040: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41  efined(SQLITE_HA
3050: 53 5f 43 4f 44 45 43 29 0a 20 20 7b 20 2f 2a 20  S_CODEC).  { /* 
3060: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 72  zName:     */ "r
3070: 65 6b 65 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50  ekey",.    /* eP
3080: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
3090: 54 79 70 5f 52 45 4b 45 59 2c 0a 20 20 20 20 2f  Typ_REKEY,.    /
30a0: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
30b0: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
30c0: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
30d0: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
30e0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41  (SQLITE_OMIT_FLA
30f0: 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f  G_PRAGMAS).  { /
3100: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
3110: 22 72 65 76 65 72 73 65 5f 75 6e 6f 72 64 65 72  "reverse_unorder
3120: 65 64 5f 73 65 6c 65 63 74 73 22 2c 0a 20 20 20  ed_selects",.   
3130: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
3140: 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a  / PragTyp_FLAG,.
3150: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
3160: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
3170: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c  Arg:      */ SQL
3180: 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64 65 72  ITE_ReverseOrder
3190: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
31a0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
31b0: 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49  MIT_SCHEMA_VERSI
31c0: 4f 4e 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20  ON_PRAGMAS).  { 
31d0: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
31e0: 20 22 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e   "schema_version
31f0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
3200: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
3210: 48 45 41 44 45 52 5f 56 41 4c 55 45 2c 0a 20 20  HEADER_VALUE,.  
3220: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
3230: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
3240: 67 3a 20 20 20 20 20 20 2a 2f 20 42 54 52 45 45  g:      */ BTREE
3250: 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 20  _SCHEMA_VERSION 
3260: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
3270: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
3280: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
3290: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
32a0: 20 20 20 20 2a 2f 20 22 73 65 63 75 72 65 5f 64      */ "secure_d
32b0: 65 6c 65 74 65 22 2c 0a 20 20 20 20 2f 2a 20 65  elete",.    /* e
32c0: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
32d0: 67 54 79 70 5f 53 45 43 55 52 45 5f 44 45 4c 45  gTyp_SECURE_DELE
32e0: 54 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  TE,.    /* ePrag
32f0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
3300: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
3310: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
3320: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
3330: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
3340: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
3350: 3a 20 20 20 20 20 2a 2f 20 22 73 68 6f 72 74 5f  :     */ "short_
3360: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22 2c 0a 20  column_names",. 
3370: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
3380: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
3390: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
33a0: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
33b0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
33c0: 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61  QLITE_ShortColNa
33d0: 6d 65 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20  mes },.#endif.  
33e0: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
33f0: 2a 2f 20 22 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72  */ "shrink_memor
3400: 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  y",.    /* ePrag
3410: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
3420: 5f 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59 2c 0a  _SHRINK_MEMORY,.
3430: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
3440: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
3450: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
3460: 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ,.  { /* zName: 
3470: 20 20 20 20 2a 2f 20 22 73 6f 66 74 5f 68 65 61      */ "soft_hea
3480: 70 5f 6c 69 6d 69 74 22 2c 0a 20 20 20 20 2f 2a  p_limit",.    /*
3490: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
34a0: 72 61 67 54 79 70 5f 53 4f 46 54 5f 48 45 41 50  ragTyp_SOFT_HEAP
34b0: 5f 4c 49 4d 49 54 2c 0a 20 20 20 20 2f 2a 20 65  _LIMIT,.    /* e
34c0: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
34d0: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
34e0: 20 20 2a 2f 20 30 20 7d 2c 0a 23 69 66 20 21 64    */ 0 },.#if !d
34f0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
3500: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29  IT_FLAG_PRAGMAS)
3510: 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
3520: 49 54 45 5f 44 45 42 55 47 29 0a 20 20 7b 20 2f  ITE_DEBUG).  { /
3530: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
3540: 22 73 71 6c 5f 74 72 61 63 65 22 2c 0a 20 20 20  "sql_trace",.   
3550: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
3560: 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a  / PragTyp_FLAG,.
3570: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
3580: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
3590: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c  Arg:      */ SQL
35a0: 49 54 45 5f 53 71 6c 54 72 61 63 65 20 7d 2c 0a  ITE_SqlTrace },.
35b0: 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69  #endif.#endif.#i
35c0: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
35d0: 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52  E_OMIT_SCHEMA_PR
35e0: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
35f0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 73 74 61  ame:     */ "sta
3600: 74 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ts",.    /* ePra
3610: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
3620: 70 5f 53 54 41 54 53 2c 0a 20 20 20 20 2f 2a 20  p_STATS,.    /* 
3630: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72  ePragFlag: */ Pr
3640: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
3650: 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  a,.    /* iArg: 
3660: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
3670: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
3680: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47  (SQLITE_OMIT_PAG
3690: 45 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20  ER_PRAGMAS).  { 
36a0: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
36b0: 20 22 73 79 6e 63 68 72 6f 6e 6f 75 73 22 2c 0a   "synchronous",.
36c0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
36d0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 53 59 4e    */ PragTyp_SYN
36e0: 43 48 52 4f 4e 4f 55 53 2c 0a 20 20 20 20 2f 2a  CHRONOUS,.    /*
36f0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50   ePragFlag: */ P
3700: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
3710: 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a  ma,.    /* iArg:
3720: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
3730: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
3740: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43  d(SQLITE_OMIT_SC
3750: 48 45 4d 41 5f 50 52 41 47 4d 41 53 29 0a 20 20  HEMA_PRAGMAS).  
3760: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
3770: 2a 2f 20 22 74 61 62 6c 65 5f 69 6e 66 6f 22 2c  */ "table_info",
3780: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
3790: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 54 41  :  */ PragTyp_TA
37a0: 42 4c 45 5f 49 4e 46 4f 2c 0a 20 20 20 20 2f 2a  BLE_INFO,.    /*
37b0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50   ePragFlag: */ P
37c0: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
37d0: 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a  ma,.    /* iArg:
37e0: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
37f0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
3800: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  d(SQLITE_OMIT_PA
3810: 47 45 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  GER_PRAGMAS).  {
3820: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
3830: 2f 20 22 74 65 6d 70 5f 73 74 6f 72 65 22 2c 0a  / "temp_store",.
3840: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
3850: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 54 45 4d    */ PragTyp_TEM
3860: 50 5f 53 54 4f 52 45 2c 0a 20 20 20 20 2f 2a 20  P_STORE,.    /* 
3870: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
3880: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
3890: 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f     */ 0 },.  { /
38a0: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
38b0: 22 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65  "temp_store_dire
38c0: 63 74 6f 72 79 22 2c 0a 20 20 20 20 2f 2a 20 65  ctory",.    /* e
38d0: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
38e0: 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45 5f  gTyp_TEMP_STORE_
38f0: 44 49 52 45 43 54 4f 52 59 2c 0a 20 20 20 20 2f  DIRECTORY,.    /
3900: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
3910: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
3920: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
3930: 64 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  dif.  { /* zName
3940: 3a 20 20 20 20 20 2a 2f 20 22 74 68 72 65 61 64  :     */ "thread
3950: 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  s",.    /* ePrag
3960: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
3970: 5f 54 48 52 45 41 44 53 2c 0a 20 20 20 20 2f 2a  _THREADS,.    /*
3980: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
3990: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
39a0: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 69 66 20      */ 0 },.#if 
39b0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
39c0: 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53  OMIT_SCHEMA_VERS
39d0: 49 4f 4e 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  ION_PRAGMAS).  {
39e0: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
39f0: 2f 20 22 75 73 65 72 5f 76 65 72 73 69 6f 6e 22  / "user_version"
3a00: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
3a10: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 48  p:  */ PragTyp_H
3a20: 45 41 44 45 52 5f 56 41 4c 55 45 2c 0a 20 20 20  EADER_VALUE,.   
3a30: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
3a40: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
3a50: 3a 20 20 20 20 20 20 2a 2f 20 42 54 52 45 45 5f  :      */ BTREE_
3a60: 55 53 45 52 5f 56 45 52 53 49 4f 4e 20 7d 2c 0a  USER_VERSION },.
3a70: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
3a80: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
3a90: 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 23 69  FLAG_PRAGMAS).#i
3aa0: 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  f defined(SQLITE
3ab0: 5f 44 45 42 55 47 29 0a 20 20 7b 20 2f 2a 20 7a  _DEBUG).  { /* z
3ac0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76 64  Name:     */ "vd
3ad0: 62 65 5f 61 64 64 6f 70 74 72 61 63 65 22 2c 0a  be_addoptrace",.
3ae0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
3af0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
3b00: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
3b10: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
3b20: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
3b30: 53 51 4c 49 54 45 5f 56 64 62 65 41 64 64 6f 70  SQLITE_VdbeAddop
3b40: 54 72 61 63 65 20 7d 2c 0a 20 20 7b 20 2f 2a 20  Trace },.  { /* 
3b50: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76  zName:     */ "v
3b60: 64 62 65 5f 64 65 62 75 67 22 2c 0a 20 20 20 20  dbe_debug",.    
3b70: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
3b80: 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20   PragTyp_FLAG,. 
3b90: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
3ba0: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
3bb0: 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49  rg:      */ SQLI
3bc0: 54 45 5f 53 71 6c 54 72 61 63 65 7c 53 51 4c 49  TE_SqlTrace|SQLI
3bd0: 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 7c 53  TE_VdbeListing|S
3be0: 51 4c 49 54 45 5f 56 64 62 65 54 72 61 63 65 20  QLITE_VdbeTrace 
3bf0: 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  },.  { /* zName:
3c00: 20 20 20 20 20 2a 2f 20 22 76 64 62 65 5f 65 71       */ "vdbe_eq
3c10: 70 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  p",.    /* ePrag
3c20: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
3c30: 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50  _FLAG,.    /* eP
3c40: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
3c50: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
3c60: 20 2a 2f 20 53 51 4c 49 54 45 5f 56 64 62 65 45   */ SQLITE_VdbeE
3c70: 51 50 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61  QP },.  { /* zNa
3c80: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76 64 62 65  me:     */ "vdbe
3c90: 5f 6c 69 73 74 69 6e 67 22 2c 0a 20 20 20 20 2f  _listing",.    /
3ca0: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
3cb0: 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20  PragTyp_FLAG,.  
3cc0: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
3cd0: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
3ce0: 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54  g:      */ SQLIT
3cf0: 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 20 7d 2c  E_VdbeListing },
3d00: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
3d10: 20 20 20 2a 2f 20 22 76 64 62 65 5f 74 72 61 63     */ "vdbe_trac
3d20: 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  e",.    /* ePrag
3d30: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
3d40: 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50  _FLAG,.    /* eP
3d50: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
3d60: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
3d70: 20 2a 2f 20 53 51 4c 49 54 45 5f 56 64 62 65 54   */ SQLITE_VdbeT
3d80: 72 61 63 65 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  race },.#endif.#
3d90: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
3da0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ed(SQLITE_OMIT_W
3db0: 41 4c 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AL).  { /* zName
3dc0: 3a 20 20 20 20 20 2a 2f 20 22 77 61 6c 5f 61 75  :     */ "wal_au
3dd0: 74 6f 63 68 65 63 6b 70 6f 69 6e 74 22 2c 0a 20  tocheckpoint",. 
3de0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
3df0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 57 41 4c 5f   */ PragTyp_WAL_
3e00: 41 55 54 4f 43 48 45 43 4b 50 4f 49 4e 54 2c 0a  AUTOCHECKPOINT,.
3e10: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
3e20: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
3e30: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
3e40: 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ,.  { /* zName: 
3e50: 20 20 20 20 2a 2f 20 22 77 61 6c 5f 63 68 65 63      */ "wal_chec
3e60: 6b 70 6f 69 6e 74 22 2c 0a 20 20 20 20 2f 2a 20  kpoint",.    /* 
3e70: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
3e80: 61 67 54 79 70 5f 57 41 4c 5f 43 48 45 43 4b 50  agTyp_WAL_CHECKP
3e90: 4f 49 4e 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72  OINT,.    /* ePr
3ea0: 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46  agFlag: */ PragF
3eb0: 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a  lag_NeedSchema,.
3ec0: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
3ed0: 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66    */ 0 },.#endif
3ee0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
3ef0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50  LITE_OMIT_FLAG_P
3f00: 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a  RAGMAS).  { /* z
3f10: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 77 72  Name:     */ "wr
3f20: 69 74 61 62 6c 65 5f 73 63 68 65 6d 61 22 2c 0a  itable_schema",.
3f30: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
3f40: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
3f50: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
3f60: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
3f70: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
3f80: 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68 65  SQLITE_WriteSche
3f90: 6d 61 7c 53 51 4c 49 54 45 5f 52 65 63 6f 76 65  ma|SQLITE_Recove
3fa0: 72 79 4d 6f 64 65 20 7d 2c 0a 23 65 6e 64 69 66  ryMode },.#endif
3fb0: 0a 7d 3b 0a 2f 2a 20 4e 75 6d 62 65 72 20 6f 66  .};./* Number of
3fc0: 20 70 72 61 67 6d 61 73 3a 20 35 38 20 6f 6e 20   pragmas: 58 on 
3fd0: 62 79 20 64 65 66 61 75 6c 74 2c 20 37 31 20 74  by default, 71 t
3fe0: 6f 74 61 6c 2e 20 2a 2f 0a 2f 2a 20 45 6e 64 20  otal. */./* End 
3ff0: 6f 66 20 74 68 65 20 61 75 74 6f 6d 61 74 69 63  of the automatic
4000: 61 6c 6c 79 20 67 65 6e 65 72 61 74 65 64 20 70  ally generated p
4010: 72 61 67 6d 61 20 74 61 62 6c 65 2e 0a 2a 2a 2a  ragma table..***
4020: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4030: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4040: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4050: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4060: 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a 0a 2a 2a  ********/../*.**
4070: 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 67   Interpret the g
4080: 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61  iven string as a
4090: 20 73 61 66 65 74 79 20 6c 65 76 65 6c 2e 20 20   safety level.  
40a0: 52 65 74 75 72 6e 20 30 20 66 6f 72 20 4f 46 46  Return 0 for OFF
40b0: 2c 0a 2a 2a 20 31 20 66 6f 72 20 4f 4e 20 6f 72  ,.** 1 for ON or
40c0: 20 4e 4f 52 4d 41 4c 20 61 6e 64 20 32 20 66 6f   NORMAL and 2 fo
40d0: 72 20 46 55 4c 4c 2e 20 20 52 65 74 75 72 6e 20  r FULL.  Return 
40e0: 31 20 66 6f 72 20 61 6e 20 65 6d 70 74 79 20 6f  1 for an empty o
40f0: 72 20 0a 2a 2a 20 75 6e 72 65 63 6f 67 6e 69 7a  r .** unrecogniz
4100: 65 64 20 73 74 72 69 6e 67 20 61 72 67 75 6d 65  ed string argume
4110: 6e 74 2e 20 20 54 68 65 20 46 55 4c 4c 20 6f 70  nt.  The FULL op
4120: 74 69 6f 6e 20 69 73 20 64 69 73 61 6c 6c 6f 77  tion is disallow
4130: 65 64 0a 2a 2a 20 69 66 20 74 68 65 20 6f 6d 69  ed.** if the omi
4140: 74 46 75 6c 6c 20 70 61 72 61 6d 65 74 65 72 20  tFull parameter 
4150: 69 74 20 31 2e 0a 2a 2a 0a 2a 2a 20 4e 6f 74 65  it 1..**.** Note
4160: 20 74 68 61 74 20 74 68 65 20 76 61 6c 75 65 73   that the values
4170: 20 72 65 74 75 72 6e 65 64 20 61 72 65 20 6f 6e   returned are on
4180: 65 20 6c 65 73 73 20 74 68 61 74 20 74 68 65 20  e less that the 
4190: 76 61 6c 75 65 73 20 74 68 61 74 0a 2a 2a 20 73  values that.** s
41a0: 68 6f 75 6c 64 20 62 65 20 70 61 73 73 65 64 20  hould be passed 
41b0: 69 6e 74 6f 20 73 71 6c 69 74 65 33 42 74 72 65  into sqlite3Btre
41c0: 65 53 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28  eSetSafetyLevel(
41d0: 29 2e 20 20 54 68 65 20 69 73 20 64 6f 6e 65 0a  ).  The is done.
41e0: 2a 2a 20 74 6f 20 73 75 70 70 6f 72 74 20 6c 65  ** to support le
41f0: 67 61 63 79 20 53 51 4c 20 63 6f 64 65 2e 20 20  gacy SQL code.  
4200: 54 68 65 20 73 61 66 65 74 79 20 6c 65 76 65 6c  The safety level
4210: 20 75 73 65 64 20 74 6f 20 62 65 20 62 6f 6f 6c   used to be bool
4220: 65 61 6e 0a 2a 2a 20 61 6e 64 20 6f 6c 64 65 72  ean.** and older
4230: 20 73 63 72 69 70 74 73 20 6d 61 79 20 68 61 76   scripts may hav
4240: 65 20 75 73 65 64 20 6e 75 6d 62 65 72 73 20 30  e used numbers 0
4250: 20 66 6f 72 20 4f 46 46 20 61 6e 64 20 31 20 66   for OFF and 1 f
4260: 6f 72 20 4f 4e 2e 0a 2a 2f 0a 73 74 61 74 69 63  or ON..*/.static
4270: 20 75 38 20 67 65 74 53 61 66 65 74 79 4c 65 76   u8 getSafetyLev
4280: 65 6c 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  el(const char *z
4290: 2c 20 69 6e 74 20 6f 6d 69 74 46 75 6c 6c 2c 20  , int omitFull, 
42a0: 75 38 20 64 66 6c 74 29 7b 0a 20 20 20 20 20 20  u8 dflt){.      
42b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
42c0: 20 20 20 20 20 20 20 2f 2a 20 31 32 33 34 35 36         /* 123456
42d0: 37 38 39 20 31 32 33 34 35 36 37 38 39 20 2a 2f  789 123456789 */
42e0: 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20  .  static const 
42f0: 63 68 61 72 20 7a 54 65 78 74 5b 5d 20 3d 20 22  char zText[] = "
4300: 6f 6e 6f 66 66 61 6c 73 65 79 65 73 74 72 75 65  onoffalseyestrue
4310: 66 75 6c 6c 22 3b 0a 20 20 73 74 61 74 69 63 20  full";.  static 
4320: 63 6f 6e 73 74 20 75 38 20 69 4f 66 66 73 65 74  const u8 iOffset
4330: 5b 5d 20 3d 20 7b 30 2c 20 31 2c 20 32 2c 20 34  [] = {0, 1, 2, 4
4340: 2c 20 39 2c 20 31 32 2c 20 31 36 7d 3b 0a 20 20  , 9, 12, 16};.  
4350: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38 20  static const u8 
4360: 69 4c 65 6e 67 74 68 5b 5d 20 3d 20 7b 32 2c 20  iLength[] = {2, 
4370: 32 2c 20 33 2c 20 35 2c 20 33 2c 20 34 2c 20 34  2, 3, 5, 3, 4, 4
4380: 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73  };.  static cons
4390: 74 20 75 38 20 69 56 61 6c 75 65 5b 5d 20 3d 20  t u8 iValue[] = 
43a0: 20 7b 31 2c 20 30 2c 20 30 2c 20 30 2c 20 31 2c   {1, 0, 0, 0, 1,
43b0: 20 31 2c 20 32 7d 3b 0a 20 20 69 6e 74 20 69 2c   1, 2};.  int i,
43c0: 20 6e 3b 0a 20 20 69 66 28 20 73 71 6c 69 74 65   n;.  if( sqlite
43d0: 33 49 73 64 69 67 69 74 28 2a 7a 29 20 29 7b 0a  3Isdigit(*z) ){.
43e0: 20 20 20 20 72 65 74 75 72 6e 20 28 75 38 29 73      return (u8)s
43f0: 71 6c 69 74 65 33 41 74 6f 69 28 7a 29 3b 0a 20  qlite3Atoi(z);. 
4400: 20 7d 0a 20 20 6e 20 3d 20 73 71 6c 69 74 65 33   }.  n = sqlite3
4410: 53 74 72 6c 65 6e 33 30 28 7a 29 3b 0a 20 20 66  Strlen30(z);.  f
4420: 6f 72 28 69 3d 30 3b 20 69 3c 41 72 72 61 79 53  or(i=0; i<ArrayS
4430: 69 7a 65 28 69 4c 65 6e 67 74 68 29 2d 6f 6d 69  ize(iLength)-omi
4440: 74 46 75 6c 6c 3b 20 69 2b 2b 29 7b 0a 20 20 20  tFull; i++){.   
4450: 20 69 66 28 20 69 4c 65 6e 67 74 68 5b 69 5d 3d   if( iLength[i]=
4460: 3d 6e 20 26 26 20 73 71 6c 69 74 65 33 53 74 72  =n && sqlite3Str
4470: 4e 49 43 6d 70 28 26 7a 54 65 78 74 5b 69 4f 66  NICmp(&zText[iOf
4480: 66 73 65 74 5b 69 5d 5d 2c 7a 2c 6e 29 3d 3d 30  fset[i]],z,n)==0
4490: 20 29 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e   ){.      return
44a0: 20 69 56 61 6c 75 65 5b 69 5d 3b 0a 20 20 20 20   iValue[i];.    
44b0: 7d 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 64  }.  }.  return d
44c0: 66 6c 74 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 49 6e  flt;.}../*.** In
44d0: 74 65 72 70 72 65 74 20 74 68 65 20 67 69 76 65  terpret the give
44e0: 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20 62 6f  n string as a bo
44f0: 6f 6c 65 61 6e 20 76 61 6c 75 65 2e 0a 2a 2f 0a  olean value..*/.
4500: 75 38 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  u8 sqlite3GetBoo
4510: 6c 65 61 6e 28 63 6f 6e 73 74 20 63 68 61 72 20  lean(const char 
4520: 2a 7a 2c 20 75 38 20 64 66 6c 74 29 7b 0a 20 20  *z, u8 dflt){.  
4530: 72 65 74 75 72 6e 20 67 65 74 53 61 66 65 74 79  return getSafety
4540: 4c 65 76 65 6c 28 7a 2c 31 2c 64 66 6c 74 29 21  Level(z,1,dflt)!
4550: 3d 30 3b 0a 7d 0a 0a 2f 2a 20 54 68 65 20 73 71  =0;.}../* The sq
4560: 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28  lite3GetBoolean(
4570: 29 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 75 73  ) function is us
4580: 65 64 20 62 79 20 6f 74 68 65 72 20 6d 6f 64 75  ed by other modu
4590: 6c 65 73 20 62 75 74 20 74 68 65 0a 2a 2a 20 72  les but the.** r
45a0: 65 6d 61 69 6e 64 65 72 20 6f 66 20 74 68 69 73  emainder of this
45b0: 20 66 69 6c 65 20 69 73 20 73 70 65 63 69 66 69   file is specifi
45c0: 63 20 74 6f 20 50 52 41 47 4d 41 20 70 72 6f 63  c to PRAGMA proc
45d0: 65 73 73 69 6e 67 2e 20 20 53 6f 20 6f 6d 69 74  essing.  So omit
45e0: 0a 2a 2a 20 74 68 65 20 72 65 73 74 20 6f 66 20  .** the rest of 
45f0: 74 68 65 20 66 69 6c 65 20 69 66 20 50 52 41 47  the file if PRAG
4600: 4d 41 73 20 61 72 65 20 6f 6d 69 74 74 65 64 20  MAs are omitted 
4610: 66 72 6f 6d 20 74 68 65 20 62 75 69 6c 64 2e 0a  from the build..
4620: 2a 2f 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  */.#if !defined(
4630: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47  SQLITE_OMIT_PRAG
4640: 4d 41 29 0a 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72  MA)../*.** Inter
4650: 70 72 65 74 20 74 68 65 20 67 69 76 65 6e 20 73  pret the given s
4660: 74 72 69 6e 67 20 61 73 20 61 20 6c 6f 63 6b 69  tring as a locki
4670: 6e 67 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a 2a  ng mode value..*
4680: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65 74  /.static int get
4690: 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 63 6f 6e 73  LockingMode(cons
46a0: 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 66  t char *z){.  if
46b0: 28 20 7a 20 29 7b 0a 20 20 20 20 69 66 28 20 30  ( z ){.    if( 0
46c0: 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ==sqlite3StrICmp
46d0: 28 7a 2c 20 22 65 78 63 6c 75 73 69 76 65 22 29  (z, "exclusive")
46e0: 20 29 20 72 65 74 75 72 6e 20 50 41 47 45 52 5f   ) return PAGER_
46f0: 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 45 58 43 4c  LOCKINGMODE_EXCL
4700: 55 53 49 56 45 3b 0a 20 20 20 20 69 66 28 20 30  USIVE;.    if( 0
4710: 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ==sqlite3StrICmp
4720: 28 7a 2c 20 22 6e 6f 72 6d 61 6c 22 29 20 29 20  (z, "normal") ) 
4730: 72 65 74 75 72 6e 20 50 41 47 45 52 5f 4c 4f 43  return PAGER_LOC
4740: 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 3b  KINGMODE_NORMAL;
4750: 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 50 41  .  }.  return PA
4760: 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f  GER_LOCKINGMODE_
4770: 51 55 45 52 59 3b 0a 7d 0a 0a 23 69 66 6e 64 65  QUERY;.}..#ifnde
4780: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
4790: 54 4f 56 41 43 55 55 4d 0a 2f 2a 0a 2a 2a 20 49  TOVACUUM./*.** I
47a0: 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69 76  nterpret the giv
47b0: 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 6e 20  en string as an 
47c0: 61 75 74 6f 2d 76 61 63 75 75 6d 20 6d 6f 64 65  auto-vacuum mode
47d0: 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a 2a 20 54 68   value..**.** Th
47e0: 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 73 74 72 69  e following stri
47f0: 6e 67 73 2c 20 22 6e 6f 6e 65 22 2c 20 22 66 75  ngs, "none", "fu
4800: 6c 6c 22 20 61 6e 64 20 22 69 6e 63 72 65 6d 65  ll" and "increme
4810: 6e 74 61 6c 22 20 61 72 65 20 0a 2a 2a 20 61 63  ntal" are .** ac
4820: 63 65 70 74 61 62 6c 65 2c 20 61 73 20 61 72 65  ceptable, as are
4830: 20 74 68 65 69 72 20 6e 75 6d 65 72 69 63 20 65   their numeric e
4840: 71 75 69 76 61 6c 65 6e 74 73 3a 20 30 2c 20 31  quivalents: 0, 1
4850: 20 61 6e 64 20 32 20 72 65 73 70 65 63 74 69 76   and 2 respectiv
4860: 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ely..*/.static i
4870: 6e 74 20 67 65 74 41 75 74 6f 56 61 63 75 75 6d  nt getAutoVacuum
4880: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b  (const char *z){
4890: 0a 20 20 69 6e 74 20 69 3b 0a 20 20 69 66 28 20  .  int i;.  if( 
48a0: 30 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d  0==sqlite3StrICm
48b0: 70 28 7a 2c 20 22 6e 6f 6e 65 22 29 20 29 20 72  p(z, "none") ) r
48c0: 65 74 75 72 6e 20 42 54 52 45 45 5f 41 55 54 4f  eturn BTREE_AUTO
48d0: 56 41 43 55 55 4d 5f 4e 4f 4e 45 3b 0a 20 20 69  VACUUM_NONE;.  i
48e0: 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74 72  f( 0==sqlite3Str
48f0: 49 43 6d 70 28 7a 2c 20 22 66 75 6c 6c 22 29 20  ICmp(z, "full") 
4900: 29 20 72 65 74 75 72 6e 20 42 54 52 45 45 5f 41  ) return BTREE_A
4910: 55 54 4f 56 41 43 55 55 4d 5f 46 55 4c 4c 3b 0a  UTOVACUUM_FULL;.
4920: 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33    if( 0==sqlite3
4930: 53 74 72 49 43 6d 70 28 7a 2c 20 22 69 6e 63 72  StrICmp(z, "incr
4940: 65 6d 65 6e 74 61 6c 22 29 20 29 20 72 65 74 75  emental") ) retu
4950: 72 6e 20 42 54 52 45 45 5f 41 55 54 4f 56 41 43  rn BTREE_AUTOVAC
4960: 55 55 4d 5f 49 4e 43 52 3b 0a 20 20 69 20 3d 20  UUM_INCR;.  i = 
4970: 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 29 3b 0a  sqlite3Atoi(z);.
4980: 20 20 72 65 74 75 72 6e 20 28 75 38 29 28 28 69    return (u8)((i
4990: 3e 3d 30 26 26 69 3c 3d 32 29 3f 69 3a 30 29 3b  >=0&&i<=2)?i:0);
49a0: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 69 66 6e  .}.#endif /* ifn
49b0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
49c0: 41 55 54 4f 56 41 43 55 55 4d 20 2a 2f 0a 0a 23  AUTOVACUUM */..#
49d0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
49e0: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
49f0: 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  ./*.** Interpret
4a00: 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e   the given strin
4a10: 67 20 61 73 20 61 20 74 65 6d 70 20 64 62 20 6c  g as a temp db l
4a20: 6f 63 61 74 69 6f 6e 2e 20 52 65 74 75 72 6e 20  ocation. Return 
4a30: 31 20 66 6f 72 20 66 69 6c 65 0a 2a 2a 20 62 61  1 for file.** ba
4a40: 63 6b 65 64 20 74 65 6d 70 6f 72 61 72 79 20 64  cked temporary d
4a50: 61 74 61 62 61 73 65 73 2c 20 32 20 66 6f 72 20  atabases, 2 for 
4a60: 74 68 65 20 52 65 64 2d 42 6c 61 63 6b 20 74 72  the Red-Black tr
4a70: 65 65 20 69 6e 20 6d 65 6d 6f 72 79 20 64 61 74  ee in memory dat
4a80: 61 62 61 73 65 0a 2a 2a 20 61 6e 64 20 30 20 74  abase.** and 0 t
4a90: 6f 20 75 73 65 20 74 68 65 20 63 6f 6d 70 69 6c  o use the compil
4aa0: 65 2d 74 69 6d 65 20 64 65 66 61 75 6c 74 2e 0a  e-time default..
4ab0: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 67 65  */.static int ge
4ac0: 74 54 65 6d 70 53 74 6f 72 65 28 63 6f 6e 73 74  tTempStore(const
4ad0: 20 63 68 61 72 20 2a 7a 29 7b 0a 20 20 69 66 28   char *z){.  if(
4ae0: 20 7a 5b 30 5d 3e 3d 27 30 27 20 26 26 20 7a 5b   z[0]>='0' && z[
4af0: 30 5d 3c 3d 27 32 27 20 29 7b 0a 20 20 20 20 72  0]<='2' ){.    r
4b00: 65 74 75 72 6e 20 7a 5b 30 5d 20 2d 20 27 30 27  eturn z[0] - '0'
4b10: 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71  ;.  }else if( sq
4b20: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
4b30: 22 66 69 6c 65 22 29 3d 3d 30 20 29 7b 0a 20 20  "file")==0 ){.  
4b40: 20 20 72 65 74 75 72 6e 20 31 3b 0a 20 20 7d 65    return 1;.  }e
4b50: 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53  lse if( sqlite3S
4b60: 74 72 49 43 6d 70 28 7a 2c 20 22 6d 65 6d 6f 72  trICmp(z, "memor
4b70: 79 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20 72 65  y")==0 ){.    re
4b80: 74 75 72 6e 20 32 3b 0a 20 20 7d 65 6c 73 65 7b  turn 2;.  }else{
4b90: 0a 20 20 20 20 72 65 74 75 72 6e 20 30 3b 0a 20  .    return 0;. 
4ba0: 20 7d 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53   }.}.#endif /* S
4bb0: 51 4c 49 54 45 5f 50 41 47 45 52 5f 50 52 41 47  QLITE_PAGER_PRAG
4bc0: 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  MAS */..#ifndef 
4bd0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
4be0: 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20  R_PRAGMAS./*.** 
4bf0: 49 6e 76 61 6c 69 64 61 74 65 20 74 65 6d 70 20  Invalidate temp 
4c00: 73 74 6f 72 61 67 65 2c 20 65 69 74 68 65 72 20  storage, either 
4c10: 77 68 65 6e 20 74 68 65 20 74 65 6d 70 20 73 74  when the temp st
4c20: 6f 72 61 67 65 20 69 73 20 63 68 61 6e 67 65 64  orage is changed
4c30: 0a 2a 2a 20 66 72 6f 6d 20 64 65 66 61 75 6c 74  .** from default
4c40: 2c 20 6f 72 20 77 68 65 6e 20 27 66 69 6c 65 27  , or when 'file'
4c50: 20 61 6e 64 20 74 68 65 20 74 65 6d 70 5f 73 74   and the temp_st
4c60: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 20 68 61  ore_directory ha
4c70: 73 20 63 68 61 6e 67 65 64 0a 2a 2f 0a 73 74 61  s changed.*/.sta
4c80: 74 69 63 20 69 6e 74 20 69 6e 76 61 6c 69 64 61  tic int invalida
4c90: 74 65 54 65 6d 70 53 74 6f 72 61 67 65 28 50 61  teTempStorage(Pa
4ca0: 72 73 65 20 2a 70 50 61 72 73 65 29 7b 0a 20 20  rse *pParse){.  
4cb0: 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 50  sqlite3 *db = pP
4cc0: 61 72 73 65 2d 3e 64 62 3b 0a 20 20 69 66 28 20  arse->db;.  if( 
4cd0: 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 21 3d  db->aDb[1].pBt!=
4ce0: 30 20 29 7b 0a 20 20 20 20 69 66 28 20 21 64 62  0 ){.    if( !db
4cf0: 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 7c 7c 20  ->autoCommit || 
4d00: 73 71 6c 69 74 65 33 42 74 72 65 65 49 73 49 6e  sqlite3BtreeIsIn
4d10: 52 65 61 64 54 72 61 6e 73 28 64 62 2d 3e 61 44  ReadTrans(db->aD
4d20: 62 5b 31 5d 2e 70 42 74 29 20 29 7b 0a 20 20 20  b[1].pBt) ){.   
4d30: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d     sqlite3ErrorM
4d40: 73 67 28 70 50 61 72 73 65 2c 20 22 74 65 6d 70  sg(pParse, "temp
4d50: 6f 72 61 72 79 20 73 74 6f 72 61 67 65 20 63 61  orary storage ca
4d60: 6e 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20  nnot be changed 
4d70: 22 0a 20 20 20 20 20 20 20 20 22 66 72 6f 6d 20  ".        "from 
4d80: 77 69 74 68 69 6e 20 61 20 74 72 61 6e 73 61 63  within a transac
4d90: 74 69 6f 6e 22 29 3b 0a 20 20 20 20 20 20 72 65  tion");.      re
4da0: 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52 52 4f  turn SQLITE_ERRO
4db0: 52 3b 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c  R;.    }.    sql
4dc0: 69 74 65 33 42 74 72 65 65 43 6c 6f 73 65 28 64  ite3BtreeClose(d
4dd0: 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 29 3b 0a  b->aDb[1].pBt);.
4de0: 20 20 20 20 64 62 2d 3e 61 44 62 5b 31 5d 2e 70      db->aDb[1].p
4df0: 42 74 20 3d 20 30 3b 0a 20 20 20 20 73 71 6c 69  Bt = 0;.    sqli
4e00: 74 65 33 52 65 73 65 74 41 6c 6c 53 63 68 65 6d  te3ResetAllSchem
4e10: 61 73 4f 66 43 6f 6e 6e 65 63 74 69 6f 6e 28 64  asOfConnection(d
4e20: 62 29 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72 6e  b);.  }.  return
4e30: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65   SQLITE_OK;.}.#e
4e40: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 50  ndif /* SQLITE_P
4e50: 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a  AGER_PRAGMAS */.
4e60: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
4e70: 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
4e80: 41 53 0a 2f 2a 0a 2a 2a 20 49 66 20 74 68 65 20  AS./*.** If the 
4e90: 54 45 4d 50 20 64 61 74 61 62 61 73 65 20 69 73  TEMP database is
4ea0: 20 6f 70 65 6e 2c 20 63 6c 6f 73 65 20 69 74 20   open, close it 
4eb0: 61 6e 64 20 6d 61 72 6b 20 74 68 65 20 64 61 74  and mark the dat
4ec0: 61 62 61 73 65 20 73 63 68 65 6d 61 0a 2a 2a 20  abase schema.** 
4ed0: 61 73 20 6e 65 65 64 69 6e 67 20 72 65 6c 6f 61  as needing reloa
4ee0: 64 69 6e 67 2e 20 20 54 68 69 73 20 6d 75 73 74  ding.  This must
4ef0: 20 62 65 20 64 6f 6e 65 20 77 68 65 6e 20 75 73   be done when us
4f00: 69 6e 67 20 74 68 65 20 53 51 4c 49 54 45 5f 54  ing the SQLITE_T
4f10: 45 4d 50 5f 53 54 4f 52 45 0a 2a 2a 20 6f 72 20  EMP_STORE.** or 
4f20: 44 45 46 41 55 4c 54 5f 54 45 4d 50 5f 53 54 4f  DEFAULT_TEMP_STO
4f30: 52 45 20 70 72 61 67 6d 61 73 2e 0a 2a 2f 0a 73  RE pragmas..*/.s
4f40: 74 61 74 69 63 20 69 6e 74 20 63 68 61 6e 67 65  tatic int change
4f50: 54 65 6d 70 53 74 6f 72 61 67 65 28 50 61 72 73  TempStorage(Pars
4f60: 65 20 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74  e *pParse, const
4f70: 20 63 68 61 72 20 2a 7a 53 74 6f 72 61 67 65 54   char *zStorageT
4f80: 79 70 65 29 7b 0a 20 20 69 6e 74 20 74 73 20 3d  ype){.  int ts =
4f90: 20 67 65 74 54 65 6d 70 53 74 6f 72 65 28 7a 53   getTempStore(zS
4fa0: 74 6f 72 61 67 65 54 79 70 65 29 3b 0a 20 20 73  torageType);.  s
4fb0: 71 6c 69 74 65 33 20 2a 64 62 20 3d 20 70 50 61  qlite3 *db = pPa
4fc0: 72 73 65 2d 3e 64 62 3b 0a 20 20 69 66 28 20 64  rse->db;.  if( d
4fd0: 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3d 3d 74  b->temp_store==t
4fe0: 73 20 29 20 72 65 74 75 72 6e 20 53 51 4c 49 54  s ) return SQLIT
4ff0: 45 5f 4f 4b 3b 0a 20 20 69 66 28 20 69 6e 76 61  E_OK;.  if( inva
5000: 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67  lidateTempStorag
5010: 65 28 20 70 50 61 72 73 65 20 29 20 21 3d 20 53  e( pParse ) != S
5020: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
5030: 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 45 52  return SQLITE_ER
5040: 52 4f 52 3b 0a 20 20 7d 0a 20 20 64 62 2d 3e 74  ROR;.  }.  db->t
5050: 65 6d 70 5f 73 74 6f 72 65 20 3d 20 28 75 38 29  emp_store = (u8)
5060: 74 73 3b 0a 20 20 72 65 74 75 72 6e 20 53 51 4c  ts;.  return SQL
5070: 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66  ITE_OK;.}.#endif
5080: 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41 47 45 52   /* SQLITE_PAGER
5090: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 2f 2a 0a  _PRAGMAS */../*.
50a0: 2a 2a 20 47 65 6e 65 72 61 74 65 20 63 6f 64 65  ** Generate code
50b0: 20 74 6f 20 72 65 74 75 72 6e 20 61 20 73 69 6e   to return a sin
50c0: 67 6c 65 20 69 6e 74 65 67 65 72 20 76 61 6c 75  gle integer valu
50d0: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 76 6f 69  e..*/.static voi
50e0: 64 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e  d returnSingleIn
50f0: 74 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c  t(Parse *pParse,
5100: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4c 61   const char *zLa
5110: 62 65 6c 2c 20 69 36 34 20 76 61 6c 75 65 29 7b  bel, i64 value){
5120: 0a 20 20 56 64 62 65 20 2a 76 20 3d 20 73 71 6c  .  Vdbe *v = sql
5130: 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72  ite3GetVdbe(pPar
5140: 73 65 29 3b 0a 20 20 69 6e 74 20 6d 65 6d 20 3d  se);.  int mem =
5150: 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b   ++pParse->nMem;
5160: 0a 20 20 69 36 34 20 2a 70 49 36 34 20 3d 20 73  .  i64 *pI64 = s
5170: 71 6c 69 74 65 33 44 62 4d 61 6c 6c 6f 63 52 61  qlite3DbMallocRa
5180: 77 28 70 50 61 72 73 65 2d 3e 64 62 2c 20 73 69  w(pParse->db, si
5190: 7a 65 6f 66 28 76 61 6c 75 65 29 29 3b 0a 20 20  zeof(value));.  
51a0: 69 66 28 20 70 49 36 34 20 29 7b 0a 20 20 20 20  if( pI64 ){.    
51b0: 6d 65 6d 63 70 79 28 70 49 36 34 2c 20 26 76 61  memcpy(pI64, &va
51c0: 6c 75 65 2c 20 73 69 7a 65 6f 66 28 76 61 6c 75  lue, sizeof(valu
51d0: 65 29 29 3b 0a 20 20 7d 0a 20 20 73 71 6c 69 74  e));.  }.  sqlit
51e0: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
51f0: 4f 50 5f 49 6e 74 36 34 2c 20 30 2c 20 6d 65 6d  OP_Int64, 0, mem
5200: 2c 20 30 2c 20 28 63 68 61 72 2a 29 70 49 36 34  , 0, (char*)pI64
5210: 2c 20 50 34 5f 49 4e 54 36 34 29 3b 0a 20 20 73  , P4_INT64);.  s
5220: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
5230: 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 73 71  Cols(v, 1);.  sq
5240: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
5250: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
5260: 45 5f 4e 41 4d 45 2c 20 7a 4c 61 62 65 6c 2c 20  E_NAME, zLabel, 
5270: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
5280: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
5290: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
52a0: 52 6f 77 2c 20 6d 65 6d 2c 20 31 29 3b 0a 7d 0a  Row, mem, 1);.}.
52b0: 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20 74 68 65 20  ../*.** Set the 
52c0: 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 61 6e 64  safety_level and
52d0: 20 70 61 67 65 72 20 66 6c 61 67 73 20 66 6f 72   pager flags for
52e0: 20 70 61 67 65 72 20 69 44 62 2e 20 20 4f 72 20   pager iDb.  Or 
52f0: 69 66 20 69 44 62 3c 30 0a 2a 2a 20 73 65 74 20  if iDb<0.** set 
5300: 74 68 65 73 65 20 76 61 6c 75 65 73 20 66 6f 72  these values for
5310: 20 61 6c 6c 20 70 61 67 65 72 73 2e 0a 2a 2f 0a   all pagers..*/.
5320: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
5330: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
5340: 53 0a 73 74 61 74 69 63 20 76 6f 69 64 20 73 65  S.static void se
5350: 74 41 6c 6c 50 61 67 65 72 46 6c 61 67 73 28 73  tAllPagerFlags(s
5360: 71 6c 69 74 65 33 20 2a 64 62 29 7b 0a 20 20 69  qlite3 *db){.  i
5370: 66 28 20 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  f( db->autoCommi
5380: 74 20 29 7b 0a 20 20 20 20 44 62 20 2a 70 44 62  t ){.    Db *pDb
5390: 20 3d 20 64 62 2d 3e 61 44 62 3b 0a 20 20 20 20   = db->aDb;.    
53a0: 69 6e 74 20 6e 20 3d 20 64 62 2d 3e 6e 44 62 3b  int n = db->nDb;
53b0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 53 51 4c  .    assert( SQL
53c0: 49 54 45 5f 46 75 6c 6c 46 53 79 6e 63 3d 3d 50  ITE_FullFSync==P
53d0: 41 47 45 52 5f 46 55 4c 4c 46 53 59 4e 43 20 29  AGER_FULLFSYNC )
53e0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 53 51  ;.    assert( SQ
53f0: 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c 46 53 79  LITE_CkptFullFSy
5400: 6e 63 3d 3d 50 41 47 45 52 5f 43 4b 50 54 5f 46  nc==PAGER_CKPT_F
5410: 55 4c 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20 20  ULLFSYNC );.    
5420: 61 73 73 65 72 74 28 20 53 51 4c 49 54 45 5f 43  assert( SQLITE_C
5430: 61 63 68 65 53 70 69 6c 6c 3d 3d 50 41 47 45 52  acheSpill==PAGER
5440: 5f 43 41 43 48 45 53 50 49 4c 4c 20 29 3b 0a 20  _CACHESPILL );. 
5450: 20 20 20 61 73 73 65 72 74 28 20 28 50 41 47 45     assert( (PAGE
5460: 52 5f 46 55 4c 4c 46 53 59 4e 43 20 7c 20 50 41  R_FULLFSYNC | PA
5470: 47 45 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59  GER_CKPT_FULLFSY
5480: 4e 43 20 7c 20 50 41 47 45 52 5f 43 41 43 48 45  NC | PAGER_CACHE
5490: 53 50 49 4c 4c 29 0a 20 20 20 20 20 20 20 20 20  SPILL).         
54a0: 20 20 20 20 3d 3d 20 20 50 41 47 45 52 5f 46 4c      ==  PAGER_FL
54b0: 41 47 53 5f 4d 41 53 4b 20 29 3b 0a 20 20 20 20  AGS_MASK );.    
54c0: 77 68 69 6c 65 28 20 28 6e 2d 2d 29 20 3e 20 30  while( (n--) > 0
54d0: 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 70 44   ){.      if( pD
54e0: 62 2d 3e 70 42 74 20 29 7b 0a 20 20 20 20 20 20  b->pBt ){.      
54f0: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65    sqlite3BtreeSe
5500: 74 50 61 67 65 72 46 6c 61 67 73 28 70 44 62 2d  tPagerFlags(pDb-
5510: 3e 70 42 74 2c 0a 20 20 20 20 20 20 20 20 20 20  >pBt,.          
5520: 20 20 20 20 20 20 20 28 70 44 62 2d 3e 73 61 66         (pDb->saf
5530: 65 74 79 5f 6c 65 76 65 6c 20 26 20 50 41 47 45  ety_level & PAGE
5540: 52 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 5f 4d 41  R_SYNCHRONOUS_MA
5550: 53 4b 29 0a 20 20 20 20 20 20 20 20 20 20 20 20  SK).            
5560: 20 20 20 20 20 20 20 7c 20 28 64 62 2d 3e 66 6c         | (db->fl
5570: 61 67 73 20 26 20 50 41 47 45 52 5f 46 4c 41 47  ags & PAGER_FLAG
5580: 53 5f 4d 41 53 4b 29 20 29 3b 0a 20 20 20 20 20  S_MASK) );.     
5590: 20 7d 0a 20 20 20 20 20 20 70 44 62 2b 2b 3b 0a   }.      pDb++;.
55a0: 20 20 20 20 7d 0a 20 20 7d 0a 7d 0a 23 65 6c 73      }.  }.}.#els
55b0: 65 0a 23 20 64 65 66 69 6e 65 20 73 65 74 41 6c  e.# define setAl
55c0: 6c 50 61 67 65 72 46 6c 61 67 73 28 58 29 20 20  lPagerFlags(X)  
55d0: 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f 0a 23 65 6e 64  /* no-op */.#end
55e0: 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 52 65 74 75 72  if.../*.** Retur
55f0: 6e 20 61 20 68 75 6d 61 6e 2d 72 65 61 64 61 62  n a human-readab
5600: 6c 65 20 6e 61 6d 65 20 66 6f 72 20 61 20 63 6f  le name for a co
5610: 6e 73 74 72 61 69 6e 74 20 72 65 73 6f 6c 75 74  nstraint resolut
5620: 69 6f 6e 20 61 63 74 69 6f 6e 2e 0a 2a 2f 0a 23  ion action..*/.#
5630: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
5640: 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 73  IT_FOREIGN_KEY.s
5650: 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72  tatic const char
5660: 20 2a 61 63 74 69 6f 6e 4e 61 6d 65 28 75 38 20   *actionName(u8 
5670: 61 63 74 69 6f 6e 29 7b 0a 20 20 63 6f 6e 73 74  action){.  const
5680: 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20   char *zName;.  
5690: 73 77 69 74 63 68 28 20 61 63 74 69 6f 6e 20 29  switch( action )
56a0: 7b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 53 65  {.    case OE_Se
56b0: 74 4e 75 6c 6c 3a 20 20 7a 4e 61 6d 65 20 3d 20  tNull:  zName = 
56c0: 22 53 45 54 20 4e 55 4c 4c 22 3b 20 20 20 20 20  "SET NULL";     
56d0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
56e0: 73 65 20 4f 45 5f 53 65 74 44 66 6c 74 3a 20 20  se OE_SetDflt:  
56f0: 7a 4e 61 6d 65 20 3d 20 22 53 45 54 20 44 45 46  zName = "SET DEF
5700: 41 55 4c 54 22 3b 20 20 20 20 20 62 72 65 61 6b  AULT";     break
5710: 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 43 61  ;.    case OE_Ca
5720: 73 63 61 64 65 3a 20 20 7a 4e 61 6d 65 20 3d 20  scade:  zName = 
5730: 22 43 41 53 43 41 44 45 22 3b 20 20 20 20 20 20  "CASCADE";      
5740: 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61     break;.    ca
5750: 73 65 20 4f 45 5f 52 65 73 74 72 69 63 74 3a 20  se OE_Restrict: 
5760: 7a 4e 61 6d 65 20 3d 20 22 52 45 53 54 52 49 43  zName = "RESTRIC
5770: 54 22 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b  T";        break
5780: 3b 0a 20 20 20 20 64 65 66 61 75 6c 74 3a 20 20  ;.    default:  
5790: 20 20 20 20 20 20 20 20 7a 4e 61 6d 65 20 3d 20          zName = 
57a0: 22 4e 4f 20 41 43 54 49 4f 4e 22 3b 20 20 0a 20  "NO ACTION";  . 
57b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
57c0: 20 20 20 20 20 61 73 73 65 72 74 28 20 61 63 74       assert( act
57d0: 69 6f 6e 3d 3d 4f 45 5f 4e 6f 6e 65 20 29 3b 20  ion==OE_None ); 
57e0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 72 65 74  break;.  }.  ret
57f0: 75 72 6e 20 7a 4e 61 6d 65 3b 0a 7d 0a 23 65 6e  urn zName;.}.#en
5800: 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20 50 61 72 61  dif.../*.** Para
5810: 6d 65 74 65 72 20 65 4d 6f 64 65 20 6d 75 73 74  meter eMode must
5820: 20 62 65 20 6f 6e 65 20 6f 66 20 74 68 65 20 50   be one of the P
5830: 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
5840: 5f 58 58 58 20 63 6f 6e 73 74 61 6e 74 73 0a 2a  _XXX constants.*
5850: 2a 20 64 65 66 69 6e 65 64 20 69 6e 20 70 61 67  * defined in pag
5860: 65 72 2e 68 2e 20 54 68 69 73 20 66 75 6e 63 74  er.h. This funct
5870: 69 6f 6e 20 72 65 74 75 72 6e 73 20 74 68 65 20  ion returns the 
5880: 61 73 73 6f 63 69 61 74 65 64 20 6c 6f 77 65 72  associated lower
5890: 63 61 73 65 0a 2a 2a 20 6a 6f 75 72 6e 61 6c 2d  case.** journal-
58a0: 6d 6f 64 65 20 6e 61 6d 65 2e 0a 2a 2f 0a 63 6f  mode name..*/.co
58b0: 6e 73 74 20 63 68 61 72 20 2a 73 71 6c 69 74 65  nst char *sqlite
58c0: 33 4a 6f 75 72 6e 61 6c 4d 6f 64 65 6e 61 6d 65  3JournalModename
58d0: 28 69 6e 74 20 65 4d 6f 64 65 29 7b 0a 20 20 73  (int eMode){.  s
58e0: 74 61 74 69 63 20 63 68 61 72 20 2a 20 63 6f 6e  tatic char * con
58f0: 73 74 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b 5d 20  st azModeName[] 
5900: 3d 20 7b 0a 20 20 20 20 22 64 65 6c 65 74 65 22  = {.    "delete"
5910: 2c 20 22 70 65 72 73 69 73 74 22 2c 20 22 6f 66  , "persist", "of
5920: 66 22 2c 20 22 74 72 75 6e 63 61 74 65 22 2c 20  f", "truncate", 
5930: 22 6d 65 6d 6f 72 79 22 0a 23 69 66 6e 64 65 66  "memory".#ifndef
5940: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41 4c   SQLITE_OMIT_WAL
5950: 0a 20 20 20 20 20 2c 20 22 77 61 6c 22 0a 23 65  .     , "wal".#e
5960: 6e 64 69 66 0a 20 20 7d 3b 0a 20 20 61 73 73 65  ndif.  };.  asse
5970: 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  rt( PAGER_JOURNA
5980: 4c 4d 4f 44 45 5f 44 45 4c 45 54 45 3d 3d 30 20  LMODE_DELETE==0 
5990: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47  );.  assert( PAG
59a0: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 50  ER_JOURNALMODE_P
59b0: 45 52 53 49 53 54 3d 3d 31 20 29 3b 0a 20 20 61  ERSIST==1 );.  a
59c0: 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55  ssert( PAGER_JOU
59d0: 52 4e 41 4c 4d 4f 44 45 5f 4f 46 46 3d 3d 32 20  RNALMODE_OFF==2 
59e0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47  );.  assert( PAG
59f0: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 54  ER_JOURNALMODE_T
5a00: 52 55 4e 43 41 54 45 3d 3d 33 20 29 3b 0a 20 20  RUNCATE==3 );.  
5a10: 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f  assert( PAGER_JO
5a20: 55 52 4e 41 4c 4d 4f 44 45 5f 4d 45 4d 4f 52 59  URNALMODE_MEMORY
5a30: 3d 3d 34 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==4 );.  assert(
5a40: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
5a50: 44 45 5f 57 41 4c 3d 3d 35 20 29 3b 0a 20 20 61  DE_WAL==5 );.  a
5a60: 73 73 65 72 74 28 20 65 4d 6f 64 65 3e 3d 30 20  ssert( eMode>=0 
5a70: 26 26 20 65 4d 6f 64 65 3c 3d 41 72 72 61 79 53  && eMode<=ArrayS
5a80: 69 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29 20  ize(azModeName) 
5a90: 29 3b 0a 0a 20 20 69 66 28 20 65 4d 6f 64 65 3d  );..  if( eMode=
5aa0: 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 4d 6f 64  =ArraySize(azMod
5ab0: 65 4e 61 6d 65 29 20 29 20 72 65 74 75 72 6e 20  eName) ) return 
5ac0: 30 3b 0a 20 20 72 65 74 75 72 6e 20 61 7a 4d 6f  0;.  return azMo
5ad0: 64 65 4e 61 6d 65 5b 65 4d 6f 64 65 5d 3b 0a 7d  deName[eMode];.}
5ae0: 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f 63 65 73 73 20  ../*.** Process 
5af0: 61 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d 65  a pragma stateme
5b00: 6e 74 2e 20 20 0a 2a 2a 0a 2a 2a 20 50 72 61 67  nt.  .**.** Prag
5b10: 6d 61 73 20 61 72 65 20 6f 66 20 74 68 69 73 20  mas are of this 
5b20: 66 6f 72 6d 3a 0a 2a 2a 0a 2a 2a 20 20 20 20 20  form:.**.**     
5b30: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
5b40: 65 2e 5d 69 64 20 5b 3d 20 76 61 6c 75 65 5d 0a  e.]id [= value].
5b50: 2a 2a 0a 2a 2a 20 54 68 65 20 69 64 65 6e 74 69  **.** The identi
5b60: 66 69 65 72 20 6d 69 67 68 74 20 61 6c 73 6f 20  fier might also 
5b70: 62 65 20 61 20 73 74 72 69 6e 67 2e 20 20 54 68  be a string.  Th
5b80: 65 20 76 61 6c 75 65 20 69 73 20 61 20 73 74 72  e value is a str
5b90: 69 6e 67 2c 20 61 6e 64 0a 2a 2a 20 69 64 65 6e  ing, and.** iden
5ba0: 74 69 66 69 65 72 2c 20 6f 72 20 61 20 6e 75 6d  tifier, or a num
5bb0: 62 65 72 2e 20 20 49 66 20 6d 69 6e 75 73 46 6c  ber.  If minusFl
5bc0: 61 67 20 69 73 20 74 72 75 65 2c 20 74 68 65 6e  ag is true, then
5bd0: 20 74 68 65 20 76 61 6c 75 65 20 69 73 0a 2a 2a   the value is.**
5be0: 20 61 20 6e 75 6d 62 65 72 20 74 68 61 74 20 77   a number that w
5bf0: 61 73 20 70 72 65 63 65 64 65 64 20 62 79 20 61  as preceded by a
5c00: 20 6d 69 6e 75 73 20 73 69 67 6e 2e 0a 2a 2a 0a   minus sign..**.
5c10: 2a 2a 20 49 66 20 74 68 65 20 6c 65 66 74 20 73  ** If the left s
5c20: 69 64 65 20 69 73 20 22 64 61 74 61 62 61 73 65  ide is "database
5c30: 2e 69 64 22 20 74 68 65 6e 20 70 49 64 31 20 69  .id" then pId1 i
5c40: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 6e  s the database n
5c50: 61 6d 65 0a 2a 2a 20 61 6e 64 20 70 49 64 32 20  ame.** and pId2 
5c60: 69 73 20 74 68 65 20 69 64 2e 20 20 49 66 20 74  is the id.  If t
5c70: 68 65 20 6c 65 66 74 20 73 69 64 65 20 69 73 20  he left side is 
5c80: 6a 75 73 74 20 22 69 64 22 20 74 68 65 6e 20 70  just "id" then p
5c90: 49 64 31 20 69 73 20 74 68 65 0a 2a 2a 20 69 64  Id1 is the.** id
5ca0: 20 61 6e 64 20 70 49 64 32 20 69 73 20 61 6e 79   and pId2 is any
5cb0: 20 65 6d 70 74 79 20 73 74 72 69 6e 67 2e 0a 2a   empty string..*
5cc0: 2f 0a 76 6f 69 64 20 73 71 6c 69 74 65 33 50 72  /.void sqlite3Pr
5cd0: 61 67 6d 61 28 0a 20 20 50 61 72 73 65 20 2a 70  agma(.  Parse *p
5ce0: 50 61 72 73 65 2c 20 0a 20 20 54 6f 6b 65 6e 20  Parse, .  Token 
5cf0: 2a 70 49 64 31 2c 20 20 20 20 20 20 20 20 2f 2a  *pId1,        /*
5d00: 20 46 69 72 73 74 20 70 61 72 74 20 6f 66 20 5b   First part of [
5d10: 64 61 74 61 62 61 73 65 2e 5d 69 64 20 66 69 65  database.]id fie
5d20: 6c 64 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70  ld */.  Token *p
5d30: 49 64 32 2c 20 20 20 20 20 20 20 20 2f 2a 20 53  Id2,        /* S
5d40: 65 63 6f 6e 64 20 70 61 72 74 20 6f 66 20 5b 64  econd part of [d
5d50: 61 74 61 62 61 73 65 2e 5d 69 64 20 66 69 65 6c  atabase.]id fiel
5d60: 64 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  d, or NULL */.  
5d70: 54 6f 6b 65 6e 20 2a 70 56 61 6c 75 65 2c 20 20  Token *pValue,  
5d80: 20 20 20 20 2f 2a 20 54 6f 6b 65 6e 20 66 6f 72      /* Token for
5d90: 20 3c 76 61 6c 75 65 3e 2c 20 6f 72 20 4e 55 4c   <value>, or NUL
5da0: 4c 20 2a 2f 0a 20 20 69 6e 74 20 6d 69 6e 75 73  L */.  int minus
5db0: 46 6c 61 67 20 20 20 20 20 20 20 2f 2a 20 54 72  Flag       /* Tr
5dc0: 75 65 20 69 66 20 61 20 27 2d 27 20 73 69 67 6e  ue if a '-' sign
5dd0: 20 70 72 65 63 65 64 65 64 20 3c 76 61 6c 75 65   preceded <value
5de0: 3e 20 2a 2f 0a 29 7b 0a 20 20 63 68 61 72 20 2a  > */.){.  char *
5df0: 7a 4c 65 66 74 20 3d 20 30 3b 20 20 20 20 20 20  zLeft = 0;      
5e00: 20 2f 2a 20 4e 75 6c 2d 74 65 72 6d 69 6e 61 74   /* Nul-terminat
5e10: 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20  ed UTF-8 string 
5e20: 3c 69 64 3e 20 2a 2f 0a 20 20 63 68 61 72 20 2a  <id> */.  char *
5e30: 7a 52 69 67 68 74 20 3d 20 30 3b 20 20 20 20 20  zRight = 0;     
5e40: 20 2f 2a 20 4e 75 6c 2d 74 65 72 6d 69 6e 61 74   /* Nul-terminat
5e50: 65 64 20 55 54 46 2d 38 20 73 74 72 69 6e 67 20  ed UTF-8 string 
5e60: 3c 76 61 6c 75 65 3e 2c 20 6f 72 20 4e 55 4c 4c  <value>, or NULL
5e70: 20 2a 2f 0a 20 20 63 6f 6e 73 74 20 63 68 61 72   */.  const char
5e80: 20 2a 7a 44 62 20 3d 20 30 3b 20 20 20 2f 2a 20   *zDb = 0;   /* 
5e90: 54 68 65 20 64 61 74 61 62 61 73 65 20 6e 61 6d  The database nam
5ea0: 65 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 49  e */.  Token *pI
5eb0: 64 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  d;            /*
5ec0: 20 50 6f 69 6e 74 65 72 20 74 6f 20 3c 69 64 3e   Pointer to <id>
5ed0: 20 74 6f 6b 65 6e 20 2a 2f 0a 20 20 63 68 61 72   token */.  char
5ee0: 20 2a 61 46 63 6e 74 6c 5b 34 5d 3b 20 20 20 20   *aFcntl[4];    
5ef0: 20 20 20 2f 2a 20 41 72 67 75 6d 65 6e 74 20 74     /* Argument t
5f00: 6f 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50  o SQLITE_FCNTL_P
5f10: 52 41 47 4d 41 20 2a 2f 0a 20 20 69 6e 74 20 69  RAGMA */.  int i
5f20: 44 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  Db;             
5f30: 20 20 2f 2a 20 44 61 74 61 62 61 73 65 20 69 6e    /* Database in
5f40: 64 65 78 20 66 6f 72 20 3c 64 61 74 61 62 61 73  dex for <databas
5f50: 65 3e 20 2a 2f 0a 20 20 69 6e 74 20 6c 77 72 2c  e> */.  int lwr,
5f60: 20 75 70 72 2c 20 6d 69 64 3b 20 20 20 20 20 20   upr, mid;      
5f70: 20 20 20 20 20 2f 2a 20 42 69 6e 61 72 79 20 73       /* Binary s
5f80: 65 61 72 63 68 20 62 6f 75 6e 64 73 20 2a 2f 0a  earch bounds */.
5f90: 20 20 69 6e 74 20 72 63 3b 20 20 20 20 20 20 20    int rc;       
5fa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f                 /
5fb0: 2a 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 66  * return value f
5fc0: 6f 72 6d 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c  orm SQLITE_FCNTL
5fd0: 5f 50 52 41 47 4d 41 20 2a 2f 0a 20 20 73 71 6c  _PRAGMA */.  sql
5fe0: 69 74 65 33 20 2a 64 62 20 3d 20 70 50 61 72 73  ite3 *db = pPars
5ff0: 65 2d 3e 64 62 3b 20 20 20 20 2f 2a 20 54 68 65  e->db;    /* The
6000: 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
6010: 74 69 6f 6e 20 2a 2f 0a 20 20 44 62 20 2a 70 44  tion */.  Db *pD
6020: 62 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  b;              
6030: 20 20 20 20 20 20 20 2f 2a 20 54 68 65 20 73 70         /* The sp
6040: 65 63 69 66 69 63 20 64 61 74 61 62 61 73 65 20  ecific database 
6050: 62 65 69 6e 67 20 70 72 61 67 6d 61 65 64 20 2a  being pragmaed *
6060: 2f 0a 20 20 56 64 62 65 20 2a 76 20 3d 20 73 71  /.  Vdbe *v = sq
6070: 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61  lite3GetVdbe(pPa
6080: 72 73 65 29 3b 20 20 2f 2a 20 50 72 65 70 61 72  rse);  /* Prepar
6090: 65 64 20 73 74 61 74 65 6d 65 6e 74 20 2a 2f 0a  ed statement */.
60a0: 0a 20 20 69 66 28 20 76 3d 3d 30 20 29 20 72 65  .  if( v==0 ) re
60b0: 74 75 72 6e 3b 0a 20 20 73 71 6c 69 74 65 33 56  turn;.  sqlite3V
60c0: 64 62 65 52 75 6e 4f 6e 6c 79 4f 6e 63 65 28 76  dbeRunOnlyOnce(v
60d0: 29 3b 0a 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  );.  pParse->nMe
60e0: 6d 20 3d 20 32 3b 0a 0a 20 20 2f 2a 20 49 6e 74  m = 2;..  /* Int
60f0: 65 72 70 72 65 74 20 74 68 65 20 5b 64 61 74 61  erpret the [data
6100: 62 61 73 65 2e 5d 20 70 61 72 74 20 6f 66 20 74  base.] part of t
6110: 68 65 20 70 72 61 67 6d 61 20 73 74 61 74 65 6d  he pragma statem
6120: 65 6e 74 2e 20 69 44 62 20 69 73 20 74 68 65 0a  ent. iDb is the.
6130: 20 20 2a 2a 20 69 6e 64 65 78 20 6f 66 20 74 68    ** index of th
6140: 65 20 64 61 74 61 62 61 73 65 20 74 68 69 73 20  e database this 
6150: 70 72 61 67 6d 61 20 69 73 20 62 65 69 6e 67 20  pragma is being 
6160: 61 70 70 6c 69 65 64 20 74 6f 20 69 6e 20 64 62  applied to in db
6170: 2e 61 44 62 5b 5d 2e 20 2a 2f 0a 20 20 69 44 62  .aDb[]. */.  iDb
6180: 20 3d 20 73 71 6c 69 74 65 33 54 77 6f 50 61 72   = sqlite3TwoPar
6190: 74 4e 61 6d 65 28 70 50 61 72 73 65 2c 20 70 49  tName(pParse, pI
61a0: 64 31 2c 20 70 49 64 32 2c 20 26 70 49 64 29 3b  d1, pId2, &pId);
61b0: 0a 20 20 69 66 28 20 69 44 62 3c 30 20 29 20 72  .  if( iDb<0 ) r
61c0: 65 74 75 72 6e 3b 0a 20 20 70 44 62 20 3d 20 26  eturn;.  pDb = &
61d0: 64 62 2d 3e 61 44 62 5b 69 44 62 5d 3b 0a 0a 20  db->aDb[iDb];.. 
61e0: 20 2f 2a 20 49 66 20 74 68 65 20 74 65 6d 70 20   /* If the temp 
61f0: 64 61 74 61 62 61 73 65 20 68 61 73 20 62 65 65  database has bee
6200: 6e 20 65 78 70 6c 69 63 69 74 6c 79 20 6e 61 6d  n explicitly nam
6210: 65 64 20 61 73 20 70 61 72 74 20 6f 66 20 74 68  ed as part of th
6220: 65 20 0a 20 20 2a 2a 20 70 72 61 67 6d 61 2c 20  e .  ** pragma, 
6230: 6d 61 6b 65 20 73 75 72 65 20 69 74 20 69 73 20  make sure it is 
6240: 6f 70 65 6e 2e 20 0a 20 20 2a 2f 0a 20 20 69 66  open. .  */.  if
6250: 28 20 69 44 62 3d 3d 31 20 26 26 20 73 71 6c 69  ( iDb==1 && sqli
6260: 74 65 33 4f 70 65 6e 54 65 6d 70 44 61 74 61 62  te3OpenTempDatab
6270: 61 73 65 28 70 50 61 72 73 65 29 20 29 7b 0a 20  ase(pParse) ){. 
6280: 20 20 20 72 65 74 75 72 6e 3b 0a 20 20 7d 0a 0a     return;.  }..
6290: 20 20 7a 4c 65 66 74 20 3d 20 73 71 6c 69 74 65    zLeft = sqlite
62a0: 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64  3NameFromToken(d
62b0: 62 2c 20 70 49 64 29 3b 0a 20 20 69 66 28 20 21  b, pId);.  if( !
62c0: 7a 4c 65 66 74 20 29 20 72 65 74 75 72 6e 3b 0a  zLeft ) return;.
62d0: 20 20 69 66 28 20 6d 69 6e 75 73 46 6c 61 67 20    if( minusFlag 
62e0: 29 7b 0a 20 20 20 20 7a 52 69 67 68 74 20 3d 20  ){.    zRight = 
62f0: 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64  sqlite3MPrintf(d
6300: 62 2c 20 22 2d 25 54 22 2c 20 70 56 61 6c 75 65  b, "-%T", pValue
6310: 29 3b 0a 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  );.  }else{.    
6320: 7a 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65 33  zRight = sqlite3
6330: 4e 61 6d 65 46 72 6f 6d 54 6f 6b 65 6e 28 64 62  NameFromToken(db
6340: 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d 0a 0a  , pValue);.  }..
6350: 20 20 61 73 73 65 72 74 28 20 70 49 64 32 20 29    assert( pId2 )
6360: 3b 0a 20 20 7a 44 62 20 3d 20 70 49 64 32 2d 3e  ;.  zDb = pId2->
6370: 6e 3e 30 20 3f 20 70 44 62 2d 3e 7a 4e 61 6d 65  n>0 ? pDb->zName
6380: 20 3a 20 30 3b 0a 20 20 69 66 28 20 73 71 6c 69   : 0;.  if( sqli
6390: 74 65 33 41 75 74 68 43 68 65 63 6b 28 70 50 61  te3AuthCheck(pPa
63a0: 72 73 65 2c 20 53 51 4c 49 54 45 5f 50 52 41 47  rse, SQLITE_PRAG
63b0: 4d 41 2c 20 7a 4c 65 66 74 2c 20 7a 52 69 67 68  MA, zLeft, zRigh
63c0: 74 2c 20 7a 44 62 29 20 29 7b 0a 20 20 20 20 67  t, zDb) ){.    g
63d0: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
63e0: 20 20 7d 0a 0a 20 20 2f 2a 20 53 65 6e 64 20 61    }..  /* Send a
63f0: 6e 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50  n SQLITE_FCNTL_P
6400: 52 41 47 4d 41 20 66 69 6c 65 2d 63 6f 6e 74 72  RAGMA file-contr
6410: 6f 6c 20 74 6f 20 74 68 65 20 75 6e 64 65 72 6c  ol to the underl
6420: 79 69 6e 67 20 56 46 53 0a 20 20 2a 2a 20 63 6f  ying VFS.  ** co
6430: 6e 6e 65 63 74 69 6f 6e 2e 20 20 49 66 20 69 74  nnection.  If it
6440: 20 72 65 74 75 72 6e 73 20 53 51 4c 49 54 45 5f   returns SQLITE_
6450: 4f 4b 2c 20 74 68 65 6e 20 61 73 73 75 6d 65 20  OK, then assume 
6460: 74 68 61 74 20 74 68 65 20 56 46 53 0a 20 20 2a  that the VFS.  *
6470: 2a 20 68 61 6e 64 6c 65 64 20 74 68 65 20 70 72  * handled the pr
6480: 61 67 6d 61 20 61 6e 64 20 67 65 6e 65 72 61 74  agma and generat
6490: 65 20 61 20 6e 6f 2d 6f 70 20 70 72 65 70 61 72  e a no-op prepar
64a0: 65 64 20 73 74 61 74 65 6d 65 6e 74 2e 0a 20 20  ed statement..  
64b0: 2a 2f 0a 20 20 61 46 63 6e 74 6c 5b 30 5d 20 3d  */.  aFcntl[0] =
64c0: 20 30 3b 0a 20 20 61 46 63 6e 74 6c 5b 31 5d 20   0;.  aFcntl[1] 
64d0: 3d 20 7a 4c 65 66 74 3b 0a 20 20 61 46 63 6e 74  = zLeft;.  aFcnt
64e0: 6c 5b 32 5d 20 3d 20 7a 52 69 67 68 74 3b 0a 20  l[2] = zRight;. 
64f0: 20 61 46 63 6e 74 6c 5b 33 5d 20 3d 20 30 3b 0a   aFcntl[3] = 0;.
6500: 20 20 64 62 2d 3e 62 75 73 79 48 61 6e 64 6c 65    db->busyHandle
6510: 72 2e 6e 42 75 73 79 20 3d 20 30 3b 0a 20 20 72  r.nBusy = 0;.  r
6520: 63 20 3d 20 73 71 6c 69 74 65 33 5f 66 69 6c 65  c = sqlite3_file
6530: 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 7a 44 62  _control(db, zDb
6540: 2c 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 50  , SQLITE_FCNTL_P
6550: 52 41 47 4d 41 2c 20 28 76 6f 69 64 2a 29 61 46  RAGMA, (void*)aF
6560: 63 6e 74 6c 29 3b 0a 20 20 69 66 28 20 72 63 3d  cntl);.  if( rc=
6570: 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
6580: 20 20 69 66 28 20 61 46 63 6e 74 6c 5b 30 5d 20    if( aFcntl[0] 
6590: 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 6d 65 6d  ){.      int mem
65a0: 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65   = ++pParse->nMe
65b0: 6d 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  m;.      sqlite3
65c0: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
65d0: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 6d 65 6d  _String8, 0, mem
65e0: 2c 20 30 2c 20 61 46 63 6e 74 6c 5b 30 5d 2c 20  , 0, aFcntl[0], 
65f0: 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0);.      sqlite
6600: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
6610: 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  v, 1);.      sql
6620: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
6630: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
6640: 5f 4e 41 4d 45 2c 20 22 72 65 73 75 6c 74 22 2c  _NAME, "result",
6650: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
6660: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
6670: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
6680: 65 73 75 6c 74 52 6f 77 2c 20 6d 65 6d 2c 20 31  esultRow, mem, 1
6690: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
66a0: 5f 66 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d 29  _free(aFcntl[0])
66b0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 67 6f 74 6f  ;.    }.    goto
66c0: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d   pragma_out;.  }
66d0: 0a 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54  .  if( rc!=SQLIT
66e0: 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a 20 20  E_NOTFOUND ){.  
66f0: 20 20 69 66 28 20 61 46 63 6e 74 6c 5b 30 5d 20    if( aFcntl[0] 
6700: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
6710: 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c  ErrorMsg(pParse,
6720: 20 22 25 73 22 2c 20 61 46 63 6e 74 6c 5b 30 5d   "%s", aFcntl[0]
6730: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
6740: 5f 66 72 65 65 28 61 46 63 6e 74 6c 5b 30 5d 29  _free(aFcntl[0])
6750: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 70 50 61 72  ;.    }.    pPar
6760: 73 65 2d 3e 6e 45 72 72 2b 2b 3b 0a 20 20 20 20  se->nErr++;.    
6770: 70 50 61 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b  pParse->rc = rc;
6780: 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61  .    goto pragma
6790: 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _out;.  }..  /* 
67a0: 4c 6f 63 61 74 65 20 74 68 65 20 70 72 61 67 6d  Locate the pragm
67b0: 61 20 69 6e 20 74 68 65 20 6c 6f 6f 6b 75 70 20  a in the lookup 
67c0: 74 61 62 6c 65 20 2a 2f 0a 20 20 6c 77 72 20 3d  table */.  lwr =
67d0: 20 30 3b 0a 20 20 75 70 72 20 3d 20 41 72 72 61   0;.  upr = Arra
67e0: 79 53 69 7a 65 28 61 50 72 61 67 6d 61 4e 61 6d  ySize(aPragmaNam
67f0: 65 73 29 2d 31 3b 0a 20 20 77 68 69 6c 65 28 20  es)-1;.  while( 
6800: 6c 77 72 3c 3d 75 70 72 20 29 7b 0a 20 20 20 20  lwr<=upr ){.    
6810: 6d 69 64 20 3d 20 28 6c 77 72 2b 75 70 72 29 2f  mid = (lwr+upr)/
6820: 32 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69  2;.    rc = sqli
6830: 74 65 33 5f 73 74 72 69 63 6d 70 28 7a 4c 65 66  te3_stricmp(zLef
6840: 74 2c 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b  t, aPragmaNames[
6850: 6d 69 64 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20  mid].zName);.   
6860: 20 69 66 28 20 72 63 3d 3d 30 20 29 20 62 72 65   if( rc==0 ) bre
6870: 61 6b 3b 0a 20 20 20 20 69 66 28 20 72 63 3c 30  ak;.    if( rc<0
6880: 20 29 7b 0a 20 20 20 20 20 20 75 70 72 20 3d 20   ){.      upr = 
6890: 6d 69 64 20 2d 20 31 3b 0a 20 20 20 20 7d 65 6c  mid - 1;.    }el
68a0: 73 65 7b 0a 20 20 20 20 20 20 6c 77 72 20 3d 20  se{.      lwr = 
68b0: 6d 69 64 20 2b 20 31 3b 0a 20 20 20 20 7d 0a 20  mid + 1;.    }. 
68c0: 20 7d 0a 20 20 69 66 28 20 6c 77 72 3e 75 70 72   }.  if( lwr>upr
68d0: 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f   ) goto pragma_o
68e0: 75 74 3b 0a 0a 20 20 2f 2a 20 4d 61 6b 65 20 73  ut;..  /* Make s
68f0: 75 72 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ure the database
6900: 20 73 63 68 65 6d 61 20 69 73 20 6c 6f 61 64 65   schema is loade
6910: 64 20 69 66 20 74 68 65 20 70 72 61 67 6d 61 20  d if the pragma 
6920: 72 65 71 75 69 72 65 73 20 74 68 61 74 20 2a 2f  requires that */
6930: 0a 20 20 69 66 28 20 28 61 50 72 61 67 6d 61 4e  .  if( (aPragmaN
6940: 61 6d 65 73 5b 6d 69 64 5d 2e 6d 50 72 61 67 46  ames[mid].mPragF
6950: 6c 61 67 20 26 20 50 72 61 67 46 6c 61 67 5f 4e  lag & PragFlag_N
6960: 65 65 64 53 63 68 65 6d 61 29 21 3d 30 20 29 7b  eedSchema)!=0 ){
6970: 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
6980: 52 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73  ReadSchema(pPars
6990: 65 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61  e) ) goto pragma
69a0: 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _out;.  }..  /* 
69b0: 4a 75 6d 70 20 74 6f 20 74 68 65 20 61 70 70 72  Jump to the appr
69c0: 6f 70 72 69 61 74 65 20 70 72 61 67 6d 61 20 68  opriate pragma h
69d0: 61 6e 64 6c 65 72 20 2a 2f 0a 20 20 73 77 69 74  andler */.  swit
69e0: 63 68 28 20 61 50 72 61 67 6d 61 4e 61 6d 65 73  ch( aPragmaNames
69f0: 5b 6d 69 64 5d 2e 65 50 72 61 67 54 79 70 20 29  [mid].ePragTyp )
6a00: 7b 0a 20 20 0a 23 69 66 20 21 64 65 66 69 6e 65  {.  .#if !define
6a10: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  d(SQLITE_OMIT_PA
6a20: 47 45 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20  GER_PRAGMAS) && 
6a30: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
6a40: 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 29  OMIT_DEPRECATED)
6a50: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
6a60: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 64 65  MA [database.]de
6a70: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
6a80: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
6a90: 61 74 61 62 61 73 65 2e 5d 64 65 66 61 75 6c 74  atabase.]default
6aa0: 5f 63 61 63 68 65 5f 73 69 7a 65 3d 4e 0a 20 20  _cache_size=N.  
6ab0: 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73  **.  ** The firs
6ac0: 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74  t form reports t
6ad0: 68 65 20 63 75 72 72 65 6e 74 20 70 65 72 73 69  he current persi
6ae0: 73 74 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f  stent setting fo
6af0: 72 20 74 68 65 0a 20 20 2a 2a 20 70 61 67 65 20  r the.  ** page 
6b00: 63 61 63 68 65 20 73 69 7a 65 2e 20 20 54 68 65  cache size.  The
6b10: 20 76 61 6c 75 65 20 72 65 74 75 72 6e 65 64 20   value returned 
6b20: 69 73 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e  is the maximum n
6b30: 75 6d 62 65 72 20 6f 66 0a 20 20 2a 2a 20 70 61  umber of.  ** pa
6b40: 67 65 73 20 69 6e 20 74 68 65 20 70 61 67 65 20  ges in the page 
6b50: 63 61 63 68 65 2e 20 20 54 68 65 20 73 65 63 6f  cache.  The seco
6b60: 6e 64 20 66 6f 72 6d 20 73 65 74 73 20 62 6f 74  nd form sets bot
6b70: 68 20 74 68 65 20 63 75 72 72 65 6e 74 0a 20 20  h the current.  
6b80: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69  ** page cache si
6b90: 7a 65 20 76 61 6c 75 65 20 61 6e 64 20 74 68 65  ze value and the
6ba0: 20 70 65 72 73 69 73 74 65 6e 74 20 70 61 67 65   persistent page
6bb0: 20 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75   cache size valu
6bc0: 65 0a 20 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e  e.  ** stored in
6bd0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
6be0: 6c 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4f 6c  le..  **.  ** Ol
6bf0: 64 65 72 20 76 65 72 73 69 6f 6e 73 20 6f 66 20  der versions of 
6c00: 53 51 4c 69 74 65 20 77 6f 75 6c 64 20 73 65 74  SQLite would set
6c10: 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 61 63   the default cac
6c20: 68 65 20 73 69 7a 65 20 74 6f 20 61 0a 20 20 2a  he size to a.  *
6c30: 2a 20 6e 65 67 61 74 69 76 65 20 6e 75 6d 62 65  * negative numbe
6c40: 72 20 74 6f 20 69 6e 64 69 63 61 74 65 20 73 79  r to indicate sy
6c50: 6e 63 68 72 6f 6e 6f 75 73 3d 4f 46 46 2e 20 20  nchronous=OFF.  
6c60: 54 68 65 73 65 20 64 61 79 73 2c 20 73 79 6e 63  These days, sync
6c70: 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20 69 73 20  hronous.  ** is 
6c80: 61 6c 77 61 79 73 20 6f 6e 20 62 79 20 64 65 66  always on by def
6c90: 61 75 6c 74 20 72 65 67 61 72 64 6c 65 73 73 20  ault regardless 
6ca0: 6f 66 20 74 68 65 20 73 69 67 6e 20 6f 66 20 74  of the sign of t
6cb0: 68 65 20 64 65 66 61 75 6c 74 20 63 61 63 68 65  he default cache
6cc0: 0a 20 20 2a 2a 20 73 69 7a 65 2e 20 20 42 75 74  .  ** size.  But
6cd0: 20 63 6f 6e 74 69 6e 75 65 20 74 6f 20 74 61 6b   continue to tak
6ce0: 65 20 74 68 65 20 61 62 73 6f 6c 75 74 65 20 76  e the absolute v
6cf0: 61 6c 75 65 20 6f 66 20 74 68 65 20 64 65 66 61  alue of the defa
6d00: 75 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73  ult cache.  ** s
6d10: 69 7a 65 20 6f 66 20 68 69 73 74 6f 72 69 63 61  ize of historica
6d20: 6c 20 63 6f 6d 70 61 74 69 62 69 6c 69 74 79 2e  l compatibility.
6d30: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
6d40: 67 54 79 70 5f 44 45 46 41 55 4c 54 5f 43 41 43  gTyp_DEFAULT_CAC
6d50: 48 45 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 73  HE_SIZE: {.    s
6d60: 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74 20  tatic const int 
6d70: 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46 46 53 45  iLn = VDBE_OFFSE
6d80: 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20 20 20  T_LINENO(2);.   
6d90: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64   static const Vd
6da0: 62 65 4f 70 4c 69 73 74 20 67 65 74 43 61 63 68  beOpList getCach
6db0: 65 53 69 7a 65 5b 5d 20 3d 20 7b 0a 20 20 20 20  eSize[] = {.    
6dc0: 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69    { OP_Transacti
6dd0: 6f 6e 2c 20 30 2c 20 30 2c 20 20 20 20 20 20 20  on, 0, 0,       
6de0: 20 30 7d 2c 20 20 20 20 20 20 20 20 20 20 20 20   0},            
6df0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
6e00: 30 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f  0 */.      { OP_
6e10: 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 30 2c 20  ReadCookie,  0, 
6e20: 31 2c 20 20 20 20 20 20 20 20 42 54 52 45 45 5f  1,        BTREE_
6e30: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
6e40: 5a 45 7d 2c 20 20 2f 2a 20 31 20 2a 2f 0a 20 20  ZE},  /* 1 */.  
6e50: 20 20 20 20 7b 20 4f 50 5f 49 66 50 6f 73 2c 20      { OP_IfPos, 
6e60: 20 20 20 20 20 20 31 2c 20 38 2c 20 20 20 20 20        1, 8,     
6e70: 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     0},.      { O
6e80: 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20 30  P_Integer,     0
6e90: 2c 20 32 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a  , 2,        0},.
6ea0: 20 20 20 20 20 20 7b 20 4f 50 5f 53 75 62 74 72        { OP_Subtr
6eb0: 61 63 74 2c 20 20 20 20 31 2c 20 32 2c 20 20 20  act,    1, 2,   
6ec0: 20 20 20 20 20 31 7d 2c 0a 20 20 20 20 20 20 7b       1},.      {
6ed0: 20 4f 50 5f 49 66 50 6f 73 2c 20 20 20 20 20 20   OP_IfPos,      
6ee0: 20 31 2c 20 38 2c 20 20 20 20 20 20 20 20 30 7d   1, 8,        0}
6ef0: 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74  ,.      { OP_Int
6f00: 65 67 65 72 2c 20 20 20 20 20 30 2c 20 31 2c 20  eger,     0, 1, 
6f10: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 20 20         0},      
6f20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6f30: 20 20 20 2f 2a 20 36 20 2a 2f 0a 20 20 20 20 20     /* 6 */.     
6f40: 20 7b 20 4f 50 5f 4e 6f 6f 70 2c 20 20 20 20 20   { OP_Noop,     
6f50: 20 20 20 30 2c 20 30 2c 20 20 20 20 20 20 20 20     0, 0,        
6f60: 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52  0},.      { OP_R
6f70: 65 73 75 6c 74 52 6f 77 2c 20 20 20 31 2c 20 31  esultRow,   1, 1
6f80: 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20  ,        0},.   
6f90: 20 7d 3b 0a 20 20 20 20 69 6e 74 20 61 64 64 72   };.    int addr
6fa0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
6fb0: 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 44  eUsesBtree(v, iD
6fc0: 62 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69  b);.    if( !zRi
6fd0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
6fe0: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
6ff0: 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20  ls(v, 1);.      
7000: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
7010: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
7020: 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 61 63 68 65  AME_NAME, "cache
7030: 5f 73 69 7a 65 22 2c 20 53 51 4c 49 54 45 5f 53  _size", SQLITE_S
7040: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 70 50  TATIC);.      pP
7050: 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 32 3b  arse->nMem += 2;
7060: 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71  .      addr = sq
7070: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69  lite3VdbeAddOpLi
7080: 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
7090: 67 65 74 43 61 63 68 65 53 69 7a 65 29 2c 20 67  getCacheSize), g
70a0: 65 74 43 61 63 68 65 53 69 7a 65 2c 69 4c 6e 29  etCacheSize,iLn)
70b0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
70c0: 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61  dbeChangeP1(v, a
70d0: 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  ddr, iDb);.     
70e0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
70f0: 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c 20  geP1(v, addr+1, 
7100: 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
7110: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
7120: 76 2c 20 61 64 64 72 2b 36 2c 20 53 51 4c 49 54  v, addr+6, SQLIT
7130: 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f  E_DEFAULT_CACHE_
7140: 53 49 5a 45 29 3b 0a 20 20 20 20 7d 65 6c 73 65  SIZE);.    }else
7150: 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65  {.      int size
7160: 20 3d 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74   = sqlite3AbsInt
7170: 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  32(sqlite3Atoi(z
7180: 52 69 67 68 74 29 29 3b 0a 20 20 20 20 20 20 73  Right));.      s
7190: 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65  qlite3BeginWrite
71a0: 4f 70 65 72 61 74 69 6f 6e 28 70 50 61 72 73 65  Operation(pParse
71b0: 2c 20 30 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  , 0, iDb);.     
71c0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
71d0: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
71e0: 2c 20 73 69 7a 65 2c 20 31 29 3b 0a 20 20 20 20  , size, 1);.    
71f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
7200: 4f 70 33 28 76 2c 20 4f 50 5f 53 65 74 43 6f 6f  Op3(v, OP_SetCoo
7210: 6b 69 65 2c 20 69 44 62 2c 20 42 54 52 45 45 5f  kie, iDb, BTREE_
7220: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
7230: 5a 45 2c 20 31 29 3b 0a 20 20 20 20 20 20 61 73  ZE, 1);.      as
7240: 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
7250: 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
7260: 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20   iDb, 0) );.    
7270: 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
7280: 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a  cache_size = siz
7290: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
72a0: 42 74 72 65 65 53 65 74 43 61 63 68 65 53 69 7a  BtreeSetCacheSiz
72b0: 65 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d  e(pDb->pBt, pDb-
72c0: 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f  >pSchema->cache_
72d0: 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20  size);.    }.   
72e0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
72f0: 69 66 20 2f 2a 20 21 53 51 4c 49 54 45 5f 4f 4d  if /* !SQLITE_OM
7300: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
7310: 20 26 26 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54   && !SQLITE_OMIT
7320: 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a  _DEPRECATED */..
7330: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
7340: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
7350: 52 41 47 4d 41 53 29 0a 20 20 2f 2a 0a 20 20 2a  RAGMAS).  /*.  *
7360: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
7370: 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65 0a 20  ase.]page_size. 
7380: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
7390: 61 62 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65  abase.]page_size
73a0: 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  =N.  **.  ** The
73b0: 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f   first form repo
73c0: 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
73d0: 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a  setting for the.
73e0: 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61    ** database pa
73f0: 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73  ge size in bytes
7400: 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  .  The second fo
7410: 72 6d 20 73 65 74 73 20 74 68 65 0a 20 20 2a 2a  rm sets the.  **
7420: 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73   database page s
7430: 69 7a 65 20 76 61 6c 75 65 2e 20 20 54 68 65 20  ize value.  The 
7440: 76 61 6c 75 65 20 63 61 6e 20 6f 6e 6c 79 20 62  value can only b
7450: 65 20 73 65 74 20 69 66 0a 20 20 2a 2a 20 74 68  e set if.  ** th
7460: 65 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e  e database has n
7470: 6f 74 20 79 65 74 20 62 65 65 6e 20 63 72 65 61  ot yet been crea
7480: 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ted..  */.  case
7490: 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 53 49   PragTyp_PAGE_SI
74a0: 5a 45 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20  ZE: {.    Btree 
74b0: 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b  *pBt = pDb->pBt;
74c0: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74  .    assert( pBt
74d0: 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21  !=0 );.    if( !
74e0: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
74f0: 69 6e 74 20 73 69 7a 65 20 3d 20 41 4c 57 41 59  int size = ALWAY
7500: 53 28 70 42 74 29 20 3f 20 73 71 6c 69 74 65 33  S(pBt) ? sqlite3
7510: 42 74 72 65 65 47 65 74 50 61 67 65 53 69 7a 65  BtreeGetPageSize
7520: 28 70 42 74 29 20 3a 20 30 3b 0a 20 20 20 20 20  (pBt) : 0;.     
7530: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
7540: 28 70 50 61 72 73 65 2c 20 22 70 61 67 65 5f 73  (pParse, "page_s
7550: 69 7a 65 22 2c 20 73 69 7a 65 29 3b 0a 20 20 20  ize", size);.   
7560: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a   }else{.      /*
7570: 20 4d 61 6c 6c 6f 63 20 6d 61 79 20 66 61 69 6c   Malloc may fail
7580: 20 77 68 65 6e 20 73 65 74 74 69 6e 67 20 74 68   when setting th
7590: 65 20 70 61 67 65 2d 73 69 7a 65 2c 20 61 73 20  e page-size, as 
75a0: 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65  there is an inte
75b0: 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 62 75  rnal.      ** bu
75c0: 66 66 65 72 20 74 68 61 74 20 74 68 65 20 70 61  ffer that the pa
75d0: 67 65 72 20 6d 6f 64 75 6c 65 20 72 65 73 69 7a  ger module resiz
75e0: 65 73 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  es using sqlite3
75f0: 5f 72 65 61 6c 6c 6f 63 28 29 2e 0a 20 20 20 20  _realloc()..    
7600: 20 20 2a 2f 0a 20 20 20 20 20 20 64 62 2d 3e 6e    */.      db->n
7610: 65 78 74 50 61 67 65 73 69 7a 65 20 3d 20 73 71  extPagesize = sq
7620: 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74  lite3Atoi(zRight
7630: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 53 51 4c  );.      if( SQL
7640: 49 54 45 5f 4e 4f 4d 45 4d 3d 3d 73 71 6c 69 74  ITE_NOMEM==sqlit
7650: 65 33 42 74 72 65 65 53 65 74 50 61 67 65 53 69  e3BtreeSetPageSi
7660: 7a 65 28 70 42 74 2c 20 64 62 2d 3e 6e 65 78 74  ze(pBt, db->next
7670: 50 61 67 65 73 69 7a 65 2c 2d 31 2c 30 29 20 29  Pagesize,-1,0) )
7680: 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6d 61  {.        db->ma
7690: 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
76a0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
76b0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
76c0: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
76d0: 5b 64 61 74 61 62 61 73 65 2e 5d 73 65 63 75 72  [database.]secur
76e0: 65 5f 64 65 6c 65 74 65 0a 20 20 2a 2a 20 20 50  e_delete.  **  P
76f0: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
7700: 5d 73 65 63 75 72 65 5f 64 65 6c 65 74 65 3d 4f  ]secure_delete=O
7710: 4e 2f 4f 46 46 0a 20 20 2a 2a 0a 20 20 2a 2a 20  N/OFF.  **.  ** 
7720: 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72  The first form r
7730: 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65  eports the curre
7740: 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74  nt setting for t
7750: 68 65 0a 20 20 2a 2a 20 73 65 63 75 72 65 5f 64  he.  ** secure_d
7760: 65 6c 65 74 65 20 66 6c 61 67 2e 20 20 54 68 65  elete flag.  The
7770: 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 63 68 61   second form cha
7780: 6e 67 65 73 20 74 68 65 20 73 65 63 75 72 65 5f  nges the secure_
7790: 64 65 6c 65 74 65 0a 20 20 2a 2a 20 66 6c 61 67  delete.  ** flag
77a0: 20 73 65 74 74 69 6e 67 20 61 6e 64 20 72 65 70   setting and rep
77b0: 6f 72 74 73 20 74 68 65 6e 65 77 20 76 61 6c 75  orts thenew valu
77c0: 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  e..  */.  case P
77d0: 72 61 67 54 79 70 5f 53 45 43 55 52 45 5f 44 45  ragTyp_SECURE_DE
77e0: 4c 45 54 45 3a 20 7b 0a 20 20 20 20 42 74 72 65  LETE: {.    Btre
77f0: 65 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42  e *pBt = pDb->pB
7800: 74 3b 0a 20 20 20 20 69 6e 74 20 62 20 3d 20 2d  t;.    int b = -
7810: 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  1;.    assert( p
7820: 42 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28  Bt!=0 );.    if(
7830: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
7840: 20 62 20 3d 20 73 71 6c 69 74 65 33 47 65 74 42   b = sqlite3GetB
7850: 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30  oolean(zRight, 0
7860: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
7870: 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 62   pId2->n==0 && b
7880: 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  >=0 ){.      int
7890: 20 69 69 3b 0a 20 20 20 20 20 20 66 6f 72 28 69   ii;.      for(i
78a0: 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b  i=0; ii<db->nDb;
78b0: 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20   ii++){.        
78c0: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 63 75  sqlite3BtreeSecu
78d0: 72 65 44 65 6c 65 74 65 28 64 62 2d 3e 61 44 62  reDelete(db->aDb
78e0: 5b 69 69 5d 2e 70 42 74 2c 20 62 29 3b 0a 20 20  [ii].pBt, b);.  
78f0: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
7900: 62 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  b = sqlite3Btree
7910: 53 65 63 75 72 65 44 65 6c 65 74 65 28 70 42 74  SecureDelete(pBt
7920: 2c 20 62 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , b);.    return
7930: 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
7940: 2c 20 22 73 65 63 75 72 65 5f 64 65 6c 65 74 65  , "secure_delete
7950: 22 2c 20 62 29 3b 0a 20 20 20 20 62 72 65 61 6b  ", b);.    break
7960: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
7970: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
7980: 73 65 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75  se.]max_page_cou
7990: 6e 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  nt.  **  PRAGMA 
79a0: 5b 64 61 74 61 62 61 73 65 2e 5d 6d 61 78 5f 70  [database.]max_p
79b0: 61 67 65 5f 63 6f 75 6e 74 3d 4e 0a 20 20 2a 2a  age_count=N.  **
79c0: 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20  .  ** The first 
79d0: 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65  form reports the
79e0: 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67   current setting
79f0: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6d 61   for the.  ** ma
7a00: 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
7a10: 70 61 67 65 73 20 69 6e 20 74 68 65 20 64 61 74  pages in the dat
7a20: 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65  abase file.  The
7a30: 20 0a 20 20 2a 2a 20 73 65 63 6f 6e 64 20 66 6f   .  ** second fo
7a40: 72 6d 20 61 74 74 65 6d 70 74 73 20 74 6f 20 63  rm attempts to c
7a50: 68 61 6e 67 65 20 74 68 69 73 20 73 65 74 74 69  hange this setti
7a60: 6e 67 2e 20 20 42 6f 74 68 0a 20 20 2a 2a 20 66  ng.  Both.  ** f
7a70: 6f 72 6d 73 20 72 65 74 75 72 6e 20 74 68 65 20  orms return the 
7a80: 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67 2e  current setting.
7a90: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 61  .  **.  ** The a
7aa0: 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66  bsolute value of
7ab0: 20 4e 20 69 73 20 75 73 65 64 2e 20 20 54 68 69   N is used.  Thi
7ac0: 73 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65  s is undocumente
7ad0: 64 20 61 6e 64 20 6d 69 67 68 74 0a 20 20 2a 2a  d and might.  **
7ae0: 20 63 68 61 6e 67 65 2e 20 20 54 68 65 20 6f 6e   change.  The on
7af0: 6c 79 20 70 75 72 70 6f 73 65 20 69 73 20 74 6f  ly purpose is to
7b00: 20 70 72 6f 76 69 64 65 20 61 6e 20 65 61 73 79   provide an easy
7b10: 20 77 61 79 20 74 6f 20 74 65 73 74 0a 20 20 2a   way to test.  *
7b20: 2a 20 74 68 65 20 73 71 6c 69 74 65 33 41 62 73  * the sqlite3Abs
7b30: 49 6e 74 33 32 28 29 20 66 75 6e 63 74 69 6f 6e  Int32() function
7b40: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  **.  **  PRA
7b50: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 70  GMA [database.]p
7b60: 61 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a 0a 20  age_count.  **. 
7b70: 20 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e   ** Return the n
7b80: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
7b90: 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  n the specified 
7ba0: 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20  database..  */. 
7bb0: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 50 41   case PragTyp_PA
7bc0: 47 45 5f 43 4f 55 4e 54 3a 20 7b 0a 20 20 20 20  GE_COUNT: {.    
7bd0: 69 6e 74 20 69 52 65 67 3b 0a 20 20 20 20 73 71  int iReg;.    sq
7be0: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
7bf0: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44  chema(pParse, iD
7c00: 62 29 3b 0a 20 20 20 20 69 52 65 67 20 3d 20 2b  b);.    iReg = +
7c10: 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20  +pParse->nMem;. 
7c20: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 6f     if( sqlite3To
7c30: 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29 3d  lower(zLeft[0])=
7c40: 3d 27 70 27 20 29 7b 0a 20 20 20 20 20 20 73 71  ='p' ){.      sq
7c50: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
7c60: 76 2c 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 2c  v, OP_Pagecount,
7c70: 20 69 44 62 2c 20 69 52 65 67 29 3b 0a 20 20 20   iDb, iReg);.   
7c80: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71   }else{.      sq
7c90: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
7ca0: 76 2c 20 4f 50 5f 4d 61 78 50 67 63 6e 74 2c 20  v, OP_MaxPgcnt, 
7cb0: 69 44 62 2c 20 69 52 65 67 2c 20 0a 20 20 20 20  iDb, iReg, .    
7cc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7cd0: 20 20 20 20 73 71 6c 69 74 65 33 41 62 73 49 6e      sqlite3AbsIn
7ce0: 74 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28  t32(sqlite3Atoi(
7cf0: 7a 52 69 67 68 74 29 29 29 3b 0a 20 20 20 20 7d  zRight)));.    }
7d00: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
7d10: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
7d20: 75 6c 74 52 6f 77 2c 20 69 52 65 67 2c 20 31 29  ultRow, iReg, 1)
7d30: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
7d40: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
7d50: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
7d60: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
7d70: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
7d80: 20 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f 54   zLeft, SQLITE_T
7d90: 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 62  RANSIENT);.    b
7da0: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
7db0: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
7dc0: 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 69 6e 67 5f  tabase.]locking_
7dd0: 6d 6f 64 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d  mode.  **  PRAGM
7de0: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f 63  A [database.]loc
7df0: 6b 69 6e 67 5f 6d 6f 64 65 20 3d 20 28 6e 6f 72  king_mode = (nor
7e00: 6d 61 6c 7c 65 78 63 6c 75 73 69 76 65 29 0a 20  mal|exclusive). 
7e10: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
7e20: 79 70 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f 44 45 3a  yp_LOCKING_MODE:
7e30: 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61   {.    const cha
7e40: 72 20 2a 7a 52 65 74 20 3d 20 22 6e 6f 72 6d 61  r *zRet = "norma
7e50: 6c 22 3b 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64  l";.    int eMod
7e60: 65 20 3d 20 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f  e = getLockingMo
7e70: 64 65 28 7a 52 69 67 68 74 29 3b 0a 0a 20 20 20  de(zRight);..   
7e80: 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20   if( pId2->n==0 
7e90: 26 26 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f  && eMode==PAGER_
7ea0: 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 51 55 45 52  LOCKINGMODE_QUER
7eb0: 59 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 53 69  Y ){.      /* Si
7ec0: 6d 70 6c 65 20 22 50 52 41 47 4d 41 20 6c 6f 63  mple "PRAGMA loc
7ed0: 6b 69 6e 67 5f 6d 6f 64 65 3b 22 20 73 74 61 74  king_mode;" stat
7ee0: 65 6d 65 6e 74 2e 20 54 68 69 73 20 69 73 20 61  ement. This is a
7ef0: 20 71 75 65 72 79 20 66 6f 72 0a 20 20 20 20 20   query for.     
7f00: 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74 20   ** the current 
7f10: 64 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 20  default locking 
7f20: 6d 6f 64 65 20 28 77 68 69 63 68 20 6d 61 79 20  mode (which may 
7f30: 62 65 20 64 69 66 66 65 72 65 6e 74 20 74 6f 0a  be different to.
7f40: 20 20 20 20 20 20 2a 2a 20 74 68 65 20 6c 6f 63        ** the loc
7f50: 6b 69 6e 67 2d 6d 6f 64 65 20 6f 66 20 74 68 65  king-mode of the
7f60: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 29 2e   main database).
7f70: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
7f80: 65 4d 6f 64 65 20 3d 20 64 62 2d 3e 64 66 6c 74  eMode = db->dflt
7f90: 4c 6f 63 6b 4d 6f 64 65 3b 0a 20 20 20 20 7d 65  LockMode;.    }e
7fa0: 6c 73 65 7b 0a 20 20 20 20 20 20 50 61 67 65 72  lse{.      Pager
7fb0: 20 2a 70 50 61 67 65 72 3b 0a 20 20 20 20 20 20   *pPager;.      
7fc0: 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29  if( pId2->n==0 )
7fd0: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69  {.        /* Thi
7fe0: 73 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74  s indicates that
7ff0: 20 6e 6f 20 64 61 74 61 62 61 73 65 20 6e 61 6d   no database nam
8000: 65 20 77 61 73 20 73 70 65 63 69 66 69 65 64 20  e was specified 
8010: 61 73 20 70 61 72 74 0a 20 20 20 20 20 20 20 20  as part.        
8020: 2a 2a 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41  ** of the PRAGMA
8030: 20 63 6f 6d 6d 61 6e 64 2e 20 49 6e 20 74 68 69   command. In thi
8040: 73 20 63 61 73 65 20 74 68 65 20 6c 6f 63 6b 69  s case the locki
8050: 6e 67 2d 6d 6f 64 65 20 6d 75 73 74 20 62 65 0a  ng-mode must be.
8060: 20 20 20 20 20 20 20 20 2a 2a 20 73 65 74 20 6f          ** set o
8070: 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  n all attached d
8080: 61 74 61 62 61 73 65 73 2c 20 61 73 20 77 65 6c  atabases, as wel
8090: 6c 20 61 73 20 74 68 65 20 6d 61 69 6e 20 64 62  l as the main db
80a0: 20 66 69 6c 65 2e 0a 20 20 20 20 20 20 20 20 2a   file..        *
80b0: 2a 0a 20 20 20 20 20 20 20 20 2a 2a 20 41 6c 73  *.        ** Als
80c0: 6f 2c 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64  o, the sqlite3.d
80d0: 66 6c 74 4c 6f 63 6b 4d 6f 64 65 20 76 61 72 69  fltLockMode vari
80e0: 61 62 6c 65 20 69 73 20 73 65 74 20 73 6f 20 74  able is set so t
80f0: 68 61 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 61  hat.        ** a
8100: 6e 79 20 73 75 62 73 65 71 75 65 6e 74 6c 79 20  ny subsequently 
8110: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
8120: 65 73 20 61 6c 73 6f 20 75 73 65 20 74 68 65 20  es also use the 
8130: 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20  specified.      
8140: 20 20 2a 2a 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64    ** locking mod
8150: 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  e..        */.  
8160: 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20        int ii;.  
8170: 20 20 20 20 20 20 61 73 73 65 72 74 28 70 44 62        assert(pDb
8180: 3d 3d 26 64 62 2d 3e 61 44 62 5b 30 5d 29 3b 0a  ==&db->aDb[0]);.
8190: 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 32          for(ii=2
81a0: 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
81b0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  ++){.          p
81c0: 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42  Pager = sqlite3B
81d0: 74 72 65 65 50 61 67 65 72 28 64 62 2d 3e 61 44  treePager(db->aD
81e0: 62 5b 69 69 5d 2e 70 42 74 29 3b 0a 20 20 20 20  b[ii].pBt);.    
81f0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67        sqlite3Pag
8200: 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70 50  erLockingMode(pP
8210: 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20 20  ager, eMode);.  
8220: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
8230: 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65  db->dfltLockMode
8240: 20 3d 20 28 75 38 29 65 4d 6f 64 65 3b 0a 20 20   = (u8)eMode;.  
8250: 20 20 20 20 7d 0a 20 20 20 20 20 20 70 50 61 67      }.      pPag
8260: 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
8270: 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29  ePager(pDb->pBt)
8280: 3b 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20  ;.      eMode = 
8290: 73 71 6c 69 74 65 33 50 61 67 65 72 4c 6f 63 6b  sqlite3PagerLock
82a0: 69 6e 67 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  ingMode(pPager, 
82b0: 65 4d 6f 64 65 29 3b 0a 20 20 20 20 7d 0a 0a 20  eMode);.    }.. 
82c0: 20 20 20 61 73 73 65 72 74 28 20 65 4d 6f 64 65     assert( eMode
82d0: 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  ==PAGER_LOCKINGM
82e0: 4f 44 45 5f 4e 4f 52 4d 41 4c 0a 20 20 20 20 20  ODE_NORMAL.     
82f0: 20 20 20 20 20 20 20 7c 7c 20 65 4d 6f 64 65 3d         || eMode=
8300: 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f  =PAGER_LOCKINGMO
8310: 44 45 5f 45 58 43 4c 55 53 49 56 45 20 29 3b 0a  DE_EXCLUSIVE );.
8320: 20 20 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 50      if( eMode==P
8330: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
8340: 5f 45 58 43 4c 55 53 49 56 45 20 29 7b 0a 20 20  _EXCLUSIVE ){.  
8350: 20 20 20 20 7a 52 65 74 20 3d 20 22 65 78 63 6c      zRet = "excl
8360: 75 73 69 76 65 22 3b 0a 20 20 20 20 7d 0a 20 20  usive";.    }.  
8370: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
8380: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
8390: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
83a0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
83b0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6c 6f  OLNAME_NAME, "lo
83c0: 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c 20 53 51 4c  cking_mode", SQL
83d0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
83e0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
83f0: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
8400: 2c 20 30 2c 20 31 2c 20 30 2c 20 7a 52 65 74 2c  , 0, 1, 0, zRet,
8410: 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   0);.    sqlite3
8420: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
8430: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31  _ResultRow, 1, 1
8440: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
8450: 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  }..  /*.  **  PR
8460: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
8470: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20 2a  journal_mode.  *
8480: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
8490: 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  ase.]journal_mod
84a0: 65 20 3d 0a 20 20 2a 2a 20 20 20 20 20 20 20 20  e =.  **        
84b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64                (d
84c0: 65 6c 65 74 65 7c 70 65 72 73 69 73 74 7c 6f 66  elete|persist|of
84d0: 66 7c 74 72 75 6e 63 61 74 65 7c 6d 65 6d 6f 72  f|truncate|memor
84e0: 79 7c 77 61 6c 7c 6f 66 66 29 0a 20 20 2a 2f 0a  y|wal|off).  */.
84f0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4a    case PragTyp_J
8500: 4f 55 52 4e 41 4c 5f 4d 4f 44 45 3a 20 7b 0a 20  OURNAL_MODE: {. 
8510: 20 20 20 69 6e 74 20 65 4d 6f 64 65 3b 20 20 20     int eMode;   
8520: 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74       /* One of t
8530: 68 65 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  he PAGER_JOURNAL
8540: 4d 4f 44 45 5f 58 58 58 20 73 79 6d 62 6f 6c 73  MODE_XXX symbols
8550: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 69 3b 20   */.    int ii; 
8560: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
8570: 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 0a 20 20  p counter */..  
8580: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
8590: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
85a0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
85b0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
85c0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6a 6f  OLNAME_NAME, "jo
85d0: 75 72 6e 61 6c 5f 6d 6f 64 65 22 2c 20 53 51 4c  urnal_mode", SQL
85e0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20  ITE_STATIC);..  
85f0: 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20    if( zRight==0 
8600: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  ){.      /* If t
8610: 68 65 72 65 20 69 73 20 6e 6f 20 22 3d 4d 4f 44  here is no "=MOD
8620: 45 22 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  E" part of the p
8630: 72 61 67 6d 61 2c 20 64 6f 20 61 20 71 75 65 72  ragma, do a quer
8640: 79 20 66 6f 72 20 74 68 65 0a 20 20 20 20 20 20  y for the.      
8650: 2a 2a 20 63 75 72 72 65 6e 74 20 6d 6f 64 65 20  ** current mode 
8660: 2a 2f 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  */.      eMode =
8670: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
8680: 44 45 5f 51 55 45 52 59 3b 0a 20 20 20 20 7d 65  DE_QUERY;.    }e
8690: 6c 73 65 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74  lse{.      const
86a0: 20 63 68 61 72 20 2a 7a 4d 6f 64 65 3b 0a 20 20   char *zMode;.  
86b0: 20 20 20 20 69 6e 74 20 6e 20 3d 20 73 71 6c 69      int n = sqli
86c0: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67  te3Strlen30(zRig
86d0: 68 74 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 65  ht);.      for(e
86e0: 4d 6f 64 65 3d 30 3b 20 28 7a 4d 6f 64 65 20 3d  Mode=0; (zMode =
86f0: 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d   sqlite3JournalM
8700: 6f 64 65 6e 61 6d 65 28 65 4d 6f 64 65 29 29 21  odename(eMode))!
8710: 3d 30 3b 20 65 4d 6f 64 65 2b 2b 29 7b 0a 20 20  =0; eMode++){.  
8720: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
8730: 33 53 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74  3StrNICmp(zRight
8740: 2c 20 7a 4d 6f 64 65 2c 20 6e 29 3d 3d 30 20 29  , zMode, n)==0 )
8750: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
8760: 20 20 20 20 20 20 69 66 28 20 21 7a 4d 6f 64 65        if( !zMode
8770: 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49   ){.        /* I
8780: 66 20 74 68 65 20 22 3d 4d 4f 44 45 22 20 70 61  f the "=MODE" pa
8790: 72 74 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63  rt does not matc
87a0: 68 20 61 6e 79 20 6b 6e 6f 77 6e 20 6a 6f 75 72  h any known jour
87b0: 6e 61 6c 20 6d 6f 64 65 2c 0a 20 20 20 20 20 20  nal mode,.      
87c0: 20 20 2a 2a 20 74 68 65 6e 20 64 6f 20 61 20 71    ** then do a q
87d0: 75 65 72 79 20 2a 2f 0a 20 20 20 20 20 20 20 20  uery */.        
87e0: 65 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f  eMode = PAGER_JO
87f0: 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b  URNALMODE_QUERY;
8800: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
8810: 20 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 50 41     if( eMode==PA
8820: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
8830: 51 55 45 52 59 20 26 26 20 70 49 64 32 2d 3e 6e  QUERY && pId2->n
8840: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ==0 ){.      /* 
8850: 43 6f 6e 76 65 72 74 20 22 50 52 41 47 4d 41 20  Convert "PRAGMA 
8860: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 69 6e  journal_mode" in
8870: 74 6f 20 22 50 52 41 47 4d 41 20 6d 61 69 6e 2e  to "PRAGMA main.
8880: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 2a 2f  journal_mode" */
8890: 0a 20 20 20 20 20 20 69 44 62 20 3d 20 30 3b 0a  .      iDb = 0;.
88a0: 20 20 20 20 20 20 70 49 64 32 2d 3e 6e 20 3d 20        pId2->n = 
88b0: 31 3b 0a 20 20 20 20 7d 0a 23 69 66 64 65 66 20  1;.    }.#ifdef 
88c0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57  SQLITE_DEFAULT_W
88d0: 41 4c 5f 53 41 46 45 54 59 4c 45 56 45 4c 0a 20  AL_SAFETYLEVEL. 
88e0: 20 20 20 69 66 28 20 21 20 53 51 4c 49 54 45 5f     if( ! SQLITE_
88f0: 44 62 53 61 66 65 74 79 4c 65 76 65 6c 49 73 46  DbSafetyLevelIsF
8900: 69 78 65 64 28 70 44 62 2d 3e 73 61 66 65 74 79  ixed(pDb->safety
8910: 5f 6c 65 76 65 6c 29 20 29 7b 0a 20 20 20 20 20  _level) ){.     
8920: 20 69 66 28 20 65 4d 6f 64 65 20 3d 3d 20 50 41   if( eMode == PA
8930: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
8940: 57 41 4c 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  WAL ){.        /
8950: 2a 20 77 68 65 6e 20 65 6e 74 65 72 69 6e 67 20  * when entering 
8960: 77 61 6c 20 6d 6f 64 65 2c 20 69 6d 6d 65 64 69  wal mode, immedi
8970: 61 74 65 6c 79 20 73 77 69 74 63 68 20 74 68 65  ately switch the
8980: 20 73 61 66 65 74 79 5f 6c 65 76 65 6c 0a 20 20   safety_level.  
8990: 20 20 20 20 20 20 2a 2a 20 73 6f 20 74 68 61 74        ** so that
89a0: 20 61 20 71 75 65 72 79 20 74 6f 20 70 72 61 67   a query to prag
89b0: 6d 61 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 72  ma synchronous r
89c0: 65 74 75 72 6e 73 20 74 68 65 20 63 6f 72 72 65  eturns the corre
89d0: 63 74 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20  ct value */.    
89e0: 20 20 0a 20 20 20 20 20 20 20 20 70 44 62 2d 3e    .        pDb->
89f0: 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 53  safety_level = S
8a00: 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 57 41  QLITE_DEFAULT_WA
8a10: 4c 5f 53 41 46 45 54 59 4c 45 56 45 4c 3b 0a 20  L_SAFETYLEVEL;. 
8a20: 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20       }else{.    
8a30: 20 20 20 20 2f 2a 20 49 66 20 74 68 65 20 75 73      /* If the us
8a40: 65 72 20 68 61 73 6e 27 74 20 6f 76 65 72 72 69  er hasn't overri
8a50: 64 64 65 6e 20 74 68 65 20 73 79 6e 63 68 72 6f  dden the synchro
8a60: 6e 6f 75 73 20 73 65 74 74 69 6e 67 2c 20 75 73  nous setting, us
8a70: 65 20 74 68 65 20 0a 20 20 20 20 20 20 20 20 2a  e the .        *
8a80: 2a 20 64 65 66 61 75 6c 74 20 66 6f 72 20 6e 6f  * default for no
8a90: 6e 2d 77 61 6c 20 64 61 74 61 62 61 73 65 73 20  n-wal databases 
8aa0: 2a 2f 0a 20 20 20 20 20 20 20 20 70 44 62 2d 3e  */.        pDb->
8ab0: 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d 20 33  safety_level = 3
8ac0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
8ad0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
8ae0: 5f 44 45 46 41 55 4c 54 5f 57 41 4c 5f 53 41 46  _DEFAULT_WAL_SAF
8af0: 45 54 59 4c 45 56 45 4c 20 2a 2f 0a 20 20 20 20  ETYLEVEL */.    
8b00: 66 6f 72 28 69 69 3d 64 62 2d 3e 6e 44 62 2d 31  for(ii=db->nDb-1
8b10: 3b 20 69 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a  ; ii>=0; ii--){.
8b20: 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44        if( db->aD
8b30: 62 5b 69 69 5d 2e 70 42 74 20 26 26 20 28 69 69  b[ii].pBt && (ii
8b40: 3d 3d 69 44 62 20 7c 7c 20 70 49 64 32 2d 3e 6e  ==iDb || pId2->n
8b50: 3d 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20  ==0) ){.        
8b60: 73 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42  sqlite3VdbeUsesB
8b70: 74 72 65 65 28 76 2c 20 69 69 29 3b 0a 20 20 20  tree(v, ii);.   
8b80: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
8b90: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4a 6f 75  AddOp3(v, OP_Jou
8ba0: 72 6e 61 6c 4d 6f 64 65 2c 20 69 69 2c 20 31 2c  rnalMode, ii, 1,
8bb0: 20 65 4d 6f 64 65 29 3b 0a 20 20 20 20 20 20 7d   eMode);.      }
8bc0: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
8bd0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
8be0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
8bf0: 20 31 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a   1);.    break;.
8c00: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
8c10: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
8c20: 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c  .]journal_size_l
8c30: 69 6d 69 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d  imit.  **  PRAGM
8c40: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a 6f 75  A [database.]jou
8c50: 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 3d  rnal_size_limit=
8c60: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20  N.  **.  ** Get 
8c70: 6f 72 20 73 65 74 20 74 68 65 20 73 69 7a 65 20  or set the size 
8c80: 6c 69 6d 69 74 20 6f 6e 20 72 6f 6c 6c 62 61 63  limit on rollbac
8c90: 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 73 2e  k journal files.
8ca0: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
8cb0: 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f 53 49 5a  gTyp_JOURNAL_SIZ
8cc0: 45 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 50  E_LIMIT: {.    P
8cd0: 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73  ager *pPager = s
8ce0: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
8cf0: 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20  (pDb->pBt);.    
8d00: 69 36 34 20 69 4c 69 6d 69 74 20 3d 20 2d 32 3b  i64 iLimit = -2;
8d10: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
8d20: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
8d30: 44 65 63 4f 72 48 65 78 54 6f 49 36 34 28 7a 52  DecOrHexToI64(zR
8d40: 69 67 68 74 2c 20 26 69 4c 69 6d 69 74 29 3b 0a  ight, &iLimit);.
8d50: 20 20 20 20 20 20 69 66 28 20 69 4c 69 6d 69 74        if( iLimit
8d60: 3c 2d 31 20 29 20 69 4c 69 6d 69 74 20 3d 20 2d  <-1 ) iLimit = -
8d70: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 4c 69  1;.    }.    iLi
8d80: 6d 69 74 20 3d 20 73 71 6c 69 74 65 33 50 61 67  mit = sqlite3Pag
8d90: 65 72 4a 6f 75 72 6e 61 6c 53 69 7a 65 4c 69 6d  erJournalSizeLim
8da0: 69 74 28 70 50 61 67 65 72 2c 20 69 4c 69 6d 69  it(pPager, iLimi
8db0: 74 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 53 69  t);.    returnSi
8dc0: 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20  ngleInt(pParse, 
8dd0: 22 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69  "journal_size_li
8de0: 6d 69 74 22 2c 20 69 4c 69 6d 69 74 29 3b 0a 20  mit", iLimit);. 
8df0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23     break;.  }..#
8e00: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
8e10: 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
8e20: 41 53 20 2a 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  AS */..  /*.  **
8e30: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
8e40: 73 65 2e 5d 61 75 74 6f 5f 76 61 63 75 75 6d 0a  se.]auto_vacuum.
8e50: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
8e60: 74 61 62 61 73 65 2e 5d 61 75 74 6f 5f 76 61 63  tabase.]auto_vac
8e70: 75 75 6d 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  uum=N.  **.  ** 
8e80: 47 65 74 20 6f 72 20 73 65 74 20 74 68 65 20 76  Get or set the v
8e90: 61 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61  alue of the data
8ea0: 62 61 73 65 20 27 61 75 74 6f 2d 76 61 63 75 75  base 'auto-vacuu
8eb0: 6d 27 20 70 61 72 61 6d 65 74 65 72 2e 0a 20 20  m' parameter..  
8ec0: 2a 2a 20 54 68 65 20 76 61 6c 75 65 20 69 73 20  ** The value is 
8ed0: 6f 6e 65 20 6f 66 3a 20 20 30 20 4e 4f 4e 45 20  one of:  0 NONE 
8ee0: 31 20 46 55 4c 4c 20 32 20 49 4e 43 52 45 4d 45  1 FULL 2 INCREME
8ef0: 4e 54 41 4c 0a 20 20 2a 2f 0a 23 69 66 6e 64 65  NTAL.  */.#ifnde
8f00: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55  f SQLITE_OMIT_AU
8f10: 54 4f 56 41 43 55 55 4d 0a 20 20 63 61 73 65 20  TOVACUUM.  case 
8f20: 50 72 61 67 54 79 70 5f 41 55 54 4f 5f 56 41 43  PragTyp_AUTO_VAC
8f30: 55 55 4d 3a 20 7b 0a 20 20 20 20 42 74 72 65 65  UUM: {.    Btree
8f40: 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74   *pBt = pDb->pBt
8f50: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 42  ;.    assert( pB
8f60: 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20  t!=0 );.    if( 
8f70: 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20  !zRight ){.     
8f80: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
8f90: 28 70 50 61 72 73 65 2c 20 22 61 75 74 6f 5f 76  (pParse, "auto_v
8fa0: 61 63 75 75 6d 22 2c 20 73 71 6c 69 74 65 33 42  acuum", sqlite3B
8fb0: 74 72 65 65 47 65 74 41 75 74 6f 56 61 63 75 75  treeGetAutoVacuu
8fc0: 6d 28 70 42 74 29 29 3b 0a 20 20 20 20 7d 65 6c  m(pBt));.    }el
8fd0: 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 65 41  se{.      int eA
8fe0: 75 74 6f 20 3d 20 67 65 74 41 75 74 6f 56 61 63  uto = getAutoVac
8ff0: 75 75 6d 28 7a 52 69 67 68 74 29 3b 0a 20 20 20  uum(zRight);.   
9000: 20 20 20 61 73 73 65 72 74 28 20 65 41 75 74 6f     assert( eAuto
9010: 3e 3d 30 20 26 26 20 65 41 75 74 6f 3c 3d 32 20  >=0 && eAuto<=2 
9020: 29 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6e 65 78  );.      db->nex
9030: 74 41 75 74 6f 76 61 63 20 3d 20 28 75 38 29 65  tAutovac = (u8)e
9040: 41 75 74 6f 3b 0a 20 20 20 20 20 20 2f 2a 20 43  Auto;.      /* C
9050: 61 6c 6c 20 53 65 74 41 75 74 6f 56 61 63 75 75  all SetAutoVacuu
9060: 6d 28 29 20 74 6f 20 73 65 74 20 69 6e 69 74 69  m() to set initi
9070: 61 6c 69 7a 65 20 74 68 65 20 69 6e 74 65 72 6e  alize the intern
9080: 61 6c 20 61 75 74 6f 20 61 6e 64 0a 20 20 20 20  al auto and.    
9090: 20 20 2a 2a 20 69 6e 63 72 2d 76 61 63 75 75 6d    ** incr-vacuum
90a0: 20 66 6c 61 67 73 2e 20 54 68 69 73 20 69 73 20   flags. This is 
90b0: 72 65 71 75 69 72 65 64 20 69 6e 20 63 61 73 65  required in case
90c0: 20 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e   this connection
90d0: 0a 20 20 20 20 20 20 2a 2a 20 63 72 65 61 74 65  .      ** create
90e0: 73 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66  s the database f
90f0: 69 6c 65 2e 20 49 74 20 69 73 20 69 6d 70 6f 72  ile. It is impor
9100: 74 61 6e 74 20 74 68 61 74 20 69 74 20 69 73 20  tant that it is 
9110: 63 72 65 61 74 65 64 0a 20 20 20 20 20 20 2a 2a  created.      **
9120: 20 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75   as an auto-vacu
9130: 75 6d 20 63 61 70 61 62 6c 65 20 64 62 2e 0a 20  um capable db.. 
9140: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 63       */.      rc
9150: 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53   = sqlite3BtreeS
9160: 65 74 41 75 74 6f 56 61 63 75 75 6d 28 70 42 74  etAutoVacuum(pBt
9170: 2c 20 65 41 75 74 6f 29 3b 0a 20 20 20 20 20 20  , eAuto);.      
9180: 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f  if( rc==SQLITE_O
9190: 4b 20 26 26 20 28 65 41 75 74 6f 3d 3d 31 20 7c  K && (eAuto==1 |
91a0: 7c 20 65 41 75 74 6f 3d 3d 32 29 20 29 7b 0a 20  | eAuto==2) ){. 
91b0: 20 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 73         /* When s
91c0: 65 74 74 69 6e 67 20 74 68 65 20 61 75 74 6f 5f  etting the auto_
91d0: 76 61 63 75 75 6d 20 6d 6f 64 65 20 74 6f 20 65  vacuum mode to e
91e0: 69 74 68 65 72 20 22 66 75 6c 6c 22 20 6f 72 20  ither "full" or 
91f0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 22 69 6e 63  .        ** "inc
9200: 72 65 6d 65 6e 74 61 6c 22 2c 20 77 72 69 74 65  remental", write
9210: 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20 6d 65   the value of me
9220: 74 61 5b 36 5d 20 69 6e 20 74 68 65 20 64 61 74  ta[6] in the dat
9230: 61 62 61 73 65 0a 20 20 20 20 20 20 20 20 2a 2a  abase.        **
9240: 20 66 69 6c 65 2e 20 42 65 66 6f 72 65 20 77 72   file. Before wr
9250: 69 74 69 6e 67 20 74 6f 20 6d 65 74 61 5b 36 5d  iting to meta[6]
9260: 2c 20 63 68 65 63 6b 20 74 68 61 74 20 6d 65 74  , check that met
9270: 61 5b 33 5d 20 69 6e 64 69 63 61 74 65 73 0a 20  a[3] indicates. 
9280: 20 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74         ** that t
9290: 68 69 73 20 72 65 61 6c 6c 79 20 69 73 20 61 6e  his really is an
92a0: 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 63 61 70   auto-vacuum cap
92b0: 61 62 6c 65 20 64 61 74 61 62 61 73 65 2e 0a 20  able database.. 
92c0: 20 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20         */.      
92d0: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69    static const i
92e0: 6e 74 20 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46  nt iLn = VDBE_OF
92f0: 46 53 45 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a  FSET_LINENO(2);.
9300: 20 20 20 20 20 20 20 20 73 74 61 74 69 63 20 63          static c
9310: 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20  onst VdbeOpList 
9320: 73 65 74 4d 65 74 61 36 5b 5d 20 3d 20 7b 0a 20  setMeta6[] = {. 
9330: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72           { OP_Tr
9340: 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20 30 2c  ansaction,    0,
9350: 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20           1,     
9360: 20 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20              0}, 
9370: 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20     /* 0 */.     
9380: 20 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f       { OP_ReadCo
9390: 6f 6b 69 65 2c 20 20 20 20 20 30 2c 20 20 20 20  okie,     0,    
93a0: 20 20 20 20 20 31 2c 20 20 20 20 20 20 20 20 20       1,         
93b0: 42 54 52 45 45 5f 4c 41 52 47 45 53 54 5f 52 4f  BTREE_LARGEST_RO
93c0: 4f 54 5f 50 41 47 45 7d 2c 0a 20 20 20 20 20 20  OT_PAGE},.      
93d0: 20 20 20 20 7b 20 4f 50 5f 49 66 2c 20 20 20 20      { OP_If,    
93e0: 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20 20           1,     
93f0: 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 20      0,          
9400: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a         0},    /*
9410: 20 32 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20   2 */.          
9420: 7b 20 4f 50 5f 48 61 6c 74 2c 20 20 20 20 20 20  { OP_Halt,      
9430: 20 20 20 20 20 53 51 4c 49 54 45 5f 4f 4b 2c 20       SQLITE_OK, 
9440: 4f 45 5f 41 62 6f 72 74 2c 20 20 20 20 20 20 20  OE_Abort,       
9450: 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 33 20 2a     0},    /* 3 *
9460: 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50  /.          { OP
9470: 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20 20 20  _Integer,       
9480: 20 30 2c 20 20 20 20 20 20 20 20 20 31 2c 20 20   0,         1,  
9490: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 30                 0
94a0: 7d 2c 20 20 20 20 2f 2a 20 34 20 2a 2f 0a 20 20  },    /* 4 */.  
94b0: 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53 65 74          { OP_Set
94c0: 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20  Cookie,      0, 
94d0: 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 49 4e          BTREE_IN
94e0: 43 52 5f 56 41 43 55 55 4d 2c 20 31 7d 2c 20 20  CR_VACUUM, 1},  
94f0: 20 20 2f 2a 20 35 20 2a 2f 0a 20 20 20 20 20 20    /* 5 */.      
9500: 20 20 7d 3b 0a 20 20 20 20 20 20 20 20 69 6e 74    };.        int
9510: 20 69 41 64 64 72 3b 0a 20 20 20 20 20 20 20 20   iAddr;.        
9520: 69 41 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56  iAddr = sqlite3V
9530: 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20  dbeAddOpList(v, 
9540: 41 72 72 61 79 53 69 7a 65 28 73 65 74 4d 65 74  ArraySize(setMet
9550: 61 36 29 2c 20 73 65 74 4d 65 74 61 36 2c 20 69  a6), setMeta6, i
9560: 4c 6e 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  Ln);.        sql
9570: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
9580: 28 76 2c 20 69 41 64 64 72 2c 20 69 44 62 29 3b  (v, iAddr, iDb);
9590: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
95a0: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
95b0: 69 41 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20  iAddr+1, iDb);. 
95c0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
95d0: 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20 69 41  beChangeP2(v, iA
95e0: 64 64 72 2b 32 2c 20 69 41 64 64 72 2b 34 29 3b  ddr+2, iAddr+4);
95f0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
9600: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
9610: 69 41 64 64 72 2b 34 2c 20 65 41 75 74 6f 2d 31  iAddr+4, eAuto-1
9620: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
9630: 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
9640: 2c 20 69 41 64 64 72 2b 35 2c 20 69 44 62 29 3b  , iAddr+5, iDb);
9650: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
9660: 56 64 62 65 55 73 65 73 42 74 72 65 65 28 76 2c  VdbeUsesBtree(v,
9670: 20 69 44 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20   iDb);.      }. 
9680: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
9690: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a    }.#endif..  /*
96a0: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
96b0: 61 74 61 62 61 73 65 2e 5d 69 6e 63 72 65 6d 65  atabase.]increme
96c0: 6e 74 61 6c 5f 76 61 63 75 75 6d 28 4e 29 0a 20  ntal_vacuum(N). 
96d0: 20 2a 2a 0a 20 20 2a 2a 20 44 6f 20 4e 20 73 74   **.  ** Do N st
96e0: 65 70 73 20 6f 66 20 69 6e 63 72 65 6d 65 6e 74  eps of increment
96f0: 61 6c 20 76 61 63 75 75 6d 69 6e 67 20 6f 6e 20  al vacuuming on 
9700: 61 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f  a database..  */
9710: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
9720: 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a  OMIT_AUTOVACUUM.
9730: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 49    case PragTyp_I
9740: 4e 43 52 45 4d 45 4e 54 41 4c 5f 56 41 43 55 55  NCREMENTAL_VACUU
9750: 4d 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 4c 69  M: {.    int iLi
9760: 6d 69 74 2c 20 61 64 64 72 3b 0a 20 20 20 20 69  mit, addr;.    i
9770: 66 28 20 7a 52 69 67 68 74 3d 3d 30 20 7c 7c 20  f( zRight==0 || 
9780: 21 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32  !sqlite3GetInt32
9790: 28 7a 52 69 67 68 74 2c 20 26 69 4c 69 6d 69 74  (zRight, &iLimit
97a0: 29 20 7c 7c 20 69 4c 69 6d 69 74 3c 3d 30 20 29  ) || iLimit<=0 )
97b0: 7b 0a 20 20 20 20 20 20 69 4c 69 6d 69 74 20 3d  {.      iLimit =
97c0: 20 30 78 37 66 66 66 66 66 66 66 3b 0a 20 20 20   0x7fffffff;.   
97d0: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 42 65   }.    sqlite3Be
97e0: 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f  ginWriteOperatio
97f0: 6e 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62  n(pParse, 0, iDb
9800: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
9810: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
9820: 6e 74 65 67 65 72 2c 20 69 4c 69 6d 69 74 2c 20  nteger, iLimit, 
9830: 31 29 3b 0a 20 20 20 20 61 64 64 72 20 3d 20 73  1);.    addr = s
9840: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
9850: 28 76 2c 20 4f 50 5f 49 6e 63 72 56 61 63 75 75  (v, OP_IncrVacuu
9860: 6d 2c 20 69 44 62 29 3b 20 56 64 62 65 43 6f 76  m, iDb); VdbeCov
9870: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 73 71  erage(v);.    sq
9880: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
9890: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
98a0: 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   1);.    sqlite3
98b0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
98c0: 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b  _AddImm, 1, -1);
98d0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
98e0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 66 50  AddOp2(v, OP_IfP
98f0: 6f 73 2c 20 31 2c 20 61 64 64 72 29 3b 20 56 64  os, 1, addr); Vd
9900: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
9910: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
9920: 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b  mpHere(v, addr);
9930: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
9940: 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20  #endif..#ifndef 
9950: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
9960: 52 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20  R_PRAGMAS.  /*. 
9970: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
9980: 61 62 61 73 65 2e 5d 63 61 63 68 65 5f 73 69 7a  abase.]cache_siz
9990: 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  e.  **  PRAGMA [
99a0: 64 61 74 61 62 61 73 65 2e 5d 63 61 63 68 65 5f  database.]cache_
99b0: 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  size=N.  **.  **
99c0: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
99d0: 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72  reports the curr
99e0: 65 6e 74 20 6c 6f 63 61 6c 20 73 65 74 74 69 6e  ent local settin
99f0: 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70  g for the.  ** p
9a00: 61 67 65 20 63 61 63 68 65 20 73 69 7a 65 2e 20  age cache size. 
9a10: 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  The second form 
9a20: 73 65 74 73 20 74 68 65 20 6c 6f 63 61 6c 0a 20  sets the local. 
9a30: 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73   ** page cache s
9a40: 69 7a 65 20 76 61 6c 75 65 2e 20 20 49 66 20 4e  ize value.  If N
9a50: 20 69 73 20 70 6f 73 69 74 69 76 65 20 74 68 65   is positive the
9a60: 6e 20 74 68 61 74 20 69 73 20 74 68 65 0a 20 20  n that is the.  
9a70: 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67  ** number of pag
9a80: 65 73 20 69 6e 20 74 68 65 20 63 61 63 68 65 2e  es in the cache.
9a90: 20 20 49 66 20 4e 20 69 73 20 6e 65 67 61 74 69    If N is negati
9aa0: 76 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a  ve, then the.  *
9ab0: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * number of page
9ac0: 73 20 69 73 20 61 64 6a 75 73 74 65 64 20 73 6f  s is adjusted so
9ad0: 20 74 68 61 74 20 74 68 65 20 63 61 63 68 65 20   that the cache 
9ae0: 75 73 65 73 20 2d 4e 20 6b 69 62 69 62 79 74 65  uses -N kibibyte
9af0: 73 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f 72 79  s.  ** of memory
9b00: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
9b10: 61 67 54 79 70 5f 43 41 43 48 45 5f 53 49 5a 45  agTyp_CACHE_SIZE
9b20: 3a 20 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20  : {.    assert( 
9b30: 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74  sqlite3SchemaMut
9b40: 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20  exHeld(db, iDb, 
9b50: 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a  0) );.    if( !z
9b60: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72  Right ){.      r
9b70: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70  eturnSingleInt(p
9b80: 50 61 72 73 65 2c 20 22 63 61 63 68 65 5f 73 69  Parse, "cache_si
9b90: 7a 65 22 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d  ze", pDb->pSchem
9ba0: 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a  a->cache_size);.
9bb0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
9bc0: 20 69 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69   int size = sqli
9bd0: 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 3b  te3Atoi(zRight);
9be0: 0a 20 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68  .      pDb->pSch
9bf0: 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20  ema->cache_size 
9c00: 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71  = size;.      sq
9c10: 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63  lite3BtreeSetCac
9c20: 68 65 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c  heSize(pDb->pBt,
9c30: 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63   pDb->pSchema->c
9c40: 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20  ache_size);.    
9c50: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
9c60: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
9c70: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6d  GMA [database.]m
9c80: 6d 61 70 5f 73 69 7a 65 28 4e 29 0a 20 20 2a 2a  map_size(N).  **
9c90: 0a 20 20 2a 2a 20 55 73 65 64 20 74 6f 20 73 65  .  ** Used to se
9ca0: 74 20 6d 61 70 70 69 6e 67 20 73 69 7a 65 20 6c  t mapping size l
9cb0: 69 6d 69 74 2e 20 54 68 65 20 6d 61 70 70 69 6e  imit. The mappin
9cc0: 67 20 73 69 7a 65 20 6c 69 6d 69 74 20 69 73 0a  g size limit is.
9cd0: 20 20 2a 2a 20 75 73 65 64 20 74 6f 20 6c 69 6d    ** used to lim
9ce0: 69 74 20 74 68 65 20 61 67 67 72 65 67 61 74 65  it the aggregate
9cf0: 20 73 69 7a 65 20 6f 66 20 61 6c 6c 20 6d 65 6d   size of all mem
9d00: 6f 72 79 20 6d 61 70 70 65 64 20 72 65 67 69 6f  ory mapped regio
9d10: 6e 73 20 6f 66 20 74 68 65 0a 20 20 2a 2a 20 64  ns of the.  ** d
9d20: 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 49 66  atabase file. If
9d30: 20 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20   this parameter 
9d40: 69 73 20 73 65 74 20 74 6f 20 7a 65 72 6f 2c 20  is set to zero, 
9d50: 74 68 65 6e 20 6d 65 6d 6f 72 79 20 6d 61 70 70  then memory mapp
9d60: 69 6e 67 0a 20 20 2a 2a 20 69 73 20 6e 6f 74 20  ing.  ** is not 
9d70: 75 73 65 64 20 61 74 20 61 6c 6c 2e 20 20 49 66  used at all.  If
9d80: 20 4e 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20   N is negative, 
9d90: 74 68 65 6e 20 74 68 65 20 64 65 66 61 75 6c 74  then the default
9da0: 20 6d 65 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a   memory map.  **
9db0: 20 6c 69 6d 69 74 20 64 65 74 65 72 6d 69 6e 65   limit determine
9dc0: 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63 6f 6e  d by sqlite3_con
9dd0: 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49  fig(SQLITE_CONFI
9de0: 47 5f 4d 4d 41 50 5f 53 49 5a 45 29 20 69 73 20  G_MMAP_SIZE) is 
9df0: 73 65 74 2e 0a 20 20 2a 2a 20 54 68 65 20 70 61  set..  ** The pa
9e00: 72 61 6d 65 74 65 72 20 4e 20 69 73 20 6d 65 61  rameter N is mea
9e10: 73 75 72 65 64 20 69 6e 20 62 79 74 65 73 2e 0a  sured in bytes..
9e20: 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 76    **.  ** This v
9e30: 61 6c 75 65 20 69 73 20 61 64 76 69 73 6f 72 79  alue is advisory
9e40: 2e 20 20 54 68 65 20 75 6e 64 65 72 6c 79 69 6e  .  The underlyin
9e50: 67 20 56 46 53 20 69 73 20 66 72 65 65 20 74 6f  g VFS is free to
9e60: 20 6d 65 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a   memory map.  **
9e70: 20 61 73 20 6c 69 74 74 6c 65 20 6f 72 20 61 73   as little or as
9e80: 20 6d 75 63 68 20 61 73 20 69 74 20 77 61 6e 74   much as it want
9e90: 73 2e 20 20 45 78 63 65 70 74 2c 20 69 66 20 4e  s.  Except, if N
9ea0: 20 69 73 20 73 65 74 20 74 6f 20 30 20 74 68 65   is set to 0 the
9eb0: 6e 20 74 68 65 0a 20 20 2a 2a 20 75 70 70 65 72  n the.  ** upper
9ec0: 20 6c 61 79 65 72 73 20 77 69 6c 6c 20 6e 65 76   layers will nev
9ed0: 65 72 20 69 6e 76 6f 6b 65 20 74 68 65 20 78 46  er invoke the xF
9ee0: 65 74 63 68 20 69 6e 74 65 72 66 61 63 65 73 20  etch interfaces 
9ef0: 74 6f 20 74 68 65 20 56 46 53 2e 0a 20 20 2a 2f  to the VFS..  */
9f00: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
9f10: 4d 4d 41 50 5f 53 49 5a 45 3a 20 7b 0a 20 20 20  MMAP_SIZE: {.   
9f20: 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73   sqlite3_int64 s
9f30: 7a 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41  z;.#if SQLITE_MA
9f40: 58 5f 4d 4d 41 50 5f 53 49 5a 45 3e 30 0a 20 20  X_MMAP_SIZE>0.  
9f50: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
9f60: 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
9f70: 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a  (db, iDb, 0) );.
9f80: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
9f90: 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a  {.      int ii;.
9fa0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 65 63        sqlite3Dec
9fb0: 4f 72 48 65 78 54 6f 49 36 34 28 7a 52 69 67 68  OrHexToI64(zRigh
9fc0: 74 2c 20 26 73 7a 29 3b 0a 20 20 20 20 20 20 69  t, &sz);.      i
9fd0: 66 28 20 73 7a 3c 30 20 29 20 73 7a 20 3d 20 73  f( sz<0 ) sz = s
9fe0: 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66  qlite3GlobalConf
9ff0: 69 67 2e 73 7a 4d 6d 61 70 3b 0a 20 20 20 20 20  ig.szMmap;.     
a000: 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20   if( pId2->n==0 
a010: 29 20 64 62 2d 3e 73 7a 4d 6d 61 70 20 3d 20 73  ) db->szMmap = s
a020: 7a 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 69 3d  z;.      for(ii=
a030: 64 62 2d 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30  db->nDb-1; ii>=0
a040: 3b 20 69 69 2d 2d 29 7b 0a 20 20 20 20 20 20 20  ; ii--){.       
a050: 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 69 5d   if( db->aDb[ii]
a060: 2e 70 42 74 20 26 26 20 28 69 69 3d 3d 69 44 62  .pBt && (ii==iDb
a070: 20 7c 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30 29 20   || pId2->n==0) 
a080: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
a090: 69 74 65 33 42 74 72 65 65 53 65 74 4d 6d 61 70  ite3BtreeSetMmap
a0a0: 4c 69 6d 69 74 28 64 62 2d 3e 61 44 62 5b 69 69  Limit(db->aDb[ii
a0b0: 5d 2e 70 42 74 2c 20 73 7a 29 3b 0a 20 20 20 20  ].pBt, sz);.    
a0c0: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
a0d0: 20 20 7d 0a 20 20 20 20 73 7a 20 3d 20 2d 31 3b    }.    sz = -1;
a0e0: 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65  .    rc = sqlite
a0f0: 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64  3_file_control(d
a100: 62 2c 20 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46  b, zDb, SQLITE_F
a110: 43 4e 54 4c 5f 4d 4d 41 50 5f 53 49 5a 45 2c 20  CNTL_MMAP_SIZE, 
a120: 26 73 7a 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20  &sz);.#else.    
a130: 73 7a 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d  sz = 0;.    rc =
a140: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 23 65 6e 64   SQLITE_OK;.#end
a150: 69 66 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53  if.    if( rc==S
a160: 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20  QLITE_OK ){.    
a170: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
a180: 74 28 70 50 61 72 73 65 2c 20 22 6d 6d 61 70 5f  t(pParse, "mmap_
a190: 73 69 7a 65 22 2c 20 73 7a 29 3b 0a 20 20 20 20  size", sz);.    
a1a0: 7d 65 6c 73 65 20 69 66 28 20 72 63 21 3d 53 51  }else if( rc!=SQ
a1b0: 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b  LITE_NOTFOUND ){
a1c0: 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  .      pParse->n
a1d0: 45 72 72 2b 2b 3b 0a 20 20 20 20 20 20 70 50 61  Err++;.      pPa
a1e0: 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20  rse->rc = rc;.  
a1f0: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
a200: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20   }..  /*.  **   
a210: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
a220: 65 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  e.  **   PRAGMA 
a230: 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 22 64 65  temp_store = "de
a240: 66 61 75 6c 74 22 7c 22 6d 65 6d 6f 72 79 22 7c  fault"|"memory"|
a250: 22 66 69 6c 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a  "file".  **.  **
a260: 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74   Return or set t
a270: 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f  he local value o
a280: 66 20 74 68 65 20 74 65 6d 70 5f 73 74 6f 72 65  f the temp_store
a290: 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67   flag.  Changing
a2a0: 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20  .  ** the local 
a2b0: 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d  value does not m
a2c0: 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74  ake changes to t
a2d0: 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61 6e 64  he disk file and
a2e0: 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a   the default.  *
a2f0: 2a 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20  * value will be 
a300: 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e 65 78  restored the nex
a310: 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61 62  t time the datab
a320: 61 73 65 20 69 73 20 6f 70 65 6e 65 64 2e 0a 20  ase is opened.. 
a330: 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65 20 74 68   **.  ** Note th
a340: 61 74 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c  at it is possibl
a350: 65 20 66 6f 72 20 74 68 65 20 6c 69 62 72 61 72  e for the librar
a360: 79 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f  y compile-time o
a370: 70 74 69 6f 6e 73 20 74 6f 0a 20 20 2a 2a 20 6f  ptions to.  ** o
a380: 76 65 72 72 69 64 65 20 74 68 69 73 20 73 65 74  verride this set
a390: 74 69 6e 67 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ting.  */.  case
a3a0: 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f 53 54   PragTyp_TEMP_ST
a3b0: 4f 52 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 21  ORE: {.    if( !
a3c0: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
a3d0: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
a3e0: 70 50 61 72 73 65 2c 20 22 74 65 6d 70 5f 73 74  pParse, "temp_st
a3f0: 6f 72 65 22 2c 20 64 62 2d 3e 74 65 6d 70 5f 73  ore", db->temp_s
a400: 74 6f 72 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65  tore);.    }else
a410: 7b 0a 20 20 20 20 20 20 63 68 61 6e 67 65 54 65  {.      changeTe
a420: 6d 70 53 74 6f 72 61 67 65 28 70 50 61 72 73 65  mpStorage(pParse
a430: 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 7d  , zRight);.    }
a440: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
a450: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
a460: 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64  GMA temp_store_d
a470: 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20  irectory.  **   
a480: 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72  PRAGMA temp_stor
a490: 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22  e_directory = ""
a4a0: 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65  |"directory_name
a4b0: 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  ".  **.  ** Retu
a4c0: 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f  rn or set the lo
a4d0: 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65  cal value of the
a4e0: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
a4f0: 63 74 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61  ctory flag.  Cha
a500: 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76  nging.  ** the v
a510: 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65 63  alue sets a spec
a520: 69 66 69 63 20 64 69 72 65 63 74 6f 72 79 20 74  ific directory t
a530: 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 74 65  o be used for te
a540: 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 2e 0a 20  mporary files.. 
a550: 20 2a 2a 20 53 65 74 74 69 6e 67 20 74 6f 20 61   ** Setting to a
a560: 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76   null string rev
a570: 65 72 74 73 20 74 6f 20 74 68 65 20 64 65 66 61  erts to the defa
a580: 75 6c 74 20 74 65 6d 70 6f 72 61 72 79 20 64 69  ult temporary di
a590: 72 65 63 74 6f 72 79 20 73 65 61 72 63 68 2e 0a  rectory search..
a5a0: 20 20 2a 2a 20 49 66 20 74 65 6d 70 6f 72 61 72    ** If temporar
a5b0: 79 20 64 69 72 65 63 74 6f 72 79 20 69 73 20 63  y directory is c
a5c0: 68 61 6e 67 65 64 2c 20 74 68 65 6e 20 69 6e 76  hanged, then inv
a5d0: 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61  alidateTempStora
a5e0: 67 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20  ge..  **.  */.  
a5f0: 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d  case PragTyp_TEM
a600: 50 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f 52  P_STORE_DIRECTOR
a610: 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52  Y: {.    if( !zR
a620: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66  ight ){.      if
a630: 28 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64  ( sqlite3_temp_d
a640: 69 72 65 63 74 6f 72 79 20 29 7b 0a 20 20 20 20  irectory ){.    
a650: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
a660: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
a670: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
a680: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
a690: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
a6a0: 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  E, .            
a6b0: 22 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65  "temp_store_dire
a6c0: 63 74 6f 72 79 22 2c 20 53 51 4c 49 54 45 5f 53  ctory", SQLITE_S
a6d0: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
a6e0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
a6f0: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
a700: 20 30 2c 20 31 2c 20 30 2c 20 73 71 6c 69 74 65   0, 1, 0, sqlite
a710: 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79  3_temp_directory
a720: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 0);.        sq
a730: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
a740: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
a750: 20 31 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a   1, 1);.      }.
a760: 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e 64      }else{.#ifnd
a770: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57  ef SQLITE_OMIT_W
a780: 53 44 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69  SD.      if( zRi
a790: 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20  ght[0] ){.      
a7a0: 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20    int res;.     
a7b0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f     rc = sqlite3O
a7c0: 73 41 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73  sAccess(db->pVfs
a7d0: 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c 49 54 45  , zRight, SQLITE
a7e0: 5f 41 43 43 45 53 53 5f 52 45 41 44 57 52 49 54  _ACCESS_READWRIT
a7f0: 45 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20  E, &res);.      
a800: 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45    if( rc!=SQLITE
a810: 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 7b  _OK || res==0 ){
a820: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
a830: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
a840: 65 2c 20 22 6e 6f 74 20 61 20 77 72 69 74 61 62  e, "not a writab
a850: 6c 65 20 64 69 72 65 63 74 6f 72 79 22 29 3b 0a  le directory");.
a860: 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70            goto p
a870: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20  ragma_out;.     
a880: 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20     }.      }.   
a890: 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 54 45     if( SQLITE_TE
a8a0: 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a 20 20 20 20  MP_STORE==0.    
a8b0: 20 20 20 7c 7c 20 28 53 51 4c 49 54 45 5f 54 45     || (SQLITE_TE
a8c0: 4d 50 5f 53 54 4f 52 45 3d 3d 31 20 26 26 20 64  MP_STORE==1 && d
a8d0: 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3c 3d 31  b->temp_store<=1
a8e0: 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 53 51 4c  ).       || (SQL
a8f0: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d  ITE_TEMP_STORE==
a900: 32 20 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74  2 && db->temp_st
a910: 6f 72 65 3d 3d 31 29 0a 20 20 20 20 20 20 29 7b  ore==1).      ){
a920: 0a 20 20 20 20 20 20 20 20 69 6e 76 61 6c 69 64  .        invalid
a930: 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70  ateTempStorage(p
a940: 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 7d 0a  Parse);.      }.
a950: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72        sqlite3_fr
a960: 65 65 28 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f  ee(sqlite3_temp_
a970: 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20  directory);.    
a980: 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20    if( zRight[0] 
a990: 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  ){.        sqlit
a9a0: 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72  e3_temp_director
a9b0: 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69  y = sqlite3_mpri
a9c0: 6e 74 66 28 22 25 73 22 2c 20 7a 52 69 67 68 74  ntf("%s", zRight
a9d0: 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  );.      }else{.
a9e0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f          sqlite3_
a9f0: 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 3d  temp_directory =
aa00: 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64   0;.      }.#end
aa10: 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
aa20: 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a 20  T_WSD */.    }. 
aa30: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23     break;.  }..#
aa40: 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e  if SQLITE_OS_WIN
aa50: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
aa60: 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64  GMA data_store_d
aa70: 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20  irectory.  **   
aa80: 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72  PRAGMA data_stor
aa90: 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22  e_directory = ""
aaa0: 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65  |"directory_name
aab0: 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  ".  **.  ** Retu
aac0: 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f  rn or set the lo
aad0: 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65  cal value of the
aae0: 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65   data_store_dire
aaf0: 63 74 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61  ctory flag.  Cha
ab00: 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76  nging.  ** the v
ab10: 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65 63  alue sets a spec
ab20: 69 66 69 63 20 64 69 72 65 63 74 6f 72 79 20 74  ific directory t
ab30: 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 64 61  o be used for da
ab40: 74 61 62 61 73 65 20 66 69 6c 65 73 20 74 68 61  tabase files tha
ab50: 74 0a 20 20 2a 2a 20 77 65 72 65 20 73 70 65 63  t.  ** were spec
ab60: 69 66 69 65 64 20 77 69 74 68 20 61 20 72 65 6c  ified with a rel
ab70: 61 74 69 76 65 20 70 61 74 68 6e 61 6d 65 2e 20  ative pathname. 
ab80: 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e 75   Setting to a nu
ab90: 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72 74  ll string revert
aba0: 73 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 64 65  s.  ** to the de
abb0: 66 61 75 6c 74 20 64 61 74 61 62 61 73 65 20 64  fault database d
abc0: 69 72 65 63 74 6f 72 79 2c 20 77 68 69 63 68 20  irectory, which 
abd0: 66 6f 72 20 64 61 74 61 62 61 73 65 20 66 69 6c  for database fil
abe0: 65 73 20 73 70 65 63 69 66 69 65 64 20 77 69 74  es specified wit
abf0: 68 0a 20 20 2a 2a 20 61 20 72 65 6c 61 74 69 76  h.  ** a relativ
ac00: 65 20 70 61 74 68 20 77 69 6c 6c 20 70 72 6f 62  e path will prob
ac10: 61 62 6c 79 20 62 65 20 62 61 73 65 64 20 6f 6e  ably be based on
ac20: 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 69 72   the current dir
ac30: 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 0a 20  ectory for the. 
ac40: 20 2a 2a 20 70 72 6f 63 65 73 73 2e 20 20 44 61   ** process.  Da
ac50: 74 61 62 61 73 65 20 66 69 6c 65 20 73 70 65 63  tabase file spec
ac60: 69 66 69 65 64 20 77 69 74 68 20 61 6e 20 61 62  ified with an ab
ac70: 73 6f 6c 75 74 65 20 70 61 74 68 20 61 72 65 20  solute path are 
ac80: 6e 6f 74 20 69 6d 70 61 63 74 65 64 0a 20 20 2a  not impacted.  *
ac90: 2a 20 62 79 20 74 68 69 73 20 73 65 74 74 69 6e  * by this settin
aca0: 67 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66  g, regardless of
acb0: 20 69 74 73 20 76 61 6c 75 65 2e 0a 20 20 2a 2a   its value..  **
acc0: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
acd0: 67 54 79 70 5f 44 41 54 41 5f 53 54 4f 52 45 5f  gTyp_DATA_STORE_
ace0: 44 49 52 45 43 54 4f 52 59 3a 20 7b 0a 20 20 20  DIRECTORY: {.   
acf0: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
ad00: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
ad10: 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79  3_data_directory
ad20: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
ad30: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
ad40: 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  s(v, 1);.       
ad50: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
ad60: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
ad70: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 0a 20 20 20 20  NAME_NAME, .    
ad80: 20 20 20 20 20 20 20 20 22 64 61 74 61 5f 73 74          "data_st
ad90: 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 22 2c 20  ore_directory", 
ada0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
adb0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
adc0: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
add0: 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30  String8, 0, 1, 0
ade0: 2c 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64  , sqlite3_data_d
adf0: 69 72 65 63 74 6f 72 79 2c 20 30 29 3b 0a 20 20  irectory, 0);.  
ae00: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
ae10: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
ae20: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a  sultRow, 1, 1);.
ae30: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
ae40: 65 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  e{.#ifndef SQLIT
ae50: 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 20 20 20  E_OMIT_WSD.     
ae60: 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29   if( zRight[0] )
ae70: 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72 65  {.        int re
ae80: 73 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20  s;.        rc = 
ae90: 73 71 6c 69 74 65 33 4f 73 41 63 63 65 73 73 28  sqlite3OsAccess(
aea0: 64 62 2d 3e 70 56 66 73 2c 20 7a 52 69 67 68 74  db->pVfs, zRight
aeb0: 2c 20 53 51 4c 49 54 45 5f 41 43 43 45 53 53 5f  , SQLITE_ACCESS_
aec0: 52 45 41 44 57 52 49 54 45 2c 20 26 72 65 73 29  READWRITE, &res)
aed0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72 63  ;.        if( rc
aee0: 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72  !=SQLITE_OK || r
aef0: 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  es==0 ){.       
af00: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d     sqlite3ErrorM
af10: 73 67 28 70 50 61 72 73 65 2c 20 22 6e 6f 74 20  sg(pParse, "not 
af20: 61 20 77 72 69 74 61 62 6c 65 20 64 69 72 65 63  a writable direc
af30: 74 6f 72 79 22 29 3b 0a 20 20 20 20 20 20 20 20  tory");.        
af40: 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75    goto pragma_ou
af50: 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  t;.        }.   
af60: 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74     }.      sqlit
af70: 65 33 5f 66 72 65 65 28 73 71 6c 69 74 65 33 5f  e3_free(sqlite3_
af80: 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79 29 3b  data_directory);
af90: 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68  .      if( zRigh
afa0: 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  t[0] ){.        
afb0: 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72  sqlite3_data_dir
afc0: 65 63 74 6f 72 79 20 3d 20 73 71 6c 69 74 65 33  ectory = sqlite3
afd0: 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a  _mprintf("%s", z
afe0: 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 65  Right);.      }e
aff0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  lse{.        sql
b000: 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74  ite3_data_direct
b010: 6f 72 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d  ory = 0;.      }
b020: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
b030: 45 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20  E_OMIT_WSD */.  
b040: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
b050: 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53   }.#endif..#if S
b060: 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43  QLITE_ENABLE_LOC
b070: 4b 49 4e 47 5f 53 54 59 4c 45 0a 20 20 2f 2a 0a  KING_STYLE.  /*.
b080: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64    **   PRAGMA [d
b090: 61 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 5f 70 72  atabase.]lock_pr
b0a0: 6f 78 79 5f 66 69 6c 65 0a 20 20 2a 2a 20 20 20  oxy_file.  **   
b0b0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
b0c0: 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c  .]lock_proxy_fil
b0d0: 65 20 3d 20 22 3a 61 75 74 6f 3a 22 7c 22 6c 6f  e = ":auto:"|"lo
b0e0: 63 6b 5f 66 69 6c 65 5f 70 61 74 68 22 0a 20 20  ck_file_path".  
b0f0: 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f  **.  ** Return o
b100: 72 20 73 65 74 20 74 68 65 20 76 61 6c 75 65 20  r set the value 
b110: 6f 66 20 74 68 65 20 6c 6f 63 6b 5f 70 72 6f 78  of the lock_prox
b120: 79 5f 66 69 6c 65 20 66 6c 61 67 2e 20 20 43 68  y_file flag.  Ch
b130: 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20  anging.  ** the 
b140: 76 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65  value sets a spe
b150: 63 69 66 69 63 20 66 69 6c 65 20 74 6f 20 62 65  cific file to be
b160: 20 75 73 65 64 20 66 6f 72 20 64 61 74 61 62 61   used for databa
b170: 73 65 20 61 63 63 65 73 73 20 6c 6f 63 6b 73 2e  se access locks.
b180: 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73  .  **.  */.  cas
b190: 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 50  e PragTyp_LOCK_P
b1a0: 52 4f 58 59 5f 46 49 4c 45 3a 20 7b 0a 20 20 20  ROXY_FILE: {.   
b1b0: 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a   if( !zRight ){.
b1c0: 20 20 20 20 20 20 50 61 67 65 72 20 2a 70 50 61        Pager *pPa
b1d0: 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ger = sqlite3Btr
b1e0: 65 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74  eePager(pDb->pBt
b1f0: 29 3b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 70  );.      char *p
b200: 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 20 3d  roxy_file_path =
b210: 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 20 73 71 6c   NULL;.      sql
b220: 69 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65  ite3_file *pFile
b230: 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46   = sqlite3PagerF
b240: 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20  ile(pPager);.   
b250: 20 20 20 73 71 6c 69 74 65 33 4f 73 46 69 6c 65     sqlite3OsFile
b260: 43 6f 6e 74 72 6f 6c 48 69 6e 74 28 70 46 69 6c  ControlHint(pFil
b270: 65 2c 20 53 51 4c 49 54 45 5f 47 45 54 5f 4c 4f  e, SQLITE_GET_LO
b280: 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20  CKPROXYFILE, .  
b290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b2a0: 20 20 20 20 20 20 20 20 20 26 70 72 6f 78 79 5f           &proxy_
b2b0: 66 69 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20 20  file_path);.    
b2c0: 20 20 0a 20 20 20 20 20 20 69 66 28 20 70 72 6f    .      if( pro
b2d0: 78 79 5f 66 69 6c 65 5f 70 61 74 68 20 29 7b 0a  xy_file_path ){.
b2e0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
b2f0: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
b300: 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   1);.        sql
b310: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
b320: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
b330: 5f 4e 41 4d 45 2c 20 0a 20 20 20 20 20 20 20 20  _NAME, .        
b340: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b350: 20 20 20 20 20 20 22 6c 6f 63 6b 5f 70 72 6f 78        "lock_prox
b360: 79 5f 66 69 6c 65 22 2c 20 53 51 4c 49 54 45 5f  y_file", SQLITE_
b370: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
b380: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
b390: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
b3a0: 2c 20 30 2c 20 31 2c 20 30 2c 20 70 72 6f 78 79  , 0, 1, 0, proxy
b3b0: 5f 66 69 6c 65 5f 70 61 74 68 2c 20 30 29 3b 0a  _file_path, 0);.
b3c0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
b3d0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
b3e0: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29  ResultRow, 1, 1)
b3f0: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65  ;.      }.    }e
b400: 6c 73 65 7b 0a 20 20 20 20 20 20 50 61 67 65 72  lse{.      Pager
b410: 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74   *pPager = sqlit
b420: 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44 62  e3BtreePager(pDb
b430: 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 73 71  ->pBt);.      sq
b440: 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c  lite3_file *pFil
b450: 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  e = sqlite3Pager
b460: 46 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20  File(pPager);.  
b470: 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20      int res;.   
b480: 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d     if( zRight[0]
b490: 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d   ){.        res=
b4a0: 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e  sqlite3OsFileCon
b4b0: 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49  trol(pFile, SQLI
b4c0: 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59  TE_SET_LOCKPROXY
b4d0: 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20  FILE, .         
b4e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b4f0: 20 20 20 20 20 20 20 20 20 20 20 20 7a 52 69 67              zRig
b500: 68 74 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73  ht);.      } els
b510: 65 20 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d  e {.        res=
b520: 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e  sqlite3OsFileCon
b530: 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49  trol(pFile, SQLI
b540: 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59  TE_SET_LOCKPROXY
b550: 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20  FILE, .         
b560: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b570: 20 20 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c              NULL
b580: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20  );.      }.     
b590: 20 69 66 28 20 72 65 73 21 3d 53 51 4c 49 54 45   if( res!=SQLITE
b5a0: 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 73  _OK ){.        s
b5b0: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
b5c0: 50 61 72 73 65 2c 20 22 66 61 69 6c 65 64 20 74  Parse, "failed t
b5d0: 6f 20 73 65 74 20 6c 6f 63 6b 20 70 72 6f 78 79  o set lock proxy
b5e0: 20 66 69 6c 65 22 29 3b 0a 20 20 20 20 20 20 20   file");.       
b5f0: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
b600: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
b610: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
b620: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
b630: 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53  ENABLE_LOCKING_S
b640: 54 59 4c 45 20 2a 2f 20 20 20 20 20 20 0a 20 20  TYLE */      .  
b650: 20 20 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50    .  /*.  **   P
b660: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
b670: 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20 2a  ]synchronous.  *
b680: 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  *   PRAGMA [data
b690: 62 61 73 65 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75  base.]synchronou
b6a0: 73 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c 7c  s=OFF|ON|NORMAL|
b6b0: 46 55 4c 4c 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52  FULL.  **.  ** R
b6c0: 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65  eturn or set the
b6d0: 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20   local value of 
b6e0: 74 68 65 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20  the synchronous 
b6f0: 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a  flag.  Changing.
b700: 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20 76    ** the local v
b710: 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61  alue does not ma
b720: 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68  ke changes to th
b730: 65 20 64 69 73 6b 20 66 69 6c 65 20 61 6e 64 20  e disk file and 
b740: 74 68 65 0a 20 20 2a 2a 20 64 65 66 61 75 6c 74  the.  ** default
b750: 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 72   value will be r
b760: 65 73 74 6f 72 65 64 20 74 68 65 20 6e 65 78 74  estored the next
b770: 20 74 69 6d 65 20 74 68 65 20 64 61 74 61 62 61   time the databa
b780: 73 65 20 69 73 0a 20 20 2a 2a 20 6f 70 65 6e 65  se is.  ** opene
b790: 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  d..  */.  case P
b7a0: 72 61 67 54 79 70 5f 53 59 4e 43 48 52 4f 4e 4f  ragTyp_SYNCHRONO
b7b0: 55 53 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a  US: {.    if( !z
b7c0: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72  Right ){.      r
b7d0: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70  eturnSingleInt(p
b7e0: 50 61 72 73 65 2c 20 22 73 79 6e 63 68 72 6f 6e  Parse, "synchron
b7f0: 6f 75 73 22 2c 20 0a 20 20 20 20 20 20 20 20 20  ous", .         
b800: 20 20 20 53 51 4c 49 54 45 5f 44 62 53 61 66 65     SQLITE_DbSafe
b810: 74 79 4c 65 76 65 6c 56 61 6c 75 65 28 70 44 62  tyLevelValue(pDb
b820: 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 29 2d  ->safety_level)-
b830: 31 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20  1);.    }else{. 
b840: 20 20 20 20 20 69 66 28 20 21 64 62 2d 3e 61 75       if( !db->au
b850: 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20  toCommit ){.    
b860: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
b870: 4d 73 67 28 70 50 61 72 73 65 2c 20 0a 20 20 20  Msg(pParse, .   
b880: 20 20 20 20 20 20 20 20 20 22 53 61 66 65 74 79           "Safety
b890: 20 6c 65 76 65 6c 20 6d 61 79 20 6e 6f 74 20 62   level may not b
b8a0: 65 20 63 68 61 6e 67 65 64 20 69 6e 73 69 64 65  e changed inside
b8b0: 20 61 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 29   a transaction")
b8c0: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
b8d0: 20 20 20 20 20 20 20 70 44 62 2d 3e 73 61 66 65         pDb->safe
b8e0: 74 79 5f 6c 65 76 65 6c 20 3d 20 28 67 65 74 53  ty_level = (getS
b8f0: 61 66 65 74 79 4c 65 76 65 6c 28 7a 52 69 67 68  afetyLevel(zRigh
b900: 74 2c 30 2c 31 29 2b 31 29 0a 20 20 20 20 20 20  t,0,1)+1).      
b910: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b920: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b930: 7c 20 53 51 4c 49 54 45 5f 53 41 46 45 54 59 4c  | SQLITE_SAFETYL
b940: 45 56 45 4c 5f 46 49 58 45 44 3b 0a 20 20 20 20  EVEL_FIXED;.    
b950: 20 20 20 20 73 65 74 41 6c 6c 50 61 67 65 72 46      setAllPagerF
b960: 6c 61 67 73 28 64 62 29 3b 0a 20 20 20 20 20 20  lags(db);.      
b970: 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  }.    }.    brea
b980: 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  k;.  }.#endif /*
b990: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
b9a0: 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23  ER_PRAGMAS */..#
b9b0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
b9c0: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 0a  IT_FLAG_PRAGMAS.
b9d0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 46    case PragTyp_F
b9e0: 4c 41 47 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a  LAG: {.    if( z
b9f0: 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20 20 20 20  Right==0 ){.    
ba00: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
ba10: 74 28 70 50 61 72 73 65 2c 20 61 50 72 61 67 6d  t(pParse, aPragm
ba20: 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 7a 4e 61 6d  aNames[mid].zNam
ba30: 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  e,.             
ba40: 20 20 20 20 20 20 20 20 28 64 62 2d 3e 66 6c 61          (db->fla
ba50: 67 73 20 26 20 61 50 72 61 67 6d 61 4e 61 6d 65  gs & aPragmaName
ba60: 73 5b 6d 69 64 5d 2e 69 41 72 67 29 21 3d 30 20  s[mid].iArg)!=0 
ba70: 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  );.    }else{.  
ba80: 20 20 20 20 69 6e 74 20 6d 61 73 6b 20 3d 20 61      int mask = a
ba90: 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d  PragmaNames[mid]
baa0: 2e 69 41 72 67 3b 20 20 20 20 2f 2a 20 4d 61 73  .iArg;    /* Mas
bab0: 6b 20 6f 66 20 62 69 74 73 20 74 6f 20 73 65 74  k of bits to set
bac0: 20 6f 72 20 63 6c 65 61 72 2e 20 2a 2f 0a 20 20   or clear. */.  
bad0: 20 20 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f      if( db->auto
bae0: 43 6f 6d 6d 69 74 3d 3d 30 20 29 7b 0a 20 20 20  Commit==0 ){.   
baf0: 20 20 20 20 20 2f 2a 20 46 6f 72 65 69 67 6e 20       /* Foreign 
bb00: 6b 65 79 20 73 75 70 70 6f 72 74 20 6d 61 79 20  key support may 
bb10: 6e 6f 74 20 62 65 20 65 6e 61 62 6c 65 64 20 6f  not be enabled o
bb20: 72 20 64 69 73 61 62 6c 65 64 20 77 68 69 6c 65  r disabled while
bb30: 20 6e 6f 74 0a 20 20 20 20 20 20 20 20 2a 2a 20   not.        ** 
bb40: 69 6e 20 61 75 74 6f 2d 63 6f 6d 6d 69 74 20 6d  in auto-commit m
bb50: 6f 64 65 2e 20 20 2a 2f 0a 20 20 20 20 20 20 20  ode.  */.       
bb60: 20 6d 61 73 6b 20 26 3d 20 7e 28 53 51 4c 49 54   mask &= ~(SQLIT
bb70: 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 29 3b 0a  E_ForeignKeys);.
bb80: 20 20 20 20 20 20 7d 0a 23 69 66 20 53 51 4c 49        }.#if SQLI
bb90: 54 45 5f 55 53 45 52 5f 41 55 54 48 45 4e 54 49  TE_USER_AUTHENTI
bba0: 43 41 54 49 4f 4e 0a 20 20 20 20 20 20 69 66 28  CATION.      if(
bbb0: 20 64 62 2d 3e 61 75 74 68 2e 61 75 74 68 4c 65   db->auth.authLe
bbc0: 76 65 6c 3d 3d 55 41 55 54 48 5f 55 73 65 72 20  vel==UAUTH_User 
bbd0: 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 44 6f  ){.        /* Do
bbe0: 20 6e 6f 74 20 61 6c 6c 6f 77 20 6e 6f 6e 2d 61   not allow non-a
bbf0: 64 6d 69 6e 20 75 73 65 72 73 20 74 6f 20 6d 6f  dmin users to mo
bc00: 64 69 66 79 20 74 68 65 20 73 63 68 65 6d 61 20  dify the schema 
bc10: 61 72 62 69 74 72 61 72 69 6c 79 20 2a 2f 0a 20  arbitrarily */. 
bc20: 20 20 20 20 20 20 20 6d 61 73 6b 20 26 3d 20 7e         mask &= ~
bc30: 28 53 51 4c 49 54 45 5f 57 72 69 74 65 53 63 68  (SQLITE_WriteSch
bc40: 65 6d 61 29 3b 0a 20 20 20 20 20 20 7d 0a 23 65  ema);.      }.#e
bc50: 6e 64 69 66 0a 0a 20 20 20 20 20 20 69 66 28 20  ndif..      if( 
bc60: 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65 61  sqlite3GetBoolea
bc70: 6e 28 7a 52 69 67 68 74 2c 20 30 29 20 29 7b 0a  n(zRight, 0) ){.
bc80: 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67          db->flag
bc90: 73 20 7c 3d 20 6d 61 73 6b 3b 0a 20 20 20 20 20  s |= mask;.     
bca0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
bcb0: 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20 7e 6d 61  db->flags &= ~ma
bcc0: 73 6b 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  sk;.        if( 
bcd0: 6d 61 73 6b 3d 3d 53 51 4c 49 54 45 5f 44 65 66  mask==SQLITE_Def
bce0: 65 72 46 4b 73 20 29 20 64 62 2d 3e 6e 44 65 66  erFKs ) db->nDef
bcf0: 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20 3d 20 30  erredImmCons = 0
bd00: 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20  ;.      }..     
bd10: 20 2f 2a 20 4d 61 6e 79 20 6f 66 20 74 68 65 20   /* Many of the 
bd20: 66 6c 61 67 2d 70 72 61 67 6d 61 73 20 6d 6f 64  flag-pragmas mod
bd30: 69 66 79 20 74 68 65 20 63 6f 64 65 20 67 65 6e  ify the code gen
bd40: 65 72 61 74 65 64 20 62 79 20 74 68 65 20 53 51  erated by the SQ
bd50: 4c 20 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70  L .      ** comp
bd60: 69 6c 65 72 20 28 65 67 2e 20 63 6f 75 6e 74 5f  iler (eg. count_
bd70: 63 68 61 6e 67 65 73 29 2e 20 53 6f 20 61 64 64  changes). So add
bd80: 20 61 6e 20 6f 70 63 6f 64 65 20 74 6f 20 65 78   an opcode to ex
bd90: 70 69 72 65 20 61 6c 6c 0a 20 20 20 20 20 20 2a  pire all.      *
bda0: 2a 20 63 6f 6d 70 69 6c 65 64 20 53 51 4c 20 73  * compiled SQL s
bdb0: 74 61 74 65 6d 65 6e 74 73 20 61 66 74 65 72 20  tatements after 
bdc0: 6d 6f 64 69 66 79 69 6e 67 20 61 20 70 72 61 67  modifying a prag
bdd0: 6d 61 20 76 61 6c 75 65 2e 0a 20 20 20 20 20 20  ma value..      
bde0: 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  */.      sqlite3
bdf0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
be00: 5f 45 78 70 69 72 65 2c 20 30 2c 20 30 29 3b 0a  _Expire, 0, 0);.
be10: 20 20 20 20 20 20 73 65 74 41 6c 6c 50 61 67 65        setAllPage
be20: 72 46 6c 61 67 73 28 64 62 29 3b 0a 20 20 20 20  rFlags(db);.    
be30: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
be40: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
be50: 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47  E_OMIT_FLAG_PRAG
be60: 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20  MAS */..#ifndef 
be70: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
be80: 4d 41 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a  MA_PRAGMAS.  /*.
be90: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 61    **   PRAGMA ta
bea0: 62 6c 65 5f 69 6e 66 6f 28 3c 74 61 62 6c 65 3e  ble_info(<table>
beb0: 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75  ).  **.  ** Retu
bec0: 72 6e 20 61 20 73 69 6e 67 6c 65 20 72 6f 77 20  rn a single row 
bed0: 66 6f 72 20 65 61 63 68 20 63 6f 6c 75 6d 6e 20  for each column 
bee0: 6f 66 20 74 68 65 20 6e 61 6d 65 64 20 74 61 62  of the named tab
bef0: 6c 65 2e 20 54 68 65 20 63 6f 6c 75 6d 6e 73 20  le. The columns 
bf00: 6f 66 0a 20 20 2a 2a 20 74 68 65 20 72 65 74 75  of.  ** the retu
bf10: 72 6e 65 64 20 64 61 74 61 20 73 65 74 20 61 72  rned data set ar
bf20: 65 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20 63 69 64  e:.  **.  ** cid
bf30: 3a 20 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20  :        Column 
bf40: 69 64 20 28 6e 75 6d 62 65 72 65 64 20 66 72 6f  id (numbered fro
bf50: 6d 20 6c 65 66 74 20 74 6f 20 72 69 67 68 74 2c  m left to right,
bf60: 20 73 74 61 72 74 69 6e 67 20 61 74 20 30 29 0a   starting at 0).
bf70: 20 20 2a 2a 20 6e 61 6d 65 3a 20 20 20 20 20 20    ** name:      
bf80: 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 0a 20 20 2a   Column name.  *
bf90: 2a 20 74 79 70 65 3a 20 20 20 20 20 20 20 43 6f  * type:       Co
bfa0: 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e  lumn declaration
bfb0: 20 74 79 70 65 2e 0a 20 20 2a 2a 20 6e 6f 74 6e   type..  ** notn
bfc0: 75 6c 6c 3a 20 20 20 20 54 72 75 65 20 69 66 20  ull:    True if 
bfd0: 27 4e 4f 54 20 4e 55 4c 4c 27 20 69 73 20 70 61  'NOT NULL' is pa
bfe0: 72 74 20 6f 66 20 63 6f 6c 75 6d 6e 20 64 65 63  rt of column dec
bff0: 6c 61 72 61 74 69 6f 6e 0a 20 20 2a 2a 20 64 66  laration.  ** df
c000: 6c 74 5f 76 61 6c 75 65 3a 20 54 68 65 20 64 65  lt_value: The de
c010: 66 61 75 6c 74 20 76 61 6c 75 65 20 66 6f 72 20  fault value for 
c020: 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 69 66 20 61  the column, if a
c030: 6e 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ny..  */.  case 
c040: 50 72 61 67 54 79 70 5f 54 41 42 4c 45 5f 49 4e  PragTyp_TABLE_IN
c050: 46 4f 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29  FO: if( zRight )
c060: 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61  {.    Table *pTa
c070: 62 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71  b;.    pTab = sq
c080: 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64  lite3FindTable(d
c090: 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b  b, zRight, zDb);
c0a0: 0a 20 20 20 20 69 66 28 20 70 54 61 62 20 29 7b  .    if( pTab ){
c0b0: 0a 20 20 20 20 20 20 69 6e 74 20 69 2c 20 6b 3b  .      int i, k;
c0c0: 0a 20 20 20 20 20 20 69 6e 74 20 6e 48 69 64 64  .      int nHidd
c0d0: 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20 20 43 6f  en = 0;.      Co
c0e0: 6c 75 6d 6e 20 2a 70 43 6f 6c 3b 0a 20 20 20 20  lumn *pCol;.    
c0f0: 20 20 49 6e 64 65 78 20 2a 70 50 6b 20 3d 20 73    Index *pPk = s
c100: 71 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79  qlite3PrimaryKey
c110: 49 6e 64 65 78 28 70 54 61 62 29 3b 0a 20 20 20  Index(pTab);.   
c120: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
c130: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 36 29 3b 0a  tNumCols(v, 6);.
c140: 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d        pParse->nM
c150: 65 6d 20 3d 20 36 3b 0a 20 20 20 20 20 20 73 71  em = 6;.      sq
c160: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
c170: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44  chema(pParse, iD
c180: 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  b);.      sqlite
c190: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
c1a0: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
c1b0: 4d 45 2c 20 22 63 69 64 22 2c 20 53 51 4c 49 54  ME, "cid", SQLIT
c1c0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
c1d0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
c1e0: 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c  olName(v, 1, COL
c1f0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65  NAME_NAME, "name
c200: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
c210: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
c220: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
c230: 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 2, COLNAME_NAM
c240: 45 2c 20 22 74 79 70 65 22 2c 20 53 51 4c 49 54  E, "type", SQLIT
c250: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
c260: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
c270: 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c  olName(v, 3, COL
c280: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 6f 74 6e  NAME_NAME, "notn
c290: 75 6c 6c 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ull", SQLITE_STA
c2a0: 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
c2b0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
c2c0: 65 28 76 2c 20 34 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 4, COLNAME_
c2d0: 4e 41 4d 45 2c 20 22 64 66 6c 74 5f 76 61 6c 75  NAME, "dflt_valu
c2e0: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
c2f0: 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
c300: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
c310: 76 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 5, COLNAME_NA
c320: 4d 45 2c 20 22 70 6b 22 2c 20 53 51 4c 49 54 45  ME, "pk", SQLITE
c330: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
c340: 73 71 6c 69 74 65 33 56 69 65 77 47 65 74 43 6f  sqlite3ViewGetCo
c350: 6c 75 6d 6e 4e 61 6d 65 73 28 70 50 61 72 73 65  lumnNames(pParse
c360: 2c 20 70 54 61 62 29 3b 0a 20 20 20 20 20 20 66  , pTab);.      f
c370: 6f 72 28 69 3d 30 2c 20 70 43 6f 6c 3d 70 54 61  or(i=0, pCol=pTa
c380: 62 2d 3e 61 43 6f 6c 3b 20 69 3c 70 54 61 62 2d  b->aCol; i<pTab-
c390: 3e 6e 43 6f 6c 3b 20 69 2b 2b 2c 20 70 43 6f 6c  >nCol; i++, pCol
c3a0: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 66 28  ++){.        if(
c3b0: 20 49 73 48 69 64 64 65 6e 43 6f 6c 75 6d 6e 28   IsHiddenColumn(
c3c0: 70 43 6f 6c 29 20 29 7b 0a 20 20 20 20 20 20 20  pCol) ){.       
c3d0: 20 20 20 6e 48 69 64 64 65 6e 2b 2b 3b 0a 20 20     nHidden++;.  
c3e0: 20 20 20 20 20 20 20 20 63 6f 6e 74 69 6e 75 65          continue
c3f0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
c400: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c410: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
c420: 67 65 72 2c 20 69 2d 6e 48 69 64 64 65 6e 2c 20  ger, i-nHidden, 
c430: 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  1);.        sqli
c440: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
c450: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
c460: 32 2c 20 30 2c 20 70 43 6f 6c 2d 3e 7a 4e 61 6d  2, 0, pCol->zNam
c470: 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73  e, 0);.        s
c480: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
c490: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
c4a0: 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20  0, 3, 0,.       
c4b0: 20 20 20 20 70 43 6f 6c 2d 3e 7a 54 79 70 65 20      pCol->zType 
c4c0: 3f 20 70 43 6f 6c 2d 3e 7a 54 79 70 65 20 3a 20  ? pCol->zType : 
c4d0: 22 22 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  "", 0);.        
c4e0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c4f0: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
c500: 20 28 70 43 6f 6c 2d 3e 6e 6f 74 4e 75 6c 6c 20   (pCol->notNull 
c510: 3f 20 31 20 3a 20 30 29 2c 20 34 29 3b 0a 20 20  ? 1 : 0), 4);.  
c520: 20 20 20 20 20 20 69 66 28 20 70 43 6f 6c 2d 3e        if( pCol->
c530: 7a 44 66 6c 74 20 29 7b 0a 20 20 20 20 20 20 20  zDflt ){.       
c540: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c550: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
c560: 67 38 2c 20 30 2c 20 35 2c 20 30 2c 20 28 63 68  g8, 0, 5, 0, (ch
c570: 61 72 2a 29 70 43 6f 6c 2d 3e 7a 44 66 6c 74 2c  ar*)pCol->zDflt,
c580: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c   0);.        }el
c590: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71  se{.          sq
c5a0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
c5b0: 76 2c 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20 35  v, OP_Null, 0, 5
c5c0: 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
c5d0: 20 20 20 20 20 69 66 28 20 28 70 43 6f 6c 2d 3e       if( (pCol->
c5e0: 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f 4c 46 4c  colFlags & COLFL
c5f0: 41 47 5f 50 52 49 4d 4b 45 59 29 3d 3d 30 20 29  AG_PRIMKEY)==0 )
c600: 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20  {.          k = 
c610: 30 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  0;.        }else
c620: 20 69 66 28 20 70 50 6b 3d 3d 30 20 29 7b 0a 20   if( pPk==0 ){. 
c630: 20 20 20 20 20 20 20 20 20 6b 20 3d 20 31 3b 0a           k = 1;.
c640: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
c650: 20 20 20 20 20 20 20 20 20 66 6f 72 28 6b 3d 31           for(k=1
c660: 3b 20 41 4c 57 41 59 53 28 6b 3c 3d 70 54 61 62  ; ALWAYS(k<=pTab
c670: 2d 3e 6e 43 6f 6c 29 20 26 26 20 70 50 6b 2d 3e  ->nCol) && pPk->
c680: 61 69 43 6f 6c 75 6d 6e 5b 6b 2d 31 5d 21 3d 69  aiColumn[k-1]!=i
c690: 3b 20 6b 2b 2b 29 7b 7d 0a 20 20 20 20 20 20 20  ; k++){}.       
c6a0: 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74   }.        sqlit
c6b0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c6c0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6b 2c 20 36  OP_Integer, k, 6
c6d0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
c6e0: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
c6f0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
c700: 20 36 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   6);.      }.   
c710: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
c720: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
c730: 53 54 41 54 53 3a 20 7b 0a 20 20 20 20 49 6e 64  STATS: {.    Ind
c740: 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 48 61  ex *pIdx;.    Ha
c750: 73 68 45 6c 65 6d 20 2a 69 3b 0a 20 20 20 20 76  shElem *i;.    v
c760: 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62   = sqlite3GetVdb
c770: 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 73  e(pParse);.    s
c780: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
c790: 43 6f 6c 73 28 76 2c 20 34 29 3b 0a 20 20 20 20  Cols(v, 4);.    
c7a0: 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 34  pParse->nMem = 4
c7b0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64  ;.    sqlite3Cod
c7c0: 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70 50  eVerifySchema(pP
c7d0: 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20  arse, iDb);.    
c7e0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
c7f0: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
c800: 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 61 62 6c 65  AME_NAME, "table
c810: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
c820: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
c830: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
c840: 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  1, COLNAME_NAME,
c850: 20 22 69 6e 64 65 78 22 2c 20 53 51 4c 49 54 45   "index", SQLITE
c860: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71  _STATIC);.    sq
c870: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
c880: 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d  ame(v, 2, COLNAM
c890: 45 5f 4e 41 4d 45 2c 20 22 77 69 64 74 68 22 2c  E_NAME, "width",
c8a0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
c8b0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
c8c0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c  SetColName(v, 3,
c8d0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
c8e0: 68 65 69 67 68 74 22 2c 20 53 51 4c 49 54 45 5f  height", SQLITE_
c8f0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72  STATIC);.    for
c900: 28 69 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72  (i=sqliteHashFir
c910: 73 74 28 26 70 44 62 2d 3e 70 53 63 68 65 6d 61  st(&pDb->pSchema
c920: 2d 3e 74 62 6c 48 61 73 68 29 3b 20 69 3b 20 69  ->tblHash); i; i
c930: 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74 28  =sqliteHashNext(
c940: 69 29 29 7b 0a 20 20 20 20 20 20 54 61 62 6c 65  i)){.      Table
c950: 20 2a 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48   *pTab = sqliteH
c960: 61 73 68 44 61 74 61 28 69 29 3b 0a 20 20 20 20  ashData(i);.    
c970: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c980: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
c990: 38 2c 20 30 2c 20 31 2c 20 30 2c 20 70 54 61 62  8, 0, 1, 0, pTab
c9a0: 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20  ->zName, 0);.   
c9b0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c9c0: 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 75 6c 6c 2c  dOp2(v, OP_Null,
c9d0: 20 30 2c 20 32 29 3b 0a 20 20 20 20 20 20 73 71   0, 2);.      sq
c9e0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
c9f0: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 0a 20  v, OP_Integer,. 
ca00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ca10: 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 73            (int)s
ca20: 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e  qlite3LogEstToIn
ca30: 74 28 70 54 61 62 2d 3e 73 7a 54 61 62 52 6f 77  t(pTab->szTabRow
ca40: 29 2c 20 33 29 3b 0a 20 20 20 20 20 20 73 71 6c  ), 3);.      sql
ca50: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
ca60: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 0a 20  , OP_Integer, . 
ca70: 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 73 71           (int)sq
ca80: 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74  lite3LogEstToInt
ca90: 28 70 54 61 62 2d 3e 6e 52 6f 77 4c 6f 67 45 73  (pTab->nRowLogEs
caa0: 74 29 2c 20 34 29 3b 0a 20 20 20 20 20 20 73 71  t), 4);.      sq
cab0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
cac0: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
cad0: 20 31 2c 20 34 29 3b 0a 20 20 20 20 20 20 66 6f   1, 4);.      fo
cae0: 72 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e  r(pIdx=pTab->pIn
caf0: 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d  dex; pIdx; pIdx=
cb00: 70 49 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20  pIdx->pNext){.  
cb10: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
cb20: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
cb30: 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20  ring8, 0, 2, 0, 
cb40: 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b  pIdx->zName, 0);
cb50: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
cb60: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
cb70: 5f 49 6e 74 65 67 65 72 2c 0a 20 20 20 20 20 20  _Integer,.      
cb80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cb90: 20 20 20 20 20 20 20 28 69 6e 74 29 73 71 6c 69         (int)sqli
cba0: 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e 74 28 70  te3LogEstToInt(p
cbb0: 49 64 78 2d 3e 73 7a 49 64 78 52 6f 77 29 2c 20  Idx->szIdxRow), 
cbc0: 33 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  3);.        sqli
cbd0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
cbe0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 0a 20 20   OP_Integer, .  
cbf0: 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29 73            (int)s
cc00: 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49 6e  qlite3LogEstToIn
cc10: 74 28 70 49 64 78 2d 3e 61 69 52 6f 77 4c 6f 67  t(pIdx->aiRowLog
cc20: 45 73 74 5b 30 5d 29 2c 20 34 29 3b 0a 20 20 20  Est[0]), 4);.   
cc30: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cc40: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
cc50: 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29 3b 0a 20  ultRow, 1, 4);. 
cc60: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
cc70: 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73  .  break;..  cas
cc80: 65 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f  e PragTyp_INDEX_
cc90: 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67 68 74  INFO: if( zRight
cca0: 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   ){.    Index *p
ccb0: 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a  Idx;.    Table *
ccc0: 70 54 61 62 3b 0a 20 20 20 20 70 49 64 78 20 3d  pTab;.    pIdx =
ccd0: 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65   sqlite3FindInde
cce0: 78 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44  x(db, zRight, zD
ccf0: 62 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78  b);.    if( pIdx
cd00: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b   ){.      int i;
cd10: 0a 20 20 20 20 20 20 70 54 61 62 20 3d 20 70 49  .      pTab = pI
cd20: 64 78 2d 3e 70 54 61 62 6c 65 3b 0a 20 20 20 20  dx->pTable;.    
cd30: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
cd40: 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20  NumCols(v, 3);. 
cd50: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
cd60: 6d 20 3d 20 33 3b 0a 20 20 20 20 20 20 73 71 6c  m = 3;.      sql
cd70: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
cd80: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
cd90: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
cda0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
cdb0: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
cdc0: 45 2c 20 22 73 65 71 6e 6f 22 2c 20 53 51 4c 49  E, "seqno", SQLI
cdd0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
cde0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
cdf0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f  ColName(v, 1, CO
ce00: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 69 64  LNAME_NAME, "cid
ce10: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
ce20: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
ce30: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
ce40: 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 2, COLNAME_NAM
ce50: 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54  E, "name", SQLIT
ce60: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
ce70: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 49 64 78   for(i=0; i<pIdx
ce80: 2d 3e 6e 4b 65 79 43 6f 6c 3b 20 69 2b 2b 29 7b  ->nKeyCol; i++){
ce90: 0a 20 20 20 20 20 20 20 20 69 31 36 20 63 6e 75  .        i16 cnu
cea0: 6d 20 3d 20 70 49 64 78 2d 3e 61 69 43 6f 6c 75  m = pIdx->aiColu
ceb0: 6d 6e 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 73  mn[i];.        s
cec0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
ced0: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
cee0: 69 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73  i, 1);.        s
cef0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
cf00: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
cf10: 63 6e 75 6d 2c 20 32 29 3b 0a 20 20 20 20 20 20  cnum, 2);.      
cf20: 20 20 61 73 73 65 72 74 28 20 70 54 61 62 2d 3e    assert( pTab->
cf30: 6e 43 6f 6c 3e 63 6e 75 6d 20 29 3b 0a 20 20 20  nCol>cnum );.   
cf40: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cf50: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
cf60: 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 70  ing8, 0, 3, 0, p
cf70: 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e 75 6d 5d 2e  Tab->aCol[cnum].
cf80: 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20  zName, 0);.     
cf90: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
cfa0: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
cfb0: 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 20  tRow, 1, 3);.   
cfc0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
cfd0: 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20   break;..  case 
cfe0: 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c 49  PragTyp_INDEX_LI
cff0: 53 54 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29  ST: if( zRight )
d000: 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64  {.    Index *pId
d010: 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  x;.    Table *pT
d020: 61 62 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20  ab;.    int i;. 
d030: 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65     pTab = sqlite
d040: 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a  3FindTable(db, z
d050: 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20  Right, zDb);.   
d060: 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20   if( pTab ){.   
d070: 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65     v = sqlite3Ge
d080: 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20  tVdbe(pParse);. 
d090: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d0a0: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29  SetNumCols(v, 3)
d0b0: 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e  ;.      pParse->
d0c0: 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 20 20  nMem = 3;.      
d0d0: 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
d0e0: 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20  ySchema(pParse, 
d0f0: 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
d100: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
d110: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
d120: 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53 51 4c  NAME, "seq", SQL
d130: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
d140: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
d150: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43  tColName(v, 1, C
d160: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61  OLNAME_NAME, "na
d170: 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  me", SQLITE_STAT
d180: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
d190: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
d1a0: 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 2, COLNAME_N
d1b0: 41 4d 45 2c 20 22 75 6e 69 71 75 65 22 2c 20 53  AME, "unique", S
d1c0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
d1d0: 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d 70 54       for(pIdx=pT
d1e0: 61 62 2d 3e 70 49 6e 64 65 78 2c 20 69 3d 30 3b  ab->pIndex, i=0;
d1f0: 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78   pIdx; pIdx=pIdx
d200: 2d 3e 70 4e 65 78 74 2c 20 69 2b 2b 29 7b 0a 20  ->pNext, i++){. 
d210: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d220: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
d230: 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20  nteger, i, 1);. 
d240: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d250: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
d260: 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c  tring8, 0, 2, 0,
d270: 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 30 29   pIdx->zName, 0)
d280: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
d290: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
d2a0: 50 5f 49 6e 74 65 67 65 72 2c 20 49 73 55 6e 69  P_Integer, IsUni
d2b0: 71 75 65 49 6e 64 65 78 28 70 49 64 78 29 2c 20  queIndex(pIdx), 
d2c0: 33 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  3);.        sqli
d2d0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
d2e0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
d2f0: 2c 20 33 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 3);.      }.  
d300: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
d310: 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  ..  case PragTyp
d320: 5f 44 41 54 41 42 41 53 45 5f 4c 49 53 54 3a 20  _DATABASE_LIST: 
d330: 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20  {.    int i;.   
d340: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
d350: 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20  umCols(v, 3);.  
d360: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
d370: 20 33 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   3;.    sqlite3V
d380: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
d390: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
d3a0: 2c 20 22 73 65 71 22 2c 20 53 51 4c 49 54 45 5f  , "seq", SQLITE_
d3b0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
d3c0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
d3d0: 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45  me(v, 1, COLNAME
d3e0: 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53  _NAME, "name", S
d3f0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
d400: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
d410: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43  tColName(v, 2, C
d420: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 66 69  OLNAME_NAME, "fi
d430: 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  le", SQLITE_STAT
d440: 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  IC);.    for(i=0
d450: 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b  ; i<db->nDb; i++
d460: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d  ){.      if( db-
d470: 3e 61 44 62 5b 69 5d 2e 70 42 74 3d 3d 30 20 29  >aDb[i].pBt==0 )
d480: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
d490: 20 61 73 73 65 72 74 28 20 64 62 2d 3e 61 44 62   assert( db->aDb
d4a0: 5b 69 5d 2e 7a 4e 61 6d 65 21 3d 30 20 29 3b 0a  [i].zName!=0 );.
d4b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d4c0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
d4d0: 74 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20  teger, i, 1);.  
d4e0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d4f0: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
d500: 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 64 62  ng8, 0, 2, 0, db
d510: 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20  ->aDb[i].zName, 
d520: 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0);.      sqlite
d530: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
d540: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c  P_String8, 0, 3,
d550: 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20 20 73   0,.           s
d560: 71 6c 69 74 65 33 42 74 72 65 65 47 65 74 46 69  qlite3BtreeGetFi
d570: 6c 65 6e 61 6d 65 28 64 62 2d 3e 61 44 62 5b 69  lename(db->aDb[i
d580: 5d 2e 70 42 74 29 2c 20 30 29 3b 0a 20 20 20 20  ].pBt), 0);.    
d590: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d5a0: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
d5b0: 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 20 20  Row, 1, 3);.    
d5c0: 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a  }.  }.  break;..
d5d0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 43    case PragTyp_C
d5e0: 4f 4c 4c 41 54 49 4f 4e 5f 4c 49 53 54 3a 20 7b  OLLATION_LIST: {
d5f0: 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a  .    int i = 0;.
d600: 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 70 3b      HashElem *p;
d610: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
d620: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 32 29  SetNumCols(v, 2)
d630: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
d640: 65 6d 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69  em = 2;.    sqli
d650: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
d660: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
d670: 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53 51 4c  NAME, "seq", SQL
d680: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
d690: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
d6a0: 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c  olName(v, 1, COL
d6b0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65  NAME_NAME, "name
d6c0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
d6d0: 29 3b 0a 20 20 20 20 66 6f 72 28 70 3d 73 71 6c  );.    for(p=sql
d6e0: 69 74 65 48 61 73 68 46 69 72 73 74 28 26 64 62  iteHashFirst(&db
d6f0: 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 20 70 3b 20  ->aCollSeq); p; 
d700: 70 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78 74  p=sqliteHashNext
d710: 28 70 29 29 7b 0a 20 20 20 20 20 20 43 6f 6c 6c  (p)){.      Coll
d720: 53 65 71 20 2a 70 43 6f 6c 6c 20 3d 20 28 43 6f  Seq *pColl = (Co
d730: 6c 6c 53 65 71 20 2a 29 73 71 6c 69 74 65 48 61  llSeq *)sqliteHa
d740: 73 68 44 61 74 61 28 70 29 3b 0a 20 20 20 20 20  shData(p);.     
d750: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d760: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
d770: 2c 20 69 2b 2b 2c 20 31 29 3b 0a 20 20 20 20 20  , i++, 1);.     
d780: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d790: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
d7a0: 2c 20 30 2c 20 32 2c 20 30 2c 20 70 43 6f 6c 6c  , 0, 2, 0, pColl
d7b0: 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20  ->zName, 0);.   
d7c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d7d0: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
d7e0: 74 52 6f 77 2c 20 31 2c 20 32 29 3b 0a 20 20 20  tRow, 1, 2);.   
d7f0: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
d800: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
d810: 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41  _OMIT_SCHEMA_PRA
d820: 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GMAS */..#ifndef
d830: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52   SQLITE_OMIT_FOR
d840: 45 49 47 4e 5f 4b 45 59 0a 20 20 63 61 73 65 20  EIGN_KEY.  case 
d850: 50 72 61 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f  PragTyp_FOREIGN_
d860: 4b 45 59 5f 4c 49 53 54 3a 20 69 66 28 20 7a 52  KEY_LIST: if( zR
d870: 69 67 68 74 20 29 7b 0a 20 20 20 20 46 4b 65 79  ight ){.    FKey
d880: 20 2a 70 46 4b 3b 0a 20 20 20 20 54 61 62 6c 65   *pFK;.    Table
d890: 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 54 61 62   *pTab;.    pTab
d8a0: 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61   = sqlite3FindTa
d8b0: 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20  ble(db, zRight, 
d8c0: 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54  zDb);.    if( pT
d8d0: 61 62 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20  ab ){.      v = 
d8e0: 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28 70  sqlite3GetVdbe(p
d8f0: 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 70 46  Parse);.      pF
d900: 4b 20 3d 20 70 54 61 62 2d 3e 70 46 4b 65 79 3b  K = pTab->pFKey;
d910: 0a 20 20 20 20 20 20 69 66 28 20 70 46 4b 20 29  .      if( pFK )
d920: 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 20  {.        int i 
d930: 3d 20 30 3b 20 0a 20 20 20 20 20 20 20 20 73 71  = 0; .        sq
d940: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
d950: 6f 6c 73 28 76 2c 20 38 29 3b 0a 20 20 20 20 20  ols(v, 8);.     
d960: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
d970: 3d 20 38 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  = 8;.        sql
d980: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
d990: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
d9a0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
d9b0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
d9c0: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
d9d0: 41 4d 45 2c 20 22 69 64 22 2c 20 53 51 4c 49 54  AME, "id", SQLIT
d9e0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
d9f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
da00: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43  tColName(v, 1, C
da10: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65  OLNAME_NAME, "se
da20: 71 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  q", SQLITE_STATI
da30: 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  C);.        sqli
da40: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
da50: 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 2, COLNAME_
da60: 4e 41 4d 45 2c 20 22 74 61 62 6c 65 22 2c 20 53  NAME, "table", S
da70: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
da80: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
da90: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
daa0: 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  3, COLNAME_NAME,
dab0: 20 22 66 72 6f 6d 22 2c 20 53 51 4c 49 54 45 5f   "from", SQLITE_
dac0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
dad0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
dae0: 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c 20 43 4f 4c  olName(v, 4, COL
daf0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 6f 22 2c  NAME_NAME, "to",
db00: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
db10: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
db20: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
db30: 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 5, COLNAME_NAM
db40: 45 2c 20 22 6f 6e 5f 75 70 64 61 74 65 22 2c 20  E, "on_update", 
db50: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
db60: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
db70: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
db80: 20 36 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   6, COLNAME_NAME
db90: 2c 20 22 6f 6e 5f 64 65 6c 65 74 65 22 2c 20 53  , "on_delete", S
dba0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
dbb0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
dbc0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
dbd0: 37 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  7, COLNAME_NAME,
dbe0: 20 22 6d 61 74 63 68 22 2c 20 53 51 4c 49 54 45   "match", SQLITE
dbf0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
dc00: 20 20 77 68 69 6c 65 28 70 46 4b 29 7b 0a 20 20    while(pFK){.  
dc10: 20 20 20 20 20 20 20 20 69 6e 74 20 6a 3b 0a 20          int j;. 
dc20: 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30           for(j=0
dc30: 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a  ; j<pFK->nCol; j
dc40: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20  ++){.           
dc50: 20 63 68 61 72 20 2a 7a 43 6f 6c 20 3d 20 70 46   char *zCol = pF
dc60: 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 43 6f 6c 3b  K->aCol[j].zCol;
dc70: 0a 20 20 20 20 20 20 20 20 20 20 20 20 63 68 61  .            cha
dc80: 72 20 2a 7a 4f 6e 44 65 6c 65 74 65 20 3d 20 28  r *zOnDelete = (
dc90: 63 68 61 72 20 2a 29 61 63 74 69 6f 6e 4e 61 6d  char *)actionNam
dca0: 65 28 70 46 4b 2d 3e 61 41 63 74 69 6f 6e 5b 30  e(pFK->aAction[0
dcb0: 5d 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ]);.            
dcc0: 63 68 61 72 20 2a 7a 4f 6e 55 70 64 61 74 65 20  char *zOnUpdate 
dcd0: 3d 20 28 63 68 61 72 20 2a 29 61 63 74 69 6f 6e  = (char *)action
dce0: 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69 6f  Name(pFK->aActio
dcf0: 6e 5b 31 5d 29 3b 0a 20 20 20 20 20 20 20 20 20  n[1]);.         
dd00: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
dd10: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
dd20: 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20 20 20  er, i, 1);.     
dd30: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
dd40: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
dd50: 6e 74 65 67 65 72 2c 20 6a 2c 20 32 29 3b 0a 20  nteger, j, 2);. 
dd60: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
dd70: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
dd80: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33  OP_String8, 0, 3
dd90: 2c 20 30 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 30  , 0, pFK->zTo, 0
dda0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
ddb0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
ddc0: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
ddd0: 30 2c 20 34 2c 20 30 2c 0a 20 20 20 20 20 20 20  0, 4, 0,.       
dde0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ddf0: 20 20 20 20 20 20 20 70 54 61 62 2d 3e 61 43 6f         pTab->aCo
de00: 6c 5b 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69  l[pFK->aCol[j].i
de10: 46 72 6f 6d 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b  From].zName, 0);
de20: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
de30: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
de40: 2c 20 7a 43 6f 6c 20 3f 20 4f 50 5f 53 74 72 69  , zCol ? OP_Stri
de50: 6e 67 38 20 3a 20 4f 50 5f 4e 75 6c 6c 2c 20 30  ng8 : OP_Null, 0
de60: 2c 20 35 2c 20 30 2c 20 7a 43 6f 6c 2c 20 30 29  , 5, 0, zCol, 0)
de70: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
de80: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
de90: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
dea0: 2c 20 36 2c 20 30 2c 20 7a 4f 6e 55 70 64 61 74  , 6, 0, zOnUpdat
deb0: 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  e, 0);.         
dec0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
ded0: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
dee0: 67 38 2c 20 30 2c 20 37 2c 20 30 2c 20 7a 4f 6e  g8, 0, 7, 0, zOn
def0: 44 65 6c 65 74 65 2c 20 30 29 3b 0a 20 20 20 20  Delete, 0);.    
df00: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
df10: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
df20: 53 74 72 69 6e 67 38 2c 20 30 2c 20 38 2c 20 30  String8, 0, 8, 0
df30: 2c 20 22 4e 4f 4e 45 22 2c 20 30 29 3b 0a 20 20  , "NONE", 0);.  
df40: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
df50: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
df60: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
df70: 38 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  8);.          }.
df80: 20 20 20 20 20 20 20 20 20 20 2b 2b 69 3b 0a 20            ++i;. 
df90: 20 20 20 20 20 20 20 20 20 70 46 4b 20 3d 20 70           pFK = p
dfa0: 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d 3b 0a 20  FK->pNextFrom;. 
dfb0: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d         }.      }
dfc0: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
dfd0: 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64  ak;.#endif /* !d
dfe0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
dff0: 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20  IT_FOREIGN_KEY) 
e000: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
e010: 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
e020: 4b 45 59 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  KEY.#ifndef SQLI
e030: 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 0a  TE_OMIT_TRIGGER.
e040: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 46    case PragTyp_F
e050: 4f 52 45 49 47 4e 5f 4b 45 59 5f 43 48 45 43 4b  OREIGN_KEY_CHECK
e060: 3a 20 7b 0a 20 20 20 20 46 4b 65 79 20 2a 70 46  : {.    FKey *pF
e070: 4b 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f  K;             /
e080: 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b 65 79 20  * A foreign key 
e090: 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f 0a 20 20  constraint */.  
e0a0: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 20 20    Table *pTab;  
e0b0: 20 20 20 20 20 20 20 20 20 2f 2a 20 43 68 69 6c           /* Chil
e0c0: 64 20 74 61 62 6c 65 20 63 6f 6e 74 61 69 6e 20  d table contain 
e0d0: 22 52 45 46 45 52 45 4e 43 45 53 22 20 6b 65 79  "REFERENCES" key
e0e0: 77 6f 72 64 20 2a 2f 0a 20 20 20 20 54 61 62 6c  word */.    Tabl
e0f0: 65 20 2a 70 50 61 72 65 6e 74 3b 20 20 20 20 20  e *pParent;     
e100: 20 20 20 2f 2a 20 50 61 72 65 6e 74 20 74 61 62     /* Parent tab
e110: 6c 65 20 74 68 61 74 20 63 68 69 6c 64 20 70 6f  le that child po
e120: 69 6e 74 73 20 74 6f 20 2a 2f 0a 20 20 20 20 49  ints to */.    I
e130: 6e 64 65 78 20 2a 70 49 64 78 3b 20 20 20 20 20  ndex *pIdx;     
e140: 20 20 20 20 20 20 2f 2a 20 49 6e 64 65 78 20 69        /* Index i
e150: 6e 20 74 68 65 20 70 61 72 65 6e 74 20 74 61 62  n the parent tab
e160: 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 3b  le */.    int i;
e170: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e180: 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72   /* Loop counter
e190: 3a 20 20 46 6f 72 65 69 67 6e 20 6b 65 79 20 6e  :  Foreign key n
e1a0: 75 6d 62 65 72 20 66 6f 72 20 70 54 61 62 20 2a  umber for pTab *
e1b0: 2f 0a 20 20 20 20 69 6e 74 20 6a 3b 20 20 20 20  /.    int j;    
e1c0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
e1d0: 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 46  Loop counter:  F
e1e0: 69 65 6c 64 20 6f 66 20 74 68 65 20 66 6f 72 65  ield of the fore
e1f0: 69 67 6e 20 6b 65 79 20 2a 2f 0a 20 20 20 20 48  ign key */.    H
e200: 61 73 68 45 6c 65 6d 20 2a 6b 3b 20 20 20 20 20  ashElem *k;     
e210: 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f        /* Loop co
e220: 75 6e 74 65 72 3a 20 20 4e 65 78 74 20 74 61 62  unter:  Next tab
e230: 6c 65 20 69 6e 20 73 63 68 65 6d 61 20 2a 2f 0a  le in schema */.
e240: 20 20 20 20 69 6e 74 20 78 3b 20 20 20 20 20 20      int x;      
e250: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 72 65             /* re
e260: 73 75 6c 74 20 76 61 72 69 61 62 6c 65 20 2a 2f  sult variable */
e270: 0a 20 20 20 20 69 6e 74 20 72 65 67 52 65 73 75  .    int regResu
e280: 6c 74 3b 20 20 20 20 20 20 20 20 20 2f 2a 20 33  lt;         /* 3
e290: 20 72 65 67 69 73 74 65 72 73 20 74 6f 20 68 6f   registers to ho
e2a0: 6c 64 20 61 20 72 65 73 75 6c 74 20 72 6f 77 20  ld a result row 
e2b0: 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 4b 65  */.    int regKe
e2c0: 79 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  y;            /*
e2d0: 20 52 65 67 69 73 74 65 72 20 74 6f 20 68 6f 6c   Register to hol
e2e0: 64 20 6b 65 79 20 66 6f 72 20 63 68 65 63 6b 69  d key for checki
e2f0: 6e 67 20 74 68 65 20 46 4b 20 2a 2f 0a 20 20 20  ng the FK */.   
e300: 20 69 6e 74 20 72 65 67 52 6f 77 3b 20 20 20 20   int regRow;    
e310: 20 20 20 20 20 20 20 20 2f 2a 20 52 65 67 69 73          /* Regis
e320: 74 65 72 73 20 74 6f 20 68 6f 6c 64 20 61 20 72  ters to hold a r
e330: 6f 77 20 66 72 6f 6d 20 70 54 61 62 20 2a 2f 0a  ow from pTab */.
e340: 20 20 20 20 69 6e 74 20 61 64 64 72 54 6f 70 3b      int addrTop;
e350: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54 6f             /* To
e360: 70 20 6f 66 20 61 20 6c 6f 6f 70 20 63 68 65 63  p of a loop chec
e370: 6b 69 6e 67 20 66 6f 72 65 69 67 6e 20 6b 65 79  king foreign key
e380: 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64  s */.    int add
e390: 72 4f 6b 3b 20 20 20 20 20 20 20 20 20 20 20 20  rOk;            
e3a0: 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20 69 66 20  /* Jump here if 
e3b0: 74 68 65 20 6b 65 79 20 69 73 20 4f 4b 20 2a 2f  the key is OK */
e3c0: 0a 20 20 20 20 69 6e 74 20 2a 61 69 43 6f 6c 73  .    int *aiCols
e3d0: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 63  ;           /* c
e3e0: 68 69 6c 64 20 74 6f 20 70 61 72 65 6e 74 20 63  hild to parent c
e3f0: 6f 6c 75 6d 6e 20 6d 61 70 70 69 6e 67 20 2a 2f  olumn mapping */
e400: 0a 0a 20 20 20 20 72 65 67 52 65 73 75 6c 74 20  ..    regResult 
e410: 3d 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2b 31  = pParse->nMem+1
e420: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
e430: 65 6d 20 2b 3d 20 34 3b 0a 20 20 20 20 72 65 67  em += 4;.    reg
e440: 4b 65 79 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e  Key = ++pParse->
e450: 6e 4d 65 6d 3b 0a 20 20 20 20 72 65 67 52 6f 77  nMem;.    regRow
e460: 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65   = ++pParse->nMe
e470: 6d 3b 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74  m;.    v = sqlit
e480: 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65  e3GetVdbe(pParse
e490: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
e4a0: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
e4b0: 34 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  4);.    sqlite3V
e4c0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
e4d0: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
e4e0: 2c 20 22 74 61 62 6c 65 22 2c 20 53 51 4c 49 54  , "table", SQLIT
e4f0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73  E_STATIC);.    s
e500: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
e510: 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41  Name(v, 1, COLNA
e520: 4d 45 5f 4e 41 4d 45 2c 20 22 72 6f 77 69 64 22  ME_NAME, "rowid"
e530: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
e540: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
e550: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32  eSetColName(v, 2
e560: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
e570: 22 70 61 72 65 6e 74 22 2c 20 53 51 4c 49 54 45  "parent", SQLITE
e580: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71  _STATIC);.    sq
e590: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
e5a0: 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d  ame(v, 3, COLNAM
e5b0: 45 5f 4e 41 4d 45 2c 20 22 66 6b 69 64 22 2c 20  E_NAME, "fkid", 
e5c0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
e5d0: 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56      sqlite3CodeV
e5e0: 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72  erifySchema(pPar
e5f0: 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 6b 20  se, iDb);.    k 
e600: 3d 20 73 71 6c 69 74 65 48 61 73 68 46 69 72 73  = sqliteHashFirs
e610: 74 28 26 64 62 2d 3e 61 44 62 5b 69 44 62 5d 2e  t(&db->aDb[iDb].
e620: 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68  pSchema->tblHash
e630: 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 6b 20  );.    while( k 
e640: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69  ){.      if( zRi
e650: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 20 20 70  ght ){.        p
e660: 54 61 62 20 3d 20 73 71 6c 69 74 65 33 4c 6f 63  Tab = sqlite3Loc
e670: 61 74 65 54 61 62 6c 65 28 70 50 61 72 73 65 2c  ateTable(pParse,
e680: 20 30 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29   0, zRight, zDb)
e690: 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b  ;.        k = 0;
e6a0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
e6b0: 20 20 20 20 20 20 70 54 61 62 20 3d 20 28 54 61        pTab = (Ta
e6c0: 62 6c 65 2a 29 73 71 6c 69 74 65 48 61 73 68 44  ble*)sqliteHashD
e6d0: 61 74 61 28 6b 29 3b 0a 20 20 20 20 20 20 20 20  ata(k);.        
e6e0: 6b 20 3d 20 73 71 6c 69 74 65 48 61 73 68 4e 65  k = sqliteHashNe
e6f0: 78 74 28 6b 29 3b 0a 20 20 20 20 20 20 7d 0a 20  xt(k);.      }. 
e700: 20 20 20 20 20 69 66 28 20 70 54 61 62 3d 3d 30       if( pTab==0
e710: 20 7c 7c 20 70 54 61 62 2d 3e 70 46 4b 65 79 3d   || pTab->pFKey=
e720: 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =0 ) continue;. 
e730: 20 20 20 20 20 73 71 6c 69 74 65 33 54 61 62 6c       sqlite3Tabl
e740: 65 4c 6f 63 6b 28 70 50 61 72 73 65 2c 20 69 44  eLock(pParse, iD
e750: 62 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c 20 30  b, pTab->tnum, 0
e760: 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 29 3b 0a  , pTab->zName);.
e770: 20 20 20 20 20 20 69 66 28 20 70 54 61 62 2d 3e        if( pTab->
e780: 6e 43 6f 6c 2b 72 65 67 52 6f 77 3e 70 50 61 72  nCol+regRow>pPar
e790: 73 65 2d 3e 6e 4d 65 6d 20 29 20 70 50 61 72 73  se->nMem ) pPars
e7a0: 65 2d 3e 6e 4d 65 6d 20 3d 20 70 54 61 62 2d 3e  e->nMem = pTab->
e7b0: 6e 43 6f 6c 20 2b 20 72 65 67 52 6f 77 3b 0a 20  nCol + regRow;. 
e7c0: 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65 6e       sqlite3Open
e7d0: 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20 30 2c  Table(pParse, 0,
e7e0: 20 69 44 62 2c 20 70 54 61 62 2c 20 4f 50 5f 4f   iDb, pTab, OP_O
e7f0: 70 65 6e 52 65 61 64 29 3b 0a 20 20 20 20 20 20  penRead);.      
e800: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e810: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
e820: 20 30 2c 20 72 65 67 52 65 73 75 6c 74 2c 20 30   0, regResult, 0
e830: 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20  , pTab->zName,. 
e840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e850: 20 20 20 20 20 20 20 50 34 5f 54 52 41 4e 53 49         P4_TRANSI
e860: 45 4e 54 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  ENT);.      for(
e870: 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e 70  i=1, pFK=pTab->p
e880: 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20  FKey; pFK; i++, 
e890: 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46 72  pFK=pFK->pNextFr
e8a0: 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70 50 61  om){.        pPa
e8b0: 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33 46 69  rent = sqlite3Fi
e8c0: 6e 64 54 61 62 6c 65 28 64 62 2c 20 70 46 4b 2d  ndTable(db, pFK-
e8d0: 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20 20  >zTo, zDb);.    
e8e0: 20 20 20 20 69 66 28 20 70 50 61 72 65 6e 74 3d      if( pParent=
e8f0: 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =0 ) continue;. 
e900: 20 20 20 20 20 20 20 70 49 64 78 20 3d 20 30 3b         pIdx = 0;
e910: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
e920: 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65  TableLock(pParse
e930: 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2d 3e  , iDb, pParent->
e940: 74 6e 75 6d 2c 20 30 2c 20 70 50 61 72 65 6e 74  tnum, 0, pParent
e950: 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  ->zName);.      
e960: 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46 6b 4c    x = sqlite3FkL
e970: 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61 72 73  ocateIndex(pPars
e980: 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46 4b 2c  e, pParent, pFK,
e990: 20 26 70 49 64 78 2c 20 30 29 3b 0a 20 20 20 20   &pIdx, 0);.    
e9a0: 20 20 20 20 69 66 28 20 78 3d 3d 30 20 29 7b 0a      if( x==0 ){.
e9b0: 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 49            if( pI
e9c0: 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  dx==0 ){.       
e9d0: 20 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65 6e       sqlite3Open
e9e0: 54 61 62 6c 65 28 70 50 61 72 73 65 2c 20 69 2c  Table(pParse, i,
e9f0: 20 69 44 62 2c 20 70 50 61 72 65 6e 74 2c 20 4f   iDb, pParent, O
ea00: 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20 20  P_OpenRead);.   
ea10: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
ea20: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
ea30: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
ea40: 50 5f 4f 70 65 6e 52 65 61 64 2c 20 69 2c 20 70  P_OpenRead, i, p
ea50: 49 64 78 2d 3e 74 6e 75 6d 2c 20 69 44 62 29 3b  Idx->tnum, iDb);
ea60: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
ea70: 69 74 65 33 56 64 62 65 53 65 74 50 34 4b 65 79  ite3VdbeSetP4Key
ea80: 49 6e 66 6f 28 70 50 61 72 73 65 2c 20 70 49 64  Info(pParse, pId
ea90: 78 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  x);.          }.
eaa0: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
eab0: 20 20 20 20 20 20 20 20 20 6b 20 3d 20 30 3b 0a           k = 0;.
eac0: 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
ead0: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
eae0: 20 7d 0a 20 20 20 20 20 20 61 73 73 65 72 74 28   }.      assert(
eaf0: 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 3e 30 20   pParse->nErr>0 
eb00: 7c 7c 20 70 46 4b 3d 3d 30 20 29 3b 0a 20 20 20  || pFK==0 );.   
eb10: 20 20 20 69 66 28 20 70 46 4b 20 29 20 62 72 65     if( pFK ) bre
eb20: 61 6b 3b 0a 20 20 20 20 20 20 69 66 28 20 70 50  ak;.      if( pP
eb30: 61 72 73 65 2d 3e 6e 54 61 62 3c 69 20 29 20 70  arse->nTab<i ) p
eb40: 50 61 72 73 65 2d 3e 6e 54 61 62 20 3d 20 69 3b  Parse->nTab = i;
eb50: 0a 20 20 20 20 20 20 61 64 64 72 54 6f 70 20 3d  .      addrTop =
eb60: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
eb70: 70 31 28 76 2c 20 4f 50 5f 52 65 77 69 6e 64 2c  p1(v, OP_Rewind,
eb80: 20 30 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67   0); VdbeCoverag
eb90: 65 28 76 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  e(v);.      for(
eba0: 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62 2d 3e 70  i=1, pFK=pTab->p
ebb0: 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b 2b 2c 20  FKey; pFK; i++, 
ebc0: 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78 74 46 72  pFK=pFK->pNextFr
ebd0: 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20 70 50 61  om){.        pPa
ebe0: 72 65 6e 74 20 3d 20 73 71 6c 69 74 65 33 46 69  rent = sqlite3Fi
ebf0: 6e 64 54 61 62 6c 65 28 64 62 2c 20 70 46 4b 2d  ndTable(db, pFK-
ec00: 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20 20 20 20  >zTo, zDb);.    
ec10: 20 20 20 20 70 49 64 78 20 3d 20 30 3b 0a 20 20      pIdx = 0;.  
ec20: 20 20 20 20 20 20 61 69 43 6f 6c 73 20 3d 20 30        aiCols = 0
ec30: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 50  ;.        if( pP
ec40: 61 72 65 6e 74 20 29 7b 0a 20 20 20 20 20 20 20  arent ){.       
ec50: 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33 46 6b     x = sqlite3Fk
ec60: 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50 61 72  LocateIndex(pPar
ec70: 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70 46 4b  se, pParent, pFK
ec80: 2c 20 26 70 49 64 78 2c 20 26 61 69 43 6f 6c 73  , &pIdx, &aiCols
ec90: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  );.          ass
eca0: 65 72 74 28 20 78 3d 3d 30 20 29 3b 0a 20 20 20  ert( x==0 );.   
ecb0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 61       }.        a
ecc0: 64 64 72 4f 6b 20 3d 20 73 71 6c 69 74 65 33 56  ddrOk = sqlite3V
ecd0: 64 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b  dbeMakeLabel(v);
ece0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 50 61  .        if( pPa
ecf0: 72 65 6e 74 20 26 26 20 70 49 64 78 3d 3d 30 20  rent && pIdx==0 
ed00: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74  ){.          int
ed10: 20 69 4b 65 79 20 3d 20 70 46 4b 2d 3e 61 43 6f   iKey = pFK->aCo
ed20: 6c 5b 30 5d 2e 69 46 72 6f 6d 3b 0a 20 20 20 20  l[0].iFrom;.    
ed30: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 69 4b        assert( iK
ed40: 65 79 3e 3d 30 20 26 26 20 69 4b 65 79 3c 70 54  ey>=0 && iKey<pT
ed50: 61 62 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20 20  ab->nCol );.    
ed60: 20 20 20 20 20 20 69 66 28 20 69 4b 65 79 21 3d        if( iKey!=
ed70: 70 54 61 62 2d 3e 69 50 4b 65 79 20 29 7b 0a 20  pTab->iPKey ){. 
ed80: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
ed90: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
eda0: 4f 50 5f 43 6f 6c 75 6d 6e 2c 20 30 2c 20 69 4b  OP_Column, 0, iK
edb0: 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20  ey, regRow);.   
edc0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
edd0: 43 6f 6c 75 6d 6e 44 65 66 61 75 6c 74 28 76 2c  ColumnDefault(v,
ede0: 20 70 54 61 62 2c 20 69 4b 65 79 2c 20 72 65 67   pTab, iKey, reg
edf0: 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Row);.          
ee00: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
ee10: 4f 70 32 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c  Op2(v, OP_IsNull
ee20: 2c 20 72 65 67 52 6f 77 2c 20 61 64 64 72 4f 6b  , regRow, addrOk
ee30: 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
ee40: 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  v);.            
ee50: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
ee60: 32 28 76 2c 20 4f 50 5f 4d 75 73 74 42 65 49 6e  2(v, OP_MustBeIn
ee70: 74 2c 20 72 65 67 52 6f 77 2c 20 0a 20 20 20 20  t, regRow, .    
ee80: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
ee90: 65 33 56 64 62 65 43 75 72 72 65 6e 74 41 64 64  e3VdbeCurrentAdd
eea0: 72 28 76 29 2b 33 29 3b 20 56 64 62 65 43 6f 76  r(v)+3); VdbeCov
eeb0: 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
eec0: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
eed0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
eee0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
eef0: 6f 77 69 64 2c 20 30 2c 20 72 65 67 52 6f 77 29  owid, 0, regRow)
ef00: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
ef10: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
ef20: 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
ef30: 4e 6f 74 45 78 69 73 74 73 2c 20 69 2c 20 30 2c  NotExists, i, 0,
ef40: 20 72 65 67 52 6f 77 29 3b 20 56 64 62 65 43 6f   regRow); VdbeCo
ef50: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
ef60: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ef70: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 47 6f 74  AddOp2(v, OP_Got
ef80: 6f 2c 20 30 2c 20 61 64 64 72 4f 6b 29 3b 0a 20  o, 0, addrOk);. 
ef90: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
efa0: 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
efb0: 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72 65  sqlite3VdbeCurre
efc0: 6e 74 41 64 64 72 28 76 29 2d 32 29 3b 0a 20 20  ntAddr(v)-2);.  
efd0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
efe0: 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b 20         for(j=0; 
eff0: 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b 2b  j<pFK->nCol; j++
f000: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  ){.            s
f010: 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47 65  qlite3ExprCodeGe
f020: 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28 76  tColumnOfTable(v
f030: 2c 20 70 54 61 62 2c 20 30 2c 0a 20 20 20 20 20  , pTab, 0,.     
f040: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f050: 20 20 20 20 20 20 20 61 69 43 6f 6c 73 20 3f 20         aiCols ? 
f060: 61 69 43 6f 6c 73 5b 6a 5d 20 3a 20 70 46 4b 2d  aiCols[j] : pFK-
f070: 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 2c 20  >aCol[j].iFrom, 
f080: 72 65 67 52 6f 77 2b 6a 29 3b 0a 20 20 20 20 20  regRow+j);.     
f090: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
f0a0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
f0b0: 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2b 6a 2c  sNull, regRow+j,
f0c0: 20 61 64 64 72 4f 6b 29 3b 20 56 64 62 65 43 6f   addrOk); VdbeCo
f0d0: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
f0e0: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
f0f0: 20 69 66 28 20 70 50 61 72 65 6e 74 20 29 7b 0a   if( pParent ){.
f100: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
f110: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
f120: 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 2c 20   OP_MakeRecord, 
f130: 72 65 67 52 6f 77 2c 20 70 46 4b 2d 3e 6e 43 6f  regRow, pFK->nCo
f140: 6c 2c 20 72 65 67 4b 65 79 2c 0a 20 20 20 20 20  l, regKey,.     
f150: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f160: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
f170: 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72  IndexAffinityStr
f180: 28 76 2c 70 49 64 78 29 2c 20 70 46 4b 2d 3e 6e  (v,pIdx), pFK->n
f190: 43 6f 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Col);.          
f1a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
f1b0: 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46 6f 75  Op4Int(v, OP_Fou
f1c0: 6e 64 2c 20 69 2c 20 61 64 64 72 4f 6b 2c 20 72  nd, i, addrOk, r
f1d0: 65 67 4b 65 79 2c 20 30 29 3b 0a 20 20 20 20 20  egKey, 0);.     
f1e0: 20 20 20 20 20 20 20 56 64 62 65 43 6f 76 65 72         VdbeCover
f1f0: 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
f200: 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20    }.        }.  
f210: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
f220: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 6f  eAddOp2(v, OP_Ro
f230: 77 69 64 2c 20 30 2c 20 72 65 67 52 65 73 75 6c  wid, 0, regResul
f240: 74 2b 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71  t+1);.        sq
f250: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
f260: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
f270: 2c 20 72 65 67 52 65 73 75 6c 74 2b 32 2c 20 30  , regResult+2, 0
f280: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
f290: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 46 4b               pFK
f2a0: 2d 3e 7a 54 6f 2c 20 50 34 5f 54 52 41 4e 53 49  ->zTo, P4_TRANSI
f2b0: 45 4e 54 29 3b 0a 20 20 20 20 20 20 20 20 73 71  ENT);.        sq
f2c0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
f2d0: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69  v, OP_Integer, i
f2e0: 2d 31 2c 20 72 65 67 52 65 73 75 6c 74 2b 33 29  -1, regResult+3)
f2f0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
f300: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
f310: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 72 65 67  P_ResultRow, reg
f320: 52 65 73 75 6c 74 2c 20 34 29 3b 0a 20 20 20 20  Result, 4);.    
f330: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 52      sqlite3VdbeR
f340: 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76 2c 20 61  esolveLabel(v, a
f350: 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20  ddrOk);.        
f360: 73 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62  sqlite3DbFree(db
f370: 2c 20 61 69 43 6f 6c 73 29 3b 0a 20 20 20 20 20  , aiCols);.     
f380: 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
f390: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
f3a0: 5f 4e 65 78 74 2c 20 30 2c 20 61 64 64 72 54 6f  _Next, 0, addrTo
f3b0: 70 2b 31 29 3b 20 56 64 62 65 43 6f 76 65 72 61  p+1); VdbeCovera
f3c0: 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73 71 6c  ge(v);.      sql
f3d0: 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
f3e0: 28 76 2c 20 61 64 64 72 54 6f 70 29 3b 0a 20 20  (v, addrTop);.  
f3f0: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
f400: 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66 69  .#endif /* !defi
f410: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
f420: 54 52 49 47 47 45 52 29 20 2a 2f 0a 23 65 6e 64  TRIGGER) */.#end
f430: 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53  if /* !defined(S
f440: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
f450: 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69 66 6e  GN_KEY) */..#ifn
f460: 64 65 66 20 4e 44 45 42 55 47 0a 20 20 63 61 73  def NDEBUG.  cas
f470: 65 20 50 72 61 67 54 79 70 5f 50 41 52 53 45 52  e PragTyp_PARSER
f480: 5f 54 52 41 43 45 3a 20 7b 0a 20 20 20 20 69 66  _TRACE: {.    if
f490: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
f4a0: 20 20 69 66 28 20 73 71 6c 69 74 65 33 47 65 74    if( sqlite3Get
f4b0: 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20  Boolean(zRight, 
f4c0: 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  0) ){.        sq
f4d0: 6c 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65  lite3ParserTrace
f4e0: 28 73 74 64 65 72 72 2c 20 22 70 61 72 73 65 72  (stderr, "parser
f4f0: 3a 20 22 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  : ");.      }els
f500: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
f510: 65 33 50 61 72 73 65 72 54 72 61 63 65 28 30 2c  e3ParserTrace(0,
f520: 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20   0);.      }.   
f530: 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a   }.  }.  break;.
f540: 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 52 65 69  #endif..  /* Rei
f550: 6e 73 74 61 6c 6c 20 74 68 65 20 4c 49 4b 45 20  nstall the LIKE 
f560: 61 6e 64 20 47 4c 4f 42 20 66 75 6e 63 74 69 6f  and GLOB functio
f570: 6e 73 2e 20 20 54 68 65 20 76 61 72 69 61 6e 74  ns.  The variant
f580: 20 6f 66 20 4c 49 4b 45 0a 20 20 2a 2a 20 75 73   of LIKE.  ** us
f590: 65 64 20 77 69 6c 6c 20 62 65 20 63 61 73 65 20  ed will be case 
f5a0: 73 65 6e 73 69 74 69 76 65 20 6f 72 20 6e 6f 74  sensitive or not
f5b0: 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20 74 68   depending on th
f5c0: 65 20 52 48 53 2e 0a 20 20 2a 2f 0a 20 20 63 61  e RHS..  */.  ca
f5d0: 73 65 20 50 72 61 67 54 79 70 5f 43 41 53 45 5f  se PragTyp_CASE_
f5e0: 53 45 4e 53 49 54 49 56 45 5f 4c 49 4b 45 3a 20  SENSITIVE_LIKE: 
f5f0: 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  {.    if( zRight
f600: 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
f610: 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46 75 6e  3RegisterLikeFun
f620: 63 74 69 6f 6e 73 28 64 62 2c 20 73 71 6c 69 74  ctions(db, sqlit
f630: 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69  e3GetBoolean(zRi
f640: 67 68 74 2c 20 30 29 29 3b 0a 20 20 20 20 7d 0a  ght, 0));.    }.
f650: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 23 69    }.  break;..#i
f660: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 49 4e 54  fndef SQLITE_INT
f670: 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52  EGRITY_CHECK_ERR
f680: 4f 52 5f 4d 41 58 0a 23 20 64 65 66 69 6e 65 20  OR_MAX.# define 
f690: 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49 54 59  SQLITE_INTEGRITY
f6a0: 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58  _CHECK_ERROR_MAX
f6b0: 20 31 30 30 0a 23 65 6e 64 69 66 0a 0a 23 69 66   100.#endif..#if
f6c0: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
f6d0: 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
f6e0: 0a 20 20 2f 2a 20 50 72 61 67 6d 61 20 22 71 75  .  /* Pragma "qu
f6f0: 69 63 6b 5f 63 68 65 63 6b 22 20 69 73 20 72 65  ick_check" is re
f700: 64 75 63 65 64 20 76 65 72 73 69 6f 6e 20 6f 66  duced version of
f710: 20 0a 20 20 2a 2a 20 69 6e 74 65 67 72 69 74 79   .  ** integrity
f720: 5f 63 68 65 63 6b 20 64 65 73 69 67 6e 65 64 20  _check designed 
f730: 74 6f 20 64 65 74 65 63 74 20 6d 6f 73 74 20 64  to detect most d
f740: 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69  atabase corrupti
f750: 6f 6e 0a 20 20 2a 2a 20 77 69 74 68 6f 75 74 20  on.  ** without 
f760: 6d 6f 73 74 20 6f 66 20 74 68 65 20 6f 76 65 72  most of the over
f770: 68 65 61 64 20 6f 66 20 61 20 66 75 6c 6c 20 69  head of a full i
f780: 6e 74 65 67 72 69 74 79 2d 63 68 65 63 6b 2e 0a  ntegrity-check..
f790: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
f7a0: 54 79 70 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  Typ_INTEGRITY_CH
f7b0: 45 43 4b 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69  ECK: {.    int i
f7c0: 2c 20 6a 2c 20 61 64 64 72 2c 20 6d 78 45 72 72  , j, addr, mxErr
f7d0: 3b 0a 0a 20 20 20 20 2f 2a 20 43 6f 64 65 20 74  ;..    /* Code t
f7e0: 68 61 74 20 61 70 70 65 61 72 73 20 61 74 20 74  hat appears at t
f7f0: 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20 69 6e  he end of the in
f800: 74 65 67 72 69 74 79 20 63 68 65 63 6b 2e 20 20  tegrity check.  
f810: 49 66 20 6e 6f 20 65 72 72 6f 72 0a 20 20 20 20  If no error.    
f820: 2a 2a 20 6d 65 73 73 61 67 65 73 20 68 61 76 65  ** messages have
f830: 20 62 65 65 6e 20 67 65 6e 65 72 61 74 65 64 2c   been generated,
f840: 20 6f 75 74 70 75 74 20 4f 4b 2e 20 20 4f 74 68   output OK.  Oth
f850: 65 72 77 69 73 65 20 6f 75 74 70 75 74 20 74 68  erwise output th
f860: 65 0a 20 20 20 20 2a 2a 20 65 72 72 6f 72 20 6d  e.    ** error m
f870: 65 73 73 61 67 65 0a 20 20 20 20 2a 2f 0a 20 20  essage.    */.  
f880: 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69    static const i
f890: 6e 74 20 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46  nt iLn = VDBE_OF
f8a0: 46 53 45 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a  FSET_LINENO(2);.
f8b0: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
f8c0: 20 56 64 62 65 4f 70 4c 69 73 74 20 65 6e 64 43   VdbeOpList endC
f8d0: 6f 64 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  ode[] = {.      
f8e0: 7b 20 4f 50 5f 49 66 4e 65 67 2c 20 20 20 20 20  { OP_IfNeg,     
f8f0: 20 20 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30    1, 0,        0
f900: 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20  },    /* 0 */.  
f910: 20 20 20 20 7b 20 4f 50 5f 53 74 72 69 6e 67 38      { OP_String8
f920: 2c 20 20 20 20 20 30 2c 20 33 2c 20 20 20 20 20  ,     0, 3,     
f930: 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a     0},    /* 1 *
f940: 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 73  /.      { OP_Res
f950: 75 6c 74 52 6f 77 2c 20 20 20 33 2c 20 31 2c 20  ultRow,   3, 1, 
f960: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 7d         0},.    }
f970: 3b 0a 0a 20 20 20 20 69 6e 74 20 69 73 51 75 69  ;..    int isQui
f980: 63 6b 20 3d 20 28 73 71 6c 69 74 65 33 54 6f 6c  ck = (sqlite3Tol
f990: 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29 3d 3d  ower(zLeft[0])==
f9a0: 27 71 27 29 3b 0a 0a 20 20 20 20 2f 2a 20 49 66  'q');..    /* If
f9b0: 20 74 68 65 20 50 52 41 47 4d 41 20 63 6f 6d 6d   the PRAGMA comm
f9c0: 61 6e 64 20 77 61 73 20 6f 66 20 74 68 65 20 66  and was of the f
f9d0: 6f 72 6d 20 22 50 52 41 47 4d 41 20 3c 64 62 3e  orm "PRAGMA <db>
f9e0: 2e 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b  .integrity_check
f9f0: 22 2c 0a 20 20 20 20 2a 2a 20 74 68 65 6e 20 69  ",.    ** then i
fa00: 44 62 20 69 73 20 73 65 74 20 74 6f 20 74 68 65  Db is set to the
fa10: 20 69 6e 64 65 78 20 6f 66 20 74 68 65 20 64 61   index of the da
fa20: 74 61 62 61 73 65 20 69 64 65 6e 74 69 66 69 65  tabase identifie
fa30: 64 20 62 79 20 3c 64 62 3e 2e 0a 20 20 20 20 2a  d by <db>..    *
fa40: 2a 20 49 6e 20 74 68 69 73 20 63 61 73 65 2c 20  * In this case, 
fa50: 74 68 65 20 69 6e 74 65 67 72 69 74 79 20 6f 66  the integrity of
fa60: 20 64 61 74 61 62 61 73 65 20 69 44 62 20 6f 6e   database iDb on
fa70: 6c 79 20 69 73 20 76 65 72 69 66 69 65 64 20 62  ly is verified b
fa80: 79 0a 20 20 20 20 2a 2a 20 74 68 65 20 56 44 42  y.    ** the VDB
fa90: 45 20 63 72 65 61 74 65 64 20 62 65 6c 6f 77 2e  E created below.
faa0: 0a 20 20 20 20 2a 2a 0a 20 20 20 20 2a 2a 20 4f  .    **.    ** O
fab0: 74 68 65 72 77 69 73 65 2c 20 69 66 20 74 68 65  therwise, if the
fac0: 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 73 69 6d   command was sim
fad0: 70 6c 79 20 22 50 52 41 47 4d 41 20 69 6e 74 65  ply "PRAGMA inte
fae0: 67 72 69 74 79 5f 63 68 65 63 6b 22 20 28 6f 72  grity_check" (or
faf0: 0a 20 20 20 20 2a 2a 20 22 50 52 41 47 4d 41 20  .    ** "PRAGMA 
fb00: 71 75 69 63 6b 5f 63 68 65 63 6b 22 29 2c 20 74  quick_check"), t
fb10: 68 65 6e 20 69 44 62 20 69 73 20 73 65 74 20 74  hen iDb is set t
fb20: 6f 20 30 2e 20 49 6e 20 74 68 69 73 20 63 61 73  o 0. In this cas
fb30: 65 2c 20 73 65 74 20 69 44 62 0a 20 20 20 20 2a  e, set iDb.    *
fb40: 2a 20 74 6f 20 2d 31 20 68 65 72 65 2c 20 74 6f  * to -1 here, to
fb50: 20 69 6e 64 69 63 61 74 65 20 74 68 61 74 20 74   indicate that t
fb60: 68 65 20 56 44 42 45 20 73 68 6f 75 6c 64 20 76  he VDBE should v
fb70: 65 72 69 66 79 20 74 68 65 20 69 6e 74 65 67 72  erify the integr
fb80: 69 74 79 0a 20 20 20 20 2a 2a 20 6f 66 20 61 6c  ity.    ** of al
fb90: 6c 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62  l attached datab
fba0: 61 73 65 73 2e 20 20 2a 2f 0a 20 20 20 20 61 73  ases.  */.    as
fbb0: 73 65 72 74 28 20 69 44 62 3e 3d 30 20 29 3b 0a  sert( iDb>=0 );.
fbc0: 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62 3d      assert( iDb=
fbd0: 3d 30 20 7c 7c 20 70 49 64 32 2d 3e 7a 20 29 3b  =0 || pId2->z );
fbe0: 0a 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 7a  .    if( pId2->z
fbf0: 3d 3d 30 20 29 20 69 44 62 20 3d 20 2d 31 3b 0a  ==0 ) iDb = -1;.
fc00: 0a 20 20 20 20 2f 2a 20 49 6e 69 74 69 61 6c 69  .    /* Initiali
fc10: 7a 65 20 74 68 65 20 56 44 42 45 20 70 72 6f 67  ze the VDBE prog
fc20: 72 61 6d 20 2a 2f 0a 20 20 20 20 70 50 61 72 73  ram */.    pPars
fc30: 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20  e->nMem = 6;.   
fc40: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
fc50: 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
fc60: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
fc70: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
fc80: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 69 6e 74  LNAME_NAME, "int
fc90: 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 20 53  egrity_check", S
fca0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a  QLITE_STATIC);..
fcb0: 20 20 20 20 2f 2a 20 53 65 74 20 74 68 65 20 6d      /* Set the m
fcc0: 61 78 69 6d 75 6d 20 65 72 72 6f 72 20 63 6f 75  aximum error cou
fcd0: 6e 74 20 2a 2f 0a 20 20 20 20 6d 78 45 72 72 20  nt */.    mxErr 
fce0: 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49  = SQLITE_INTEGRI
fcf0: 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d  TY_CHECK_ERROR_M
fd00: 41 58 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  AX;.    if( zRig
fd10: 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ht ){.      sqli
fd20: 74 65 33 47 65 74 49 6e 74 33 32 28 7a 52 69 67  te3GetInt32(zRig
fd30: 68 74 2c 20 26 6d 78 45 72 72 29 3b 0a 20 20 20  ht, &mxErr);.   
fd40: 20 20 20 69 66 28 20 6d 78 45 72 72 3c 3d 30 20     if( mxErr<=0 
fd50: 29 7b 0a 20 20 20 20 20 20 20 20 6d 78 45 72 72  ){.        mxErr
fd60: 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52   = SQLITE_INTEGR
fd70: 49 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f  ITY_CHECK_ERROR_
fd80: 4d 41 58 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  MAX;.      }.   
fd90: 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64   }.    sqlite3Vd
fda0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
fdb0: 6e 74 65 67 65 72 2c 20 6d 78 45 72 72 2c 20 31  nteger, mxErr, 1
fdc0: 29 3b 20 20 2f 2a 20 72 65 67 5b 31 5d 20 68 6f  );  /* reg[1] ho
fdd0: 6c 64 73 20 65 72 72 6f 72 73 20 6c 65 66 74 20  lds errors left 
fde0: 2a 2f 0a 0a 20 20 20 20 2f 2a 20 44 6f 20 61 6e  */..    /* Do an
fdf0: 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b   integrity check
fe00: 20 6f 6e 20 65 61 63 68 20 64 61 74 61 62 61 73   on each databas
fe10: 65 20 66 69 6c 65 20 2a 2f 0a 20 20 20 20 66 6f  e file */.    fo
fe20: 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62  r(i=0; i<db->nDb
fe30: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 48 61  ; i++){.      Ha
fe40: 73 68 45 6c 65 6d 20 2a 78 3b 0a 20 20 20 20 20  shElem *x;.     
fe50: 20 48 61 73 68 20 2a 70 54 62 6c 73 3b 0a 20 20   Hash *pTbls;.  
fe60: 20 20 20 20 69 6e 74 20 63 6e 74 20 3d 20 30 3b      int cnt = 0;
fe70: 0a 0a 20 20 20 20 20 20 69 66 28 20 4f 4d 49 54  ..      if( OMIT
fe80: 5f 54 45 4d 50 44 42 20 26 26 20 69 3d 3d 31 20  _TEMPDB && i==1 
fe90: 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20  ) continue;.    
fea0: 20 20 69 66 28 20 69 44 62 3e 3d 30 20 26 26 20    if( iDb>=0 && 
feb0: 69 21 3d 69 44 62 20 29 20 63 6f 6e 74 69 6e 75  i!=iDb ) continu
fec0: 65 3b 0a 0a 20 20 20 20 20 20 73 71 6c 69 74 65  e;..      sqlite
fed0: 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
fee0: 61 28 70 50 61 72 73 65 2c 20 69 29 3b 0a 20 20  a(pParse, i);.  
fef0: 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74      addr = sqlit
ff00: 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20  e3VdbeAddOp1(v, 
ff10: 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 2f 2a  OP_IfPos, 1); /*
ff20: 20 48 61 6c 74 20 69 66 20 6f 75 74 20 6f 66 20   Halt if out of 
ff30: 65 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20 20 20  errors */.      
ff40: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
ff50: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
ff60: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48  beAddOp2(v, OP_H
ff70: 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  alt, 0, 0);.    
ff80: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
ff90: 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a  pHere(v, addr);.
ffa0: 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 61 6e 20  .      /* Do an 
ffb0: 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 20  integrity check 
ffc0: 6f 66 20 74 68 65 20 42 2d 54 72 65 65 0a 20 20  of the B-Tree.  
ffd0: 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20      **.      ** 
ffe0: 42 65 67 69 6e 20 62 79 20 66 69 6c 6c 69 6e 67  Begin by filling
fff0: 20 72 65 67 69 73 74 65 72 73 20 32 2c 20 33 2c   registers 2, 3,
10000 20 2e 2e 2e 20 77 69 74 68 20 74 68 65 20 72 6f   ... with the ro
10010 6f 74 20 70 61 67 65 73 20 6e 75 6d 62 65 72 73  ot pages numbers
10020 0a 20 20 20 20 20 20 2a 2a 20 66 6f 72 20 61 6c  .      ** for al
10030 6c 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e 64  l tables and ind
10040 69 63 65 73 20 69 6e 20 74 68 65 20 64 61 74 61  ices in the data
10050 62 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  base..      */. 
10060 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c       assert( sql
10070 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48  ite3SchemaMutexH
10080 65 6c 64 28 64 62 2c 20 69 2c 20 30 29 20 29 3b  eld(db, i, 0) );
10090 0a 20 20 20 20 20 20 70 54 62 6c 73 20 3d 20 26  .      pTbls = &
100a0 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 53 63 68 65  db->aDb[i].pSche
100b0 6d 61 2d 3e 74 62 6c 48 61 73 68 3b 0a 20 20 20  ma->tblHash;.   
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 3b 20 78 3d 73 71 6c 69 74 65 48 61 73 68   x; x=sqliteHash
100f0 4e 65 78 74 28 78 29 29 7b 0a 20 20 20 20 20 20  Next(x)){.      
10100 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20    Table *pTab = 
10110 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 78  sqliteHashData(x
10120 29 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78  );.        Index
10130 20 2a 70 49 64 78 3b 0a 20 20 20 20 20 20 20 20   *pIdx;.        
10140 69 66 28 20 48 61 73 52 6f 77 69 64 28 70 54 61  if( HasRowid(pTa
10150 62 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  b) ){.          
10160 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
10170 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
10180 20 70 54 61 62 2d 3e 74 6e 75 6d 2c 20 32 2b 63   pTab->tnum, 2+c
10190 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20 56  nt);.          V
101a0 64 62 65 43 6f 6d 6d 65 6e 74 28 28 76 2c 20 22  dbeComment((v, "
101b0 25 73 22 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65  %s", pTab->zName
101c0 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 63 6e  ));.          cn
101d0 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  t++;.        }. 
101e0 20 20 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d         for(pIdx=
101f0 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49  pTab->pIndex; pI
10200 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70  dx; pIdx=pIdx->p
10210 4e 65 78 74 29 7b 0a 20 20 20 20 20 20 20 20 20  Next){.         
10220 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
10230 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
10240 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 32 2b  , pIdx->tnum, 2+
10250 63 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  cnt);.          
10260 56 64 62 65 43 6f 6d 6d 65 6e 74 28 28 76 2c 20  VdbeComment((v, 
10270 22 25 73 22 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d  "%s", pIdx->zNam
10280 65 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 63  e));.          c
10290 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nt++;.        }.
102a0 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f        }..      /
102b0 2a 20 4d 61 6b 65 20 73 75 72 65 20 73 75 66 66  * Make sure suff
102c0 69 63 69 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66  icient number of
102d0 20 72 65 67 69 73 74 65 72 73 20 68 61 76 65 20   registers have 
102e0 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20 2a  been allocated *
102f0 2f 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e  /.      pParse->
10300 6e 4d 65 6d 20 3d 20 4d 41 58 28 20 70 50 61 72  nMem = MAX( pPar
10310 73 65 2d 3e 6e 4d 65 6d 2c 20 63 6e 74 2b 38 20  se->nMem, cnt+8 
10320 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20  );..      /* Do 
10330 74 68 65 20 62 2d 74 72 65 65 20 69 6e 74 65 67  the b-tree integ
10340 72 69 74 79 20 63 68 65 63 6b 73 20 2a 2f 0a 20  rity checks */. 
10350 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10360 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 49 6e 74  AddOp3(v, OP_Int
10370 65 67 72 69 74 79 43 6b 2c 20 32 2c 20 63 6e 74  egrityCk, 2, cnt
10380 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 1);.      sqli
10390 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 35 28  te3VdbeChangeP5(
103a0 76 2c 20 28 75 38 29 69 29 3b 0a 20 20 20 20 20  v, (u8)i);.     
103b0 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56   addr = sqlite3V
103c0 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f  dbeAddOp1(v, OP_
103d0 49 73 4e 75 6c 6c 2c 20 32 29 3b 20 56 64 62 65  IsNull, 2); Vdbe
103e0 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
103f0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
10400 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
10410 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20  g8, 0, 3, 0,.   
10420 20 20 20 20 20 20 73 71 6c 69 74 65 33 4d 50 72        sqlite3MPr
10430 69 6e 74 66 28 64 62 2c 20 22 2a 2a 2a 20 69 6e  intf(db, "*** in
10440 20 64 61 74 61 62 61 73 65 20 25 73 20 2a 2a 2a   database %s ***
10450 5c 6e 22 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  \n", db->aDb[i].
10460 7a 4e 61 6d 65 29 2c 0a 20 20 20 20 20 20 20 20  zName),.        
10470 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20   P4_DYNAMIC);.  
10480 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
10490 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4d 6f 76 65  ddOp3(v, OP_Move
104a0 2c 20 32 2c 20 34 2c 20 31 29 3b 0a 20 20 20 20  , 2, 4, 1);.    
104b0 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
104c0 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74  Op3(v, OP_Concat
104d0 2c 20 34 2c 20 33 2c 20 32 29 3b 0a 20 20 20 20  , 4, 3, 2);.    
104e0 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
104f0 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
10500 52 6f 77 2c 20 32 2c 20 31 29 3b 0a 20 20 20 20  Row, 2, 1);.    
10510 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
10520 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a  pHere(v, addr);.
10530 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73  .      /* Make s
10540 75 72 65 20 61 6c 6c 20 74 68 65 20 69 6e 64 69  ure all the indi
10550 63 65 73 20 61 72 65 20 63 6f 6e 73 74 72 75 63  ces are construc
10560 74 65 64 20 63 6f 72 72 65 63 74 6c 79 2e 0a 20  ted correctly.. 
10570 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 66 6f       */.      fo
10580 72 28 78 3d 73 71 6c 69 74 65 48 61 73 68 46 69  r(x=sqliteHashFi
10590 72 73 74 28 70 54 62 6c 73 29 3b 20 78 20 26 26  rst(pTbls); x &&
105a0 20 21 69 73 51 75 69 63 6b 3b 20 78 3d 73 71 6c   !isQuick; x=sql
105b0 69 74 65 48 61 73 68 4e 65 78 74 28 78 29 29 7b  iteHashNext(x)){
105c0 0a 20 20 20 20 20 20 20 20 54 61 62 6c 65 20 2a  .        Table *
105d0 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73  pTab = sqliteHas
105e0 68 44 61 74 61 28 78 29 3b 0a 20 20 20 20 20 20  hData(x);.      
105f0 20 20 49 6e 64 65 78 20 2a 70 49 64 78 2c 20 2a    Index *pIdx, *
10600 70 50 6b 3b 0a 20 20 20 20 20 20 20 20 49 6e 64  pPk;.        Ind
10610 65 78 20 2a 70 50 72 69 6f 72 20 3d 20 30 3b 0a  ex *pPrior = 0;.
10620 20 20 20 20 20 20 20 20 69 6e 74 20 6c 6f 6f 70          int loop
10630 54 6f 70 3b 0a 20 20 20 20 20 20 20 20 69 6e 74  Top;.        int
10640 20 69 44 61 74 61 43 75 72 2c 20 69 49 64 78 43   iDataCur, iIdxC
10650 75 72 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20  ur;.        int 
10660 72 31 20 3d 20 2d 31 3b 0a 0a 20 20 20 20 20 20  r1 = -1;..      
10670 20 20 69 66 28 20 70 54 61 62 2d 3e 70 49 6e 64    if( pTab->pInd
10680 65 78 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  ex==0 ) continue
10690 3b 0a 20 20 20 20 20 20 20 20 70 50 6b 20 3d 20  ;.        pPk = 
106a0 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20 3f  HasRowid(pTab) ?
106b0 20 30 20 3a 20 73 71 6c 69 74 65 33 50 72 69 6d   0 : sqlite3Prim
106c0 61 72 79 4b 65 79 49 6e 64 65 78 28 70 54 61 62  aryKeyIndex(pTab
106d0 29 3b 0a 20 20 20 20 20 20 20 20 61 64 64 72 20  );.        addr 
106e0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
106f0 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c  Op1(v, OP_IfPos,
10700 20 31 29 3b 20 20 2f 2a 20 53 74 6f 70 20 69 66   1);  /* Stop if
10710 20 6f 75 74 20 6f 66 20 65 72 72 6f 72 73 20 2a   out of errors *
10720 2f 0a 20 20 20 20 20 20 20 20 56 64 62 65 43 6f  /.        VdbeCo
10730 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
10740 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
10750 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c  dOp2(v, OP_Halt,
10760 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20   0, 0);.        
10770 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
10780 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20 20  ere(v, addr);.  
10790 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70        sqlite3Exp
107a0 72 43 61 63 68 65 43 6c 65 61 72 28 70 50 61 72  rCacheClear(pPar
107b0 73 65 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  se);.        sql
107c0 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64  ite3OpenTableAnd
107d0 49 6e 64 69 63 65 73 28 70 50 61 72 73 65 2c 20  Indices(pParse, 
107e0 70 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52 65 61  pTab, OP_OpenRea
107f0 64 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d,.             
10800 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10810 20 20 20 20 20 20 31 2c 20 30 2c 20 26 69 44 61        1, 0, &iDa
10820 74 61 43 75 72 2c 20 26 69 49 64 78 43 75 72 29  taCur, &iIdxCur)
10830 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
10840 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
10850 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20 37 29  P_Integer, 0, 7)
10860 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d  ;.        for(j=
10870 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49  0, pIdx=pTab->pI
10880 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78  ndex; pIdx; pIdx
10890 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b  =pIdx->pNext, j+
108a0 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71  +){.          sq
108b0 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
108c0 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30  v, OP_Integer, 0
108d0 2c 20 38 2b 6a 29 3b 20 2f 2a 20 69 6e 64 65 78  , 8+j); /* index
108e0 20 65 6e 74 72 69 65 73 20 63 6f 75 6e 74 65 72   entries counter
108f0 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   */.        }.  
10900 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d        pParse->nM
10910 65 6d 20 3d 20 4d 41 58 28 70 50 61 72 73 65 2d  em = MAX(pParse-
10920 3e 6e 4d 65 6d 2c 20 38 2b 6a 29 3b 0a 20 20 20  >nMem, 8+j);.   
10930 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10940 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 77  AddOp2(v, OP_Rew
10950 69 6e 64 2c 20 69 44 61 74 61 43 75 72 2c 20 30  ind, iDataCur, 0
10960 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
10970 76 29 3b 0a 20 20 20 20 20 20 20 20 6c 6f 6f 70  v);.        loop
10980 54 6f 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62  Top = sqlite3Vdb
10990 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64  eAddOp2(v, OP_Ad
109a0 64 49 6d 6d 2c 20 37 2c 20 31 29 3b 0a 20 20 20  dImm, 7, 1);.   
109b0 20 20 20 20 20 2f 2a 20 56 65 72 69 66 79 20 74       /* Verify t
109c0 68 61 74 20 61 6c 6c 20 4e 4f 54 20 4e 55 4c 4c  hat all NOT NULL
109d0 20 63 6f 6c 75 6d 6e 73 20 72 65 61 6c 6c 79 20   columns really 
109e0 61 72 65 20 4e 4f 54 20 4e 55 4c 4c 20 2a 2f 0a  are NOT NULL */.
109f0 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b          for(j=0;
10a00 20 6a 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20 6a   j<pTab->nCol; j
10a10 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 63  ++){.          c
10a20 68 61 72 20 2a 7a 45 72 72 3b 0a 20 20 20 20 20  har *zErr;.     
10a30 20 20 20 20 20 69 6e 74 20 6a 6d 70 32 2c 20 6a       int jmp2, j
10a40 6d 70 33 3b 0a 20 20 20 20 20 20 20 20 20 20 69  mp3;.          i
10a50 66 28 20 6a 3d 3d 70 54 61 62 2d 3e 69 50 4b 65  f( j==pTab->iPKe
10a60 79 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  y ) continue;.  
10a70 20 20 20 20 20 20 20 20 69 66 28 20 70 54 61 62          if( pTab
10a80 2d 3e 61 43 6f 6c 5b 6a 5d 2e 6e 6f 74 4e 75 6c  ->aCol[j].notNul
10a90 6c 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b  l==0 ) continue;
10aa0 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
10ab0 65 33 45 78 70 72 43 6f 64 65 47 65 74 43 6f 6c  e3ExprCodeGetCol
10ac0 75 6d 6e 4f 66 54 61 62 6c 65 28 76 2c 20 70 54  umnOfTable(v, pT
10ad0 61 62 2c 20 69 44 61 74 61 43 75 72 2c 20 6a 2c  ab, iDataCur, j,
10ae0 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   3);.          s
10af0 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
10b00 50 35 28 76 2c 20 4f 50 46 4c 41 47 5f 54 59 50  P5(v, OPFLAG_TYP
10b10 45 4f 46 41 52 47 29 3b 0a 20 20 20 20 20 20 20  EOFARG);.       
10b20 20 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65     jmp2 = sqlite
10b30 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
10b40 50 5f 4e 6f 74 4e 75 6c 6c 2c 20 33 29 3b 20 56  P_NotNull, 3); V
10b50 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
10b60 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
10b70 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
10b80 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29  P_AddImm, 1, -1)
10b90 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20 65  ; /* Decrement e
10ba0 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20  rror limit */.  
10bb0 20 20 20 20 20 20 20 20 7a 45 72 72 20 3d 20 73          zErr = s
10bc0 71 6c 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62  qlite3MPrintf(db
10bd0 2c 20 22 4e 55 4c 4c 20 76 61 6c 75 65 20 69 6e  , "NULL value in
10be0 20 25 73 2e 25 73 22 2c 20 70 54 61 62 2d 3e 7a   %s.%s", pTab->z
10bf0 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20  Name,.          
10c00 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10c10 20 20 20 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 6a      pTab->aCol[j
10c20 5d 2e 7a 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20  ].zName);.      
10c30 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
10c40 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
10c50 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 7a 45  ng8, 0, 3, 0, zE
10c60 72 72 2c 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b  rr, P4_DYNAMIC);
10c70 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
10c80 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
10c90 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 33 2c  OP_ResultRow, 3,
10ca0 20 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6a   1);.          j
10cb0 6d 70 33 20 3d 20 73 71 6c 69 74 65 33 56 64 62  mp3 = sqlite3Vdb
10cc0 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66  eAddOp1(v, OP_If
10cd0 50 6f 73 2c 20 31 29 3b 20 56 64 62 65 43 6f 76  Pos, 1); VdbeCov
10ce0 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
10cf0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
10d00 64 64 4f 70 30 28 76 2c 20 4f 50 5f 48 61 6c 74  ddOp0(v, OP_Halt
10d10 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  );.          sql
10d20 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65  ite3VdbeJumpHere
10d30 28 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20 20 20  (v, jmp2);.     
10d40 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10d50 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 33  JumpHere(v, jmp3
10d60 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  );.        }.   
10d70 20 20 20 20 20 2f 2a 20 56 61 6c 69 64 61 74 65       /* Validate
10d80 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73 20 66   index entries f
10d90 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74 20 72  or the current r
10da0 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 66 6f  ow */.        fo
10db0 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62  r(j=0, pIdx=pTab
10dc0 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20  ->pIndex; pIdx; 
10dd0 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74  pIdx=pIdx->pNext
10de0 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  , j++){.        
10df0 20 20 69 6e 74 20 6a 6d 70 32 2c 20 6a 6d 70 33    int jmp2, jmp3
10e00 2c 20 6a 6d 70 34 2c 20 6a 6d 70 35 3b 0a 20 20  , jmp4, jmp5;.  
10e10 20 20 20 20 20 20 20 20 69 6e 74 20 63 6b 55 6e          int ckUn
10e20 69 71 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  iq = sqlite3Vdbe
10e30 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a 20 20  MakeLabel(v);.  
10e40 20 20 20 20 20 20 20 20 69 66 28 20 70 50 6b 3d          if( pPk=
10e50 3d 70 49 64 78 20 29 20 63 6f 6e 74 69 6e 75 65  =pIdx ) continue
10e60 3b 0a 20 20 20 20 20 20 20 20 20 20 72 31 20 3d  ;.          r1 =
10e70 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
10e80 49 6e 64 65 78 4b 65 79 28 70 50 61 72 73 65 2c  IndexKey(pParse,
10e90 20 70 49 64 78 2c 20 69 44 61 74 61 43 75 72 2c   pIdx, iDataCur,
10ea0 20 30 2c 20 30 2c 20 26 6a 6d 70 33 2c 0a 20 20   0, 0, &jmp3,.  
10eb0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ec0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10ed0 20 20 20 20 20 70 50 72 69 6f 72 2c 20 72 31 29       pPrior, r1)
10ee0 3b 0a 20 20 20 20 20 20 20 20 20 20 70 50 72 69  ;.          pPri
10ef0 6f 72 20 3d 20 70 49 64 78 3b 0a 20 20 20 20 20  or = pIdx;.     
10f00 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10f10 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64  AddOp2(v, OP_Add
10f20 49 6d 6d 2c 20 38 2b 6a 2c 20 31 29 3b 20 20 2f  Imm, 8+j, 1);  /
10f30 2a 20 69 6e 63 72 65 6d 65 6e 74 20 65 6e 74 72  * increment entr
10f40 79 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 20  y count */.     
10f50 20 20 20 20 20 2f 2a 20 56 65 72 69 66 79 20 74       /* Verify t
10f60 68 61 74 20 61 6e 20 69 6e 64 65 78 20 65 6e 74  hat an index ent
10f70 72 79 20 65 78 69 73 74 73 20 66 6f 72 20 74 68  ry exists for th
10f80 65 20 63 75 72 72 65 6e 74 20 74 61 62 6c 65 20  e current table 
10f90 72 6f 77 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  row */.         
10fa0 20 6a 6d 70 32 20 3d 20 73 71 6c 69 74 65 33 56   jmp2 = sqlite3V
10fb0 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20  dbeAddOp4Int(v, 
10fc0 4f 50 5f 46 6f 75 6e 64 2c 20 69 49 64 78 43 75  OP_Found, iIdxCu
10fd0 72 2b 6a 2c 20 63 6b 55 6e 69 71 2c 20 72 31 2c  r+j, ckUniq, r1,
10fe0 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
10ff0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11000 20 20 20 20 20 20 20 70 49 64 78 2d 3e 6e 43 6f         pIdx->nCo
11010 6c 75 6d 6e 29 3b 20 56 64 62 65 43 6f 76 65 72  lumn); VdbeCover
11020 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20  age(v);.        
11030 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
11040 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d  Op2(v, OP_AddImm
11050 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44 65 63  , 1, -1); /* Dec
11060 72 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c 69 6d  rement error lim
11070 69 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20  it */.          
11080 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
11090 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
110a0 20 30 2c 20 33 2c 20 30 2c 20 22 72 6f 77 20 22   0, 3, 0, "row "
110b0 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P4_STATIC);.  
110c0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
110d0 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
110e0 43 6f 6e 63 61 74 2c 20 37 2c 20 33 2c 20 33 29  Concat, 7, 3, 3)
110f0 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
11100 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
11110 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
11120 34 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20  4, 0, .         
11130 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11140 20 20 20 22 20 6d 69 73 73 69 6e 67 20 66 72 6f     " missing fro
11150 6d 20 69 6e 64 65 78 20 22 2c 20 50 34 5f 53 54  m index ", P4_ST
11160 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 20  ATIC);.         
11170 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
11180 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c  p3(v, OP_Concat,
11190 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20   4, 3, 3);.     
111a0 20 20 20 20 20 6a 6d 70 35 20 3d 20 73 71 6c 69       jmp5 = sqli
111b0 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
111c0 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
111d0 34 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20 20  4, 0,.          
111e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
111f0 20 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e 7a           pIdx->z
11200 4e 61 6d 65 2c 20 50 34 5f 54 52 41 4e 53 49 45  Name, P4_TRANSIE
11210 4e 54 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  NT);.          s
11220 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
11230 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34  (v, OP_Concat, 4
11240 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20 20 20  , 3, 3);.       
11250 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
11260 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
11270 74 52 6f 77 2c 20 33 2c 20 31 29 3b 0a 20 20 20  tRow, 3, 1);.   
11280 20 20 20 20 20 20 20 6a 6d 70 34 20 3d 20 73 71         jmp4 = sq
11290 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
112a0 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b  v, OP_IfPos, 1);
112b0 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
112c0 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
112d0 74 65 33 56 64 62 65 41 64 64 4f 70 30 28 76 2c  te3VdbeAddOp0(v,
112e0 20 4f 50 5f 48 61 6c 74 29 3b 0a 20 20 20 20 20   OP_Halt);.     
112f0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
11300 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 32  JumpHere(v, jmp2
11310 29 3b 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20  );.          /* 
11320 46 6f 72 20 55 4e 49 51 55 45 20 69 6e 64 65 78  For UNIQUE index
11330 65 73 2c 20 76 65 72 69 66 79 20 74 68 61 74 20  es, verify that 
11340 6f 6e 6c 79 20 6f 6e 65 20 65 6e 74 72 79 20 65  only one entry e
11350 78 69 73 74 73 20 77 69 74 68 20 74 68 65 0a 20  xists with the. 
11360 20 20 20 20 20 20 20 20 20 2a 2a 20 63 75 72 72           ** curr
11370 65 6e 74 20 6b 65 79 2e 20 20 54 68 65 20 65 6e  ent key.  The en
11380 74 72 79 20 69 73 20 75 6e 69 71 75 65 20 69 66  try is unique if
11390 20 28 31 29 20 61 6e 79 20 63 6f 6c 75 6d 6e 20   (1) any column 
113a0 69 73 20 4e 55 4c 4c 0a 20 20 20 20 20 20 20 20  is NULL.        
113b0 20 20 2a 2a 20 6f 72 20 28 32 29 20 74 68 65 20    ** or (2) the 
113c0 6e 65 78 74 20 65 6e 74 72 79 20 68 61 73 20 61  next entry has a
113d0 20 64 69 66 66 65 72 65 6e 74 20 6b 65 79 20 2a   different key *
113e0 2f 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  /.          if( 
113f0 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28 70 49  IsUniqueIndex(pI
11400 64 78 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  dx) ){.         
11410 20 20 20 69 6e 74 20 75 6e 69 71 4f 6b 20 3d 20     int uniqOk = 
11420 73 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 4c  sqlite3VdbeMakeL
11430 61 62 65 6c 28 76 29 3b 0a 20 20 20 20 20 20 20  abel(v);.       
11440 20 20 20 20 20 69 6e 74 20 6a 6d 70 36 3b 0a 20       int jmp6;. 
11450 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6b             int k
11460 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 66  k;.            f
11470 6f 72 28 6b 6b 3d 30 3b 20 6b 6b 3c 70 49 64 78  or(kk=0; kk<pIdx
11480 2d 3e 6e 4b 65 79 43 6f 6c 3b 20 6b 6b 2b 2b 29  ->nKeyCol; kk++)
11490 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  {.              
114a0 69 6e 74 20 69 43 6f 6c 20 3d 20 70 49 64 78 2d  int iCol = pIdx-
114b0 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 6b 5d 3b 0a 20  >aiColumn[kk];. 
114c0 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73 73               ass
114d0 65 72 74 28 20 69 43 6f 6c 3e 3d 30 20 26 26 20  ert( iCol>=0 && 
114e0 69 43 6f 6c 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20  iCol<pTab->nCol 
114f0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  );.             
11500 20 69 66 28 20 70 54 61 62 2d 3e 61 43 6f 6c 5b   if( pTab->aCol[
11510 69 43 6f 6c 5d 2e 6e 6f 74 4e 75 6c 6c 20 29 20  iCol].notNull ) 
11520 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
11530 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
11540 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
11550 49 73 4e 75 6c 6c 2c 20 72 31 2b 6b 6b 2c 20 75  IsNull, r1+kk, u
11560 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20  niqOk);.        
11570 20 20 20 20 20 20 56 64 62 65 43 6f 76 65 72 61        VdbeCovera
11580 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
11590 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 20     }.           
115a0 20 6a 6d 70 36 20 3d 20 73 71 6c 69 74 65 33 56   jmp6 = sqlite3V
115b0 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f  dbeAddOp1(v, OP_
115c0 4e 65 78 74 2c 20 69 49 64 78 43 75 72 2b 6a 29  Next, iIdxCur+j)
115d0 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76  ; VdbeCoverage(v
115e0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
115f0 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
11600 28 76 2c 20 4f 50 5f 47 6f 74 6f 2c 20 30 2c 20  (v, OP_Goto, 0, 
11610 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20 20 20 20  uniqOk);.       
11620 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
11630 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 36  JumpHere(v, jmp6
11640 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
11650 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
11660 49 6e 74 28 76 2c 20 4f 50 5f 49 64 78 47 54 2c  Int(v, OP_IdxGT,
11670 20 69 49 64 78 43 75 72 2b 6a 2c 20 75 6e 69 71   iIdxCur+j, uniq
11680 4f 6b 2c 20 72 31 2c 0a 20 20 20 20 20 20 20 20  Ok, r1,.        
11690 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116a0 20 20 20 20 20 20 20 20 20 70 49 64 78 2d 3e 6e           pIdx->n
116b0 4b 65 79 43 6f 6c 29 3b 20 56 64 62 65 43 6f 76  KeyCol); VdbeCov
116c0 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
116d0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
116e0 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64  eAddOp2(v, OP_Ad
116f0 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 20 2f 2a  dImm, 1, -1); /*
11700 20 44 65 63 72 65 6d 65 6e 74 20 65 72 72 6f 72   Decrement error
11710 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20 20 20 20   limit */.      
11720 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
11730 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
11740 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a  ring8, 0, 3, 0,.
11750 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11760 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22 6e                "n
11770 6f 6e 2d 75 6e 69 71 75 65 20 65 6e 74 72 79 20  on-unique entry 
11780 69 6e 20 69 6e 64 65 78 20 22 2c 20 50 34 5f 53  in index ", P4_S
11790 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
117a0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
117b0 64 64 4f 70 32 28 76 2c 20 4f 50 5f 47 6f 74 6f  ddOp2(v, OP_Goto
117c0 2c 20 30 2c 20 6a 6d 70 35 29 3b 0a 20 20 20 20  , 0, jmp5);.    
117d0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
117e0 64 62 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28  dbeResolveLabel(
117f0 76 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20 20 20 20  v, uniqOk);.    
11800 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
11810 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
11820 70 48 65 72 65 28 76 2c 20 6a 6d 70 34 29 3b 0a  pHere(v, jmp4);.
11830 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
11840 33 52 65 73 6f 6c 76 65 50 61 72 74 49 64 78 4c  3ResolvePartIdxL
11850 61 62 65 6c 28 70 50 61 72 73 65 2c 20 6a 6d 70  abel(pParse, jmp
11860 33 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  3);.        }.  
11870 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
11880 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 65  eAddOp2(v, OP_Ne
11890 78 74 2c 20 69 44 61 74 61 43 75 72 2c 20 6c 6f  xt, iDataCur, lo
118a0 6f 70 54 6f 70 29 3b 20 56 64 62 65 43 6f 76 65  opTop); VdbeCove
118b0 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
118c0 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
118d0 48 65 72 65 28 76 2c 20 6c 6f 6f 70 54 6f 70 2d  Here(v, loopTop-
118e0 31 29 3b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  1);.#ifndef SQLI
118f0 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55  TE_OMIT_BTREECOU
11900 4e 54 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  NT.        sqlit
11910 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
11920 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32  OP_String8, 0, 2
11930 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20 20  , 0, .          
11940 20 20 20 20 20 20 20 20 20 20 20 22 77 72 6f 6e             "wron
11950 67 20 23 20 6f 66 20 65 6e 74 72 69 65 73 20 69  g # of entries i
11960 6e 20 69 6e 64 65 78 20 22 2c 20 50 34 5f 53 54  n index ", P4_ST
11970 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 66  ATIC);.        f
11980 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61  or(j=0, pIdx=pTa
11990 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b  b->pIndex; pIdx;
119a0 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78   pIdx=pIdx->pNex
119b0 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20  t, j++){.       
119c0 20 20 20 69 66 28 20 70 50 6b 3d 3d 70 49 64 78     if( pPk==pIdx
119d0 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20   ) continue;.   
119e0 20 20 20 20 20 20 20 61 64 64 72 20 3d 20 73 71         addr = sq
119f0 6c 69 74 65 33 56 64 62 65 43 75 72 72 65 6e 74  lite3VdbeCurrent
11a00 41 64 64 72 28 76 29 3b 0a 20 20 20 20 20 20 20  Addr(v);.       
11a10 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
11a20 64 4f 70 32 28 76 2c 20 4f 50 5f 49 66 50 6f 73  dOp2(v, OP_IfPos
11a30 2c 20 31 2c 20 61 64 64 72 2b 32 29 3b 20 56 64  , 1, addr+2); Vd
11a40 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
11a50 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
11a60 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
11a70 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20  _Halt, 0, 0);.  
11a80 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
11a90 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
11aa0 43 6f 75 6e 74 2c 20 69 49 64 78 43 75 72 2b 6a  Count, iIdxCur+j
11ab0 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 3);.          
11ac0 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
11ad0 33 28 76 2c 20 4f 50 5f 45 71 2c 20 38 2b 6a 2c  3(v, OP_Eq, 8+j,
11ae0 20 61 64 64 72 2b 38 2c 20 33 29 3b 20 56 64 62   addr+8, 3); Vdb
11af0 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
11b00 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
11b10 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c 20 53  dbeChangeP5(v, S
11b20 51 4c 49 54 45 5f 4e 4f 54 4e 55 4c 4c 29 3b 0a  QLITE_NOTNULL);.
11b30 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
11b40 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
11b50 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29  P_AddImm, 1, -1)
11b60 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
11b70 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
11b80 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
11b90 33 2c 20 30 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d  3, 0, pIdx->zNam
11ba0 65 2c 20 50 34 5f 54 52 41 4e 53 49 45 4e 54 29  e, P4_TRANSIENT)
11bb0 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
11bc0 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
11bd0 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 33 2c 20 32   OP_Concat, 3, 2
11be0 2c 20 37 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 7);.          
11bf0 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
11c00 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
11c10 77 2c 20 37 2c 20 31 29 3b 0a 20 20 20 20 20 20  w, 7, 1);.      
11c20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
11c30 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43  LITE_OMIT_BTREEC
11c40 4f 55 4e 54 20 2a 2f 0a 20 20 20 20 20 20 7d 20  OUNT */.      } 
11c50 0a 20 20 20 20 7d 0a 20 20 20 20 61 64 64 72 20  .    }.    addr 
11c60 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
11c70 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53  OpList(v, ArrayS
11c80 69 7a 65 28 65 6e 64 43 6f 64 65 29 2c 20 65 6e  ize(endCode), en
11c90 64 43 6f 64 65 2c 20 69 4c 6e 29 3b 0a 20 20 20  dCode, iLn);.   
11ca0 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
11cb0 67 65 50 33 28 76 2c 20 61 64 64 72 2c 20 2d 6d  geP3(v, addr, -m
11cc0 78 45 72 72 29 3b 0a 20 20 20 20 73 71 6c 69 74  xErr);.    sqlit
11cd0 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
11ce0 2c 20 61 64 64 72 29 3b 0a 20 20 20 20 73 71 6c  , addr);.    sql
11cf0 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 34  ite3VdbeChangeP4
11d00 28 76 2c 20 61 64 64 72 2b 31 2c 20 22 6f 6b 22  (v, addr+1, "ok"
11d10 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P4_STATIC);.  
11d20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  }.  break;.#endi
11d30 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
11d40 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
11d50 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
11d60 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20  ITE_OMIT_UTF16. 
11d70 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
11d80 41 20 65 6e 63 6f 64 69 6e 67 0a 20 20 2a 2a 20  A encoding.  ** 
11d90 20 20 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e    PRAGMA encodin
11da0 67 20 3d 20 22 75 74 66 2d 38 22 7c 22 75 74 66  g = "utf-8"|"utf
11db0 2d 31 36 22 7c 22 75 74 66 2d 31 36 6c 65 22 7c  -16"|"utf-16le"|
11dc0 22 75 74 66 2d 31 36 62 65 22 0a 20 20 2a 2a 0a  "utf-16be".  **.
11dd0 20 20 2a 2a 20 49 6e 20 69 74 73 20 66 69 72 73    ** In its firs
11de0 74 20 66 6f 72 6d 2c 20 74 68 69 73 20 70 72 61  t form, this pra
11df0 67 6d 61 20 72 65 74 75 72 6e 73 20 74 68 65 20  gma returns the 
11e00 65 6e 63 6f 64 69 6e 67 20 6f 66 20 74 68 65 20  encoding of the 
11e10 6d 61 69 6e 0a 20 20 2a 2a 20 64 61 74 61 62 61  main.  ** databa
11e20 73 65 2e 20 49 66 20 74 68 65 20 64 61 74 61 62  se. If the datab
11e30 61 73 65 20 69 73 20 6e 6f 74 20 69 6e 69 74 69  ase is not initi
11e40 61 6c 69 7a 65 64 2c 20 69 74 20 69 73 20 69 6e  alized, it is in
11e50 69 74 69 61 6c 69 7a 65 64 20 6e 6f 77 2e 0a 20  itialized now.. 
11e60 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 73 65 63   **.  ** The sec
11e70 6f 6e 64 20 66 6f 72 6d 20 6f 66 20 74 68 69 73  ond form of this
11e80 20 70 72 61 67 6d 61 20 69 73 20 61 20 6e 6f 2d   pragma is a no-
11e90 6f 70 20 69 66 20 74 68 65 20 6d 61 69 6e 20 64  op if the main d
11ea0 61 74 61 62 61 73 65 20 66 69 6c 65 0a 20 20 2a  atabase file.  *
11eb0 2a 20 68 61 73 20 6e 6f 74 20 61 6c 72 65 61 64  * has not alread
11ec0 79 20 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a  y been initializ
11ed0 65 64 2e 20 49 6e 20 74 68 69 73 20 63 61 73 65  ed. In this case
11ee0 20 69 74 20 73 65 74 73 20 74 68 65 20 64 65 66   it sets the def
11ef0 61 75 6c 74 0a 20 20 2a 2a 20 65 6e 63 6f 64 69  ault.  ** encodi
11f00 6e 67 20 74 68 61 74 20 77 69 6c 6c 20 62 65 20  ng that will be 
11f10 75 73 65 64 20 66 6f 72 20 74 68 65 20 6d 61 69  used for the mai
11f20 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20  n database file 
11f30 69 66 20 61 20 6e 65 77 20 66 69 6c 65 0a 20 20  if a new file.  
11f40 2a 2a 20 69 73 20 63 72 65 61 74 65 64 2e 20 49  ** is created. I
11f50 66 20 61 6e 20 65 78 69 73 74 69 6e 67 20 6d 61  f an existing ma
11f60 69 6e 20 64 61 74 61 62 61 73 65 20 66 69 6c 65  in database file
11f70 20 69 73 20 6f 70 65 6e 65 64 2c 20 74 68 65 6e   is opened, then
11f80 20 74 68 65 0a 20 20 2a 2a 20 64 65 66 61 75 6c   the.  ** defaul
11f90 74 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20  t text encoding 
11fa0 66 6f 72 20 74 68 65 20 65 78 69 73 74 69 6e 67  for the existing
11fb0 20 64 61 74 61 62 61 73 65 20 69 73 20 75 73 65   database is use
11fc0 64 2e 0a 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 6e  d..  ** .  ** In
11fd0 20 61 6c 6c 20 63 61 73 65 73 20 6e 65 77 20 64   all cases new d
11fe0 61 74 61 62 61 73 65 73 20 63 72 65 61 74 65 64  atabases created
11ff0 20 75 73 69 6e 67 20 74 68 65 20 41 54 54 41 43   using the ATTAC
12000 48 20 63 6f 6d 6d 61 6e 64 20 61 72 65 0a 20 20  H command are.  
12010 2a 2a 20 63 72 65 61 74 65 64 20 74 6f 20 75 73  ** created to us
12020 65 20 74 68 65 20 73 61 6d 65 20 64 65 66 61 75  e the same defau
12030 6c 74 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  lt text encoding
12040 20 61 73 20 74 68 65 20 6d 61 69 6e 20 64 61 74   as the main dat
12050 61 62 61 73 65 2e 20 49 66 0a 20 20 2a 2a 20 74  abase. If.  ** t
12060 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
12070 20 68 61 73 20 6e 6f 74 20 62 65 65 6e 20 69 6e   has not been in
12080 69 74 69 61 6c 69 7a 65 64 20 61 6e 64 2f 6f 72  itialized and/or
12090 20 63 72 65 61 74 65 64 20 77 68 65 6e 20 41 54   created when AT
120a0 54 41 43 48 0a 20 20 2a 2a 20 69 73 20 65 78 65  TACH.  ** is exe
120b0 63 75 74 65 64 2c 20 74 68 69 73 20 69 73 20 64  cuted, this is d
120c0 6f 6e 65 20 62 65 66 6f 72 65 20 74 68 65 20 41  one before the A
120d0 54 54 41 43 48 20 6f 70 65 72 61 74 69 6f 6e 2e  TTACH operation.
120e0 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 74 68  .  **.  ** In th
120f0 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 74 68  e second form th
12100 69 73 20 70 72 61 67 6d 61 20 73 65 74 73 20 74  is pragma sets t
12110 68 65 20 74 65 78 74 20 65 6e 63 6f 64 69 6e 67  he text encoding
12120 20 74 6f 20 62 65 20 75 73 65 64 20 69 6e 0a 20   to be used in. 
12130 20 2a 2a 20 6e 65 77 20 64 61 74 61 62 61 73 65   ** new database
12140 20 66 69 6c 65 73 20 63 72 65 61 74 65 64 20 75   files created u
12150 73 69 6e 67 20 74 68 69 73 20 64 61 74 61 62 61  sing this databa
12160 73 65 20 68 61 6e 64 6c 65 2e 20 49 74 20 69 73  se handle. It is
12170 20 6f 6e 6c 79 0a 20 20 2a 2a 20 75 73 65 66 75   only.  ** usefu
12180 6c 20 69 66 20 69 6e 76 6f 6b 65 64 20 69 6d 6d  l if invoked imm
12190 65 64 69 61 74 65 6c 79 20 61 66 74 65 72 20 74  ediately after t
121a0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
121b0 20 69 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50   i.  */.  case P
121c0 72 61 67 54 79 70 5f 45 4e 43 4f 44 49 4e 47 3a  ragTyp_ENCODING:
121d0 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f   {.    static co
121e0 6e 73 74 20 73 74 72 75 63 74 20 45 6e 63 4e 61  nst struct EncNa
121f0 6d 65 20 7b 0a 20 20 20 20 20 20 63 68 61 72 20  me {.      char 
12200 2a 7a 4e 61 6d 65 3b 0a 20 20 20 20 20 20 75 38  *zName;.      u8
12210 20 65 6e 63 3b 0a 20 20 20 20 7d 20 65 6e 63 6e   enc;.    } encn
12220 61 6d 65 73 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  ames[] = {.     
12230 20 7b 20 22 55 54 46 38 22 2c 20 20 20 20 20 53   { "UTF8",     S
12240 51 4c 49 54 45 5f 55 54 46 38 20 20 20 20 20 20  QLITE_UTF8      
12250 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54    },.      { "UT
12260 46 2d 38 22 2c 20 20 20 20 53 51 4c 49 54 45 5f  F-8",    SQLITE_
12270 55 54 46 38 20 20 20 20 20 20 20 20 7d 2c 20 20  UTF8        },  
12280 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d 65  /* Must be eleme
12290 6e 74 20 5b 31 5d 20 2a 2f 0a 20 20 20 20 20 20  nt [1] */.      
122a0 7b 20 22 55 54 46 2d 31 36 6c 65 22 2c 20 53 51  { "UTF-16le", SQ
122b0 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 20 20 20  LITE_UTF16LE    
122c0 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65 20   },  /* Must be 
122d0 65 6c 65 6d 65 6e 74 20 5b 32 5d 20 2a 2f 0a 20  element [2] */. 
122e0 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36 62 65       { "UTF-16be
122f0 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42  ", SQLITE_UTF16B
12300 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73  E     },  /* Mus
12310 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 33 5d  t be element [3]
12320 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46   */.      { "UTF
12330 31 36 6c 65 22 2c 20 20 53 51 4c 49 54 45 5f 55  16le",  SQLITE_U
12340 54 46 31 36 4c 45 20 20 20 20 20 7d 2c 0a 20 20  TF16LE     },.  
12350 20 20 20 20 7b 20 22 55 54 46 31 36 62 65 22 2c      { "UTF16be",
12360 20 20 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45    SQLITE_UTF16BE
12370 20 20 20 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20       },.      { 
12380 22 55 54 46 2d 31 36 22 2c 20 20 20 30 20 20 20  "UTF-16",   0   
12390 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
123a0 2c 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 31  , /* SQLITE_UTF1
123b0 36 4e 41 54 49 56 45 20 2a 2f 0a 20 20 20 20 20  6NATIVE */.     
123c0 20 7b 20 22 55 54 46 31 36 22 2c 20 20 20 20 30   { "UTF16",    0
123d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
123e0 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54 45 5f 55    }, /* SQLITE_U
123f0 54 46 31 36 4e 41 54 49 56 45 20 2a 2f 0a 20 20  TF16NATIVE */.  
12400 20 20 20 20 7b 20 30 2c 20 30 20 7d 0a 20 20 20      { 0, 0 }.   
12410 20 7d 3b 0a 20 20 20 20 63 6f 6e 73 74 20 73 74   };.    const st
12420 72 75 63 74 20 45 6e 63 4e 61 6d 65 20 2a 70 45  ruct EncName *pE
12430 6e 63 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69  nc;.    if( !zRi
12440 67 68 74 20 29 7b 20 20 20 20 2f 2a 20 22 50 52  ght ){    /* "PR
12450 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 22 20 2a  AGMA encoding" *
12460 2f 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  /.      if( sqli
12470 74 65 33 52 65 61 64 53 63 68 65 6d 61 28 70 50  te3ReadSchema(pP
12480 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70 72 61  arse) ) goto pra
12490 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 73  gma_out;.      s
124a0 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
124b0 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20  Cols(v, 1);.    
124c0 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
124d0 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
124e0 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 65 6e 63  LNAME_NAME, "enc
124f0 6f 64 69 6e 67 22 2c 20 53 51 4c 49 54 45 5f 53  oding", SQLITE_S
12500 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
12510 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
12520 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
12530 2c 20 31 29 3b 0a 20 20 20 20 20 20 61 73 73 65  , 1);.      asse
12540 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c  rt( encnames[SQL
12550 49 54 45 5f 55 54 46 38 5d 2e 65 6e 63 3d 3d 53  ITE_UTF8].enc==S
12560 51 4c 49 54 45 5f 55 54 46 38 20 29 3b 0a 20 20  QLITE_UTF8 );.  
12570 20 20 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e      assert( encn
12580 61 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 31  ames[SQLITE_UTF1
12590 36 4c 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45  6LE].enc==SQLITE
125a0 5f 55 54 46 31 36 4c 45 20 29 3b 0a 20 20 20 20  _UTF16LE );.    
125b0 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d    assert( encnam
125c0 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 31 36 42  es[SQLITE_UTF16B
125d0 45 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55  E].enc==SQLITE_U
125e0 54 46 31 36 42 45 20 29 3b 0a 20 20 20 20 20 20  TF16BE );.      
125f0 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
12600 65 50 34 28 76 2c 20 2d 31 2c 20 65 6e 63 6e 61  eP4(v, -1, encna
12610 6d 65 73 5b 45 4e 43 28 70 50 61 72 73 65 2d 3e  mes[ENC(pParse->
12620 64 62 29 5d 2e 7a 4e 61 6d 65 2c 20 50 34 5f 53  db)].zName, P4_S
12630 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
12640 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
12650 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
12660 20 31 2c 20 31 29 3b 0a 20 20 20 20 7d 65 6c 73   1, 1);.    }els
12670 65 7b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  e{              
12680 20 20 20 20 20 20 20 20 20 20 2f 2a 20 22 50 52            /* "PR
12690 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20  AGMA encoding = 
126a0 58 58 58 22 20 2a 2f 0a 20 20 20 20 20 20 2f 2a  XXX" */.      /*
126b0 20 4f 6e 6c 79 20 63 68 61 6e 67 65 20 74 68 65   Only change the
126c0 20 76 61 6c 75 65 20 6f 66 20 73 71 6c 69 74 65   value of sqlite
126d0 2e 65 6e 63 20 69 66 20 74 68 65 20 64 61 74 61  .enc if the data
126e0 62 61 73 65 20 68 61 6e 64 6c 65 20 69 73 20 6e  base handle is n
126f0 6f 74 0a 20 20 20 20 20 20 2a 2a 20 69 6e 69 74  ot.      ** init
12700 69 61 6c 69 7a 65 64 2e 20 49 66 20 74 68 65 20  ialized. If the 
12710 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 65 78  main database ex
12720 69 73 74 73 2c 20 74 68 65 20 6e 65 77 20 73 71  ists, the new sq
12730 6c 69 74 65 2e 65 6e 63 20 76 61 6c 75 65 0a 20  lite.enc value. 
12740 20 20 20 20 20 2a 2a 20 77 69 6c 6c 20 62 65 20       ** will be 
12750 6f 76 65 72 77 72 69 74 74 65 6e 20 77 68 65 6e  overwritten when
12760 20 74 68 65 20 73 63 68 65 6d 61 20 69 73 20 6e   the schema is n
12770 65 78 74 20 6c 6f 61 64 65 64 2e 20 49 66 20 69  ext loaded. If i
12780 74 20 64 6f 65 73 20 6e 6f 74 0a 20 20 20 20 20  t does not.     
12790 20 2a 2a 20 61 6c 72 65 61 64 79 20 65 78 69 73   ** already exis
127a0 74 73 2c 20 69 74 20 77 69 6c 6c 20 62 65 20 63  ts, it will be c
127b0 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74 68  reated to use th
127c0 65 20 6e 65 77 20 65 6e 63 6f 64 69 6e 67 20 76  e new encoding v
127d0 61 6c 75 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  alue..      */. 
127e0 20 20 20 20 20 69 66 28 20 0a 20 20 20 20 20 20       if( .      
127f0 20 20 21 28 44 62 48 61 73 50 72 6f 70 65 72 74    !(DbHasPropert
12800 79 28 64 62 2c 20 30 2c 20 44 42 5f 53 63 68 65  y(db, 0, DB_Sche
12810 6d 61 4c 6f 61 64 65 64 29 29 20 7c 7c 20 0a 20  maLoaded)) || . 
12820 20 20 20 20 20 20 20 44 62 48 61 73 50 72 6f 70         DbHasProp
12830 65 72 74 79 28 64 62 2c 20 30 2c 20 44 42 5f 45  erty(db, 0, DB_E
12840 6d 70 74 79 29 20 0a 20 20 20 20 20 20 29 7b 0a  mpty) .      ){.
12850 20 20 20 20 20 20 20 20 66 6f 72 28 70 45 6e 63          for(pEnc
12860 3d 26 65 6e 63 6e 61 6d 65 73 5b 30 5d 3b 20 70  =&encnames[0]; p
12870 45 6e 63 2d 3e 7a 4e 61 6d 65 3b 20 70 45 6e 63  Enc->zName; pEnc
12880 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  ++){.          i
12890 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74 72  f( 0==sqlite3Str
128a0 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 70 45 6e  ICmp(zRight, pEn
128b0 63 2d 3e 7a 4e 61 6d 65 29 20 29 7b 0a 20 20 20  c->zName) ){.   
128c0 20 20 20 20 20 20 20 20 20 53 43 48 45 4d 41 5f           SCHEMA_
128d0 45 4e 43 28 64 62 29 20 3d 20 45 4e 43 28 64 62  ENC(db) = ENC(db
128e0 29 20 3d 0a 20 20 20 20 20 20 20 20 20 20 20 20  ) =.            
128f0 20 20 20 20 70 45 6e 63 2d 3e 65 6e 63 20 3f 20      pEnc->enc ? 
12900 70 45 6e 63 2d 3e 65 6e 63 20 3a 20 53 51 4c 49  pEnc->enc : SQLI
12910 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 3b 0a  TE_UTF16NATIVE;.
12920 20 20 20 20 20 20 20 20 20 20 20 20 62 72 65 61              brea
12930 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  k;.          }. 
12940 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
12950 20 69 66 28 20 21 70 45 6e 63 2d 3e 7a 4e 61 6d   if( !pEnc->zNam
12960 65 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  e ){.          s
12970 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
12980 50 61 72 73 65 2c 20 22 75 6e 73 75 70 70 6f 72  Parse, "unsuppor
12990 74 65 64 20 65 6e 63 6f 64 69 6e 67 3a 20 25 73  ted encoding: %s
129a0 22 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  ", zRight);.    
129b0 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
129c0 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
129d0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
129e0 45 5f 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a  E_OMIT_UTF16 */.
129f0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
12a00 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53  OMIT_SCHEMA_VERS
12a10 49 4f 4e 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a  ION_PRAGMAS.  /*
12a20 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
12a30 64 61 74 61 62 61 73 65 2e 5d 73 63 68 65 6d 61  database.]schema
12a40 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20  _version.  **   
12a50 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
12a60 2e 5d 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e  .]schema_version
12a70 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a   = <integer>.  *
12a80 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
12a90 5b 64 61 74 61 62 61 73 65 2e 5d 75 73 65 72 5f  [database.]user_
12aa0 76 65 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 50  version.  **   P
12ab0 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
12ac0 5d 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20  ]user_version = 
12ad0 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20  <integer>.  **. 
12ae0 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61   **   PRAGMA [da
12af0 74 61 62 61 73 65 2e 5d 66 72 65 65 6c 69 73 74  tabase.]freelist
12b00 5f 63 6f 75 6e 74 20 3d 20 3c 69 6e 74 65 67 65  _count = <intege
12b10 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50  r>.  **.  **   P
12b20 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
12b30 5d 61 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 0a  ]application_id.
12b40 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64    **   PRAGMA [d
12b50 61 74 61 62 61 73 65 2e 5d 61 70 70 6c 69 63 61  atabase.]applica
12b60 74 69 6f 6e 5f 69 64 20 3d 20 3c 69 6e 74 65 67  tion_id = <integ
12b70 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  er>.  **.  ** Th
12b80 65 20 70 72 61 67 6d 61 27 73 20 73 63 68 65 6d  e pragma's schem
12b90 61 5f 76 65 72 73 69 6f 6e 20 61 6e 64 20 75 73  a_version and us
12ba0 65 72 5f 76 65 72 73 69 6f 6e 20 61 72 65 20 75  er_version are u
12bb0 73 65 64 20 74 6f 20 73 65 74 20 6f 72 20 67 65  sed to set or ge
12bc0 74 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65  t.  ** the value
12bd0 20 6f 66 20 74 68 65 20 73 63 68 65 6d 61 2d 76   of the schema-v
12be0 65 72 73 69 6f 6e 20 61 6e 64 20 75 73 65 72 2d  ersion and user-
12bf0 76 65 72 73 69 6f 6e 2c 20 72 65 73 70 65 63 74  version, respect
12c00 69 76 65 6c 79 2e 20 42 6f 74 68 0a 20 20 2a 2a  ively. Both.  **
12c10 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73   the schema-vers
12c20 69 6f 6e 20 61 6e 64 20 74 68 65 20 75 73 65 72  ion and the user
12c30 2d 76 65 72 73 69 6f 6e 20 61 72 65 20 33 32 2d  -version are 32-
12c40 62 69 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67  bit signed integ
12c50 65 72 73 0a 20 20 2a 2a 20 73 74 6f 72 65 64 20  ers.  ** stored 
12c60 69 6e 20 74 68 65 20 64 61 74 61 62 61 73 65 20  in the database 
12c70 68 65 61 64 65 72 2e 0a 20 20 2a 2a 0a 20 20 2a  header..  **.  *
12c80 2a 20 54 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f  * The schema-coo
12c90 6b 69 65 20 69 73 20 75 73 75 61 6c 6c 79 20 6f  kie is usually o
12ca0 6e 6c 79 20 6d 61 6e 69 70 75 6c 61 74 65 64 20  nly manipulated 
12cb0 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 53 51  internally by SQ
12cc0 4c 69 74 65 2e 20 49 74 0a 20 20 2a 2a 20 69 73  Lite. It.  ** is
12cd0 20 69 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20   incremented by 
12ce0 53 51 4c 69 74 65 20 77 68 65 6e 65 76 65 72 20  SQLite whenever 
12cf0 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63 68  the database sch
12d00 65 6d 61 20 69 73 20 6d 6f 64 69 66 69 65 64 20  ema is modified 
12d10 28 62 79 0a 20 20 2a 2a 20 63 72 65 61 74 69 6e  (by.  ** creatin
12d20 67 20 6f 72 20 64 72 6f 70 70 69 6e 67 20 61 20  g or dropping a 
12d30 74 61 62 6c 65 20 6f 72 20 69 6e 64 65 78 29 2e  table or index).
12d40 20 54 68 65 20 73 63 68 65 6d 61 20 76 65 72 73   The schema vers
12d50 69 6f 6e 20 69 73 20 75 73 65 64 20 62 79 0a 20  ion is used by. 
12d60 20 2a 2a 20 53 51 4c 69 74 65 20 65 61 63 68 20   ** SQLite each 
12d70 74 69 6d 65 20 61 20 71 75 65 72 79 20 69 73 20  time a query is 
12d80 65 78 65 63 75 74 65 64 20 74 6f 20 65 6e 73 75  executed to ensu
12d90 72 65 20 74 68 61 74 20 74 68 65 20 69 6e 74 65  re that the inte
12da0 72 6e 61 6c 20 63 61 63 68 65 0a 20 20 2a 2a 20  rnal cache.  ** 
12db0 6f 66 20 74 68 65 20 73 63 68 65 6d 61 20 75 73  of the schema us
12dc0 65 64 20 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e  ed when compilin
12dd0 67 20 74 68 65 20 53 51 4c 20 71 75 65 72 79 20  g the SQL query 
12de0 6d 61 74 63 68 65 73 20 74 68 65 20 73 63 68 65  matches the sche
12df0 6d 61 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 64  ma of.  ** the d
12e00 61 74 61 62 61 73 65 20 61 67 61 69 6e 73 74 20  atabase against 
12e10 77 68 69 63 68 20 74 68 65 20 63 6f 6d 70 69 6c  which the compil
12e20 65 64 20 71 75 65 72 79 20 69 73 20 61 63 74 75  ed query is actu
12e30 61 6c 6c 79 20 65 78 65 63 75 74 65 64 2e 0a 20  ally executed.. 
12e40 20 2a 2a 20 53 75 62 76 65 72 74 69 6e 67 20 74   ** Subverting t
12e50 68 69 73 20 6d 65 63 68 61 6e 69 73 6d 20 62 79  his mechanism by
12e60 20 75 73 69 6e 67 20 22 50 52 41 47 4d 41 20 73   using "PRAGMA s
12e70 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 22 20 74  chema_version" t
12e80 6f 20 6d 6f 64 69 66 79 0a 20 20 2a 2a 20 74 68  o modify.  ** th
12e90 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e  e schema-version
12ea0 20 69 73 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20   is potentially 
12eb0 64 61 6e 67 65 72 6f 75 73 20 61 6e 64 20 6d 61  dangerous and ma
12ec0 79 20 6c 65 61 64 20 74 6f 20 70 72 6f 67 72 61  y lead to progra
12ed0 6d 0a 20 20 2a 2a 20 63 72 61 73 68 65 73 20 6f  m.  ** crashes o
12ee0 72 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75  r database corru
12ef0 70 74 69 6f 6e 2e 20 55 73 65 20 77 69 74 68 20  ption. Use with 
12f00 63 61 75 74 69 6f 6e 21 0a 20 20 2a 2a 0a 20 20  caution!.  **.  
12f10 2a 2a 20 54 68 65 20 75 73 65 72 2d 76 65 72 73  ** The user-vers
12f20 69 6f 6e 20 69 73 20 6e 6f 74 20 75 73 65 64 20  ion is not used 
12f30 69 6e 74 65 72 6e 61 6c 6c 79 20 62 79 20 53 51  internally by SQ
12f40 4c 69 74 65 2e 20 49 74 20 6d 61 79 20 62 65 20  Lite. It may be 
12f50 75 73 65 64 20 62 79 0a 20 20 2a 2a 20 61 70 70  used by.  ** app
12f60 6c 69 63 61 74 69 6f 6e 73 20 66 6f 72 20 61 6e  lications for an
12f70 79 20 70 75 72 70 6f 73 65 2e 0a 20 20 2a 2f 0a  y purpose..  */.
12f80 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 48    case PragTyp_H
12f90 45 41 44 45 52 5f 56 41 4c 55 45 3a 20 7b 0a 20  EADER_VALUE: {. 
12fa0 20 20 20 69 6e 74 20 69 43 6f 6f 6b 69 65 20 3d     int iCookie =
12fb0 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69   aPragmaNames[mi
12fc0 64 5d 2e 69 41 72 67 3b 20 20 2f 2a 20 57 68 69  d].iArg;  /* Whi
12fd0 63 68 20 63 6f 6f 6b 69 65 20 74 6f 20 72 65 61  ch cookie to rea
12fe0 64 20 6f 72 20 77 72 69 74 65 20 2a 2f 0a 20 20  d or write */.  
12ff0 20 20 73 71 6c 69 74 65 33 56 64 62 65 55 73 65    sqlite3VdbeUse
13000 73 42 74 72 65 65 28 76 2c 20 69 44 62 29 3b 0a  sBtree(v, iDb);.
13010 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 26      if( zRight &
13020 26 20 28 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b  & (aPragmaNames[
13030 6d 69 64 5d 2e 6d 50 72 61 67 46 6c 61 67 20 26  mid].mPragFlag &
13040 20 50 72 61 67 46 6c 61 67 5f 52 65 61 64 4f 6e   PragFlag_ReadOn
13050 6c 79 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ly)==0 ){.      
13060 2f 2a 20 57 72 69 74 65 20 74 68 65 20 73 70 65  /* Write the spe
13070 63 69 66 69 65 64 20 63 6f 6f 6b 69 65 20 76 61  cified cookie va
13080 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20 73 74 61  lue */.      sta
13090 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70  tic const VdbeOp
130a0 4c 69 73 74 20 73 65 74 43 6f 6f 6b 69 65 5b 5d  List setCookie[]
130b0 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f   = {.        { O
130c0 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20  P_Transaction,  
130d0 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20    0,  1,  0},   
130e0 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20   /* 0 */.       
130f0 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20   { OP_Integer,  
13100 20 20 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d        0,  1,  0}
13110 2c 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20  ,    /* 1 */.   
13120 20 20 20 20 20 7b 20 4f 50 5f 53 65 74 43 6f 6f       { OP_SetCoo
13130 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20 30 2c  kie,      0,  0,
13140 20 20 31 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f    1},    /* 2 */
13150 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20  .      };.      
13160 69 6e 74 20 61 64 64 72 20 3d 20 73 71 6c 69 74  int addr = sqlit
13170 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28  e3VdbeAddOpList(
13180 76 2c 20 41 72 72 61 79 53 69 7a 65 28 73 65 74  v, ArraySize(set
13190 43 6f 6f 6b 69 65 29 2c 20 73 65 74 43 6f 6f 6b  Cookie), setCook
131a0 69 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71  ie, 0);.      sq
131b0 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
131c0 31 28 76 2c 20 61 64 64 72 2c 20 69 44 62 29 3b  1(v, addr, iDb);
131d0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
131e0 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64  beChangeP1(v, ad
131f0 64 72 2b 31 2c 20 73 71 6c 69 74 65 33 41 74 6f  dr+1, sqlite3Ato
13200 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20  i(zRight));.    
13210 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
13220 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b 32 2c  ngeP1(v, addr+2,
13230 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c   iDb);.      sql
13240 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 32  ite3VdbeChangeP2
13250 28 76 2c 20 61 64 64 72 2b 32 2c 20 69 43 6f 6f  (v, addr+2, iCoo
13260 6b 69 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  kie);.    }else{
13270 0a 20 20 20 20 20 20 2f 2a 20 52 65 61 64 20 74  .      /* Read t
13280 68 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6f  he specified coo
13290 6b 69 65 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20  kie value */.   
132a0 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20     static const 
132b0 56 64 62 65 4f 70 4c 69 73 74 20 72 65 61 64 43  VdbeOpList readC
132c0 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20 20 20  ookie[] = {.    
132d0 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63      { OP_Transac
132e0 74 69 6f 6e 2c 20 20 20 20 20 30 2c 20 20 30 2c  tion,     0,  0,
132f0 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f    0},    /* 0 */
13300 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65  .        { OP_Re
13310 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30  adCookie,      0
13320 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a  ,  1,  0},    /*
13330 20 31 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20   1 */.        { 
13340 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20 20  OP_ResultRow,   
13350 20 20 20 20 31 2c 20 20 31 2c 20 20 30 7d 0a 20      1,  1,  0}. 
13360 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e       };.      in
13370 74 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33  t addr = sqlite3
13380 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c  VdbeAddOpList(v,
13390 20 41 72 72 61 79 53 69 7a 65 28 72 65 61 64 43   ArraySize(readC
133a0 6f 6f 6b 69 65 29 2c 20 72 65 61 64 43 6f 6f 6b  ookie), readCook
133b0 69 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71  ie, 0);.      sq
133c0 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
133d0 31 28 76 2c 20 61 64 64 72 2c 20 69 44 62 29 3b  1(v, addr, iDb);
133e0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
133f0 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64  beChangeP1(v, ad
13400 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20 20  dr+1, iDb);.    
13410 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
13420 6e 67 65 50 33 28 76 2c 20 61 64 64 72 2b 31 2c  ngeP3(v, addr+1,
13430 20 69 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 20   iCookie);.     
13440 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
13450 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
13460 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
13470 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
13480 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c  COLNAME_NAME, zL
13490 65 66 74 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e  eft, SQLITE_TRAN
134a0 53 49 45 4e 54 29 3b 0a 20 20 20 20 7d 0a 20 20  SIENT);.    }.  
134b0 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  }.  break;.#endi
134c0 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
134d0 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f  _SCHEMA_VERSION_
134e0 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e  PRAGMAS */..#ifn
134f0 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
13500 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49  COMPILEOPTION_DI
13510 41 47 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  AGS.  /*.  **   
13520 50 52 41 47 4d 41 20 63 6f 6d 70 69 6c 65 5f 6f  PRAGMA compile_o
13530 70 74 69 6f 6e 73 0a 20 20 2a 2a 0a 20 20 2a 2a  ptions.  **.  **
13540 20 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65   Return the name
13550 73 20 6f 66 20 61 6c 6c 20 63 6f 6d 70 69 6c 65  s of all compile
13560 2d 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 75 73  -time options us
13570 65 64 20 69 6e 20 74 68 69 73 20 62 75 69 6c 64  ed in this build
13580 2c 0a 20 20 2a 2a 20 6f 6e 65 20 6f 70 74 69 6f  ,.  ** one optio
13590 6e 20 70 65 72 20 72 6f 77 2e 0a 20 20 2a 2f 0a  n per row..  */.
135a0 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 43    case PragTyp_C
135b0 4f 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 53 3a 20  OMPILE_OPTIONS: 
135c0 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b  {.    int i = 0;
135d0 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20  .    const char 
135e0 2a 7a 4f 70 74 3b 0a 20 20 20 20 73 71 6c 69 74  *zOpt;.    sqlit
135f0 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
13600 28 76 2c 20 31 29 3b 0a 20 20 20 20 70 50 61 72  (v, 1);.    pPar
13610 73 65 2d 3e 6e 4d 65 6d 20 3d 20 31 3b 0a 20 20  se->nMem = 1;.  
13620 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
13630 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
13640 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 6f 6d  LNAME_NAME, "com
13650 70 69 6c 65 5f 6f 70 74 69 6f 6e 22 2c 20 53 51  pile_option", SQ
13660 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
13670 20 20 77 68 69 6c 65 28 20 28 7a 4f 70 74 20 3d    while( (zOpt =
13680 20 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65   sqlite3_compile
13690 6f 70 74 69 6f 6e 5f 67 65 74 28 69 2b 2b 29 29  option_get(i++))
136a0 21 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  !=0 ){.      sql
136b0 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
136c0 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
136d0 20 31 2c 20 30 2c 20 7a 4f 70 74 2c 20 30 29 3b   1, 0, zOpt, 0);
136e0 0a 20 20 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 31 29 3b  esultRow, 1, 1);
13710 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
13720 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51  ak;.#endif /* SQ
13730 4c 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c  LITE_OMIT_COMPIL
13740 45 4f 50 54 49 4f 4e 5f 44 49 41 47 53 20 2a 2f  EOPTION_DIAGS */
13750 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
13760 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 2f 2a 0a 20  _OMIT_WAL.  /*. 
13770 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61   **   PRAGMA [da
13780 74 61 62 61 73 65 2e 5d 77 61 6c 5f 63 68 65 63  tabase.]wal_chec
13790 6b 70 6f 69 6e 74 20 3d 20 70 61 73 73 69 76 65  kpoint = passive
137a0 7c 66 75 6c 6c 7c 72 65 73 74 61 72 74 7c 74 72  |full|restart|tr
137b0 75 6e 63 61 74 65 0a 20 20 2a 2a 0a 20 20 2a 2a  uncate.  **.  **
137c0 20 43 68 65 63 6b 70 6f 69 6e 74 20 74 68 65 20   Checkpoint the 
137d0 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20  database..  */. 
137e0 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 57 41   case PragTyp_WA
137f0 4c 5f 43 48 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a  L_CHECKPOINT: {.
13800 20 20 20 20 69 6e 74 20 69 42 74 20 3d 20 28 70      int iBt = (p
13810 49 64 32 2d 3e 7a 3f 69 44 62 3a 53 51 4c 49 54  Id2->z?iDb:SQLIT
13820 45 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 29 3b  E_MAX_ATTACHED);
13830 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64 65 20 3d  .    int eMode =
13840 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49   SQLITE_CHECKPOI
13850 4e 54 5f 50 41 53 53 49 56 45 3b 0a 20 20 20 20  NT_PASSIVE;.    
13860 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
13870 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
13880 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22  trICmp(zRight, "
13890 66 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20  full")==0 ){.   
138a0 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c       eMode = SQL
138b0 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46  ITE_CHECKPOINT_F
138c0 55 4c 4c 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  ULL;.      }else
138d0 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49   if( sqlite3StrI
138e0 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 72 65 73  Cmp(zRight, "res
138f0 74 61 72 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20  tart")==0 ){.   
13900 20 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c       eMode = SQL
13910 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52  ITE_CHECKPOINT_R
13920 45 53 54 41 52 54 3b 0a 20 20 20 20 20 20 7d 65  ESTART;.      }e
13930 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53  lse if( sqlite3S
13940 74 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22  trICmp(zRight, "
13950 74 72 75 6e 63 61 74 65 22 29 3d 3d 30 20 29 7b  truncate")==0 ){
13960 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  .        eMode =
13970 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49   SQLITE_CHECKPOI
13980 4e 54 5f 54 52 55 4e 43 41 54 45 3b 0a 20 20 20  NT_TRUNCATE;.   
13990 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73     }.    }.    s
139a0 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
139b0 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20 20  Cols(v, 3);.    
139c0 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33  pParse->nMem = 3
139d0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
139e0 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
139f0 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
13a00 22 62 75 73 79 22 2c 20 53 51 4c 49 54 45 5f 53  "busy", SQLITE_S
13a10 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69  TATIC);.    sqli
13a20 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
13a30 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 1, COLNAME_
13a40 4e 41 4d 45 2c 20 22 6c 6f 67 22 2c 20 53 51 4c  NAME, "log", SQL
13a50 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
13a60 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
13a70 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c  olName(v, 2, COL
13a80 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 68 65 63  NAME_NAME, "chec
13a90 6b 70 6f 69 6e 74 65 64 22 2c 20 53 51 4c 49 54  kpointed", SQLIT
13aa0 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20 20 20  E_STATIC);..    
13ab0 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
13ac0 33 28 76 2c 20 4f 50 5f 43 68 65 63 6b 70 6f 69  3(v, OP_Checkpoi
13ad0 6e 74 2c 20 69 42 74 2c 20 65 4d 6f 64 65 2c 20  nt, iBt, eMode, 
13ae0 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  1);.    sqlite3V
13af0 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
13b00 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29  ResultRow, 1, 3)
13b10 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a  ;.  }.  break;..
13b20 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
13b30 4d 41 20 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b  MA wal_autocheck
13b40 70 6f 69 6e 74 0a 20 20 2a 2a 20 20 20 50 52 41  point.  **   PRA
13b50 47 4d 41 20 77 61 6c 5f 61 75 74 6f 63 68 65 63  GMA wal_autochec
13b60 6b 70 6f 69 6e 74 20 3d 20 4e 0a 20 20 2a 2a 0a  kpoint = N.  **.
13b70 20 20 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20 61    ** Configure a
13b80 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
13b90 74 69 6f 6e 20 74 6f 20 61 75 74 6f 6d 61 74 69  tion to automati
13ba0 63 61 6c 6c 79 20 63 68 65 63 6b 70 6f 69 6e 74  cally checkpoint
13bb0 20 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a   a database.  **
13bc0 20 61 66 74 65 72 20 61 63 63 75 6d 75 6c 61 74   after accumulat
13bd0 69 6e 67 20 4e 20 66 72 61 6d 65 73 20 69 6e 20  ing N frames in 
13be0 74 68 65 20 6c 6f 67 2e 20 4f 72 20 71 75 65 72  the log. Or quer
13bf0 79 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e  y for the curren
13c00 74 20 76 61 6c 75 65 0a 20 20 2a 2a 20 6f 66 20  t value.  ** of 
13c10 4e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  N..  */.  case P
13c20 72 61 67 54 79 70 5f 57 41 4c 5f 41 55 54 4f 43  ragTyp_WAL_AUTOC
13c30 48 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20 20  HECKPOINT: {.   
13c40 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
13c50 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77 61 6c       sqlite3_wal
13c60 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 28  _autocheckpoint(
13c70 64 62 2c 20 73 71 6c 69 74 65 33 41 74 6f 69 28  db, sqlite3Atoi(
13c80 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a  zRight));.    }.
13c90 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
13ca0 49 6e 74 28 70 50 61 72 73 65 2c 20 22 77 61 6c  Int(pParse, "wal
13cb0 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 22  _autocheckpoint"
13cc0 2c 20 0a 20 20 20 20 20 20 20 64 62 2d 3e 78 57  , .       db->xW
13cd0 61 6c 43 61 6c 6c 62 61 63 6b 3d 3d 73 71 6c 69  alCallback==sqli
13ce0 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f  te3WalDefaultHoo
13cf0 6b 20 3f 20 0a 20 20 20 20 20 20 20 20 20 20 20  k ? .           
13d00 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e  SQLITE_PTR_TO_IN
13d10 54 28 64 62 2d 3e 70 57 61 6c 41 72 67 29 20 3a  T(db->pWalArg) :
13d20 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b   0);.  }.  break
13d30 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20  ;.#endif..  /*. 
13d40 20 2a 2a 20 20 50 52 41 47 4d 41 20 73 68 72 69   **  PRAGMA shri
13d50 6e 6b 5f 6d 65 6d 6f 72 79 0a 20 20 2a 2a 0a 20  nk_memory.  **. 
13d60 20 2a 2a 20 54 68 69 73 20 70 72 61 67 6d 61 20   ** This pragma 
13d70 61 74 74 65 6d 70 74 73 20 74 6f 20 66 72 65 65  attempts to free
13d80 20 61 73 20 6d 75 63 68 20 6d 65 6d 6f 72 79 20   as much memory 
13d90 61 73 20 70 6f 73 73 69 62 6c 65 20 66 72 6f 6d  as possible from
13da0 20 74 68 65 0a 20 20 2a 2a 20 63 75 72 72 65 6e   the.  ** curren
13db0 74 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  t database conne
13dc0 63 74 69 6f 6e 2e 0a 20 20 2a 2f 0a 20 20 63 61  ction..  */.  ca
13dd0 73 65 20 50 72 61 67 54 79 70 5f 53 48 52 49 4e  se PragTyp_SHRIN
13de0 4b 5f 4d 45 4d 4f 52 59 3a 20 7b 0a 20 20 20 20  K_MEMORY: {.    
13df0 73 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65 61  sqlite3_db_relea
13e00 73 65 5f 6d 65 6d 6f 72 79 28 64 62 29 3b 0a 20  se_memory(db);. 
13e10 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
13e20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
13e30 41 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 0a 20  A busy_timeout. 
13e40 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 62 75 73   **   PRAGMA bus
13e50 79 5f 74 69 6d 65 6f 75 74 20 3d 20 4e 0a 20 20  y_timeout = N.  
13e60 2a 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20 73 71 6c  **.  ** Call sql
13e70 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75  ite3_busy_timeou
13e80 74 28 64 62 2c 20 4e 29 2e 20 20 52 65 74 75 72  t(db, N).  Retur
13e90 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 69  n the current ti
13ea0 6d 65 6f 75 74 20 76 61 6c 75 65 0a 20 20 2a 2a  meout value.  **
13eb0 20 69 66 20 6f 6e 65 20 69 73 20 73 65 74 2e 20   if one is set. 
13ec0 20 49 66 20 6e 6f 20 62 75 73 79 20 68 61 6e 64   If no busy hand
13ed0 6c 65 72 20 6f 72 20 61 20 64 69 66 66 65 72 65  ler or a differe
13ee0 6e 74 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20  nt busy handler 
13ef0 69 73 20 73 65 74 0a 20 20 2a 2a 20 74 68 65 6e  is set.  ** then
13f00 20 30 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20   0 is returned. 
13f10 20 53 65 74 74 69 6e 67 20 74 68 65 20 62 75 73   Setting the bus
13f20 79 5f 74 69 6d 65 6f 75 74 20 74 6f 20 30 20 6f  y_timeout to 0 o
13f30 72 20 6e 65 67 61 74 69 76 65 0a 20 20 2a 2a 20  r negative.  ** 
13f40 64 69 73 61 62 6c 65 73 20 74 68 65 20 74 69 6d  disables the tim
13f50 65 6f 75 74 2e 0a 20 20 2a 2f 0a 20 20 2f 2a 63  eout..  */.  /*c
13f60 61 73 65 20 50 72 61 67 54 79 70 5f 42 55 53 59  ase PragTyp_BUSY
13f70 5f 54 49 4d 45 4f 55 54 2a 2f 20 64 65 66 61 75  _TIMEOUT*/ defau
13f80 6c 74 3a 20 7b 0a 20 20 20 20 61 73 73 65 72 74  lt: {.    assert
13f90 28 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d  ( aPragmaNames[m
13fa0 69 64 5d 2e 65 50 72 61 67 54 79 70 3d 3d 50 72  id].ePragTyp==Pr
13fb0 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f  agTyp_BUSY_TIMEO
13fc0 55 54 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52  UT );.    if( zR
13fd0 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71  ight ){.      sq
13fe0 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f  lite3_busy_timeo
13ff0 75 74 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74  ut(db, sqlite3At
14000 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20  oi(zRight));.   
14010 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e   }.    returnSin
14020 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22  gleInt(pParse, "
14030 74 69 6d 65 6f 75 74 22 2c 20 20 64 62 2d 3e 62  timeout",  db->b
14040 75 73 79 54 69 6d 65 6f 75 74 29 3b 0a 20 20 20  usyTimeout);.   
14050 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f   break;.  }..  /
14060 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  *.  **   PRAGMA 
14070 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 0a  soft_heap_limit.
14080 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 6f    **   PRAGMA so
14090 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20 3d 20  ft_heap_limit = 
140a0 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 61 6c 6c  N.  **.  ** Call
140b0 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65   sqlite3_soft_he
140c0 61 70 5f 6c 69 6d 69 74 36 34 28 4e 29 2e 20 20  ap_limit64(N).  
140d0 52 65 74 75 72 6e 20 74 68 65 20 72 65 73 75 6c  Return the resul
140e0 74 2e 20 20 49 66 20 4e 20 69 73 20 6f 6d 69 74  t.  If N is omit
140f0 74 65 64 2c 0a 20 20 2a 2a 20 75 73 65 20 2d 31  ted,.  ** use -1
14100 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
14110 61 67 54 79 70 5f 53 4f 46 54 5f 48 45 41 50 5f  agTyp_SOFT_HEAP_
14120 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 73 71 6c  LIMIT: {.    sql
14130 69 74 65 33 5f 69 6e 74 36 34 20 4e 3b 0a 20 20  ite3_int64 N;.  
14140 20 20 69 66 28 20 7a 52 69 67 68 74 20 26 26 20    if( zRight && 
14150 73 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54  sqlite3DecOrHexT
14160 6f 49 36 34 28 7a 52 69 67 68 74 2c 20 26 4e 29  oI64(zRight, &N)
14170 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
14180 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6f 66       sqlite3_sof
14190 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 4e  t_heap_limit64(N
141a0 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  );.    }.    ret
141b0 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
141c0 72 73 65 2c 20 22 73 6f 66 74 5f 68 65 61 70 5f  rse, "soft_heap_
141d0 6c 69 6d 69 74 22 2c 20 20 73 71 6c 69 74 65 33  limit",  sqlite3
141e0 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74  _soft_heap_limit
141f0 36 34 28 2d 31 29 29 3b 0a 20 20 20 20 62 72 65  64(-1));.    bre
14200 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
14210 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 68 72 65  **   PRAGMA thre
14220 61 64 73 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  ads.  **   PRAGM
14230 41 20 74 68 72 65 61 64 73 20 3d 20 4e 0a 20 20  A threads = N.  
14240 2a 2a 0a 20 20 2a 2a 20 43 6f 6e 66 69 67 75 72  **.  ** Configur
14250 65 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75  e the maximum nu
14260 6d 62 65 72 20 6f 66 20 77 6f 72 6b 65 72 20 74  mber of worker t
14270 68 72 65 61 64 73 2e 20 20 52 65 74 75 72 6e 20  hreads.  Return 
14280 74 68 65 20 6e 65 77 0a 20 20 2a 2a 20 6d 61 78  the new.  ** max
14290 69 6d 75 6d 2c 20 77 68 69 63 68 20 6d 69 67 68  imum, which migh
142a0 74 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 72  t be less than r
142b0 65 71 75 65 73 74 65 64 2e 0a 20 20 2a 2f 0a 20  equested..  */. 
142c0 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 48   case PragTyp_TH
142d0 52 45 41 44 53 3a 20 7b 0a 20 20 20 20 73 71 6c  READS: {.    sql
142e0 69 74 65 33 5f 69 6e 74 36 34 20 4e 3b 0a 20 20  ite3_int64 N;.  
142f0 20 20 69 66 28 20 7a 52 69 67 68 74 0a 20 20 20    if( zRight.   
14300 20 20 26 26 20 73 71 6c 69 74 65 33 44 65 63 4f    && sqlite3DecO
14310 72 48 65 78 54 6f 49 36 34 28 7a 52 69 67 68 74  rHexToI64(zRight
14320 2c 20 26 4e 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b  , &N)==SQLITE_OK
14330 0a 20 20 20 20 20 26 26 20 4e 3e 3d 30 0a 20 20  .     && N>=0.  
14340 20 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74    ){.      sqlit
14350 65 33 5f 6c 69 6d 69 74 28 64 62 2c 20 53 51 4c  e3_limit(db, SQL
14360 49 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52  ITE_LIMIT_WORKER
14370 5f 54 48 52 45 41 44 53 2c 20 28 69 6e 74 29 28  _THREADS, (int)(
14380 4e 26 30 78 37 66 66 66 66 66 66 66 29 29 3b 0a  N&0x7fffffff));.
14390 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e      }.    return
143a0 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
143b0 2c 20 22 74 68 72 65 61 64 73 22 2c 0a 20 20 20  , "threads",.   
143c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
143d0 20 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 64   sqlite3_limit(d
143e0 62 2c 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f  b, SQLITE_LIMIT_
143f0 57 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20  WORKER_THREADS, 
14400 2d 31 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  -1));.    break;
14410 0a 20 20 7d 0a 0a 23 69 66 20 64 65 66 69 6e 65  .  }..#if define
14420 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
14430 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
14440 45 5f 54 45 53 54 29 0a 20 20 2f 2a 0a 20 20 2a  E_TEST).  /*.  *
14450 2a 20 52 65 70 6f 72 74 20 74 68 65 20 63 75 72  * Report the cur
14460 72 65 6e 74 20 73 74 61 74 65 20 6f 66 20 66 69  rent state of fi
14470 6c 65 20 6c 6f 67 73 20 66 6f 72 20 61 6c 6c 20  le logs for all 
14480 64 61 74 61 62 61 73 65 73 0a 20 20 2a 2f 0a 20  databases.  */. 
14490 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f   case PragTyp_LO
144a0 43 4b 5f 53 54 41 54 55 53 3a 20 7b 0a 20 20 20  CK_STATUS: {.   
144b0 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68   static const ch
144c0 61 72 20 2a 63 6f 6e 73 74 20 61 7a 4c 6f 63 6b  ar *const azLock
144d0 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  Name[] = {.     
144e0 20 22 75 6e 6c 6f 63 6b 65 64 22 2c 20 22 73 68   "unlocked", "sh
144f0 61 72 65 64 22 2c 20 22 72 65 73 65 72 76 65 64  ared", "reserved
14500 22 2c 20 22 70 65 6e 64 69 6e 67 22 2c 20 22 65  ", "pending", "e
14510 78 63 6c 75 73 69 76 65 22 0a 20 20 20 20 7d 3b  xclusive".    };
14520 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20  .    int i;.    
14530 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
14540 6d 43 6f 6c 73 28 76 2c 20 32 29 3b 0a 20 20 20  mCols(v, 2);.   
14550 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
14560 32 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  2;.    sqlite3Vd
14570 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
14580 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
14590 20 22 64 61 74 61 62 61 73 65 22 2c 20 53 51 4c   "database", SQL
145a0 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
145b0 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
145c0 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c  olName(v, 1, COL
145d0 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 74 61 74  NAME_NAME, "stat
145e0 75 73 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  us", SQLITE_STAT
145f0 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30  IC);.    for(i=0
14600 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b  ; i<db->nDb; i++
14610 29 7b 0a 20 20 20 20 20 20 42 74 72 65 65 20 2a  ){.      Btree *
14620 70 42 74 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74  pBt;.      const
14630 20 63 68 61 72 20 2a 7a 53 74 61 74 65 20 3d 20   char *zState = 
14640 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 20 20 20  "unknown";.     
14650 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 69 66   int j;.      if
14660 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61  ( db->aDb[i].zNa
14670 6d 65 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  me==0 ) continue
14680 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
14690 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
146a0 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30  String8, 0, 1, 0
146b0 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61  , db->aDb[i].zNa
146c0 6d 65 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a  me, P4_STATIC);.
146d0 20 20 20 20 20 20 70 42 74 20 3d 20 64 62 2d 3e        pBt = db->
146e0 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20 20 20 20  aDb[i].pBt;.    
146f0 20 20 69 66 28 20 70 42 74 3d 3d 30 20 7c 7c 20    if( pBt==0 || 
14700 73 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65  sqlite3BtreePage
14710 72 28 70 42 74 29 3d 3d 30 20 29 7b 0a 20 20 20  r(pBt)==0 ){.   
14720 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20 22 63       zState = "c
14730 6c 6f 73 65 64 22 3b 0a 20 20 20 20 20 20 7d 65  losed";.      }e
14740 6c 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 5f  lse if( sqlite3_
14750 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c  file_control(db,
14760 20 69 20 3f 20 64 62 2d 3e 61 44 62 5b 69 5d 2e   i ? db->aDb[i].
14770 7a 4e 61 6d 65 20 3a 20 30 2c 20 0a 20 20 20 20  zName : 0, .    
14780 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14790 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
147a0 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4c 4f   SQLITE_FCNTL_LO
147b0 43 4b 53 54 41 54 45 2c 20 26 6a 29 3d 3d 53 51  CKSTATE, &j)==SQ
147c0 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20  LITE_OK ){.     
147d0 20 20 20 20 7a 53 74 61 74 65 20 3d 20 61 7a 4c      zState = azL
147e0 6f 63 6b 4e 61 6d 65 5b 6a 5d 3b 0a 20 20 20 20  ockName[j];.    
147f0 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65    }.      sqlite
14800 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
14810 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c  P_String8, 0, 2,
14820 20 30 2c 20 7a 53 74 61 74 65 2c 20 50 34 5f 53   0, zState, P4_S
14830 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
14840 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
14850 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
14860 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20 20   1, 2);.    }.  
14870 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
14880 64 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49  dif..#ifdef SQLI
14890 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 63  TE_HAS_CODEC.  c
148a0 61 73 65 20 50 72 61 67 54 79 70 5f 4b 45 59 3a  ase PragTyp_KEY:
148b0 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68   {.    if( zRigh
148c0 74 20 29 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f  t ) sqlite3_key_
148d0 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69 67  v2(db, zDb, zRig
148e0 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c 65  ht, sqlite3Strle
148f0 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20 20  n30(zRight));.  
14900 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 63    break;.  }.  c
14910 61 73 65 20 50 72 61 67 54 79 70 5f 52 45 4b 45  ase PragTyp_REKE
14920 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69  Y: {.    if( zRi
14930 67 68 74 20 29 20 73 71 6c 69 74 65 33 5f 72 65  ght ) sqlite3_re
14940 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20  key_v2(db, zDb, 
14950 7a 52 69 67 68 74 2c 20 73 71 6c 69 74 65 33 53  zRight, sqlite3S
14960 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 29  trlen30(zRight))
14970 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
14980 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
14990 48 45 58 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66  HEXKEY: {.    if
149a0 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
149b0 20 20 75 38 20 69 42 79 74 65 3b 0a 20 20 20 20    u8 iByte;.    
149c0 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 63    int i;.      c
149d0 68 61 72 20 7a 4b 65 79 5b 34 30 5d 3b 0a 20 20  har zKey[40];.  
149e0 20 20 20 20 66 6f 72 28 69 3d 30 2c 20 69 42 79      for(i=0, iBy
149f0 74 65 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 7a  te=0; i<sizeof(z
14a00 4b 65 79 29 2a 32 20 26 26 20 73 71 6c 69 74 65  Key)*2 && sqlite
14a10 33 49 73 78 64 69 67 69 74 28 7a 52 69 67 68 74  3Isxdigit(zRight
14a20 5b 69 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  [i]); i++){.    
14a30 20 20 20 20 69 42 79 74 65 20 3d 20 28 69 42 79      iByte = (iBy
14a40 74 65 3c 3c 34 29 20 2b 20 73 71 6c 69 74 65 33  te<<4) + sqlite3
14a50 48 65 78 54 6f 49 6e 74 28 7a 52 69 67 68 74 5b  HexToInt(zRight[
14a60 69 5d 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28  i]);.        if(
14a70 20 28 69 26 31 29 21 3d 30 20 29 20 7a 4b 65 79   (i&1)!=0 ) zKey
14a80 5b 69 2f 32 5d 20 3d 20 69 42 79 74 65 3b 0a 20  [i/2] = iByte;. 
14a90 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28       }.      if(
14aa0 20 28 7a 4c 65 66 74 5b 33 5d 20 26 20 30 78 66   (zLeft[3] & 0xf
14ab0 29 3d 3d 30 78 62 20 29 7b 0a 20 20 20 20 20 20  )==0xb ){.      
14ac0 20 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32    sqlite3_key_v2
14ad0 28 64 62 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c 20  (db, zDb, zKey, 
14ae0 69 2f 32 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  i/2);.      }els
14af0 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
14b00 65 33 5f 72 65 6b 65 79 5f 76 32 28 64 62 2c 20  e3_rekey_v2(db, 
14b10 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29 3b  zDb, zKey, i/2);
14b20 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
14b30 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65     break;.  }.#e
14b40 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64  ndif.#if defined
14b50 28 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45  (SQLITE_HAS_CODE
14b60 43 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  C) || defined(SQ
14b70 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f  LITE_ENABLE_CERO
14b80 44 29 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  D).  case PragTy
14b90 70 5f 41 43 54 49 56 41 54 45 5f 45 58 54 45 4e  p_ACTIVATE_EXTEN
14ba0 53 49 4f 4e 53 3a 20 69 66 28 20 7a 52 69 67 68  SIONS: if( zRigh
14bb0 74 20 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49  t ){.#ifdef SQLI
14bc0 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 20  TE_HAS_CODEC.   
14bd0 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e   if( sqlite3StrN
14be0 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 73 65  ICmp(zRight, "se
14bf0 65 2d 22 2c 20 34 29 3d 3d 30 20 29 7b 0a 20 20  e-", 4)==0 ){.  
14c00 20 20 20 20 73 71 6c 69 74 65 33 5f 61 63 74 69      sqlite3_acti
14c10 76 61 74 65 5f 73 65 65 28 26 7a 52 69 67 68 74  vate_see(&zRight
14c20 5b 34 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64  [4]);.    }.#end
14c30 69 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45  if.#ifdef SQLITE
14c40 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 0a 20 20  _ENABLE_CEROD.  
14c50 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72    if( sqlite3Str
14c60 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 63  NICmp(zRight, "c
14c70 65 72 6f 64 2d 22 2c 20 36 29 3d 3d 30 20 29 7b  erod-", 6)==0 ){
14c80 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 61  .      sqlite3_a
14c90 63 74 69 76 61 74 65 5f 63 65 72 6f 64 28 26 7a  ctivate_cerod(&z
14ca0 52 69 67 68 74 5b 36 5d 29 3b 0a 20 20 20 20 7d  Right[6]);.    }
14cb0 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72  .#endif.  }.  br
14cc0 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 7d  eak;.#endif..  }
14cd0 20 2f 2a 20 45 6e 64 20 6f 66 20 74 68 65 20 50   /* End of the P
14ce0 52 41 47 4d 41 20 73 77 69 74 63 68 20 2a 2f 0a  RAGMA switch */.
14cf0 0a 70 72 61 67 6d 61 5f 6f 75 74 3a 0a 20 20 73  .pragma_out:.  s
14d00 71 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c  qlite3DbFree(db,
14d10 20 7a 4c 65 66 74 29 3b 0a 20 20 73 71 6c 69 74   zLeft);.  sqlit
14d20 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 52 69  e3DbFree(db, zRi
14d30 67 68 74 29 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20  ght);.}..#endif 
14d40 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  /* SQLITE_OMIT_P
14d50 52 41 47 4d 41 20 2a 2f 0a                       RAGMA */.