/ Hex Artifact Content
Login
SQLite training in Houston TX on 2019-11-05 (details)
Part of the 2019 Tcl Conference

Artifact 8d67f2e7a73b8260cfed328eb024fb16c20e0f16:


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 57 41 4c 5f 41 55 54 4f 43  ragTyp_WAL_AUTOC
0a60: 48 45 43 4b 50 4f 49 4e 54 20 20 20 20 20 20 20  HECKPOINT       
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 43 48 45 43  PragTyp_WAL_CHEC
0a90: 4b 50 4f 49 4e 54 20 20 20 20 20 20 20 20 20 20  KPOINT          
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 41 43 54 49 56 41 54   PragTyp_ACTIVAT
0ac0: 45 5f 45 58 54 45 4e 53 49 4f 4e 53 20 20 20 20  E_EXTENSIONS    
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 48 45 58 4b 45 59  e PragTyp_HEXKEY
0af0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
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 4b 45 59 20 20  ne PragTyp_KEY  
0b20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
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 52 45 4b 45  ine PragTyp_REKE
0b50: 59 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  Y               
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 4c 4f 43  fine PragTyp_LOC
0b80: 4b 5f 53 54 41 54 55 53 20 20 20 20 20 20 20 20  K_STATUS        
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 50 41  efine PragTyp_PA
0bb0: 52 53 45 52 5f 54 52 41 43 45 20 20 20 20 20 20  RSER_TRACE      
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 46 6c 61 67 5f  define PragFlag_
0be0: 4e 65 65 64 53 63 68 65 6d 61 20 20 20 20 20 20  NeedSchema      
0bf0: 20 20 20 20 20 30 78 30 31 0a 73 74 61 74 69 63       0x01.static
0c00: 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20 73 50   const struct sP
0c10: 72 61 67 6d 61 4e 61 6d 65 73 20 7b 0a 20 20 63  ragmaNames {.  c
0c20: 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e 73 74  onst char *const
0c30: 20 7a 4e 61 6d 65 3b 20 20 2f 2a 20 4e 61 6d 65   zName;  /* Name
0c40: 20 6f 66 20 70 72 61 67 6d 61 20 2a 2f 0a 20 20   of pragma */.  
0c50: 75 38 20 65 50 72 61 67 54 79 70 3b 20 20 20 20  u8 ePragTyp;    
0c60: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50 72 61            /* Pra
0c70: 67 54 79 70 5f 58 58 58 20 76 61 6c 75 65 20 2a  gTyp_XXX value *
0c80: 2f 0a 20 20 75 38 20 6d 50 72 61 67 46 6c 61 67  /.  u8 mPragFlag
0c90: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  ;             /*
0ca0: 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20 50 72   Zero or more Pr
0cb0: 61 67 46 6c 61 67 5f 58 58 58 20 76 61 6c 75 65  agFlag_XXX value
0cc0: 73 20 2a 2f 0a 20 20 75 33 32 20 69 41 72 67 3b  s */.  u32 iArg;
0cd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0ce0: 20 2f 2a 20 45 78 74 72 61 20 61 72 67 75 6d 65   /* Extra argume
0cf0: 6e 74 20 2a 2f 0a 7d 20 61 50 72 61 67 6d 61 4e  nt */.} aPragmaN
0d00: 61 6d 65 73 5b 5d 20 3d 20 7b 0a 23 69 66 20 64  ames[] = {.#if d
0d10: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41  efined(SQLITE_HA
0d20: 53 5f 43 4f 44 45 43 29 20 7c 7c 20 64 65 66 69  S_CODEC) || defi
0d30: 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c  ned(SQLITE_ENABL
0d40: 45 5f 43 45 52 4f 44 29 0a 20 20 7b 20 2f 2a 20  E_CEROD).  { /* 
0d50: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 61  zName:     */ "a
0d60: 63 74 69 76 61 74 65 5f 65 78 74 65 6e 73 69 6f  ctivate_extensio
0d70: 6e 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ns",.    /* ePra
0d80: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
0d90: 70 5f 41 43 54 49 56 41 54 45 5f 45 58 54 45 4e  p_ACTIVATE_EXTEN
0da0: 53 49 4f 4e 53 2c 0a 20 20 20 20 2f 2a 20 65 50  SIONS,.    /* eP
0db0: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
0dc0: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
0dd0: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
0de0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
0df0: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
0e00: 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 29  VERSION_PRAGMAS)
0e10: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
0e20: 20 20 20 2a 2f 20 22 61 70 70 6c 69 63 61 74 69     */ "applicati
0e30: 6f 6e 5f 69 64 22 2c 0a 20 20 20 20 2f 2a 20 65  on_id",.    /* e
0e40: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
0e50: 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55  gTyp_HEADER_VALU
0e60: 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  E,.    /* ePragF
0e70: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
0e80: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
0e90: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
0ea0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
0eb0: 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29  OMIT_AUTOVACUUM)
0ec0: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
0ed0: 20 20 20 2a 2f 20 22 61 75 74 6f 5f 76 61 63 75     */ "auto_vacu
0ee0: 75 6d 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  um",.    /* ePra
0ef0: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
0f00: 70 5f 41 55 54 4f 5f 56 41 43 55 55 4d 2c 0a 20  p_AUTO_VACUUM,. 
0f10: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
0f20: 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65   */ PragFlag_Nee
0f30: 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20  dSchema,.    /* 
0f40: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
0f50: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
0f60: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
0f70: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29  IT_FLAG_PRAGMAS)
0f80: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
0f90: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 4d 41  LITE_OMIT_AUTOMA
0fa0: 54 49 43 5f 49 4e 44 45 58 29 0a 20 20 7b 20 2f  TIC_INDEX).  { /
0fb0: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
0fc0: 22 61 75 74 6f 6d 61 74 69 63 5f 69 6e 64 65 78  "automatic_index
0fd0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
0fe0: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
0ff0: 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72  FLAG,.    /* ePr
1000: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
1010: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
1020: 2a 2f 20 53 51 4c 49 54 45 5f 41 75 74 6f 49 6e  */ SQLITE_AutoIn
1030: 64 65 78 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65  dex },.#endif.#e
1040: 6e 64 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  ndif.  { /* zNam
1050: 65 3a 20 20 20 20 20 2a 2f 20 22 62 75 73 79 5f  e:     */ "busy_
1060: 74 69 6d 65 6f 75 74 22 2c 0a 20 20 20 20 2f 2a  timeout",.    /*
1070: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
1080: 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45  ragTyp_BUSY_TIME
1090: 4f 55 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  OUT,.    /* ePra
10a0: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
10b0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
10c0: 2f 20 30 20 7d 2c 0a 23 69 66 20 21 64 65 66 69  / 0 },.#if !defi
10d0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
10e0: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a 20  PAGER_PRAGMAS). 
10f0: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
1100: 20 2a 2f 20 22 63 61 63 68 65 5f 73 69 7a 65 22   */ "cache_size"
1110: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
1120: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 43  p:  */ PragTyp_C
1130: 41 43 48 45 5f 53 49 5a 45 2c 0a 20 20 20 20 2f  ACHE_SIZE,.    /
1140: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
1150: 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68  PragFlag_NeedSch
1160: 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  ema,.    /* iArg
1170: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
1180: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
1190: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
11a0: 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  LAG_PRAGMAS).  {
11b0: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
11c0: 2f 20 22 63 61 63 68 65 5f 73 70 69 6c 6c 22 2c  / "cache_spill",
11d0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
11e0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
11f0: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
1200: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1210: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1220: 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69   SQLITE_CacheSpi
1230: 6c 6c 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7b  ll },.#endif.  {
1240: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
1250: 2f 20 22 63 61 73 65 5f 73 65 6e 73 69 74 69 76  / "case_sensitiv
1260: 65 5f 6c 69 6b 65 22 2c 0a 20 20 20 20 2f 2a 20  e_like",.    /* 
1270: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
1280: 61 67 54 79 70 5f 43 41 53 45 5f 53 45 4e 53 49  agTyp_CASE_SENSI
1290: 54 49 56 45 5f 4c 49 4b 45 2c 0a 20 20 20 20 2f  TIVE_LIKE,.    /
12a0: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
12b0: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
12c0: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 69 66       */ 0 },.#if
12d0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
12e0: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
12f0: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
1300: 3a 20 20 20 20 20 2a 2f 20 22 63 68 65 63 6b 70  :     */ "checkp
1310: 6f 69 6e 74 5f 66 75 6c 6c 66 73 79 6e 63 22 2c  oint_fullfsync",
1320: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
1330: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
1340: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
1350: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1360: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1370: 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c 6c   SQLITE_CkptFull
1380: 46 53 79 6e 63 20 7d 2c 0a 23 65 6e 64 69 66 0a  FSync },.#endif.
1390: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
13a0: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
13b0: 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20  PRAGMAS).  { /* 
13c0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 63  zName:     */ "c
13d0: 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 22 2c 0a  ollation_list",.
13e0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
13f0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 43 4f 4c    */ PragTyp_COL
1400: 4c 41 54 49 4f 4e 5f 4c 49 53 54 2c 0a 20 20 20  LATION_LIST,.   
1410: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
1420: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
1430: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
1440: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
1450: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ed(SQLITE_OMIT_C
1460: 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41  OMPILEOPTION_DIA
1470: 47 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  GS).  { /* zName
1480: 3a 20 20 20 20 20 2a 2f 20 22 63 6f 6d 70 69 6c  :     */ "compil
1490: 65 5f 6f 70 74 69 6f 6e 73 22 2c 0a 20 20 20 20  e_options",.    
14a0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
14b0: 20 50 72 61 67 54 79 70 5f 43 4f 4d 50 49 4c 45   PragTyp_COMPILE
14c0: 5f 4f 50 54 49 4f 4e 53 2c 0a 20 20 20 20 2f 2a  _OPTIONS,.    /*
14d0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
14e0: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
14f0: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
1500: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
1510: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47  SQLITE_OMIT_FLAG
1520: 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a  _PRAGMAS).  { /*
1530: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
1540: 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 22 2c 0a  count_changes",.
1550: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1560: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
1570: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
1580: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
1590: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
15a0: 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73  SQLITE_CountRows
15b0: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
15c0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
15d0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
15e0: 53 29 20 26 26 20 53 51 4c 49 54 45 5f 4f 53 5f  S) && SQLITE_OS_
15f0: 57 49 4e 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  WIN.  { /* zName
1600: 3a 20 20 20 20 20 2a 2f 20 22 64 61 74 61 5f 73  :     */ "data_s
1610: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 22 2c  tore_directory",
1620: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
1630: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 44 41  :  */ PragTyp_DA
1640: 54 41 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f  TA_STORE_DIRECTO
1650: 52 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  RY,.    /* ePrag
1660: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1670: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1680: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
1690: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
16a0: 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41  _OMIT_SCHEMA_PRA
16b0: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
16c0: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 64 61 74 61  me:     */ "data
16d0: 62 61 73 65 5f 6c 69 73 74 22 2c 0a 20 20 20 20  base_list",.    
16e0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
16f0: 20 50 72 61 67 54 79 70 5f 44 41 54 41 42 41 53   PragTyp_DATABAS
1700: 45 5f 4c 49 53 54 2c 0a 20 20 20 20 2f 2a 20 65  E_LIST,.    /* e
1710: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61  PragFlag: */ Pra
1720: 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61  gFlag_NeedSchema
1730: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
1740: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
1750: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
1760: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
1770: 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20 21 64  R_PRAGMAS) && !d
1780: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1790: 49 54 5f 44 45 50 52 45 43 41 54 45 44 29 0a 20  IT_DEPRECATED). 
17a0: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
17b0: 20 2a 2f 20 22 64 65 66 61 75 6c 74 5f 63 61 63   */ "default_cac
17c0: 68 65 5f 73 69 7a 65 22 2c 0a 20 20 20 20 2f 2a  he_size",.    /*
17d0: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
17e0: 72 61 67 54 79 70 5f 44 45 46 41 55 4c 54 5f 43  ragTyp_DEFAULT_C
17f0: 41 43 48 45 5f 53 49 5a 45 2c 0a 20 20 20 20 2f  ACHE_SIZE,.    /
1800: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
1810: 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68  PragFlag_NeedSch
1820: 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  ema,.    /* iArg
1830: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
1840: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
1850: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
1860: 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 23 69 66  LAG_PRAGMAS).#if
1870: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1880: 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
1890: 59 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  Y) && !defined(S
18a0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
18b0: 45 52 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  ER).  { /* zName
18c0: 3a 20 20 20 20 20 2a 2f 20 22 64 65 66 65 72 5f  :     */ "defer_
18d0: 66 6f 72 65 69 67 6e 5f 6b 65 79 73 22 2c 0a 20  foreign_keys",. 
18e0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
18f0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
1900: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
1910: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
1920: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
1930: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 7d  QLITE_DeferFKs }
1940: 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a  ,.#endif.#endif.
1950: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
1960: 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52  ITE_OMIT_FLAG_PR
1970: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
1980: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 65 6d 70  ame:     */ "emp
1990: 74 79 5f 72 65 73 75 6c 74 5f 63 61 6c 6c 62 61  ty_result_callba
19a0: 63 6b 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  cks",.    /* ePr
19b0: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
19c0: 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20  yp_FLAG,.    /* 
19d0: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
19e0: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
19f0: 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 4e 75 6c     */ SQLITE_Nul
1a00: 6c 43 61 6c 6c 62 61 63 6b 20 7d 2c 0a 23 65 6e  lCallback },.#en
1a10: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
1a20: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46  (SQLITE_OMIT_UTF
1a30: 31 36 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  16).  { /* zName
1a40: 3a 20 20 20 20 20 2a 2f 20 22 65 6e 63 6f 64 69  :     */ "encodi
1a50: 6e 67 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ng",.    /* ePra
1a60: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
1a70: 70 5f 45 4e 43 4f 44 49 4e 47 2c 0a 20 20 20 20  p_ENCODING,.    
1a80: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
1a90: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
1aa0: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
1ab0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
1ac0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  d(SQLITE_OMIT_FO
1ad0: 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64  REIGN_KEY) && !d
1ae0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1af0: 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20 7b 20  IT_TRIGGER).  { 
1b00: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
1b10: 20 22 66 6f 72 65 69 67 6e 5f 6b 65 79 5f 63 68   "foreign_key_ch
1b20: 65 63 6b 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  eck",.    /* ePr
1b30: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
1b40: 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 43  yp_FOREIGN_KEY_C
1b50: 48 45 43 4b 2c 0a 20 20 20 20 2f 2a 20 65 50 72  HECK,.    /* ePr
1b60: 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46  agFlag: */ PragF
1b70: 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a  lag_NeedSchema,.
1b80: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
1b90: 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66    */ 0 },.#endif
1ba0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1bb0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
1bc0: 4e 5f 4b 45 59 29 0a 20 20 7b 20 2f 2a 20 7a 4e  N_KEY).  { /* zN
1bd0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66 6f 72  ame:     */ "for
1be0: 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 22 2c 0a  eign_key_list",.
1bf0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1c00: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4f 52    */ PragTyp_FOR
1c10: 45 49 47 4e 5f 4b 45 59 5f 4c 49 53 54 2c 0a 20  EIGN_KEY_LIST,. 
1c20: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
1c30: 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65   */ PragFlag_Nee
1c40: 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20  dSchema,.    /* 
1c50: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
1c60: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
1c70: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1c80: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29  IT_FLAG_PRAGMAS)
1c90: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1ca0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
1cb0: 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e  N_KEY) && !defin
1cc0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ed(SQLITE_OMIT_T
1cd0: 52 49 47 47 45 52 29 0a 20 20 7b 20 2f 2a 20 7a  RIGGER).  { /* z
1ce0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66 6f  Name:     */ "fo
1cf0: 72 65 69 67 6e 5f 6b 65 79 73 22 2c 0a 20 20 20  reign_keys",.   
1d00: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
1d10: 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a  / PragTyp_FLAG,.
1d20: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
1d30: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
1d40: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c  Arg:      */ SQL
1d50: 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73 20  ITE_ForeignKeys 
1d60: 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69 66  },.#endif.#endif
1d70: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
1d80: 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41  LITE_OMIT_SCHEMA
1d90: 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53  _VERSION_PRAGMAS
1da0: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
1db0: 20 20 20 20 2a 2f 20 22 66 72 65 65 6c 69 73 74      */ "freelist
1dc0: 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 2f 2a 20  _count",.    /* 
1dd0: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
1de0: 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c  agTyp_HEADER_VAL
1df0: 55 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  UE,.    /* ePrag
1e00: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1e10: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1e20: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
1e30: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1e40: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
1e50: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
1e60: 3a 20 20 20 20 20 2a 2f 20 22 66 75 6c 6c 5f 63  :     */ "full_c
1e70: 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22 2c 0a 20 20  olumn_names",.  
1e80: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
1e90: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
1ea0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
1eb0: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
1ec0: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
1ed0: 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61 6d 65  LITE_FullColName
1ee0: 73 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  s },.  { /* zNam
1ef0: 65 3a 20 20 20 20 20 2a 2f 20 22 66 75 6c 6c 66  e:     */ "fullf
1f00: 73 79 6e 63 22 2c 0a 20 20 20 20 2f 2a 20 65 50  sync",.    /* eP
1f10: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
1f20: 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a  Typ_FLAG,.    /*
1f30: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
1f40: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
1f50: 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 46 75      */ SQLITE_Fu
1f60: 6c 6c 46 53 79 6e 63 20 7d 2c 0a 23 65 6e 64 69  llFSync },.#endi
1f70: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
1f80: 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 0a  LITE_HAS_CODEC).
1f90: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
1fa0: 20 20 2a 2f 20 22 68 65 78 6b 65 79 22 2c 0a 20    */ "hexkey",. 
1fb0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
1fc0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 48 45 58 4b   */ PragTyp_HEXK
1fd0: 45 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  EY,.    /* ePrag
1fe0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1ff0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
2000: 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61   0 },.  { /* zNa
2010: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 68 65 78 72  me:     */ "hexr
2020: 65 6b 65 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50  ekey",.    /* eP
2030: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
2040: 54 79 70 5f 48 45 58 4b 45 59 2c 0a 20 20 20 20  Typ_HEXKEY,.    
2050: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
2060: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
2070: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
2080: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
2090: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  d(SQLITE_OMIT_FL
20a0: 41 47 5f 50 52 41 47 4d 41 53 29 0a 23 69 66 20  AG_PRAGMAS).#if 
20b0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
20c0: 4f 4d 49 54 5f 43 48 45 43 4b 29 0a 20 20 7b 20  OMIT_CHECK).  { 
20d0: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
20e0: 20 22 69 67 6e 6f 72 65 5f 63 68 65 63 6b 5f 63   "ignore_check_c
20f0: 6f 6e 73 74 72 61 69 6e 74 73 22 2c 0a 20 20 20  onstraints",.   
2100: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
2110: 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a  / PragTyp_FLAG,.
2120: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
2130: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
2140: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c  Arg:      */ SQL
2150: 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63 6b 73  ITE_IgnoreChecks
2160: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69   },.#endif.#endi
2170: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
2180: 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56  QLITE_OMIT_AUTOV
2190: 41 43 55 55 4d 29 0a 20 20 7b 20 2f 2a 20 7a 4e  ACUUM).  { /* zN
21a0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e 63  ame:     */ "inc
21b0: 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 22  remental_vacuum"
21c0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
21d0: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 49  p:  */ PragTyp_I
21e0: 4e 43 52 45 4d 45 4e 54 41 4c 5f 56 41 43 55 55  NCREMENTAL_VACUU
21f0: 4d 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  M,.    /* ePragF
2200: 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67  lag: */ PragFlag
2210: 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20  _NeedSchema,.   
2220: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
2230: 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  / 0 },.#endif.#i
2240: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2250: 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52  E_OMIT_SCHEMA_PR
2260: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
2270: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e 64  ame:     */ "ind
2280: 65 78 5f 69 6e 66 6f 22 2c 0a 20 20 20 20 2f 2a  ex_info",.    /*
2290: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
22a0: 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 49 4e 46  ragTyp_INDEX_INF
22b0: 4f 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  O,.    /* ePragF
22c0: 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67  lag: */ PragFlag
22d0: 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20  _NeedSchema,.   
22e0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
22f0: 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e  / 0 },.  { /* zN
2300: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e 64  ame:     */ "ind
2310: 65 78 5f 6c 69 73 74 22 2c 0a 20 20 20 20 2f 2a  ex_list",.    /*
2320: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
2330: 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c 49 53  ragTyp_INDEX_LIS
2340: 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  T,.    /* ePragF
2350: 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67  lag: */ PragFlag
2360: 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20  _NeedSchema,.   
2370: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
2380: 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  / 0 },.#endif.#i
2390: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
23a0: 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
23b0: 5f 43 48 45 43 4b 29 0a 20 20 7b 20 2f 2a 20 7a  _CHECK).  { /* z
23c0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69 6e  Name:     */ "in
23d0: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22 2c 0a  tegrity_check",.
23e0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
23f0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 49 4e 54    */ PragTyp_INT
2400: 45 47 52 49 54 59 5f 43 48 45 43 4b 2c 0a 20 20  EGRITY_CHECK,.  
2410: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
2420: 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64  */ PragFlag_Need
2430: 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69  Schema,.    /* i
2440: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
2450: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ,.#endif.#if !de
2460: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
2470: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29  T_PAGER_PRAGMAS)
2480: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
2490: 20 20 20 2a 2f 20 22 6a 6f 75 72 6e 61 6c 5f 6d     */ "journal_m
24a0: 6f 64 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ode",.    /* ePr
24b0: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
24c0: 79 70 5f 4a 4f 55 52 4e 41 4c 5f 4d 4f 44 45 2c  yp_JOURNAL_MODE,
24d0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
24e0: 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e  g: */ PragFlag_N
24f0: 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f  eedSchema,.    /
2500: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
2510: 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  0 },.  { /* zNam
2520: 65 3a 20 20 20 20 20 2a 2f 20 22 6a 6f 75 72 6e  e:     */ "journ
2530: 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 22 2c 0a  al_size_limit",.
2540: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2550: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 4a 4f 55    */ PragTyp_JOU
2560: 52 4e 41 4c 5f 53 49 5a 45 5f 4c 49 4d 49 54 2c  RNAL_SIZE_LIMIT,
2570: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
2580: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
2590: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
25a0: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65  },.#endif.#if de
25b0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 53  fined(SQLITE_HAS
25c0: 5f 43 4f 44 45 43 29 0a 20 20 7b 20 2f 2a 20 7a  _CODEC).  { /* z
25d0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6b 65  Name:     */ "ke
25e0: 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  y",.    /* ePrag
25f0: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
2600: 5f 4b 45 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72  _KEY,.    /* ePr
2610: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
2620: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2630: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
2640: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2650: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
2660: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
2670: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 65 67 61  me:     */ "lega
2680: 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74 22 2c  cy_file_format",
2690: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
26a0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
26b0: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
26c0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
26d0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
26e0: 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69   SQLITE_LegacyFi
26f0: 6c 65 46 6d 74 20 7d 2c 0a 23 65 6e 64 69 66 0a  leFmt },.#endif.
2700: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2710: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
2720: 52 41 47 4d 41 53 29 20 26 26 20 53 51 4c 49 54  RAGMAS) && SQLIT
2730: 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47  E_ENABLE_LOCKING
2740: 5f 53 54 59 4c 45 0a 20 20 7b 20 2f 2a 20 7a 4e  _STYLE.  { /* zN
2750: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 6f 63  ame:     */ "loc
2760: 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 22 2c 0a 20  k_proxy_file",. 
2770: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2780: 20 2a 2f 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b   */ PragTyp_LOCK
2790: 5f 50 52 4f 58 59 5f 46 49 4c 45 2c 0a 20 20 20  _PROXY_FILE,.   
27a0: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
27b0: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
27c0: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
27d0: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
27e0: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20  d(SQLITE_DEBUG) 
27f0: 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54  || defined(SQLIT
2800: 45 5f 54 45 53 54 29 0a 20 20 7b 20 2f 2a 20 7a  E_TEST).  { /* z
2810: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 6f  Name:     */ "lo
2820: 63 6b 5f 73 74 61 74 75 73 22 2c 0a 20 20 20 20  ck_status",.    
2830: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2840: 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 53 54   PragTyp_LOCK_ST
2850: 41 54 55 53 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ATUS,.    /* ePr
2860: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
2870: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2880: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
2890: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
28a0: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
28b0: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
28c0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 6f 63  ame:     */ "loc
28d0: 6b 69 6e 67 5f 6d 6f 64 65 22 2c 0a 20 20 20 20  king_mode",.    
28e0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
28f0: 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49 4e 47   PragTyp_LOCKING
2900: 5f 4d 4f 44 45 2c 0a 20 20 20 20 2f 2a 20 65 50  _MODE,.    /* eP
2910: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
2920: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2930: 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20   */ 0 },.  { /* 
2940: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6d  zName:     */ "m
2950: 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 22 2c 0a  ax_page_count",.
2960: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2970: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 50 41 47    */ PragTyp_PAG
2980: 45 5f 43 4f 55 4e 54 2c 0a 20 20 20 20 2f 2a 20  E_COUNT,.    /* 
2990: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72  ePragFlag: */ Pr
29a0: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
29b0: 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  a,.    /* iArg: 
29c0: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b       */ 0 },.  {
29d0: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
29e0: 2f 20 22 6d 6d 61 70 5f 73 69 7a 65 22 2c 0a 20  / "mmap_size",. 
29f0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2a00: 20 2a 2f 20 50 72 61 67 54 79 70 5f 4d 4d 41 50   */ PragTyp_MMAP
2a10: 5f 53 49 5a 45 2c 0a 20 20 20 20 2f 2a 20 65 50  _SIZE,.    /* eP
2a20: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
2a30: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2a40: 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20   */ 0 },.  { /* 
2a50: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 70  zName:     */ "p
2a60: 61 67 65 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20  age_count",.    
2a70: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2a80: 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 43 4f   PragTyp_PAGE_CO
2a90: 55 4e 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  UNT,.    /* ePra
2aa0: 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c  gFlag: */ PragFl
2ab0: 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20  ag_NeedSchema,. 
2ac0: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2ad0: 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20   */ 0 },.  { /* 
2ae0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 70  zName:     */ "p
2af0: 61 67 65 5f 73 69 7a 65 22 2c 0a 20 20 20 20 2f  age_size",.    /
2b00: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
2b10: 50 72 61 67 54 79 70 5f 50 41 47 45 5f 53 49 5a  PragTyp_PAGE_SIZ
2b20: 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  E,.    /* ePragF
2b30: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
2b40: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
2b50: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
2b60: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
2b70: 45 42 55 47 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  EBUG).  { /* zNa
2b80: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 70 61 72 73  me:     */ "pars
2b90: 65 72 5f 74 72 61 63 65 22 2c 0a 20 20 20 20 2f  er_trace",.    /
2ba0: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
2bb0: 50 72 61 67 54 79 70 5f 50 41 52 53 45 52 5f 54  PragTyp_PARSER_T
2bc0: 52 41 43 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72  RACE,.    /* ePr
2bd0: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
2be0: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2bf0: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
2c00: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
2c10: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
2c20: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
2c30: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 71 75 65 72  me:     */ "quer
2c40: 79 5f 6f 6e 6c 79 22 2c 0a 20 20 20 20 2f 2a 20  y_only",.    /* 
2c50: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
2c60: 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20  agTyp_FLAG,.    
2c70: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
2c80: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
2c90: 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f        */ SQLITE_
2ca0: 51 75 65 72 79 4f 6e 6c 79 20 7d 2c 0a 23 65 6e  QueryOnly },.#en
2cb0: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
2cc0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e 54  (SQLITE_OMIT_INT
2cd0: 45 47 52 49 54 59 5f 43 48 45 43 4b 29 0a 20 20  EGRITY_CHECK).  
2ce0: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
2cf0: 2a 2f 20 22 71 75 69 63 6b 5f 63 68 65 63 6b 22  */ "quick_check"
2d00: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
2d10: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 49  p:  */ PragTyp_I
2d20: 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 2c 0a  NTEGRITY_CHECK,.
2d30: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
2d40: 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65  : */ PragFlag_Ne
2d50: 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a  edSchema,.    /*
2d60: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
2d70: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
2d80: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2d90: 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53  MIT_FLAG_PRAGMAS
2da0: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
2db0: 20 20 20 20 2a 2f 20 22 72 65 61 64 5f 75 6e 63      */ "read_unc
2dc0: 6f 6d 6d 69 74 74 65 64 22 2c 0a 20 20 20 20 2f  ommitted",.    /
2dd0: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
2de0: 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20  PragTyp_FLAG,.  
2df0: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
2e00: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
2e10: 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54  g:      */ SQLIT
2e20: 45 5f 52 65 61 64 55 6e 63 6f 6d 6d 69 74 74 65  E_ReadUncommitte
2e30: 64 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  d },.  { /* zNam
2e40: 65 3a 20 20 20 20 20 2a 2f 20 22 72 65 63 75 72  e:     */ "recur
2e50: 73 69 76 65 5f 74 72 69 67 67 65 72 73 22 2c 0a  sive_triggers",.
2e60: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2e70: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
2e80: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
2e90: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
2ea0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
2eb0: 53 51 4c 49 54 45 5f 52 65 63 54 72 69 67 67 65  SQLITE_RecTrigge
2ec0: 72 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66  rs },.#endif.#if
2ed0: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
2ee0: 48 41 53 5f 43 4f 44 45 43 29 0a 20 20 7b 20 2f  HAS_CODEC).  { /
2ef0: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
2f00: 22 72 65 6b 65 79 22 2c 0a 20 20 20 20 2f 2a 20  "rekey",.    /* 
2f10: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
2f20: 61 67 54 79 70 5f 52 45 4b 45 59 2c 0a 20 20 20  agTyp_REKEY,.   
2f30: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
2f40: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
2f50: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
2f60: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
2f70: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
2f80: 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  LAG_PRAGMAS).  {
2f90: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
2fa0: 2f 20 22 72 65 76 65 72 73 65 5f 75 6e 6f 72 64  / "reverse_unord
2fb0: 65 72 65 64 5f 73 65 6c 65 63 74 73 22 2c 0a 20  ered_selects",. 
2fc0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2fd0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
2fe0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
2ff0: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
3000: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
3010: 51 4c 49 54 45 5f 52 65 76 65 72 73 65 4f 72 64  QLITE_ReverseOrd
3020: 65 72 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66  er },.#endif.#if
3030: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
3040: 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56 45 52  _OMIT_SCHEMA_VER
3050: 53 49 4f 4e 5f 50 52 41 47 4d 41 53 29 0a 20 20  SION_PRAGMAS).  
3060: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
3070: 2a 2f 20 22 73 63 68 65 6d 61 5f 76 65 72 73 69  */ "schema_versi
3080: 6f 6e 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  on",.    /* ePra
3090: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
30a0: 70 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 2c 0a  p_HEADER_VALUE,.
30b0: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
30c0: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
30d0: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
30e0: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ,.#endif.#if !de
30f0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
3100: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29  T_PAGER_PRAGMAS)
3110: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
3120: 20 20 20 2a 2f 20 22 73 65 63 75 72 65 5f 64 65     */ "secure_de
3130: 6c 65 74 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50  lete",.    /* eP
3140: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
3150: 54 79 70 5f 53 45 43 55 52 45 5f 44 45 4c 45 54  Typ_SECURE_DELET
3160: 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  E,.    /* ePragF
3170: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
3180: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
3190: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
31a0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
31b0: 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41  OMIT_FLAG_PRAGMA
31c0: 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  S).  { /* zName:
31d0: 20 20 20 20 20 2a 2f 20 22 73 68 6f 72 74 5f 63       */ "short_c
31e0: 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22 2c 0a 20 20  olumn_names",.  
31f0: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
3200: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
3210: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
3220: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
3230: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
3240: 4c 49 54 45 5f 53 68 6f 72 74 43 6f 6c 4e 61 6d  LITE_ShortColNam
3250: 65 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 20 20 7b  es },.#endif.  {
3260: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
3270: 2f 20 22 73 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79  / "shrink_memory
3280: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
3290: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
32a0: 53 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59 2c 0a 20  SHRINK_MEMORY,. 
32b0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
32c0: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
32d0: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
32e0: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
32f0: 20 20 20 2a 2f 20 22 73 6f 66 74 5f 68 65 61 70     */ "soft_heap
3300: 5f 6c 69 6d 69 74 22 2c 0a 20 20 20 20 2f 2a 20  _limit",.    /* 
3310: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
3320: 61 67 54 79 70 5f 53 4f 46 54 5f 48 45 41 50 5f  agTyp_SOFT_HEAP_
3330: 4c 49 4d 49 54 2c 0a 20 20 20 20 2f 2a 20 65 50  LIMIT,.    /* eP
3340: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
3350: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
3360: 20 2a 2f 20 30 20 7d 2c 0a 23 69 66 20 21 64 65   */ 0 },.#if !de
3370: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
3380: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a  T_FLAG_PRAGMAS).
3390: 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c 49  #if defined(SQLI
33a0: 54 45 5f 44 45 42 55 47 29 0a 20 20 7b 20 2f 2a  TE_DEBUG).  { /*
33b0: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
33c0: 73 71 6c 5f 74 72 61 63 65 22 2c 0a 20 20 20 20  sql_trace",.    
33d0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
33e0: 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20   PragTyp_FLAG,. 
33f0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
3400: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
3410: 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49  rg:      */ SQLI
3420: 54 45 5f 53 71 6c 54 72 61 63 65 20 7d 2c 0a 23  TE_SqlTrace },.#
3430: 65 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66  endif.#endif.#if
3440: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
3450: 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41  _OMIT_SCHEMA_PRA
3460: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
3470: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 73 74 61 74  me:     */ "stat
3480: 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  s",.    /* ePrag
3490: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
34a0: 5f 53 54 41 54 53 2c 0a 20 20 20 20 2f 2a 20 65  _STATS,.    /* e
34b0: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61  PragFlag: */ Pra
34c0: 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61  gFlag_NeedSchema
34d0: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
34e0: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
34f0: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
3500: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
3510: 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f  R_PRAGMAS).  { /
3520: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
3530: 22 73 79 6e 63 68 72 6f 6e 6f 75 73 22 2c 0a 20  "synchronous",. 
3540: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
3550: 20 2a 2f 20 50 72 61 67 54 79 70 5f 53 59 4e 43   */ PragTyp_SYNC
3560: 48 52 4f 4e 4f 55 53 2c 0a 20 20 20 20 2f 2a 20  HRONOUS,.    /* 
3570: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72  ePragFlag: */ Pr
3580: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
3590: 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  a,.    /* iArg: 
35a0: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
35b0: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
35c0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48  (SQLITE_OMIT_SCH
35d0: 45 4d 41 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b  EMA_PRAGMAS).  {
35e0: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
35f0: 2f 20 22 74 61 62 6c 65 5f 69 6e 66 6f 22 2c 0a  / "table_info",.
3600: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
3610: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 54 41 42    */ PragTyp_TAB
3620: 4c 45 5f 49 4e 46 4f 2c 0a 20 20 20 20 2f 2a 20  LE_INFO,.    /* 
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 74 65 6d 70 5f 73 74 6f 72 65 22 2c 0a 20   "temp_store",. 
36c0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
36d0: 20 2a 2f 20 50 72 61 67 54 79 70 5f 54 45 4d 50   */ PragTyp_TEMP
36e0: 5f 53 54 4f 52 45 2c 0a 20 20 20 20 2f 2a 20 65  _STORE,.    /* e
36f0: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
3700: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
3710: 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a    */ 0 },.  { /*
3720: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
3730: 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63  temp_store_direc
3740: 74 6f 72 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50  tory",.    /* eP
3750: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
3760: 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52 45 5f 44  Typ_TEMP_STORE_D
3770: 49 52 45 43 54 4f 52 59 2c 0a 20 20 20 20 2f 2a  IRECTORY,.    /*
3780: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
3790: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
37a0: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
37b0: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
37c0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
37d0: 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d  MA_VERSION_PRAGM
37e0: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
37f0: 3a 20 20 20 20 20 2a 2f 20 22 75 73 65 72 5f 76  :     */ "user_v
3800: 65 72 73 69 6f 6e 22 2c 0a 20 20 20 20 2f 2a 20  ersion",.    /* 
3810: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
3820: 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c  agTyp_HEADER_VAL
3830: 55 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  UE,.    /* ePrag
3840: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
3850: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
3860: 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66   0 },.#endif.#if
3870: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
3880: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
3890: 41 53 29 0a 23 69 66 20 64 65 66 69 6e 65 64 28  AS).#if defined(
38a0: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20  SQLITE_DEBUG).  
38b0: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
38c0: 2a 2f 20 22 76 64 62 65 5f 61 64 64 6f 70 74 72  */ "vdbe_addoptr
38d0: 61 63 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ace",.    /* ePr
38e0: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
38f0: 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20  yp_FLAG,.    /* 
3900: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
3910: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
3920: 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 56 64 62     */ SQLITE_Vdb
3930: 65 41 64 64 6f 70 54 72 61 63 65 20 7d 2c 0a 20  eAddopTrace },. 
3940: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
3950: 20 2a 2f 20 22 76 64 62 65 5f 64 65 62 75 67 22   */ "vdbe_debug"
3960: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
3970: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46  p:  */ PragTyp_F
3980: 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  LAG,.    /* ePra
3990: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
39a0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
39b0: 2f 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63  / SQLITE_SqlTrac
39c0: 65 7c 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73  e|SQLITE_VdbeLis
39d0: 74 69 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62 65  ting|SQLITE_Vdbe
39e0: 54 72 61 63 65 20 7d 2c 0a 20 20 7b 20 2f 2a 20  Trace },.  { /* 
39f0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76  zName:     */ "v
3a00: 64 62 65 5f 6c 69 73 74 69 6e 67 22 2c 0a 20 20  dbe_listing",.  
3a10: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
3a20: 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47 2c  */ PragTyp_FLAG,
3a30: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
3a40: 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20  g: */ 0,.    /* 
3a50: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53 51  iArg:      */ SQ
3a60: 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67  LITE_VdbeListing
3a70: 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65   },.  { /* zName
3a80: 3a 20 20 20 20 20 2a 2f 20 22 76 64 62 65 5f 74  :     */ "vdbe_t
3a90: 72 61 63 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50  race",.    /* eP
3aa0: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
3ab0: 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a  Typ_FLAG,.    /*
3ac0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30   ePragFlag: */ 0
3ad0: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
3ae0: 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 56 64      */ SQLITE_Vd
3af0: 62 65 54 72 61 63 65 20 7d 2c 0a 23 65 6e 64 69  beTrace },.#endi
3b00: 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  f.#endif.#if !de
3b10: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
3b20: 54 5f 57 41 4c 29 0a 20 20 7b 20 2f 2a 20 7a 4e  T_WAL).  { /* zN
3b30: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 77 61 6c  ame:     */ "wal
3b40: 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 22  _autocheckpoint"
3b50: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
3b60: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 57  p:  */ PragTyp_W
3b70: 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50 4f 49 4e  AL_AUTOCHECKPOIN
3b80: 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  T,.    /* ePragF
3b90: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
3ba0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
3bb0: 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  0 },.  { /* zNam
3bc0: 65 3a 20 20 20 20 20 2a 2f 20 22 77 61 6c 5f 63  e:     */ "wal_c
3bd0: 68 65 63 6b 70 6f 69 6e 74 22 2c 0a 20 20 20 20  heckpoint",.    
3be0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
3bf0: 20 50 72 61 67 54 79 70 5f 57 41 4c 5f 43 48 45   PragTyp_WAL_CHE
3c00: 43 4b 50 4f 49 4e 54 2c 0a 20 20 20 20 2f 2a 20  CKPOINT,.    /* 
3c10: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72  ePragFlag: */ Pr
3c20: 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d  agFlag_NeedSchem
3c30: 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  a,.    /* iArg: 
3c40: 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e       */ 0 },.#en
3c50: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
3c60: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41  (SQLITE_OMIT_FLA
3c70: 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f  G_PRAGMAS).  { /
3c80: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
3c90: 22 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61  "writable_schema
3ca0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
3cb0: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
3cc0: 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72  FLAG,.    /* ePr
3cd0: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
3ce0: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
3cf0: 2a 2f 20 53 51 4c 49 54 45 5f 57 72 69 74 65 53  */ SQLITE_WriteS
3d00: 63 68 65 6d 61 7c 53 51 4c 49 54 45 5f 52 65 63  chema|SQLITE_Rec
3d10: 6f 76 65 72 79 4d 6f 64 65 20 7d 2c 0a 23 65 6e  overyMode },.#en
3d20: 64 69 66 0a 7d 3b 0a 2f 2a 20 4e 75 6d 62 65 72  dif.};./* Number
3d30: 20 6f 66 20 70 72 61 67 6d 61 73 3a 20 35 36 20   of pragmas: 56 
3d40: 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2c 20 36  on by default, 6
3d50: 38 20 74 6f 74 61 6c 2e 20 2a 2f 0a 2f 2a 20 45  8 total. */./* E
3d60: 6e 64 20 6f 66 20 74 68 65 20 61 75 74 6f 6d 61  nd of the automa
3d70: 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65  tically generate
3d80: 64 20 70 72 61 67 6d 61 20 74 61 62 6c 65 2e 0a  d pragma table..
3d90: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3da0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3db0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3dc0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3dd0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f 2a  ***********/../*
3de0: 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
3df0: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61  e given string a
3e00: 73 20 61 20 73 61 66 65 74 79 20 6c 65 76 65 6c  s a safety level
3e10: 2e 20 20 52 65 74 75 72 6e 20 30 20 66 6f 72 20  .  Return 0 for 
3e20: 4f 46 46 2c 0a 2a 2a 20 31 20 66 6f 72 20 4f 4e  OFF,.** 1 for ON
3e30: 20 6f 72 20 4e 4f 52 4d 41 4c 20 61 6e 64 20 32   or NORMAL and 2
3e40: 20 66 6f 72 20 46 55 4c 4c 2e 20 20 52 65 74 75   for FULL.  Retu
3e50: 72 6e 20 31 20 66 6f 72 20 61 6e 20 65 6d 70 74  rn 1 for an empt
3e60: 79 20 6f 72 20 0a 2a 2a 20 75 6e 72 65 63 6f 67  y or .** unrecog
3e70: 6e 69 7a 65 64 20 73 74 72 69 6e 67 20 61 72 67  nized string arg
3e80: 75 6d 65 6e 74 2e 20 20 54 68 65 20 46 55 4c 4c  ument.  The FULL
3e90: 20 6f 70 74 69 6f 6e 20 69 73 20 64 69 73 61 6c   option is disal
3ea0: 6c 6f 77 65 64 0a 2a 2a 20 69 66 20 74 68 65 20  lowed.** if the 
3eb0: 6f 6d 69 74 46 75 6c 6c 20 70 61 72 61 6d 65 74  omitFull paramet
3ec0: 65 72 20 69 74 20 31 2e 0a 2a 2a 0a 2a 2a 20 4e  er it 1..**.** N
3ed0: 6f 74 65 20 74 68 61 74 20 74 68 65 20 76 61 6c  ote that the val
3ee0: 75 65 73 20 72 65 74 75 72 6e 65 64 20 61 72 65  ues returned are
3ef0: 20 6f 6e 65 20 6c 65 73 73 20 74 68 61 74 20 74   one less that t
3f00: 68 65 20 76 61 6c 75 65 73 20 74 68 61 74 0a 2a  he values that.*
3f10: 2a 20 73 68 6f 75 6c 64 20 62 65 20 70 61 73 73  * should be pass
3f20: 65 64 20 69 6e 74 6f 20 73 71 6c 69 74 65 33 42  ed into sqlite3B
3f30: 74 72 65 65 53 65 74 53 61 66 65 74 79 4c 65 76  treeSetSafetyLev
3f40: 65 6c 28 29 2e 20 20 54 68 65 20 69 73 20 64 6f  el().  The is do
3f50: 6e 65 0a 2a 2a 20 74 6f 20 73 75 70 70 6f 72 74  ne.** to support
3f60: 20 6c 65 67 61 63 79 20 53 51 4c 20 63 6f 64 65   legacy SQL code
3f70: 2e 20 20 54 68 65 20 73 61 66 65 74 79 20 6c 65  .  The safety le
3f80: 76 65 6c 20 75 73 65 64 20 74 6f 20 62 65 20 62  vel used to be b
3f90: 6f 6f 6c 65 61 6e 0a 2a 2a 20 61 6e 64 20 6f 6c  oolean.** and ol
3fa0: 64 65 72 20 73 63 72 69 70 74 73 20 6d 61 79 20  der scripts may 
3fb0: 68 61 76 65 20 75 73 65 64 20 6e 75 6d 62 65 72  have used number
3fc0: 73 20 30 20 66 6f 72 20 4f 46 46 20 61 6e 64 20  s 0 for OFF and 
3fd0: 31 20 66 6f 72 20 4f 4e 2e 0a 2a 2f 0a 73 74 61  1 for ON..*/.sta
3fe0: 74 69 63 20 75 38 20 67 65 74 53 61 66 65 74 79  tic u8 getSafety
3ff0: 4c 65 76 65 6c 28 63 6f 6e 73 74 20 63 68 61 72  Level(const char
4000: 20 2a 7a 2c 20 69 6e 74 20 6f 6d 69 74 46 75 6c   *z, int omitFul
4010: 6c 2c 20 69 6e 74 20 64 66 6c 74 29 7b 0a 20 20  l, int dflt){.  
4020: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4030: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 32             /* 12
4040: 33 34 35 36 37 38 39 20 31 32 33 34 35 36 37 38  3456789 12345678
4050: 39 20 2a 2f 0a 20 20 73 74 61 74 69 63 20 63 6f  9 */.  static co
4060: 6e 73 74 20 63 68 61 72 20 7a 54 65 78 74 5b 5d  nst char zText[]
4070: 20 3d 20 22 6f 6e 6f 66 66 61 6c 73 65 79 65 73   = "onoffalseyes
4080: 74 72 75 65 66 75 6c 6c 22 3b 0a 20 20 73 74 61  truefull";.  sta
4090: 74 69 63 20 63 6f 6e 73 74 20 75 38 20 69 4f 66  tic const u8 iOf
40a0: 66 73 65 74 5b 5d 20 3d 20 7b 30 2c 20 31 2c 20  fset[] = {0, 1, 
40b0: 32 2c 20 34 2c 20 39 2c 20 31 32 2c 20 31 36 7d  2, 4, 9, 12, 16}
40c0: 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ;.  static const
40d0: 20 75 38 20 69 4c 65 6e 67 74 68 5b 5d 20 3d 20   u8 iLength[] = 
40e0: 7b 32 2c 20 32 2c 20 33 2c 20 35 2c 20 33 2c 20  {2, 2, 3, 5, 3, 
40f0: 34 2c 20 34 7d 3b 0a 20 20 73 74 61 74 69 63 20  4, 4};.  static 
4100: 63 6f 6e 73 74 20 75 38 20 69 56 61 6c 75 65 5b  const u8 iValue[
4110: 5d 20 3d 20 20 7b 31 2c 20 30 2c 20 30 2c 20 30  ] =  {1, 0, 0, 0
4120: 2c 20 31 2c 20 31 2c 20 32 7d 3b 0a 20 20 69 6e  , 1, 1, 2};.  in
4130: 74 20 69 2c 20 6e 3b 0a 20 20 69 66 28 20 73 71  t i, n;.  if( sq
4140: 6c 69 74 65 33 49 73 64 69 67 69 74 28 2a 7a 29  lite3Isdigit(*z)
4150: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 28   ){.    return (
4160: 75 38 29 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  u8)sqlite3Atoi(z
4170: 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 73 71 6c  );.  }.  n = sql
4180: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 29 3b  ite3Strlen30(z);
4190: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72  .  for(i=0; i<Ar
41a0: 72 61 79 53 69 7a 65 28 69 4c 65 6e 67 74 68 29  raySize(iLength)
41b0: 2d 6f 6d 69 74 46 75 6c 6c 3b 20 69 2b 2b 29 7b  -omitFull; i++){
41c0: 0a 20 20 20 20 69 66 28 20 69 4c 65 6e 67 74 68  .    if( iLength
41d0: 5b 69 5d 3d 3d 6e 20 26 26 20 73 71 6c 69 74 65  [i]==n && sqlite
41e0: 33 53 74 72 4e 49 43 6d 70 28 26 7a 54 65 78 74  3StrNICmp(&zText
41f0: 5b 69 4f 66 66 73 65 74 5b 69 5d 5d 2c 7a 2c 6e  [iOffset[i]],z,n
4200: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 65  )==0 ){.      re
4210: 74 75 72 6e 20 69 56 61 6c 75 65 5b 69 5d 3b 0a  turn iValue[i];.
4220: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
4230: 72 6e 20 64 66 6c 74 3b 0a 7d 0a 0a 2f 2a 0a 2a  rn dflt;.}../*.*
4240: 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
4250: 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20  given string as 
4260: 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e  a boolean value.
4270: 0a 2a 2f 0a 75 38 20 73 71 6c 69 74 65 33 47 65  .*/.u8 sqlite3Ge
4280: 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63  tBoolean(const c
4290: 68 61 72 20 2a 7a 2c 20 69 6e 74 20 64 66 6c 74  har *z, int dflt
42a0: 29 7b 0a 20 20 72 65 74 75 72 6e 20 67 65 74 53  ){.  return getS
42b0: 61 66 65 74 79 4c 65 76 65 6c 28 7a 2c 31 2c 64  afetyLevel(z,1,d
42c0: 66 6c 74 29 21 3d 30 3b 0a 7d 0a 0a 2f 2a 20 54  flt)!=0;.}../* T
42d0: 68 65 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  he sqlite3GetBoo
42e0: 6c 65 61 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20  lean() function 
42f0: 69 73 20 75 73 65 64 20 62 79 20 6f 74 68 65 72  is used by other
4300: 20 6d 6f 64 75 6c 65 73 20 62 75 74 20 74 68 65   modules but the
4310: 0a 2a 2a 20 72 65 6d 61 69 6e 64 65 72 20 6f 66  .** remainder of
4320: 20 74 68 69 73 20 66 69 6c 65 20 69 73 20 73 70   this file is sp
4330: 65 63 69 66 69 63 20 74 6f 20 50 52 41 47 4d 41  ecific to PRAGMA
4340: 20 70 72 6f 63 65 73 73 69 6e 67 2e 20 20 53 6f   processing.  So
4350: 20 6f 6d 69 74 0a 2a 2a 20 74 68 65 20 72 65 73   omit.** the res
4360: 74 20 6f 66 20 74 68 65 20 66 69 6c 65 20 69 66  t of the file if
4370: 20 50 52 41 47 4d 41 73 20 61 72 65 20 6f 6d 69   PRAGMAs are omi
4380: 74 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75  tted from the bu
4390: 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66  ild..*/.#if !def
43a0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
43b0: 5f 50 52 41 47 4d 41 29 0a 0a 2f 2a 0a 2a 2a 20  _PRAGMA)../*.** 
43c0: 49 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69  Interpret the gi
43d0: 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20  ven string as a 
43e0: 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 76 61 6c  locking mode val
43f0: 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  ue..*/.static in
4400: 74 20 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f 64 65  t getLockingMode
4410: 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b  (const char *z){
4420: 0a 20 20 69 66 28 20 7a 20 29 7b 0a 20 20 20 20  .  if( z ){.    
4430: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
4440: 72 49 43 6d 70 28 7a 2c 20 22 65 78 63 6c 75 73  rICmp(z, "exclus
4450: 69 76 65 22 29 20 29 20 72 65 74 75 72 6e 20 50  ive") ) return P
4460: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
4470: 5f 45 58 43 4c 55 53 49 56 45 3b 0a 20 20 20 20  _EXCLUSIVE;.    
4480: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
4490: 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 72 6d 61 6c  rICmp(z, "normal
44a0: 22 29 20 29 20 72 65 74 75 72 6e 20 50 41 47 45  ") ) return PAGE
44b0: 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f  R_LOCKINGMODE_NO
44c0: 52 4d 41 4c 3b 0a 20 20 7d 0a 20 20 72 65 74 75  RMAL;.  }.  retu
44d0: 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47  rn PAGER_LOCKING
44e0: 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 7d 0a 0a 23  MODE_QUERY;.}..#
44f0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
4500: 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 2f 2a  IT_AUTOVACUUM./*
4510: 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68  .** Interpret th
4520: 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61  e given string a
4530: 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  s an auto-vacuum
4540: 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a 2a 2a 0a   mode value..**.
4550: 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67  ** The following
4560: 20 73 74 72 69 6e 67 73 2c 20 22 6e 6f 6e 65 22   strings, "none"
4570: 2c 20 22 66 75 6c 6c 22 20 61 6e 64 20 22 69 6e  , "full" and "in
4580: 63 72 65 6d 65 6e 74 61 6c 22 20 61 72 65 20 0a  cremental" are .
4590: 2a 2a 20 61 63 63 65 70 74 61 62 6c 65 2c 20 61  ** acceptable, a
45a0: 73 20 61 72 65 20 74 68 65 69 72 20 6e 75 6d 65  s are their nume
45b0: 72 69 63 20 65 71 75 69 76 61 6c 65 6e 74 73 3a  ric equivalents:
45c0: 20 30 2c 20 31 20 61 6e 64 20 32 20 72 65 73 70   0, 1 and 2 resp
45d0: 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 73 74 61  ectively..*/.sta
45e0: 74 69 63 20 69 6e 74 20 67 65 74 41 75 74 6f 56  tic int getAutoV
45f0: 61 63 75 75 6d 28 63 6f 6e 73 74 20 63 68 61 72  acuum(const char
4600: 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20   *z){.  int i;. 
4610: 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53   if( 0==sqlite3S
4620: 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 6e 65 22  trICmp(z, "none"
4630: 29 20 29 20 72 65 74 75 72 6e 20 42 54 52 45 45  ) ) return BTREE
4640: 5f 41 55 54 4f 56 41 43 55 55 4d 5f 4e 4f 4e 45  _AUTOVACUUM_NONE
4650: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
4660: 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 66 75  e3StrICmp(z, "fu
4670: 6c 6c 22 29 20 29 20 72 65 74 75 72 6e 20 42 54  ll") ) return BT
4680: 52 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 46  REE_AUTOVACUUM_F
4690: 55 4c 4c 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  ULL;.  if( 0==sq
46a0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
46b0: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 29 20 29  "incremental") )
46c0: 20 72 65 74 75 72 6e 20 42 54 52 45 45 5f 41 55   return BTREE_AU
46d0: 54 4f 56 41 43 55 55 4d 5f 49 4e 43 52 3b 0a 20  TOVACUUM_INCR;. 
46e0: 20 69 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 69   i = sqlite3Atoi
46f0: 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 75  (z);.  return (u
4700: 38 29 28 28 69 3e 3d 30 26 26 69 3c 3d 32 29 3f  8)((i>=0&&i<=2)?
4710: 69 3a 30 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f  i:0);.}.#endif /
4720: 2a 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  * ifndef SQLITE_
4730: 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 20  OMIT_AUTOVACUUM 
4740: 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
4750: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
4760: 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 6e 74 65  AGMAS./*.** Inte
4770: 72 70 72 65 74 20 74 68 65 20 67 69 76 65 6e 20  rpret the given 
4780: 73 74 72 69 6e 67 20 61 73 20 61 20 74 65 6d 70  string as a temp
4790: 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e 20 52 65   db location. Re
47a0: 74 75 72 6e 20 31 20 66 6f 72 20 66 69 6c 65 0a  turn 1 for file.
47b0: 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d 70 6f 72  ** backed tempor
47c0: 61 72 79 20 64 61 74 61 62 61 73 65 73 2c 20 32  ary databases, 2
47d0: 20 66 6f 72 20 74 68 65 20 52 65 64 2d 42 6c 61   for the Red-Bla
47e0: 63 6b 20 74 72 65 65 20 69 6e 20 6d 65 6d 6f 72  ck tree in memor
47f0: 79 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 61 6e  y database.** an
4800: 64 20 30 20 74 6f 20 75 73 65 20 74 68 65 20 63  d 0 to use the c
4810: 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64 65 66 61  ompile-time defa
4820: 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69  ult..*/.static i
4830: 6e 74 20 67 65 74 54 65 6d 70 53 74 6f 72 65 28  nt getTempStore(
4840: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a  const char *z){.
4850: 20 20 69 66 28 20 7a 5b 30 5d 3e 3d 27 30 27 20    if( z[0]>='0' 
4860: 26 26 20 7a 5b 30 5d 3c 3d 27 32 27 20 29 7b 0a  && z[0]<='2' ){.
4870: 20 20 20 20 72 65 74 75 72 6e 20 7a 5b 30 5d 20      return z[0] 
4880: 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69  - '0';.  }else i
4890: 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d  f( sqlite3StrICm
48a0: 70 28 7a 2c 20 22 66 69 6c 65 22 29 3d 3d 30 20  p(z, "file")==0 
48b0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b  ){.    return 1;
48c0: 0a 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c  .  }else if( sql
48d0: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22  ite3StrICmp(z, "
48e0: 6d 65 6d 6f 72 79 22 29 3d 3d 30 20 29 7b 0a 20  memory")==0 ){. 
48f0: 20 20 20 72 65 74 75 72 6e 20 32 3b 0a 20 20 7d     return 2;.  }
4900: 65 6c 73 65 7b 0a 20 20 20 20 72 65 74 75 72 6e  else{.    return
4910: 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66   0;.  }.}.#endif
4920: 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41 47 45 52   /* SQLITE_PAGER
4930: 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66  _PRAGMAS */..#if
4940: 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54  ndef SQLITE_OMIT
4950: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f  _PAGER_PRAGMAS./
4960: 2a 0a 2a 2a 20 49 6e 76 61 6c 69 64 61 74 65 20  *.** Invalidate 
4970: 74 65 6d 70 20 73 74 6f 72 61 67 65 2c 20 65 69  temp storage, ei
4980: 74 68 65 72 20 77 68 65 6e 20 74 68 65 20 74 65  ther when the te
4990: 6d 70 20 73 74 6f 72 61 67 65 20 69 73 20 63 68  mp storage is ch
49a0: 61 6e 67 65 64 0a 2a 2a 20 66 72 6f 6d 20 64 65  anged.** from de
49b0: 66 61 75 6c 74 2c 20 6f 72 20 77 68 65 6e 20 27  fault, or when '
49c0: 66 69 6c 65 27 20 61 6e 64 20 74 68 65 20 74 65  file' and the te
49d0: 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f  mp_store_directo
49e0: 72 79 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a  ry has changed.*
49f0: 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 69 6e 76  /.static int inv
4a00: 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61  alidateTempStora
4a10: 67 65 28 50 61 72 73 65 20 2a 70 50 61 72 73 65  ge(Parse *pParse
4a20: 29 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62  ){.  sqlite3 *db
4a30: 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20   = pParse->db;. 
4a40: 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 31 5d 2e   if( db->aDb[1].
4a50: 70 42 74 21 3d 30 20 29 7b 0a 20 20 20 20 69 66  pBt!=0 ){.    if
4a60: 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  ( !db->autoCommi
4a70: 74 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65  t || sqlite3Btre
4a80: 65 49 73 49 6e 52 65 61 64 54 72 61 6e 73 28 64  eIsInReadTrans(d
4a90: 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 29 20 29  b->aDb[1].pBt) )
4aa0: 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 45  {.      sqlite3E
4ab0: 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20  rrorMsg(pParse, 
4ac0: 22 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61  "temporary stora
4ad0: 67 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 68 61  ge cannot be cha
4ae0: 6e 67 65 64 20 22 0a 20 20 20 20 20 20 20 20 22  nged ".        "
4af0: 66 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72  from within a tr
4b00: 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20 20  ansaction");.   
4b10: 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45     return SQLITE
4b20: 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20  _ERROR;.    }.  
4b30: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c    sqlite3BtreeCl
4b40: 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70  ose(db->aDb[1].p
4b50: 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e 61 44 62  Bt);.    db->aDb
4b60: 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a 20 20 20  [1].pBt = 0;.   
4b70: 20 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c   sqlite3ResetAll
4b80: 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74  SchemasOfConnect
4b90: 69 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a 20 20 72  ion(db);.  }.  r
4ba0: 65 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b  eturn SQLITE_OK;
4bb0: 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  .}.#endif /* SQL
4bc0: 49 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  ITE_PAGER_PRAGMA
4bd0: 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51  S */..#ifndef SQ
4be0: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
4bf0: 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 66  PRAGMAS./*.** If
4c00: 20 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61   the TEMP databa
4c10: 73 65 20 69 73 20 6f 70 65 6e 2c 20 63 6c 6f 73  se is open, clos
4c20: 65 20 69 74 20 61 6e 64 20 6d 61 72 6b 20 74 68  e it and mark th
4c30: 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
4c40: 61 0a 2a 2a 20 61 73 20 6e 65 65 64 69 6e 67 20  a.** as needing 
4c50: 72 65 6c 6f 61 64 69 6e 67 2e 20 20 54 68 69 73  reloading.  This
4c60: 20 6d 75 73 74 20 62 65 20 64 6f 6e 65 20 77 68   must be done wh
4c70: 65 6e 20 75 73 69 6e 67 20 74 68 65 20 53 51 4c  en using the SQL
4c80: 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 2a  ITE_TEMP_STORE.*
4c90: 2a 20 6f 72 20 44 45 46 41 55 4c 54 5f 54 45 4d  * or DEFAULT_TEM
4ca0: 50 5f 53 54 4f 52 45 20 70 72 61 67 6d 61 73 2e  P_STORE pragmas.
4cb0: 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63  .*/.static int c
4cc0: 68 61 6e 67 65 54 65 6d 70 53 74 6f 72 61 67 65  hangeTempStorage
4cd0: 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20  (Parse *pParse, 
4ce0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 6f  const char *zSto
4cf0: 72 61 67 65 54 79 70 65 29 7b 0a 20 20 69 6e 74  rageType){.  int
4d00: 20 74 73 20 3d 20 67 65 74 54 65 6d 70 53 74 6f   ts = getTempSto
4d10: 72 65 28 7a 53 74 6f 72 61 67 65 54 79 70 65 29  re(zStorageType)
4d20: 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20  ;.  sqlite3 *db 
4d30: 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20 20  = pParse->db;.  
4d40: 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f  if( db->temp_sto
4d50: 72 65 3d 3d 74 73 20 29 20 72 65 74 75 72 6e 20  re==ts ) return 
4d60: 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69 66 28  SQLITE_OK;.  if(
4d70: 20 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53   invalidateTempS
4d80: 74 6f 72 61 67 65 28 20 70 50 61 72 73 65 20 29  torage( pParse )
4d90: 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b   != SQLITE_OK ){
4da0: 0a 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49  .    return SQLI
4db0: 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20  TE_ERROR;.  }.  
4dc0: 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20 3d  db->temp_store =
4dd0: 20 28 75 38 29 74 73 3b 0a 20 20 72 65 74 75 72   (u8)ts;.  retur
4de0: 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23  n SQLITE_OK;.}.#
4df0: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
4e00: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f  PAGER_PRAGMAS */
4e10: 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65  ../*.** Generate
4e20: 20 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20   code to return 
4e30: 61 20 73 69 6e 67 6c 65 20 69 6e 74 65 67 65 72  a single integer
4e40: 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69   value..*/.stati
4e50: 63 20 76 6f 69 64 20 72 65 74 75 72 6e 53 69 6e  c void returnSin
4e60: 67 6c 65 49 6e 74 28 50 61 72 73 65 20 2a 70 50  gleInt(Parse *pP
4e70: 61 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72  arse, const char
4e80: 20 2a 7a 4c 61 62 65 6c 2c 20 69 36 34 20 76 61   *zLabel, i64 va
4e90: 6c 75 65 29 7b 0a 20 20 56 64 62 65 20 2a 76 20  lue){.  Vdbe *v 
4ea0: 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65  = sqlite3GetVdbe
4eb0: 28 70 50 61 72 73 65 29 3b 0a 20 20 69 6e 74 20  (pParse);.  int 
4ec0: 6d 65 6d 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e  mem = ++pParse->
4ed0: 6e 4d 65 6d 3b 0a 20 20 69 36 34 20 2a 70 49 36  nMem;.  i64 *pI6
4ee0: 34 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c  4 = sqlite3DbMal
4ef0: 6c 6f 63 52 61 77 28 70 50 61 72 73 65 2d 3e 64  locRaw(pParse->d
4f00: 62 2c 20 73 69 7a 65 6f 66 28 76 61 6c 75 65 29  b, sizeof(value)
4f10: 29 3b 0a 20 20 69 66 28 20 70 49 36 34 20 29 7b  );.  if( pI64 ){
4f20: 0a 20 20 20 20 6d 65 6d 63 70 79 28 70 49 36 34  .    memcpy(pI64
4f30: 2c 20 26 76 61 6c 75 65 2c 20 73 69 7a 65 6f 66  , &value, sizeof
4f40: 28 76 61 6c 75 65 29 29 3b 0a 20 20 7d 0a 20 20  (value));.  }.  
4f50: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
4f60: 34 28 76 2c 20 4f 50 5f 49 6e 74 36 34 2c 20 30  4(v, OP_Int64, 0
4f70: 2c 20 6d 65 6d 2c 20 30 2c 20 28 63 68 61 72 2a  , mem, 0, (char*
4f80: 29 70 49 36 34 2c 20 50 34 5f 49 4e 54 36 34 29  )pI64, P4_INT64)
4f90: 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53  ;.  sqlite3VdbeS
4fa0: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
4fb0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  .  sqlite3VdbeSe
4fc0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
4fd0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 61  OLNAME_NAME, zLa
4fe0: 62 65 6c 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  bel, SQLITE_STAT
4ff0: 49 43 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  IC);.  sqlite3Vd
5000: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
5010: 65 73 75 6c 74 52 6f 77 2c 20 6d 65 6d 2c 20 31  esultRow, mem, 1
5020: 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 53 65 74  );.}.../*.** Set
5030: 20 74 68 65 20 73 61 66 65 74 79 5f 6c 65 76 65   the safety_leve
5040: 6c 20 61 6e 64 20 70 61 67 65 72 20 66 6c 61 67  l and pager flag
5050: 73 20 66 6f 72 20 70 61 67 65 72 20 69 44 62 2e  s for pager iDb.
5060: 20 20 4f 72 20 69 66 20 69 44 62 3c 30 0a 2a 2a    Or if iDb<0.**
5070: 20 73 65 74 20 74 68 65 73 65 20 76 61 6c 75 65   set these value
5080: 73 20 66 6f 72 20 61 6c 6c 20 70 61 67 65 72 73  s for all pagers
5090: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
50a0: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
50b0: 52 41 47 4d 41 53 0a 73 74 61 74 69 63 20 76 6f  RAGMAS.static vo
50c0: 69 64 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c  id setAllPagerFl
50d0: 61 67 73 28 73 71 6c 69 74 65 33 20 2a 64 62 29  ags(sqlite3 *db)
50e0: 7b 0a 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f  {.  if( db->auto
50f0: 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 44 62  Commit ){.    Db
5100: 20 2a 70 44 62 20 3d 20 64 62 2d 3e 61 44 62 3b   *pDb = db->aDb;
5110: 0a 20 20 20 20 69 6e 74 20 6e 20 3d 20 64 62 2d  .    int n = db-
5120: 3e 6e 44 62 3b 0a 20 20 20 20 61 73 73 65 72 74  >nDb;.    assert
5130: 28 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79  ( SQLITE_FullFSy
5140: 6e 63 3d 3d 50 41 47 45 52 5f 46 55 4c 4c 46 53  nc==PAGER_FULLFS
5150: 59 4e 43 20 29 3b 0a 20 20 20 20 61 73 73 65 72  YNC );.    asser
5160: 74 28 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75  t( SQLITE_CkptFu
5170: 6c 6c 46 53 79 6e 63 3d 3d 50 41 47 45 52 5f 43  llFSync==PAGER_C
5180: 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43 20 29 3b  KPT_FULLFSYNC );
5190: 0a 20 20 20 20 61 73 73 65 72 74 28 20 53 51 4c  .    assert( SQL
51a0: 49 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 3d 3d  ITE_CacheSpill==
51b0: 50 41 47 45 52 5f 43 41 43 48 45 53 50 49 4c 4c  PAGER_CACHESPILL
51c0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
51d0: 28 50 41 47 45 52 5f 46 55 4c 4c 46 53 59 4e 43  (PAGER_FULLFSYNC
51e0: 20 7c 20 50 41 47 45 52 5f 43 4b 50 54 5f 46 55   | PAGER_CKPT_FU
51f0: 4c 4c 46 53 59 4e 43 20 7c 20 50 41 47 45 52 5f  LLFSYNC | PAGER_
5200: 43 41 43 48 45 53 50 49 4c 4c 29 0a 20 20 20 20  CACHESPILL).    
5210: 20 20 20 20 20 20 20 20 20 3d 3d 20 20 50 41 47           ==  PAG
5220: 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b 20 29 3b  ER_FLAGS_MASK );
5230: 0a 20 20 20 20 61 73 73 65 72 74 28 20 28 70 44  .    assert( (pD
5240: 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  b->safety_level 
5250: 26 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e  & PAGER_SYNCHRON
5260: 4f 55 53 5f 4d 41 53 4b 29 3d 3d 70 44 62 2d 3e  OUS_MASK)==pDb->
5270: 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 29 3b 0a  safety_level );.
5280: 20 20 20 20 77 68 69 6c 65 28 20 28 6e 2d 2d 29      while( (n--)
5290: 20 3e 20 30 20 29 7b 0a 20 20 20 20 20 20 69 66   > 0 ){.      if
52a0: 28 20 70 44 62 2d 3e 70 42 74 20 29 7b 0a 20 20  ( pDb->pBt ){.  
52b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
52c0: 65 65 53 65 74 50 61 67 65 72 46 6c 61 67 73 28  eeSetPagerFlags(
52d0: 70 44 62 2d 3e 70 42 74 2c 0a 20 20 20 20 20 20  pDb->pBt,.      
52e0: 20 20 20 20 20 20 20 20 20 20 20 70 44 62 2d 3e             pDb->
52f0: 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 7c 20 28  safety_level | (
5300: 64 62 2d 3e 66 6c 61 67 73 20 26 20 50 41 47 45  db->flags & PAGE
5310: 52 5f 46 4c 41 47 53 5f 4d 41 53 4b 29 20 29 3b  R_FLAGS_MASK) );
5320: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
5330: 44 62 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a  Db++;.    }.  }.
5340: 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65  }.#else.# define
5350: 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61 67   setAllPagerFlag
5360: 73 28 58 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a  s(X)  /* no-op *
5370: 2f 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a  /.#endif.../*.**
5380: 20 52 65 74 75 72 6e 20 61 20 68 75 6d 61 6e 2d   Return a human-
5390: 72 65 61 64 61 62 6c 65 20 6e 61 6d 65 20 66 6f  readable name fo
53a0: 72 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 72  r a constraint r
53b0: 65 73 6f 6c 75 74 69 6f 6e 20 61 63 74 69 6f 6e  esolution action
53c0: 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c  ..*/.#ifndef SQL
53d0: 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
53e0: 5f 4b 45 59 0a 73 74 61 74 69 63 20 63 6f 6e 73  _KEY.static cons
53f0: 74 20 63 68 61 72 20 2a 61 63 74 69 6f 6e 4e 61  t char *actionNa
5400: 6d 65 28 75 38 20 61 63 74 69 6f 6e 29 7b 0a 20  me(u8 action){. 
5410: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61   const char *zNa
5420: 6d 65 3b 0a 20 20 73 77 69 74 63 68 28 20 61 63  me;.  switch( ac
5430: 74 69 6f 6e 20 29 7b 0a 20 20 20 20 63 61 73 65  tion ){.    case
5440: 20 4f 45 5f 53 65 74 4e 75 6c 6c 3a 20 20 7a 4e   OE_SetNull:  zN
5450: 61 6d 65 20 3d 20 22 53 45 54 20 4e 55 4c 4c 22  ame = "SET NULL"
5460: 3b 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  ;        break;.
5470: 20 20 20 20 63 61 73 65 20 4f 45 5f 53 65 74 44      case OE_SetD
5480: 66 6c 74 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 53  flt:  zName = "S
5490: 45 54 20 44 45 46 41 55 4c 54 22 3b 20 20 20 20  ET DEFAULT";    
54a0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65   break;.    case
54b0: 20 4f 45 5f 43 61 73 63 61 64 65 3a 20 20 7a 4e   OE_Cascade:  zN
54c0: 61 6d 65 20 3d 20 22 43 41 53 43 41 44 45 22 3b  ame = "CASCADE";
54d0: 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
54e0: 20 20 20 20 63 61 73 65 20 4f 45 5f 52 65 73 74      case OE_Rest
54f0: 72 69 63 74 3a 20 7a 4e 61 6d 65 20 3d 20 22 52  rict: zName = "R
5500: 45 53 54 52 49 43 54 22 3b 20 20 20 20 20 20 20  ESTRICT";       
5510: 20 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61   break;.    defa
5520: 75 6c 74 3a 20 20 20 20 20 20 20 20 20 20 7a 4e  ult:          zN
5530: 61 6d 65 20 3d 20 22 4e 4f 20 41 43 54 49 4f 4e  ame = "NO ACTION
5540: 22 3b 20 20 0a 20 20 20 20 20 20 20 20 20 20 20  ";  .           
5550: 20 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72             asser
5560: 74 28 20 61 63 74 69 6f 6e 3d 3d 4f 45 5f 4e 6f  t( action==OE_No
5570: 6e 65 20 29 3b 20 62 72 65 61 6b 3b 0a 20 20 7d  ne ); break;.  }
5580: 0a 20 20 72 65 74 75 72 6e 20 7a 4e 61 6d 65 3b  .  return zName;
5590: 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a  .}.#endif.../*.*
55a0: 2a 20 50 61 72 61 6d 65 74 65 72 20 65 4d 6f 64  * Parameter eMod
55b0: 65 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66  e must be one of
55c0: 20 74 68 65 20 50 41 47 45 52 5f 4a 4f 55 52 4e   the PAGER_JOURN
55d0: 41 4c 4d 4f 44 45 5f 58 58 58 20 63 6f 6e 73 74  ALMODE_XXX const
55e0: 61 6e 74 73 0a 2a 2a 20 64 65 66 69 6e 65 64 20  ants.** defined 
55f0: 69 6e 20 70 61 67 65 72 2e 68 2e 20 54 68 69 73  in pager.h. This
5600: 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e   function return
5610: 73 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64  s the associated
5620: 20 6c 6f 77 65 72 63 61 73 65 0a 2a 2a 20 6a 6f   lowercase.** jo
5630: 75 72 6e 61 6c 2d 6d 6f 64 65 20 6e 61 6d 65 2e  urnal-mode name.
5640: 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a  .*/.const char *
5650: 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f  sqlite3JournalMo
5660: 64 65 6e 61 6d 65 28 69 6e 74 20 65 4d 6f 64 65  dename(int eMode
5670: 29 7b 0a 20 20 73 74 61 74 69 63 20 63 68 61 72  ){.  static char
5680: 20 2a 20 63 6f 6e 73 74 20 61 7a 4d 6f 64 65 4e   * const azModeN
5690: 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 22 64  ame[] = {.    "d
56a0: 65 6c 65 74 65 22 2c 20 22 70 65 72 73 69 73 74  elete", "persist
56b0: 22 2c 20 22 6f 66 66 22 2c 20 22 74 72 75 6e 63  ", "off", "trunc
56c0: 61 74 65 22 2c 20 22 6d 65 6d 6f 72 79 22 0a 23  ate", "memory".#
56d0: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
56e0: 49 54 5f 57 41 4c 0a 20 20 20 20 20 2c 20 22 77  IT_WAL.     , "w
56f0: 61 6c 22 0a 23 65 6e 64 69 66 0a 20 20 7d 3b 0a  al".#endif.  };.
5700: 20 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f    assert( PAGER_
5710: 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45  JOURNALMODE_DELE
5720: 54 45 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72  TE==0 );.  asser
5730: 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  t( PAGER_JOURNAL
5740: 4d 4f 44 45 5f 50 45 52 53 49 53 54 3d 3d 31 20  MODE_PERSIST==1 
5750: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47  );.  assert( PAG
5760: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f  ER_JOURNALMODE_O
5770: 46 46 3d 3d 32 20 29 3b 0a 20 20 61 73 73 65 72  FF==2 );.  asser
5780: 74 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  t( PAGER_JOURNAL
5790: 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45 3d 3d 33  MODE_TRUNCATE==3
57a0: 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41   );.  assert( PA
57b0: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
57c0: 4d 45 4d 4f 52 59 3d 3d 34 20 29 3b 0a 20 20 61  MEMORY==4 );.  a
57d0: 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55  ssert( PAGER_JOU
57e0: 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 3d 3d 35 20  RNALMODE_WAL==5 
57f0: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 65 4d 6f  );.  assert( eMo
5800: 64 65 3e 3d 30 20 26 26 20 65 4d 6f 64 65 3c 3d  de>=0 && eMode<=
5810: 41 72 72 61 79 53 69 7a 65 28 61 7a 4d 6f 64 65  ArraySize(azMode
5820: 4e 61 6d 65 29 20 29 3b 0a 0a 20 20 69 66 28 20  Name) );..  if( 
5830: 65 4d 6f 64 65 3d 3d 41 72 72 61 79 53 69 7a 65  eMode==ArraySize
5840: 28 61 7a 4d 6f 64 65 4e 61 6d 65 29 20 29 20 72  (azModeName) ) r
5850: 65 74 75 72 6e 20 30 3b 0a 20 20 72 65 74 75 72  eturn 0;.  retur
5860: 6e 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b 65 4d 6f  n azModeName[eMo
5870: 64 65 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72  de];.}../*.** Pr
5880: 6f 63 65 73 73 20 61 20 70 72 61 67 6d 61 20 73  ocess a pragma s
5890: 74 61 74 65 6d 65 6e 74 2e 20 20 0a 2a 2a 0a 2a  tatement.  .**.*
58a0: 2a 20 50 72 61 67 6d 61 73 20 61 72 65 20 6f 66  * Pragmas are of
58b0: 20 74 68 69 73 20 66 6f 72 6d 3a 0a 2a 2a 0a 2a   this form:.**.*
58c0: 2a 20 20 20 20 20 20 50 52 41 47 4d 41 20 5b 64  *      PRAGMA [d
58d0: 61 74 61 62 61 73 65 2e 5d 69 64 20 5b 3d 20 76  atabase.]id [= v
58e0: 61 6c 75 65 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20  alue].**.** The 
58f0: 69 64 65 6e 74 69 66 69 65 72 20 6d 69 67 68 74  identifier might
5900: 20 61 6c 73 6f 20 62 65 20 61 20 73 74 72 69 6e   also be a strin
5910: 67 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69 73  g.  The value is
5920: 20 61 20 73 74 72 69 6e 67 2c 20 61 6e 64 0a 2a   a string, and.*
5930: 2a 20 69 64 65 6e 74 69 66 69 65 72 2c 20 6f 72  * identifier, or
5940: 20 61 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 6d   a number.  If m
5950: 69 6e 75 73 46 6c 61 67 20 69 73 20 74 72 75 65  inusFlag is true
5960: 2c 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65  , then the value
5970: 20 69 73 0a 2a 2a 20 61 20 6e 75 6d 62 65 72 20   is.** a number 
5980: 74 68 61 74 20 77 61 73 20 70 72 65 63 65 64 65  that was precede
5990: 64 20 62 79 20 61 20 6d 69 6e 75 73 20 73 69 67  d by a minus sig
59a0: 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20  n..**.** If the 
59b0: 6c 65 66 74 20 73 69 64 65 20 69 73 20 22 64 61  left side is "da
59c0: 74 61 62 61 73 65 2e 69 64 22 20 74 68 65 6e 20  tabase.id" then 
59d0: 70 49 64 31 20 69 73 20 74 68 65 20 64 61 74 61  pId1 is the data
59e0: 62 61 73 65 20 6e 61 6d 65 0a 2a 2a 20 61 6e 64  base name.** and
59f0: 20 70 49 64 32 20 69 73 20 74 68 65 20 69 64 2e   pId2 is the id.
5a00: 20 20 49 66 20 74 68 65 20 6c 65 66 74 20 73 69    If the left si
5a10: 64 65 20 69 73 20 6a 75 73 74 20 22 69 64 22 20  de is just "id" 
5a20: 74 68 65 6e 20 70 49 64 31 20 69 73 20 74 68 65  then pId1 is the
5a30: 0a 2a 2a 20 69 64 20 61 6e 64 20 70 49 64 32 20  .** id and pId2 
5a40: 69 73 20 61 6e 79 20 65 6d 70 74 79 20 73 74 72  is any empty str
5a50: 69 6e 67 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c  ing..*/.void sql
5a60: 69 74 65 33 50 72 61 67 6d 61 28 0a 20 20 50 61  ite3Pragma(.  Pa
5a70: 72 73 65 20 2a 70 50 61 72 73 65 2c 20 0a 20 20  rse *pParse, .  
5a80: 54 6f 6b 65 6e 20 2a 70 49 64 31 2c 20 20 20 20  Token *pId1,    
5a90: 20 20 20 20 2f 2a 20 46 69 72 73 74 20 70 61 72      /* First par
5aa0: 74 20 6f 66 20 5b 64 61 74 61 62 61 73 65 2e 5d  t of [database.]
5ab0: 69 64 20 66 69 65 6c 64 20 2a 2f 0a 20 20 54 6f  id field */.  To
5ac0: 6b 65 6e 20 2a 70 49 64 32 2c 20 20 20 20 20 20  ken *pId2,      
5ad0: 20 20 2f 2a 20 53 65 63 6f 6e 64 20 70 61 72 74    /* Second part
5ae0: 20 6f 66 20 5b 64 61 74 61 62 61 73 65 2e 5d 69   of [database.]i
5af0: 64 20 66 69 65 6c 64 2c 20 6f 72 20 4e 55 4c 4c  d field, or NULL
5b00: 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 56 61   */.  Token *pVa
5b10: 6c 75 65 2c 20 20 20 20 20 20 2f 2a 20 54 6f 6b  lue,      /* Tok
5b20: 65 6e 20 66 6f 72 20 3c 76 61 6c 75 65 3e 2c 20  en for <value>, 
5b30: 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74  or NULL */.  int
5b40: 20 6d 69 6e 75 73 46 6c 61 67 20 20 20 20 20 20   minusFlag      
5b50: 20 2f 2a 20 54 72 75 65 20 69 66 20 61 20 27 2d   /* True if a '-
5b60: 27 20 73 69 67 6e 20 70 72 65 63 65 64 65 64 20  ' sign preceded 
5b70: 3c 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b 0a 20 20  <value> */.){.  
5b80: 63 68 61 72 20 2a 7a 4c 65 66 74 20 3d 20 30 3b  char *zLeft = 0;
5b90: 20 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d 74 65         /* Nul-te
5ba0: 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73  rminated UTF-8 s
5bb0: 74 72 69 6e 67 20 3c 69 64 3e 20 2a 2f 0a 20 20  tring <id> */.  
5bc0: 63 68 61 72 20 2a 7a 52 69 67 68 74 20 3d 20 30  char *zRight = 0
5bd0: 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d 74 65  ;      /* Nul-te
5be0: 72 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73  rminated UTF-8 s
5bf0: 74 72 69 6e 67 20 3c 76 61 6c 75 65 3e 2c 20 6f  tring <value>, o
5c00: 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 6f 6e 73  r NULL */.  cons
5c10: 74 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 30 3b  t char *zDb = 0;
5c20: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
5c30: 73 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b  se name */.  Tok
5c40: 65 6e 20 2a 70 49 64 3b 20 20 20 20 20 20 20 20  en *pId;        
5c50: 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74      /* Pointer t
5c60: 6f 20 3c 69 64 3e 20 74 6f 6b 65 6e 20 2a 2f 0a  o <id> token */.
5c70: 20 20 63 68 61 72 20 2a 61 46 63 6e 74 6c 5b 34    char *aFcntl[4
5c80: 5d 3b 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75  ];       /* Argu
5c90: 6d 65 6e 74 20 74 6f 20 53 51 4c 49 54 45 5f 46  ment to SQLITE_F
5ca0: 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f 0a 20  CNTL_PRAGMA */. 
5cb0: 20 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20   int iDb;       
5cc0: 20 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62          /* Datab
5cd0: 61 73 65 20 69 6e 64 65 78 20 66 6f 72 20 3c 64  ase index for <d
5ce0: 61 74 61 62 61 73 65 3e 20 2a 2f 0a 20 20 69 6e  atabase> */.  in
5cf0: 74 20 6c 77 72 2c 20 75 70 72 2c 20 6d 69 64 3b  t lwr, upr, mid;
5d00: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 69             /* Bi
5d10: 6e 61 72 79 20 73 65 61 72 63 68 20 62 6f 75 6e  nary search boun
5d20: 64 73 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20  ds */.  int rc; 
5d30: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5d40: 20 20 20 20 20 2f 2a 20 72 65 74 75 72 6e 20 76       /* return v
5d50: 61 6c 75 65 20 66 6f 72 6d 20 53 51 4c 49 54 45  alue form SQLITE
5d60: 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f  _FCNTL_PRAGMA */
5d70: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d  .  sqlite3 *db =
5d80: 20 70 50 61 72 73 65 2d 3e 64 62 3b 20 20 20 20   pParse->db;    
5d90: 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20  /* The database 
5da0: 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20  connection */.  
5db0: 44 62 20 2a 70 44 62 3b 20 20 20 20 20 20 20 20  Db *pDb;        
5dc0: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
5dd0: 54 68 65 20 73 70 65 63 69 66 69 63 20 64 61 74  The specific dat
5de0: 61 62 61 73 65 20 62 65 69 6e 67 20 70 72 61 67  abase being prag
5df0: 6d 61 65 64 20 2a 2f 0a 20 20 56 64 62 65 20 2a  maed */.  Vdbe *
5e00: 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64  v = sqlite3GetVd
5e10: 62 65 28 70 50 61 72 73 65 29 3b 20 20 2f 2a 20  be(pParse);  /* 
5e20: 50 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  Prepared stateme
5e30: 6e 74 20 2a 2f 0a 0a 20 20 69 66 28 20 76 3d 3d  nt */..  if( v==
5e40: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 73 71  0 ) return;.  sq
5e50: 6c 69 74 65 33 56 64 62 65 52 75 6e 4f 6e 6c 79  lite3VdbeRunOnly
5e60: 4f 6e 63 65 28 76 29 3b 0a 20 20 70 50 61 72 73  Once(v);.  pPars
5e70: 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 0a 20 20  e->nMem = 2;..  
5e80: 2f 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  /* Interpret the
5e90: 20 5b 64 61 74 61 62 61 73 65 2e 5d 20 70 61 72   [database.] par
5ea0: 74 20 6f 66 20 74 68 65 20 70 72 61 67 6d 61 20  t of the pragma 
5eb0: 73 74 61 74 65 6d 65 6e 74 2e 20 69 44 62 20 69  statement. iDb i
5ec0: 73 20 74 68 65 0a 20 20 2a 2a 20 69 6e 64 65 78  s the.  ** index
5ed0: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
5ee0: 20 74 68 69 73 20 70 72 61 67 6d 61 20 69 73 20   this pragma is 
5ef0: 62 65 69 6e 67 20 61 70 70 6c 69 65 64 20 74 6f  being applied to
5f00: 20 69 6e 20 64 62 2e 61 44 62 5b 5d 2e 20 2a 2f   in db.aDb[]. */
5f10: 0a 20 20 69 44 62 20 3d 20 73 71 6c 69 74 65 33  .  iDb = sqlite3
5f20: 54 77 6f 50 61 72 74 4e 61 6d 65 28 70 50 61 72  TwoPartName(pPar
5f30: 73 65 2c 20 70 49 64 31 2c 20 70 49 64 32 2c 20  se, pId1, pId2, 
5f40: 26 70 49 64 29 3b 0a 20 20 69 66 28 20 69 44 62  &pId);.  if( iDb
5f50: 3c 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 70  <0 ) return;.  p
5f60: 44 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44  Db = &db->aDb[iD
5f70: 62 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65  b];..  /* If the
5f80: 20 74 65 6d 70 20 64 61 74 61 62 61 73 65 20 68   temp database h
5f90: 61 73 20 62 65 65 6e 20 65 78 70 6c 69 63 69 74  as been explicit
5fa0: 6c 79 20 6e 61 6d 65 64 20 61 73 20 70 61 72 74  ly named as part
5fb0: 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 70 72   of the .  ** pr
5fc0: 61 67 6d 61 2c 20 6d 61 6b 65 20 73 75 72 65 20  agma, make sure 
5fd0: 69 74 20 69 73 20 6f 70 65 6e 2e 20 0a 20 20 2a  it is open. .  *
5fe0: 2f 0a 20 20 69 66 28 20 69 44 62 3d 3d 31 20 26  /.  if( iDb==1 &
5ff0: 26 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d  & sqlite3OpenTem
6000: 70 44 61 74 61 62 61 73 65 28 70 50 61 72 73 65  pDatabase(pParse
6010: 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 3b  ) ){.    return;
6020: 0a 20 20 7d 0a 0a 20 20 7a 4c 65 66 74 20 3d 20  .  }..  zLeft = 
6030: 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54  sqlite3NameFromT
6040: 6f 6b 65 6e 28 64 62 2c 20 70 49 64 29 3b 0a 20  oken(db, pId);. 
6050: 20 69 66 28 20 21 7a 4c 65 66 74 20 29 20 72 65   if( !zLeft ) re
6060: 74 75 72 6e 3b 0a 20 20 69 66 28 20 6d 69 6e 75  turn;.  if( minu
6070: 73 46 6c 61 67 20 29 7b 0a 20 20 20 20 7a 52 69  sFlag ){.    zRi
6080: 67 68 74 20 3d 20 73 71 6c 69 74 65 33 4d 50 72  ght = sqlite3MPr
6090: 69 6e 74 66 28 64 62 2c 20 22 2d 25 54 22 2c 20  intf(db, "-%T", 
60a0: 70 56 61 6c 75 65 29 3b 0a 20 20 7d 65 6c 73 65  pValue);.  }else
60b0: 7b 0a 20 20 20 20 7a 52 69 67 68 74 20 3d 20 73  {.    zRight = s
60c0: 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f  qlite3NameFromTo
60d0: 6b 65 6e 28 64 62 2c 20 70 56 61 6c 75 65 29 3b  ken(db, pValue);
60e0: 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20  .  }..  assert( 
60f0: 70 49 64 32 20 29 3b 0a 20 20 7a 44 62 20 3d 20  pId2 );.  zDb = 
6100: 70 49 64 32 2d 3e 6e 3e 30 20 3f 20 70 44 62 2d  pId2->n>0 ? pDb-
6110: 3e 7a 4e 61 6d 65 20 3a 20 30 3b 0a 20 20 69 66  >zName : 0;.  if
6120: 28 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65  ( sqlite3AuthChe
6130: 63 6b 28 70 50 61 72 73 65 2c 20 53 51 4c 49 54  ck(pParse, SQLIT
6140: 45 5f 50 52 41 47 4d 41 2c 20 7a 4c 65 66 74 2c  E_PRAGMA, zLeft,
6150: 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 20 29 7b   zRight, zDb) ){
6160: 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61  .    goto pragma
6170: 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20  _out;.  }..  /* 
6180: 53 65 6e 64 20 61 6e 20 53 51 4c 49 54 45 5f 46  Send an SQLITE_F
6190: 43 4e 54 4c 5f 50 52 41 47 4d 41 20 66 69 6c 65  CNTL_PRAGMA file
61a0: 2d 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20  -control to the 
61b0: 75 6e 64 65 72 6c 79 69 6e 67 20 56 46 53 0a 20  underlying VFS. 
61c0: 20 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20   ** connection. 
61d0: 20 49 66 20 69 74 20 72 65 74 75 72 6e 73 20 53   If it returns S
61e0: 51 4c 49 54 45 5f 4f 4b 2c 20 74 68 65 6e 20 61  QLITE_OK, then a
61f0: 73 73 75 6d 65 20 74 68 61 74 20 74 68 65 20 56  ssume that the V
6200: 46 53 0a 20 20 2a 2a 20 68 61 6e 64 6c 65 64 20  FS.  ** handled 
6210: 74 68 65 20 70 72 61 67 6d 61 20 61 6e 64 20 67  the pragma and g
6220: 65 6e 65 72 61 74 65 20 61 20 6e 6f 2d 6f 70 20  enerate a no-op 
6230: 70 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65  prepared stateme
6240: 6e 74 2e 0a 20 20 2a 2f 0a 20 20 61 46 63 6e 74  nt..  */.  aFcnt
6250: 6c 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 46 63 6e  l[0] = 0;.  aFcn
6260: 74 6c 5b 31 5d 20 3d 20 7a 4c 65 66 74 3b 0a 20  tl[1] = zLeft;. 
6270: 20 61 46 63 6e 74 6c 5b 32 5d 20 3d 20 7a 52 69   aFcntl[2] = zRi
6280: 67 68 74 3b 0a 20 20 61 46 63 6e 74 6c 5b 33 5d  ght;.  aFcntl[3]
6290: 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79   = 0;.  db->busy
62a0: 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20  Handler.nBusy = 
62b0: 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65  0;.  rc = sqlite
62c0: 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64  3_file_control(d
62d0: 62 2c 20 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46  b, zDb, SQLITE_F
62e0: 43 4e 54 4c 5f 50 52 41 47 4d 41 2c 20 28 76 6f  CNTL_PRAGMA, (vo
62f0: 69 64 2a 29 61 46 63 6e 74 6c 29 3b 0a 20 20 69  id*)aFcntl);.  i
6300: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
6310: 20 29 7b 0a 20 20 20 20 69 66 28 20 61 46 63 6e   ){.    if( aFcn
6320: 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 69  tl[0] ){.      i
6330: 6e 74 20 6d 65 6d 20 3d 20 2b 2b 70 50 61 72 73  nt mem = ++pPars
6340: 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 20 20 73  e->nMem;.      s
6350: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
6360: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
6370: 30 2c 20 6d 65 6d 2c 20 30 2c 20 61 46 63 6e 74  0, mem, 0, aFcnt
6380: 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20 20 20 20  l[0], 0);.      
6390: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
63a0: 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20  mCols(v, 1);.   
63b0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
63c0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
63d0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 72 65  OLNAME_NAME, "re
63e0: 73 75 6c 74 22 2c 20 53 51 4c 49 54 45 5f 53 54  sult", SQLITE_ST
63f0: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
6400: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
6410: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
6420: 6d 65 6d 2c 20 31 29 3b 0a 20 20 20 20 20 20 73  mem, 1);.      s
6430: 71 6c 69 74 65 33 5f 66 72 65 65 28 61 46 63 6e  qlite3_free(aFcn
6440: 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  tl[0]);.    }.  
6450: 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75    goto pragma_ou
6460: 74 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 21  t;.  }.  if( rc!
6470: 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44  =SQLITE_NOTFOUND
6480: 20 29 7b 0a 20 20 20 20 69 66 28 20 61 46 63 6e   ){.    if( aFcn
6490: 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 73  tl[0] ){.      s
64a0: 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70  qlite3ErrorMsg(p
64b0: 50 61 72 73 65 2c 20 22 25 73 22 2c 20 61 46 63  Parse, "%s", aFc
64c0: 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 20 20 73  ntl[0]);.      s
64d0: 71 6c 69 74 65 33 5f 66 72 65 65 28 61 46 63 6e  qlite3_free(aFcn
64e0: 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d 0a 20 20  tl[0]);.    }.  
64f0: 20 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b    pParse->nErr++
6500: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 72 63  ;.    pParse->rc
6510: 20 3d 20 72 63 3b 0a 20 20 20 20 67 6f 74 6f 20   = rc;.    goto 
6520: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a  pragma_out;.  }.
6530: 0a 20 20 2f 2a 20 4c 6f 63 61 74 65 20 74 68 65  .  /* Locate the
6540: 20 70 72 61 67 6d 61 20 69 6e 20 74 68 65 20 6c   pragma in the l
6550: 6f 6f 6b 75 70 20 74 61 62 6c 65 20 2a 2f 0a 20  ookup table */. 
6560: 20 6c 77 72 20 3d 20 30 3b 0a 20 20 75 70 72 20   lwr = 0;.  upr 
6570: 3d 20 41 72 72 61 79 53 69 7a 65 28 61 50 72 61  = ArraySize(aPra
6580: 67 6d 61 4e 61 6d 65 73 29 2d 31 3b 0a 20 20 77  gmaNames)-1;.  w
6590: 68 69 6c 65 28 20 6c 77 72 3c 3d 75 70 72 20 29  hile( lwr<=upr )
65a0: 7b 0a 20 20 20 20 6d 69 64 20 3d 20 28 6c 77 72  {.    mid = (lwr
65b0: 2b 75 70 72 29 2f 32 3b 0a 20 20 20 20 72 63 20  +upr)/2;.    rc 
65c0: 3d 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d  = sqlite3_stricm
65d0: 70 28 7a 4c 65 66 74 2c 20 61 50 72 61 67 6d 61  p(zLeft, aPragma
65e0: 4e 61 6d 65 73 5b 6d 69 64 5d 2e 7a 4e 61 6d 65  Names[mid].zName
65f0: 29 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 30  );.    if( rc==0
6600: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 69 66   ) break;.    if
6610: 28 20 72 63 3c 30 20 29 7b 0a 20 20 20 20 20 20  ( rc<0 ){.      
6620: 75 70 72 20 3d 20 6d 69 64 20 2d 20 31 3b 0a 20  upr = mid - 1;. 
6630: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
6640: 6c 77 72 20 3d 20 6d 69 64 20 2b 20 31 3b 0a 20  lwr = mid + 1;. 
6650: 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 6c     }.  }.  if( l
6660: 77 72 3e 75 70 72 20 29 20 67 6f 74 6f 20 70 72  wr>upr ) goto pr
6670: 61 67 6d 61 5f 6f 75 74 3b 0a 0a 20 20 2f 2a 20  agma_out;..  /* 
6680: 4d 61 6b 65 20 73 75 72 65 20 74 68 65 20 64 61  Make sure the da
6690: 74 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73  tabase schema is
66a0: 20 6c 6f 61 64 65 64 20 69 66 20 74 68 65 20 70   loaded if the p
66b0: 72 61 67 6d 61 20 72 65 71 75 69 72 65 73 20 74  ragma requires t
66c0: 68 61 74 20 2a 2f 0a 20 20 69 66 28 20 28 61 50  hat */.  if( (aP
66d0: 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e  ragmaNames[mid].
66e0: 6d 50 72 61 67 46 6c 61 67 20 26 20 50 72 61 67  mPragFlag & Prag
66f0: 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 29  Flag_NeedSchema)
6700: 21 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 73  !=0 ){.    if( s
6710: 71 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61  qlite3ReadSchema
6720: 28 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20  (pParse) ) goto 
6730: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a  pragma_out;.  }.
6740: 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 74 68  .  /* Jump to th
6750: 65 20 61 70 70 72 6f 70 72 69 61 74 65 20 70 72  e appropriate pr
6760: 61 67 6d 61 20 68 61 6e 64 6c 65 72 20 2a 2f 0a  agma handler */.
6770: 20 20 73 77 69 74 63 68 28 20 61 50 72 61 67 6d    switch( aPragm
6780: 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 65 50 72 61  aNames[mid].ePra
6790: 67 54 79 70 20 29 7b 0a 20 20 0a 23 69 66 20 21  gTyp ){.  .#if !
67a0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
67b0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
67c0: 53 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53  S) && !defined(S
67d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45  QLITE_OMIT_DEPRE
67e0: 43 41 54 45 44 29 0a 20 20 2f 2a 0a 20 20 2a 2a  CATED).  /*.  **
67f0: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
6800: 73 65 2e 5d 64 65 66 61 75 6c 74 5f 63 61 63 68  se.]default_cach
6810: 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41  e_size.  **  PRA
6820: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 64  GMA [database.]d
6830: 65 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a  efault_cache_siz
6840: 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  e=N.  **.  ** Th
6850: 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70  e first form rep
6860: 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74  orts the current
6870: 20 70 65 72 73 69 73 74 65 6e 74 20 73 65 74 74   persistent sett
6880: 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  ing for the.  **
6890: 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65   page cache size
68a0: 2e 20 20 54 68 65 20 76 61 6c 75 65 20 72 65 74  .  The value ret
68b0: 75 72 6e 65 64 20 69 73 20 74 68 65 20 6d 61 78  urned is the max
68c0: 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 0a 20  imum number of. 
68d0: 20 2a 2a 20 70 61 67 65 73 20 69 6e 20 74 68 65   ** pages in the
68e0: 20 70 61 67 65 20 63 61 63 68 65 2e 20 20 54 68   page cache.  Th
68f0: 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65  e second form se
6900: 74 73 20 62 6f 74 68 20 74 68 65 20 63 75 72 72  ts both the curr
6910: 65 6e 74 0a 20 20 2a 2a 20 70 61 67 65 20 63 61  ent.  ** page ca
6920: 63 68 65 20 73 69 7a 65 20 76 61 6c 75 65 20 61  che size value a
6930: 6e 64 20 74 68 65 20 70 65 72 73 69 73 74 65 6e  nd the persisten
6940: 74 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  t page cache siz
6950: 65 20 76 61 6c 75 65 0a 20 20 2a 2a 20 73 74 6f  e value.  ** sto
6960: 72 65 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  red in the datab
6970: 61 73 65 20 66 69 6c 65 2e 0a 20 20 2a 2a 0a 20  ase file..  **. 
6980: 20 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73 69 6f   ** Older versio
6990: 6e 73 20 6f 66 20 53 51 4c 69 74 65 20 77 6f 75  ns of SQLite wou
69a0: 6c 64 20 73 65 74 20 74 68 65 20 64 65 66 61 75  ld set the defau
69b0: 6c 74 20 63 61 63 68 65 20 73 69 7a 65 20 74 6f  lt cache size to
69c0: 20 61 0a 20 20 2a 2a 20 6e 65 67 61 74 69 76 65   a.  ** negative
69d0: 20 6e 75 6d 62 65 72 20 74 6f 20 69 6e 64 69 63   number to indic
69e0: 61 74 65 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d  ate synchronous=
69f0: 4f 46 46 2e 20 20 54 68 65 73 65 20 64 61 79 73  OFF.  These days
6a00: 2c 20 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20  , synchronous.  
6a10: 2a 2a 20 69 73 20 61 6c 77 61 79 73 20 6f 6e 20  ** is always on 
6a20: 62 79 20 64 65 66 61 75 6c 74 20 72 65 67 61 72  by default regar
6a30: 64 6c 65 73 73 20 6f 66 20 74 68 65 20 73 69 67  dless of the sig
6a40: 6e 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74  n of the default
6a50: 20 63 61 63 68 65 0a 20 20 2a 2a 20 73 69 7a 65   cache.  ** size
6a60: 2e 20 20 42 75 74 20 63 6f 6e 74 69 6e 75 65 20  .  But continue 
6a70: 74 6f 20 74 61 6b 65 20 74 68 65 20 61 62 73 6f  to take the abso
6a80: 6c 75 74 65 20 76 61 6c 75 65 20 6f 66 20 74 68  lute value of th
6a90: 65 20 64 65 66 61 75 6c 74 20 63 61 63 68 65 0a  e default cache.
6aa0: 20 20 2a 2a 20 73 69 7a 65 20 6f 66 20 68 69 73    ** size of his
6ab0: 74 6f 72 69 63 61 6c 20 63 6f 6d 70 61 74 69 62  torical compatib
6ac0: 69 6c 69 74 79 2e 0a 20 20 2a 2f 0a 20 20 63 61  ility..  */.  ca
6ad0: 73 65 20 50 72 61 67 54 79 70 5f 44 45 46 41 55  se PragTyp_DEFAU
6ae0: 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45 3a 20 7b  LT_CACHE_SIZE: {
6af0: 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73  .    static cons
6b00: 74 20 56 64 62 65 4f 70 4c 69 73 74 20 67 65 74  t VdbeOpList get
6b10: 43 61 63 68 65 53 69 7a 65 5b 5d 20 3d 20 7b 0a  CacheSize[] = {.
6b20: 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73        { OP_Trans
6b30: 61 63 74 69 6f 6e 2c 20 30 2c 20 30 2c 20 20 20  action, 0, 0,   
6b40: 20 20 20 20 20 30 7d 2c 20 20 20 20 20 20 20 20       0},        
6b50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6b60: 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 7b   /* 0 */.      {
6b70: 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 2c 20   OP_ReadCookie, 
6b80: 20 30 2c 20 31 2c 20 20 20 20 20 20 20 20 42 54   0, 1,        BT
6b90: 52 45 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48  REE_DEFAULT_CACH
6ba0: 45 5f 53 49 5a 45 7d 2c 20 20 2f 2a 20 31 20 2a  E_SIZE},  /* 1 *
6bb0: 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 50  /.      { OP_IfP
6bc0: 6f 73 2c 20 20 20 20 20 20 20 31 2c 20 38 2c 20  os,       1, 8, 
6bd0: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20         0},.     
6be0: 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20   { OP_Integer,  
6bf0: 20 20 20 30 2c 20 32 2c 20 20 20 20 20 20 20 20     0, 2,        
6c00: 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f 53  0},.      { OP_S
6c10: 75 62 74 72 61 63 74 2c 20 20 20 20 31 2c 20 32  ubtract,    1, 2
6c20: 2c 20 20 20 20 20 20 20 20 31 7d 2c 0a 20 20 20  ,        1},.   
6c30: 20 20 20 7b 20 4f 50 5f 49 66 50 6f 73 2c 20 20     { OP_IfPos,  
6c40: 20 20 20 20 20 31 2c 20 38 2c 20 20 20 20 20 20       1, 8,      
6c50: 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50    0},.      { OP
6c60: 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20 30 2c  _Integer,     0,
6c70: 20 31 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20   1,        0},  
6c80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6c90: 20 20 20 20 20 20 20 2f 2a 20 36 20 2a 2f 0a 20         /* 6 */. 
6ca0: 20 20 20 20 20 7b 20 4f 50 5f 4e 6f 6f 70 2c 20       { OP_Noop, 
6cb0: 20 20 20 20 20 20 20 30 2c 20 30 2c 20 20 20 20         0, 0,    
6cc0: 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20      0},.      { 
6cd0: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20 20  OP_ResultRow,   
6ce0: 31 2c 20 31 2c 20 20 20 20 20 20 20 20 30 7d 2c  1, 1,        0},
6cf0: 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74 20  .    };.    int 
6d00: 61 64 64 72 3b 0a 20 20 20 20 73 71 6c 69 74 65  addr;.    sqlite
6d10: 33 56 64 62 65 55 73 65 73 42 74 72 65 65 28 76  3VdbeUsesBtree(v
6d20: 2c 20 69 44 62 29 3b 0a 20 20 20 20 69 66 28 20  , iDb);.    if( 
6d30: 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20  !zRight ){.     
6d40: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
6d50: 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20  umCols(v, 1);.  
6d60: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
6d70: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
6d80: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63  COLNAME_NAME, "c
6d90: 61 63 68 65 5f 73 69 7a 65 22 2c 20 53 51 4c 49  ache_size", SQLI
6da0: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
6db0: 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 2b    pParse->nMem +
6dc0: 3d 20 32 3b 0a 20 20 20 20 20 20 61 64 64 72 20  = 2;.      addr 
6dd0: 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
6de0: 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53  OpList(v, ArrayS
6df0: 69 7a 65 28 67 65 74 43 61 63 68 65 53 69 7a 65  ize(getCacheSize
6e00: 29 2c 20 67 65 74 43 61 63 68 65 53 69 7a 65 29  ), getCacheSize)
6e10: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
6e20: 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61  dbeChangeP1(v, a
6e30: 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  ddr, iDb);.     
6e40: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
6e50: 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c 20  geP1(v, addr+1, 
6e60: 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
6e70: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
6e80: 76 2c 20 61 64 64 72 2b 36 2c 20 53 51 4c 49 54  v, addr+6, SQLIT
6e90: 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f  E_DEFAULT_CACHE_
6ea0: 53 49 5a 45 29 3b 0a 20 20 20 20 7d 65 6c 73 65  SIZE);.    }else
6eb0: 7b 0a 20 20 20 20 20 20 69 6e 74 20 73 69 7a 65  {.      int size
6ec0: 20 3d 20 73 71 6c 69 74 65 33 41 62 73 49 6e 74   = sqlite3AbsInt
6ed0: 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  32(sqlite3Atoi(z
6ee0: 52 69 67 68 74 29 29 3b 0a 20 20 20 20 20 20 73  Right));.      s
6ef0: 71 6c 69 74 65 33 42 65 67 69 6e 57 72 69 74 65  qlite3BeginWrite
6f00: 4f 70 65 72 61 74 69 6f 6e 28 70 50 61 72 73 65  Operation(pParse
6f10: 2c 20 30 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  , 0, iDb);.     
6f20: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
6f30: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
6f40: 2c 20 73 69 7a 65 2c 20 31 29 3b 0a 20 20 20 20  , size, 1);.    
6f50: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
6f60: 4f 70 33 28 76 2c 20 4f 50 5f 53 65 74 43 6f 6f  Op3(v, OP_SetCoo
6f70: 6b 69 65 2c 20 69 44 62 2c 20 42 54 52 45 45 5f  kie, iDb, BTREE_
6f80: 44 45 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49  DEFAULT_CACHE_SI
6f90: 5a 45 2c 20 31 29 3b 0a 20 20 20 20 20 20 61 73  ZE, 1);.      as
6fa0: 73 65 72 74 28 20 73 71 6c 69 74 65 33 53 63 68  sert( sqlite3Sch
6fb0: 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c  emaMutexHeld(db,
6fc0: 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20 20 20   iDb, 0) );.    
6fd0: 20 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e    pDb->pSchema->
6fe0: 63 61 63 68 65 5f 73 69 7a 65 20 3d 20 73 69 7a  cache_size = siz
6ff0: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
7000: 42 74 72 65 65 53 65 74 43 61 63 68 65 53 69 7a  BtreeSetCacheSiz
7010: 65 28 70 44 62 2d 3e 70 42 74 2c 20 70 44 62 2d  e(pDb->pBt, pDb-
7020: 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f  >pSchema->cache_
7030: 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a 20 20 20  size);.    }.   
7040: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
7050: 69 66 20 2f 2a 20 21 53 51 4c 49 54 45 5f 4f 4d  if /* !SQLITE_OM
7060: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
7070: 20 26 26 20 21 53 51 4c 49 54 45 5f 4f 4d 49 54   && !SQLITE_OMIT
7080: 5f 44 45 50 52 45 43 41 54 45 44 20 2a 2f 0a 0a  _DEPRECATED */..
7090: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
70a0: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
70b0: 52 41 47 4d 41 53 29 0a 20 20 2f 2a 0a 20 20 2a  RAGMAS).  /*.  *
70c0: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
70d0: 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65 0a 20  ase.]page_size. 
70e0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
70f0: 61 62 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65  abase.]page_size
7100: 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  =N.  **.  ** The
7110: 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f   first form repo
7120: 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
7130: 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a  setting for the.
7140: 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61    ** database pa
7150: 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65 73  ge size in bytes
7160: 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f  .  The second fo
7170: 72 6d 20 73 65 74 73 20 74 68 65 0a 20 20 2a 2a  rm sets the.  **
7180: 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20 73   database page s
7190: 69 7a 65 20 76 61 6c 75 65 2e 20 20 54 68 65 20  ize value.  The 
71a0: 76 61 6c 75 65 20 63 61 6e 20 6f 6e 6c 79 20 62  value can only b
71b0: 65 20 73 65 74 20 69 66 0a 20 20 2a 2a 20 74 68  e set if.  ** th
71c0: 65 20 64 61 74 61 62 61 73 65 20 68 61 73 20 6e  e database has n
71d0: 6f 74 20 79 65 74 20 62 65 65 6e 20 63 72 65 61  ot yet been crea
71e0: 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65  ted..  */.  case
71f0: 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 53 49   PragTyp_PAGE_SI
7200: 5a 45 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20  ZE: {.    Btree 
7210: 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b  *pBt = pDb->pBt;
7220: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74  .    assert( pBt
7230: 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21  !=0 );.    if( !
7240: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
7250: 69 6e 74 20 73 69 7a 65 20 3d 20 41 4c 57 41 59  int size = ALWAY
7260: 53 28 70 42 74 29 20 3f 20 73 71 6c 69 74 65 33  S(pBt) ? sqlite3
7270: 42 74 72 65 65 47 65 74 50 61 67 65 53 69 7a 65  BtreeGetPageSize
7280: 28 70 42 74 29 20 3a 20 30 3b 0a 20 20 20 20 20  (pBt) : 0;.     
7290: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
72a0: 28 70 50 61 72 73 65 2c 20 22 70 61 67 65 5f 73  (pParse, "page_s
72b0: 69 7a 65 22 2c 20 73 69 7a 65 29 3b 0a 20 20 20  ize", size);.   
72c0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f 2a   }else{.      /*
72d0: 20 4d 61 6c 6c 6f 63 20 6d 61 79 20 66 61 69 6c   Malloc may fail
72e0: 20 77 68 65 6e 20 73 65 74 74 69 6e 67 20 74 68   when setting th
72f0: 65 20 70 61 67 65 2d 73 69 7a 65 2c 20 61 73 20  e page-size, as 
7300: 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74 65  there is an inte
7310: 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 62 75  rnal.      ** bu
7320: 66 66 65 72 20 74 68 61 74 20 74 68 65 20 70 61  ffer that the pa
7330: 67 65 72 20 6d 6f 64 75 6c 65 20 72 65 73 69 7a  ger module resiz
7340: 65 73 20 75 73 69 6e 67 20 73 71 6c 69 74 65 33  es using sqlite3
7350: 5f 72 65 61 6c 6c 6f 63 28 29 2e 0a 20 20 20 20  _realloc()..    
7360: 20 20 2a 2f 0a 20 20 20 20 20 20 64 62 2d 3e 6e    */.      db->n
7370: 65 78 74 50 61 67 65 73 69 7a 65 20 3d 20 73 71  extPagesize = sq
7380: 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74  lite3Atoi(zRight
7390: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 53 51 4c  );.      if( SQL
73a0: 49 54 45 5f 4e 4f 4d 45 4d 3d 3d 73 71 6c 69 74  ITE_NOMEM==sqlit
73b0: 65 33 42 74 72 65 65 53 65 74 50 61 67 65 53 69  e3BtreeSetPageSi
73c0: 7a 65 28 70 42 74 2c 20 64 62 2d 3e 6e 65 78 74  ze(pBt, db->next
73d0: 50 61 67 65 73 69 7a 65 2c 2d 31 2c 30 29 20 29  Pagesize,-1,0) )
73e0: 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6d 61  {.        db->ma
73f0: 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b 0a  llocFailed = 1;.
7400: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
7410: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
7420: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
7430: 5b 64 61 74 61 62 61 73 65 2e 5d 73 65 63 75 72  [database.]secur
7440: 65 5f 64 65 6c 65 74 65 0a 20 20 2a 2a 20 20 50  e_delete.  **  P
7450: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
7460: 5d 73 65 63 75 72 65 5f 64 65 6c 65 74 65 3d 4f  ]secure_delete=O
7470: 4e 2f 4f 46 46 0a 20 20 2a 2a 0a 20 20 2a 2a 20  N/OFF.  **.  ** 
7480: 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72  The first form r
7490: 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65  eports the curre
74a0: 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74  nt setting for t
74b0: 68 65 0a 20 20 2a 2a 20 73 65 63 75 72 65 5f 64  he.  ** secure_d
74c0: 65 6c 65 74 65 20 66 6c 61 67 2e 20 20 54 68 65  elete flag.  The
74d0: 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 63 68 61   second form cha
74e0: 6e 67 65 73 20 74 68 65 20 73 65 63 75 72 65 5f  nges the secure_
74f0: 64 65 6c 65 74 65 0a 20 20 2a 2a 20 66 6c 61 67  delete.  ** flag
7500: 20 73 65 74 74 69 6e 67 20 61 6e 64 20 72 65 70   setting and rep
7510: 6f 72 74 73 20 74 68 65 6e 65 77 20 76 61 6c 75  orts thenew valu
7520: 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  e..  */.  case P
7530: 72 61 67 54 79 70 5f 53 45 43 55 52 45 5f 44 45  ragTyp_SECURE_DE
7540: 4c 45 54 45 3a 20 7b 0a 20 20 20 20 42 74 72 65  LETE: {.    Btre
7550: 65 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42  e *pBt = pDb->pB
7560: 74 3b 0a 20 20 20 20 69 6e 74 20 62 20 3d 20 2d  t;.    int b = -
7570: 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70  1;.    assert( p
7580: 42 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28  Bt!=0 );.    if(
7590: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
75a0: 20 62 20 3d 20 73 71 6c 69 74 65 33 47 65 74 42   b = sqlite3GetB
75b0: 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30  oolean(zRight, 0
75c0: 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66 28  );.    }.    if(
75d0: 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 26 26 20 62   pId2->n==0 && b
75e0: 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  >=0 ){.      int
75f0: 20 69 69 3b 0a 20 20 20 20 20 20 66 6f 72 28 69   ii;.      for(i
7600: 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b  i=0; ii<db->nDb;
7610: 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20   ii++){.        
7620: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 63 75  sqlite3BtreeSecu
7630: 72 65 44 65 6c 65 74 65 28 64 62 2d 3e 61 44 62  reDelete(db->aDb
7640: 5b 69 69 5d 2e 70 42 74 2c 20 62 29 3b 0a 20 20  [ii].pBt, b);.  
7650: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
7660: 62 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  b = sqlite3Btree
7670: 53 65 63 75 72 65 44 65 6c 65 74 65 28 70 42 74  SecureDelete(pBt
7680: 2c 20 62 29 3b 0a 20 20 20 20 72 65 74 75 72 6e  , b);.    return
7690: 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65  SingleInt(pParse
76a0: 2c 20 22 73 65 63 75 72 65 5f 64 65 6c 65 74 65  , "secure_delete
76b0: 22 2c 20 62 29 3b 0a 20 20 20 20 62 72 65 61 6b  ", b);.    break
76c0: 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
76d0: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
76e0: 73 65 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f 75  se.]max_page_cou
76f0: 6e 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  nt.  **  PRAGMA 
7700: 5b 64 61 74 61 62 61 73 65 2e 5d 6d 61 78 5f 70  [database.]max_p
7710: 61 67 65 5f 63 6f 75 6e 74 3d 4e 0a 20 20 2a 2a  age_count=N.  **
7720: 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74 20  .  ** The first 
7730: 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68 65  form reports the
7740: 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67   current setting
7750: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6d 61   for the.  ** ma
7760: 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 20  ximum number of 
7770: 70 61 67 65 73 20 69 6e 20 74 68 65 20 64 61 74  pages in the dat
7780: 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68 65  abase file.  The
7790: 20 0a 20 20 2a 2a 20 73 65 63 6f 6e 64 20 66 6f   .  ** second fo
77a0: 72 6d 20 61 74 74 65 6d 70 74 73 20 74 6f 20 63  rm attempts to c
77b0: 68 61 6e 67 65 20 74 68 69 73 20 73 65 74 74 69  hange this setti
77c0: 6e 67 2e 20 20 42 6f 74 68 0a 20 20 2a 2a 20 66  ng.  Both.  ** f
77d0: 6f 72 6d 73 20 72 65 74 75 72 6e 20 74 68 65 20  orms return the 
77e0: 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67 2e  current setting.
77f0: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 61  .  **.  ** The a
7800: 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66  bsolute value of
7810: 20 4e 20 69 73 20 75 73 65 64 2e 20 20 54 68 69   N is used.  Thi
7820: 73 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74 65  s is undocumente
7830: 64 20 61 6e 64 20 6d 69 67 68 74 0a 20 20 2a 2a  d and might.  **
7840: 20 63 68 61 6e 67 65 2e 20 20 54 68 65 20 6f 6e   change.  The on
7850: 6c 79 20 70 75 72 70 6f 73 65 20 69 73 20 74 6f  ly purpose is to
7860: 20 70 72 6f 76 69 64 65 20 61 6e 20 65 61 73 79   provide an easy
7870: 20 77 61 79 20 74 6f 20 74 65 73 74 0a 20 20 2a   way to test.  *
7880: 2a 20 74 68 65 20 73 71 6c 69 74 65 33 41 62 73  * the sqlite3Abs
7890: 49 6e 74 33 32 28 29 20 66 75 6e 63 74 69 6f 6e  Int32() function
78a0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  **.  **  PRA
78b0: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 70  GMA [database.]p
78c0: 61 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a 0a 20  age_count.  **. 
78d0: 20 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20 6e   ** Return the n
78e0: 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20 69  umber of pages i
78f0: 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20  n the specified 
7900: 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20  database..  */. 
7910: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 50 41   case PragTyp_PA
7920: 47 45 5f 43 4f 55 4e 54 3a 20 7b 0a 20 20 20 20  GE_COUNT: {.    
7930: 69 6e 74 20 69 52 65 67 3b 0a 20 20 20 20 73 71  int iReg;.    sq
7940: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
7950: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44  chema(pParse, iD
7960: 62 29 3b 0a 20 20 20 20 69 52 65 67 20 3d 20 2b  b);.    iReg = +
7970: 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20  +pParse->nMem;. 
7980: 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 54 6f     if( sqlite3To
7990: 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29 3d  lower(zLeft[0])=
79a0: 3d 27 70 27 20 29 7b 0a 20 20 20 20 20 20 73 71  ='p' ){.      sq
79b0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
79c0: 76 2c 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74 2c  v, OP_Pagecount,
79d0: 20 69 44 62 2c 20 69 52 65 67 29 3b 0a 20 20 20   iDb, iReg);.   
79e0: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73 71   }else{.      sq
79f0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
7a00: 76 2c 20 4f 50 5f 4d 61 78 50 67 63 6e 74 2c 20  v, OP_MaxPgcnt, 
7a10: 69 44 62 2c 20 69 52 65 67 2c 20 0a 20 20 20 20  iDb, iReg, .    
7a20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7a30: 20 20 20 20 73 71 6c 69 74 65 33 41 62 73 49 6e      sqlite3AbsIn
7a40: 74 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69 28  t32(sqlite3Atoi(
7a50: 7a 52 69 67 68 74 29 29 29 3b 0a 20 20 20 20 7d  zRight)));.    }
7a60: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
7a70: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
7a80: 75 6c 74 52 6f 77 2c 20 69 52 65 67 2c 20 31 29  ultRow, iReg, 1)
7a90: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
7aa0: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
7ab0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
7ac0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
7ad0: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
7ae0: 20 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f 54   zLeft, SQLITE_T
7af0: 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 62  RANSIENT);.    b
7b00: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a  reak;.  }..  /*.
7b10: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
7b20: 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 69 6e 67 5f  tabase.]locking_
7b30: 6d 6f 64 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d  mode.  **  PRAGM
7b40: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f 63  A [database.]loc
7b50: 6b 69 6e 67 5f 6d 6f 64 65 20 3d 20 28 6e 6f 72  king_mode = (nor
7b60: 6d 61 6c 7c 65 78 63 6c 75 73 69 76 65 29 0a 20  mal|exclusive). 
7b70: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
7b80: 79 70 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f 44 45 3a  yp_LOCKING_MODE:
7b90: 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68 61   {.    const cha
7ba0: 72 20 2a 7a 52 65 74 20 3d 20 22 6e 6f 72 6d 61  r *zRet = "norma
7bb0: 6c 22 3b 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64  l";.    int eMod
7bc0: 65 20 3d 20 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f  e = getLockingMo
7bd0: 64 65 28 7a 52 69 67 68 74 29 3b 0a 0a 20 20 20  de(zRight);..   
7be0: 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20   if( pId2->n==0 
7bf0: 26 26 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52 5f  && eMode==PAGER_
7c00: 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 51 55 45 52  LOCKINGMODE_QUER
7c10: 59 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 53 69  Y ){.      /* Si
7c20: 6d 70 6c 65 20 22 50 52 41 47 4d 41 20 6c 6f 63  mple "PRAGMA loc
7c30: 6b 69 6e 67 5f 6d 6f 64 65 3b 22 20 73 74 61 74  king_mode;" stat
7c40: 65 6d 65 6e 74 2e 20 54 68 69 73 20 69 73 20 61  ement. This is a
7c50: 20 71 75 65 72 79 20 66 6f 72 0a 20 20 20 20 20   query for.     
7c60: 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74 20   ** the current 
7c70: 64 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67 20  default locking 
7c80: 6d 6f 64 65 20 28 77 68 69 63 68 20 6d 61 79 20  mode (which may 
7c90: 62 65 20 64 69 66 66 65 72 65 6e 74 20 74 6f 0a  be different to.
7ca0: 20 20 20 20 20 20 2a 2a 20 74 68 65 20 6c 6f 63        ** the loc
7cb0: 6b 69 6e 67 2d 6d 6f 64 65 20 6f 66 20 74 68 65  king-mode of the
7cc0: 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 29 2e   main database).
7cd0: 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20  .      */.      
7ce0: 65 4d 6f 64 65 20 3d 20 64 62 2d 3e 64 66 6c 74  eMode = db->dflt
7cf0: 4c 6f 63 6b 4d 6f 64 65 3b 0a 20 20 20 20 7d 65  LockMode;.    }e
7d00: 6c 73 65 7b 0a 20 20 20 20 20 20 50 61 67 65 72  lse{.      Pager
7d10: 20 2a 70 50 61 67 65 72 3b 0a 20 20 20 20 20 20   *pPager;.      
7d20: 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29  if( pId2->n==0 )
7d30: 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 54 68 69  {.        /* Thi
7d40: 73 20 69 6e 64 69 63 61 74 65 73 20 74 68 61 74  s indicates that
7d50: 20 6e 6f 20 64 61 74 61 62 61 73 65 20 6e 61 6d   no database nam
7d60: 65 20 77 61 73 20 73 70 65 63 69 66 69 65 64 20  e was specified 
7d70: 61 73 20 70 61 72 74 0a 20 20 20 20 20 20 20 20  as part.        
7d80: 2a 2a 20 6f 66 20 74 68 65 20 50 52 41 47 4d 41  ** of the PRAGMA
7d90: 20 63 6f 6d 6d 61 6e 64 2e 20 49 6e 20 74 68 69   command. In thi
7da0: 73 20 63 61 73 65 20 74 68 65 20 6c 6f 63 6b 69  s case the locki
7db0: 6e 67 2d 6d 6f 64 65 20 6d 75 73 74 20 62 65 0a  ng-mode must be.
7dc0: 20 20 20 20 20 20 20 20 2a 2a 20 73 65 74 20 6f          ** set o
7dd0: 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  n all attached d
7de0: 61 74 61 62 61 73 65 73 2c 20 61 73 20 77 65 6c  atabases, as wel
7df0: 6c 20 61 73 20 74 68 65 20 6d 61 69 6e 20 64 62  l as the main db
7e00: 20 66 69 6c 65 2e 0a 20 20 20 20 20 20 20 20 2a   file..        *
7e10: 2a 0a 20 20 20 20 20 20 20 20 2a 2a 20 41 6c 73  *.        ** Als
7e20: 6f 2c 20 74 68 65 20 73 71 6c 69 74 65 33 2e 64  o, the sqlite3.d
7e30: 66 6c 74 4c 6f 63 6b 4d 6f 64 65 20 76 61 72 69  fltLockMode vari
7e40: 61 62 6c 65 20 69 73 20 73 65 74 20 73 6f 20 74  able is set so t
7e50: 68 61 74 0a 20 20 20 20 20 20 20 20 2a 2a 20 61  hat.        ** a
7e60: 6e 79 20 73 75 62 73 65 71 75 65 6e 74 6c 79 20  ny subsequently 
7e70: 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61 73  attached databas
7e80: 65 73 20 61 6c 73 6f 20 75 73 65 20 74 68 65 20  es also use the 
7e90: 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 20 20  specified.      
7ea0: 20 20 2a 2a 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64    ** locking mod
7eb0: 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20 20  e..        */.  
7ec0: 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20        int ii;.  
7ed0: 20 20 20 20 20 20 61 73 73 65 72 74 28 70 44 62        assert(pDb
7ee0: 3d 3d 26 64 62 2d 3e 61 44 62 5b 30 5d 29 3b 0a  ==&db->aDb[0]);.
7ef0: 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d 32          for(ii=2
7f00: 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 69  ; ii<db->nDb; ii
7f10: 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 70  ++){.          p
7f20: 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42  Pager = sqlite3B
7f30: 74 72 65 65 50 61 67 65 72 28 64 62 2d 3e 61 44  treePager(db->aD
7f40: 62 5b 69 69 5d 2e 70 42 74 29 3b 0a 20 20 20 20  b[ii].pBt);.    
7f50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 67        sqlite3Pag
7f60: 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70 50  erLockingMode(pP
7f70: 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20 20  ager, eMode);.  
7f80: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
7f90: 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65  db->dfltLockMode
7fa0: 20 3d 20 28 75 38 29 65 4d 6f 64 65 3b 0a 20 20   = (u8)eMode;.  
7fb0: 20 20 20 20 7d 0a 20 20 20 20 20 20 70 50 61 67      }.      pPag
7fc0: 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65  er = sqlite3Btre
7fd0: 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29  ePager(pDb->pBt)
7fe0: 3b 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20  ;.      eMode = 
7ff0: 73 71 6c 69 74 65 33 50 61 67 65 72 4c 6f 63 6b  sqlite3PagerLock
8000: 69 6e 67 4d 6f 64 65 28 70 50 61 67 65 72 2c 20  ingMode(pPager, 
8010: 65 4d 6f 64 65 29 3b 0a 20 20 20 20 7d 0a 0a 20  eMode);.    }.. 
8020: 20 20 20 61 73 73 65 72 74 28 20 65 4d 6f 64 65     assert( eMode
8030: 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  ==PAGER_LOCKINGM
8040: 4f 44 45 5f 4e 4f 52 4d 41 4c 0a 20 20 20 20 20  ODE_NORMAL.     
8050: 20 20 20 20 20 20 20 7c 7c 20 65 4d 6f 64 65 3d         || eMode=
8060: 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f  =PAGER_LOCKINGMO
8070: 44 45 5f 45 58 43 4c 55 53 49 56 45 20 29 3b 0a  DE_EXCLUSIVE );.
8080: 20 20 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 50      if( eMode==P
8090: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
80a0: 5f 45 58 43 4c 55 53 49 56 45 20 29 7b 0a 20 20  _EXCLUSIVE ){.  
80b0: 20 20 20 20 7a 52 65 74 20 3d 20 22 65 78 63 6c      zRet = "excl
80c0: 75 73 69 76 65 22 3b 0a 20 20 20 20 7d 0a 20 20  usive";.    }.  
80d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
80e0: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
80f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
8100: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
8110: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6c 6f  OLNAME_NAME, "lo
8120: 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c 20 53 51 4c  cking_mode", SQL
8130: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
8140: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
8150: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
8160: 2c 20 30 2c 20 31 2c 20 30 2c 20 7a 52 65 74 2c  , 0, 1, 0, zRet,
8170: 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   0);.    sqlite3
8180: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
8190: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31  _ResultRow, 1, 1
81a0: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
81b0: 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  }..  /*.  **  PR
81c0: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
81d0: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20 2a  journal_mode.  *
81e0: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
81f0: 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64  ase.]journal_mod
8200: 65 20 3d 0a 20 20 2a 2a 20 20 20 20 20 20 20 20  e =.  **        
8210: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64                (d
8220: 65 6c 65 74 65 7c 70 65 72 73 69 73 74 7c 6f 66  elete|persist|of
8230: 66 7c 74 72 75 6e 63 61 74 65 7c 6d 65 6d 6f 72  f|truncate|memor
8240: 79 7c 77 61 6c 7c 6f 66 66 29 0a 20 20 2a 2f 0a  y|wal|off).  */.
8250: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4a    case PragTyp_J
8260: 4f 55 52 4e 41 4c 5f 4d 4f 44 45 3a 20 7b 0a 20  OURNAL_MODE: {. 
8270: 20 20 20 69 6e 74 20 65 4d 6f 64 65 3b 20 20 20     int eMode;   
8280: 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20 74       /* One of t
8290: 68 65 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c  he PAGER_JOURNAL
82a0: 4d 4f 44 45 5f 58 58 58 20 73 79 6d 62 6f 6c 73  MODE_XXX symbols
82b0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 69 3b 20   */.    int ii; 
82c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f            /* Loo
82d0: 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 0a 20 20  p counter */..  
82e0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
82f0: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
8300: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
8310: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
8320: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6a 6f  OLNAME_NAME, "jo
8330: 75 72 6e 61 6c 5f 6d 6f 64 65 22 2c 20 53 51 4c  urnal_mode", SQL
8340: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20  ITE_STATIC);..  
8350: 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20    if( zRight==0 
8360: 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20 74  ){.      /* If t
8370: 68 65 72 65 20 69 73 20 6e 6f 20 22 3d 4d 4f 44  here is no "=MOD
8380: 45 22 20 70 61 72 74 20 6f 66 20 74 68 65 20 70  E" part of the p
8390: 72 61 67 6d 61 2c 20 64 6f 20 61 20 71 75 65 72  ragma, do a quer
83a0: 79 20 66 6f 72 20 74 68 65 0a 20 20 20 20 20 20  y for the.      
83b0: 2a 2a 20 63 75 72 72 65 6e 74 20 6d 6f 64 65 20  ** current mode 
83c0: 2a 2f 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  */.      eMode =
83d0: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
83e0: 44 45 5f 51 55 45 52 59 3b 0a 20 20 20 20 7d 65  DE_QUERY;.    }e
83f0: 6c 73 65 7b 0a 20 20 20 20 20 20 63 6f 6e 73 74  lse{.      const
8400: 20 63 68 61 72 20 2a 7a 4d 6f 64 65 3b 0a 20 20   char *zMode;.  
8410: 20 20 20 20 69 6e 74 20 6e 20 3d 20 73 71 6c 69      int n = sqli
8420: 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67  te3Strlen30(zRig
8430: 68 74 29 3b 0a 20 20 20 20 20 20 66 6f 72 28 65  ht);.      for(e
8440: 4d 6f 64 65 3d 30 3b 20 28 7a 4d 6f 64 65 20 3d  Mode=0; (zMode =
8450: 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d   sqlite3JournalM
8460: 6f 64 65 6e 61 6d 65 28 65 4d 6f 64 65 29 29 21  odename(eMode))!
8470: 3d 30 3b 20 65 4d 6f 64 65 2b 2b 29 7b 0a 20 20  =0; eMode++){.  
8480: 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65        if( sqlite
8490: 33 53 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74  3StrNICmp(zRight
84a0: 2c 20 7a 4d 6f 64 65 2c 20 6e 29 3d 3d 30 20 29  , zMode, n)==0 )
84b0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d 0a   break;.      }.
84c0: 20 20 20 20 20 20 69 66 28 20 21 7a 4d 6f 64 65        if( !zMode
84d0: 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 49   ){.        /* I
84e0: 66 20 74 68 65 20 22 3d 4d 4f 44 45 22 20 70 61  f the "=MODE" pa
84f0: 72 74 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74 63  rt does not matc
8500: 68 20 61 6e 79 20 6b 6e 6f 77 6e 20 6a 6f 75 72  h any known jour
8510: 6e 61 6c 20 6d 6f 64 65 2c 0a 20 20 20 20 20 20  nal mode,.      
8520: 20 20 2a 2a 20 74 68 65 6e 20 64 6f 20 61 20 71    ** then do a q
8530: 75 65 72 79 20 2a 2f 0a 20 20 20 20 20 20 20 20  uery */.        
8540: 65 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f 4a 4f  eMode = PAGER_JO
8550: 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59 3b  URNALMODE_QUERY;
8560: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
8570: 20 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 50 41     if( eMode==PA
8580: 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f  GER_JOURNALMODE_
8590: 51 55 45 52 59 20 26 26 20 70 49 64 32 2d 3e 6e  QUERY && pId2->n
85a0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20  ==0 ){.      /* 
85b0: 43 6f 6e 76 65 72 74 20 22 50 52 41 47 4d 41 20  Convert "PRAGMA 
85c0: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 69 6e  journal_mode" in
85d0: 74 6f 20 22 50 52 41 47 4d 41 20 6d 61 69 6e 2e  to "PRAGMA main.
85e0: 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 2a 2f  journal_mode" */
85f0: 0a 20 20 20 20 20 20 69 44 62 20 3d 20 30 3b 0a  .      iDb = 0;.
8600: 20 20 20 20 20 20 70 49 64 32 2d 3e 6e 20 3d 20        pId2->n = 
8610: 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f 72  1;.    }.    for
8620: 28 69 69 3d 64 62 2d 3e 6e 44 62 2d 31 3b 20 69  (ii=db->nDb-1; i
8630: 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a 20 20 20  i>=0; ii--){.   
8640: 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69     if( db->aDb[i
8650: 69 5d 2e 70 42 74 20 26 26 20 28 69 69 3d 3d 69  i].pBt && (ii==i
8660: 44 62 20 7c 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30  Db || pId2->n==0
8670: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  ) ){.        sql
8680: 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65  ite3VdbeUsesBtre
8690: 65 28 76 2c 20 69 69 29 3b 0a 20 20 20 20 20 20  e(v, ii);.      
86a0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
86b0: 4f 70 33 28 76 2c 20 4f 50 5f 4a 6f 75 72 6e 61  Op3(v, OP_Journa
86c0: 6c 4d 6f 64 65 2c 20 69 69 2c 20 31 2c 20 65 4d  lMode, ii, 1, eM
86d0: 6f 64 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  ode);.      }.  
86e0: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
86f0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
8700: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29  ResultRow, 1, 1)
8710: 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
8720: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41  ..  /*.  **  PRA
8730: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a  GMA [database.]j
8740: 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69  ournal_size_limi
8750: 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  t.  **  PRAGMA [
8760: 64 61 74 61 62 61 73 65 2e 5d 6a 6f 75 72 6e 61  database.]journa
8770: 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 3d 4e 0a 20  l_size_limit=N. 
8780: 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72 20   **.  ** Get or 
8790: 73 65 74 20 74 68 65 20 73 69 7a 65 20 6c 69 6d  set the size lim
87a0: 69 74 20 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20 6a  it on rollback j
87b0: 6f 75 72 6e 61 6c 20 66 69 6c 65 73 2e 0a 20 20  ournal files..  
87c0: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
87d0: 70 5f 4a 4f 55 52 4e 41 4c 5f 53 49 5a 45 5f 4c  p_JOURNAL_SIZE_L
87e0: 49 4d 49 54 3a 20 7b 0a 20 20 20 20 50 61 67 65  IMIT: {.    Page
87f0: 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69  r *pPager = sqli
8800: 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44  te3BtreePager(pD
8810: 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 69 36 34  b->pBt);.    i64
8820: 20 69 4c 69 6d 69 74 20 3d 20 2d 32 3b 0a 20 20   iLimit = -2;.  
8830: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
8840: 20 20 20 20 20 20 73 71 6c 69 74 65 33 41 74 6f        sqlite3Ato
8850: 69 36 34 28 7a 52 69 67 68 74 2c 20 26 69 4c 69  i64(zRight, &iLi
8860: 6d 69 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c  mit, sqlite3Strl
8870: 65 6e 33 30 28 7a 52 69 67 68 74 29 2c 20 53 51  en30(zRight), SQ
8880: 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20 20 20 20  LITE_UTF8);.    
8890: 20 20 69 66 28 20 69 4c 69 6d 69 74 3c 2d 31 20    if( iLimit<-1 
88a0: 29 20 69 4c 69 6d 69 74 20 3d 20 2d 31 3b 0a 20  ) iLimit = -1;. 
88b0: 20 20 20 7d 0a 20 20 20 20 69 4c 69 6d 69 74 20     }.    iLimit 
88c0: 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 4a 6f  = sqlite3PagerJo
88d0: 75 72 6e 61 6c 53 69 7a 65 4c 69 6d 69 74 28 70  urnalSizeLimit(p
88e0: 50 61 67 65 72 2c 20 69 4c 69 6d 69 74 29 3b 0a  Pager, iLimit);.
88f0: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
8900: 49 6e 74 28 70 50 61 72 73 65 2c 20 22 6a 6f 75  Int(pParse, "jou
8910: 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 22  rnal_size_limit"
8920: 2c 20 69 4c 69 6d 69 74 29 3b 0a 20 20 20 20 62  , iLimit);.    b
8930: 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 65 6e 64 69  reak;.  }..#endi
8940: 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
8950: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a  _PAGER_PRAGMAS *
8960: 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  /..  /*.  **  PR
8970: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
8980: 61 75 74 6f 5f 76 61 63 75 75 6d 0a 20 20 2a 2a  auto_vacuum.  **
8990: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
89a0: 73 65 2e 5d 61 75 74 6f 5f 76 61 63 75 75 6d 3d  se.]auto_vacuum=
89b0: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20  N.  **.  ** Get 
89c0: 6f 72 20 73 65 74 20 74 68 65 20 76 61 6c 75 65  or set the value
89d0: 20 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65   of the database
89e0: 20 27 61 75 74 6f 2d 76 61 63 75 75 6d 27 20 70   'auto-vacuum' p
89f0: 61 72 61 6d 65 74 65 72 2e 0a 20 20 2a 2a 20 54  arameter..  ** T
8a00: 68 65 20 76 61 6c 75 65 20 69 73 20 6f 6e 65 20  he value is one 
8a10: 6f 66 3a 20 20 30 20 4e 4f 4e 45 20 31 20 46 55  of:  0 NONE 1 FU
8a20: 4c 4c 20 32 20 49 4e 43 52 45 4d 45 4e 54 41 4c  LL 2 INCREMENTAL
8a30: 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51  .  */.#ifndef SQ
8a40: 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41  LITE_OMIT_AUTOVA
8a50: 43 55 55 4d 0a 20 20 63 61 73 65 20 50 72 61 67  CUUM.  case Prag
8a60: 54 79 70 5f 41 55 54 4f 5f 56 41 43 55 55 4d 3a  Typ_AUTO_VACUUM:
8a70: 20 7b 0a 20 20 20 20 42 74 72 65 65 20 2a 70 42   {.    Btree *pB
8a80: 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a 20 20  t = pDb->pBt;.  
8a90: 20 20 61 73 73 65 72 74 28 20 70 42 74 21 3d 30    assert( pBt!=0
8aa0: 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69   );.    if( !zRi
8ab0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ght ){.      ret
8ac0: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
8ad0: 72 73 65 2c 20 22 61 75 74 6f 5f 76 61 63 75 75  rse, "auto_vacuu
8ae0: 6d 22 2c 20 73 71 6c 69 74 65 33 42 74 72 65 65  m", sqlite3Btree
8af0: 47 65 74 41 75 74 6f 56 61 63 75 75 6d 28 70 42  GetAutoVacuum(pB
8b00: 74 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  t));.    }else{.
8b10: 20 20 20 20 20 20 69 6e 74 20 65 41 75 74 6f 20        int eAuto 
8b20: 3d 20 67 65 74 41 75 74 6f 56 61 63 75 75 6d 28  = getAutoVacuum(
8b30: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 61  zRight);.      a
8b40: 73 73 65 72 74 28 20 65 41 75 74 6f 3e 3d 30 20  ssert( eAuto>=0 
8b50: 26 26 20 65 41 75 74 6f 3c 3d 32 20 29 3b 0a 20  && eAuto<=2 );. 
8b60: 20 20 20 20 20 64 62 2d 3e 6e 65 78 74 41 75 74       db->nextAut
8b70: 6f 76 61 63 20 3d 20 28 75 38 29 65 41 75 74 6f  ovac = (u8)eAuto
8b80: 3b 0a 20 20 20 20 20 20 2f 2a 20 43 61 6c 6c 20  ;.      /* Call 
8b90: 53 65 74 41 75 74 6f 56 61 63 75 75 6d 28 29 20  SetAutoVacuum() 
8ba0: 74 6f 20 73 65 74 20 69 6e 69 74 69 61 6c 69 7a  to set initializ
8bb0: 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c 20 61  e the internal a
8bc0: 75 74 6f 20 61 6e 64 0a 20 20 20 20 20 20 2a 2a  uto and.      **
8bd0: 20 69 6e 63 72 2d 76 61 63 75 75 6d 20 66 6c 61   incr-vacuum fla
8be0: 67 73 2e 20 54 68 69 73 20 69 73 20 72 65 71 75  gs. This is requ
8bf0: 69 72 65 64 20 69 6e 20 63 61 73 65 20 74 68 69  ired in case thi
8c00: 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 20 20 20  s connection.   
8c10: 20 20 20 2a 2a 20 63 72 65 61 74 65 73 20 74 68     ** creates th
8c20: 65 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e  e database file.
8c30: 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61 6e 74   It is important
8c40: 20 74 68 61 74 20 69 74 20 69 73 20 63 72 65 61   that it is crea
8c50: 74 65 64 0a 20 20 20 20 20 20 2a 2a 20 61 73 20  ted.      ** as 
8c60: 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20 63  an auto-vacuum c
8c70: 61 70 61 62 6c 65 20 64 62 2e 0a 20 20 20 20 20  apable db..     
8c80: 20 2a 2f 0a 20 20 20 20 20 20 72 63 20 3d 20 73   */.      rc = s
8c90: 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 41 75  qlite3BtreeSetAu
8ca0: 74 6f 56 61 63 75 75 6d 28 70 42 74 2c 20 65 41  toVacuum(pBt, eA
8cb0: 75 74 6f 29 3b 0a 20 20 20 20 20 20 69 66 28 20  uto);.      if( 
8cc0: 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 26 26  rc==SQLITE_OK &&
8cd0: 20 28 65 41 75 74 6f 3d 3d 31 20 7c 7c 20 65 41   (eAuto==1 || eA
8ce0: 75 74 6f 3d 3d 32 29 20 29 7b 0a 20 20 20 20 20  uto==2) ){.     
8cf0: 20 20 20 2f 2a 20 57 68 65 6e 20 73 65 74 74 69     /* When setti
8d00: 6e 67 20 74 68 65 20 61 75 74 6f 5f 76 61 63 75  ng the auto_vacu
8d10: 75 6d 20 6d 6f 64 65 20 74 6f 20 65 69 74 68 65  um mode to eithe
8d20: 72 20 22 66 75 6c 6c 22 20 6f 72 20 0a 20 20 20  r "full" or .   
8d30: 20 20 20 20 20 2a 2a 20 22 69 6e 63 72 65 6d 65       ** "increme
8d40: 6e 74 61 6c 22 2c 20 77 72 69 74 65 20 74 68 65  ntal", write the
8d50: 20 76 61 6c 75 65 20 6f 66 20 6d 65 74 61 5b 36   value of meta[6
8d60: 5d 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  ] in the databas
8d70: 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 66 69 6c  e.        ** fil
8d80: 65 2e 20 42 65 66 6f 72 65 20 77 72 69 74 69 6e  e. Before writin
8d90: 67 20 74 6f 20 6d 65 74 61 5b 36 5d 2c 20 63 68  g to meta[6], ch
8da0: 65 63 6b 20 74 68 61 74 20 6d 65 74 61 5b 33 5d  eck that meta[3]
8db0: 20 69 6e 64 69 63 61 74 65 73 0a 20 20 20 20 20   indicates.     
8dc0: 20 20 20 2a 2a 20 74 68 61 74 20 74 68 69 73 20     ** that this 
8dd0: 72 65 61 6c 6c 79 20 69 73 20 61 6e 20 61 75 74  really is an aut
8de0: 6f 2d 76 61 63 75 75 6d 20 63 61 70 61 62 6c 65  o-vacuum capable
8df0: 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20 20 20   database..     
8e00: 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20 73 74     */.        st
8e10: 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f  atic const VdbeO
8e20: 70 4c 69 73 74 20 73 65 74 4d 65 74 61 36 5b 5d  pList setMeta6[]
8e30: 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 20 20 7b   = {.          {
8e40: 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c   OP_Transaction,
8e50: 20 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 31      0,         1
8e60: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
8e70: 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f    0},    /* 0 */
8e80: 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  .          { OP_
8e90: 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20  ReadCookie,     
8ea0: 30 2c 20 20 20 20 20 20 20 20 20 31 2c 20 20 20  0,         1,   
8eb0: 20 20 20 20 20 20 42 54 52 45 45 5f 4c 41 52 47        BTREE_LARG
8ec0: 45 53 54 5f 52 4f 4f 54 5f 50 41 47 45 7d 2c 0a  EST_ROOT_PAGE},.
8ed0: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49            { OP_I
8ee0: 66 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 31  f,             1
8ef0: 2c 20 20 20 20 20 20 20 20 20 30 2c 20 20 20 20  ,         0,    
8f00: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c               0},
8f10: 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20      /* 2 */.    
8f20: 20 20 20 20 20 20 7b 20 4f 50 5f 48 61 6c 74 2c        { OP_Halt,
8f30: 20 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54             SQLIT
8f40: 45 5f 4f 4b 2c 20 4f 45 5f 41 62 6f 72 74 2c 20  E_OK, OE_Abort, 
8f50: 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20           0},    
8f60: 2f 2a 20 33 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 3 */.        
8f70: 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20    { OP_Integer, 
8f80: 20 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20         0,       
8f90: 20 20 31 2c 20 20 20 20 20 20 20 20 20 20 20 20    1,            
8fa0: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 34       0},    /* 4
8fb0: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20   */.          { 
8fc0: 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c 20 20 20  OP_SetCookie,   
8fd0: 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 42 54     0,         BT
8fe0: 52 45 45 5f 49 4e 43 52 5f 56 41 43 55 55 4d 2c  REE_INCR_VACUUM,
8ff0: 20 31 7d 2c 20 20 20 20 2f 2a 20 35 20 2a 2f 0a   1},    /* 5 */.
9000: 20 20 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20          };.     
9010: 20 20 20 69 6e 74 20 69 41 64 64 72 3b 0a 20 20     int iAddr;.  
9020: 20 20 20 20 20 20 69 41 64 64 72 20 3d 20 73 71        iAddr = sq
9030: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 4c 69  lite3VdbeAddOpLi
9040: 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a 65 28  st(v, ArraySize(
9050: 73 65 74 4d 65 74 61 36 29 2c 20 73 65 74 4d 65  setMeta6), setMe
9060: 74 61 36 29 3b 0a 20 20 20 20 20 20 20 20 73 71  ta6);.        sq
9070: 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50  lite3VdbeChangeP
9080: 31 28 76 2c 20 69 41 64 64 72 2c 20 69 44 62 29  1(v, iAddr, iDb)
9090: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
90a0: 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c  3VdbeChangeP1(v,
90b0: 20 69 41 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a   iAddr+1, iDb);.
90c0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
90d0: 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20 69  dbeChangeP2(v, i
90e0: 41 64 64 72 2b 32 2c 20 69 41 64 64 72 2b 34 29  Addr+2, iAddr+4)
90f0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
9100: 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c  3VdbeChangeP1(v,
9110: 20 69 41 64 64 72 2b 34 2c 20 65 41 75 74 6f 2d   iAddr+4, eAuto-
9120: 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  1);.        sqli
9130: 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28  te3VdbeChangeP1(
9140: 76 2c 20 69 41 64 64 72 2b 35 2c 20 69 44 62 29  v, iAddr+5, iDb)
9150: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
9160: 33 56 64 62 65 55 73 65 73 42 74 72 65 65 28 76  3VdbeUsesBtree(v
9170: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 7d 0a  , iDb);.      }.
9180: 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b      }.    break;
9190: 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f  .  }.#endif..  /
91a0: 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  *.  **  PRAGMA [
91b0: 64 61 74 61 62 61 73 65 2e 5d 69 6e 63 72 65 6d  database.]increm
91c0: 65 6e 74 61 6c 5f 76 61 63 75 75 6d 28 4e 29 0a  ental_vacuum(N).
91d0: 20 20 2a 2a 0a 20 20 2a 2a 20 44 6f 20 4e 20 73    **.  ** Do N s
91e0: 74 65 70 73 20 6f 66 20 69 6e 63 72 65 6d 65 6e  teps of incremen
91f0: 74 61 6c 20 76 61 63 75 75 6d 69 6e 67 20 6f 6e  tal vacuuming on
9200: 20 61 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a   a database..  *
9210: 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  /.#ifndef SQLITE
9220: 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
9230: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
9240: 49 4e 43 52 45 4d 45 4e 54 41 4c 5f 56 41 43 55  INCREMENTAL_VACU
9250: 55 4d 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 4c  UM: {.    int iL
9260: 69 6d 69 74 2c 20 61 64 64 72 3b 0a 20 20 20 20  imit, addr;.    
9270: 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20 7c 7c  if( zRight==0 ||
9280: 20 21 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33   !sqlite3GetInt3
9290: 32 28 7a 52 69 67 68 74 2c 20 26 69 4c 69 6d 69  2(zRight, &iLimi
92a0: 74 29 20 7c 7c 20 69 4c 69 6d 69 74 3c 3d 30 20  t) || iLimit<=0 
92b0: 29 7b 0a 20 20 20 20 20 20 69 4c 69 6d 69 74 20  ){.      iLimit 
92c0: 3d 20 30 78 37 66 66 66 66 66 66 66 3b 0a 20 20  = 0x7fffffff;.  
92d0: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 42    }.    sqlite3B
92e0: 65 67 69 6e 57 72 69 74 65 4f 70 65 72 61 74 69  eginWriteOperati
92f0: 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c 20 69 44  on(pParse, 0, iD
9300: 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  b);.    sqlite3V
9310: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
9320: 49 6e 74 65 67 65 72 2c 20 69 4c 69 6d 69 74 2c  Integer, iLimit,
9330: 20 31 29 3b 0a 20 20 20 20 61 64 64 72 20 3d 20   1);.    addr = 
9340: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
9350: 31 28 76 2c 20 4f 50 5f 49 6e 63 72 56 61 63 75  1(v, OP_IncrVacu
9360: 75 6d 2c 20 69 44 62 29 3b 0a 20 20 20 20 73 71  um, iDb);.    sq
9370: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28  lite3VdbeAddOp1(
9380: 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c  v, OP_ResultRow,
9390: 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   1);.    sqlite3
93a0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
93b0: 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b  _AddImm, 1, -1);
93c0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
93d0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 66 50  AddOp2(v, OP_IfP
93e0: 6f 73 2c 20 31 2c 20 61 64 64 72 29 3b 0a 20 20  os, 1, addr);.  
93f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
9400: 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a  pHere(v, addr);.
9410: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
9420: 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53  endif..#ifndef S
9430: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
9440: 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20  _PRAGMAS.  /*.  
9450: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
9460: 62 61 73 65 2e 5d 63 61 63 68 65 5f 73 69 7a 65  base.]cache_size
9470: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
9480: 61 74 61 62 61 73 65 2e 5d 63 61 63 68 65 5f 73  atabase.]cache_s
9490: 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ize=N.  **.  ** 
94a0: 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72  The first form r
94b0: 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65  eports the curre
94c0: 6e 74 20 6c 6f 63 61 6c 20 73 65 74 74 69 6e 67  nt local setting
94d0: 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70 61   for the.  ** pa
94e0: 67 65 20 63 61 63 68 65 20 73 69 7a 65 2e 20 54  ge cache size. T
94f0: 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73  he second form s
9500: 65 74 73 20 74 68 65 20 6c 6f 63 61 6c 0a 20 20  ets the local.  
9510: 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69  ** page cache si
9520: 7a 65 20 76 61 6c 75 65 2e 20 20 49 66 20 4e 20  ze value.  If N 
9530: 69 73 20 70 6f 73 69 74 69 76 65 20 74 68 65 6e  is positive then
9540: 20 74 68 61 74 20 69 73 20 74 68 65 0a 20 20 2a   that is the.  *
9550: 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  * number of page
9560: 73 20 69 6e 20 74 68 65 20 63 61 63 68 65 2e 20  s in the cache. 
9570: 20 49 66 20 4e 20 69 73 20 6e 65 67 61 74 69 76   If N is negativ
9580: 65 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a  e, then the.  **
9590: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
95a0: 20 69 73 20 61 64 6a 75 73 74 65 64 20 73 6f 20   is adjusted so 
95b0: 74 68 61 74 20 74 68 65 20 63 61 63 68 65 20 75  that the cache u
95c0: 73 65 73 20 2d 4e 20 6b 69 62 69 62 79 74 65 73  ses -N kibibytes
95d0: 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f 72 79 2e  .  ** of memory.
95e0: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
95f0: 67 54 79 70 5f 43 41 43 48 45 5f 53 49 5a 45 3a  gTyp_CACHE_SIZE:
9600: 20 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73   {.    assert( s
9610: 71 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65  qlite3SchemaMute
9620: 78 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30  xHeld(db, iDb, 0
9630: 29 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52  ) );.    if( !zR
9640: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65  ight ){.      re
9650: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50  turnSingleInt(pP
9660: 61 72 73 65 2c 20 22 63 61 63 68 65 5f 73 69 7a  arse, "cache_siz
9670: 65 22 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61  e", pDb->pSchema
9680: 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20  ->cache_size);. 
9690: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
96a0: 69 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74  int size = sqlit
96b0: 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a  e3Atoi(zRight);.
96c0: 20 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65        pDb->pSche
96d0: 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d  ma->cache_size =
96e0: 20 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c   size;.      sql
96f0: 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68  ite3BtreeSetCach
9700: 65 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20  eSize(pDb->pBt, 
9710: 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61  pDb->pSchema->ca
9720: 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d  che_size);.    }
9730: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
9740: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
9750: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6d 6d  MA [database.]mm
9760: 61 70 5f 73 69 7a 65 28 4e 29 0a 20 20 2a 2a 0a  ap_size(N).  **.
9770: 20 20 2a 2a 20 55 73 65 64 20 74 6f 20 73 65 74    ** Used to set
9780: 20 6d 61 70 70 69 6e 67 20 73 69 7a 65 20 6c 69   mapping size li
9790: 6d 69 74 2e 20 54 68 65 20 6d 61 70 70 69 6e 67  mit. The mapping
97a0: 20 73 69 7a 65 20 6c 69 6d 69 74 20 69 73 0a 20   size limit is. 
97b0: 20 2a 2a 20 75 73 65 64 20 74 6f 20 6c 69 6d 69   ** used to limi
97c0: 74 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20  t the aggregate 
97d0: 73 69 7a 65 20 6f 66 20 61 6c 6c 20 6d 65 6d 6f  size of all memo
97e0: 72 79 20 6d 61 70 70 65 64 20 72 65 67 69 6f 6e  ry mapped region
97f0: 73 20 6f 66 20 74 68 65 0a 20 20 2a 2a 20 64 61  s of the.  ** da
9800: 74 61 62 61 73 65 20 66 69 6c 65 2e 20 49 66 20  tabase file. If 
9810: 74 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 69  this parameter i
9820: 73 20 73 65 74 20 74 6f 20 7a 65 72 6f 2c 20 74  s set to zero, t
9830: 68 65 6e 20 6d 65 6d 6f 72 79 20 6d 61 70 70 69  hen memory mappi
9840: 6e 67 0a 20 20 2a 2a 20 69 73 20 6e 6f 74 20 75  ng.  ** is not u
9850: 73 65 64 20 61 74 20 61 6c 6c 2e 20 20 49 66 20  sed at all.  If 
9860: 4e 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20 74  N is negative, t
9870: 68 65 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20  hen the default 
9880: 6d 65 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20  memory map.  ** 
9890: 6c 69 6d 69 74 20 64 65 74 65 72 6d 69 6e 65 64  limit determined
98a0: 20 62 79 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66   by sqlite3_conf
98b0: 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47  ig(SQLITE_CONFIG
98c0: 5f 4d 4d 41 50 5f 53 49 5a 45 29 20 69 73 20 73  _MMAP_SIZE) is s
98d0: 65 74 2e 0a 20 20 2a 2a 20 54 68 65 20 70 61 72  et..  ** The par
98e0: 61 6d 65 74 65 72 20 4e 20 69 73 20 6d 65 61 73  ameter N is meas
98f0: 75 72 65 64 20 69 6e 20 62 79 74 65 73 2e 0a 20  ured in bytes.. 
9900: 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 76 61   **.  ** This va
9910: 6c 75 65 20 69 73 20 61 64 76 69 73 6f 72 79 2e  lue is advisory.
9920: 20 20 54 68 65 20 75 6e 64 65 72 6c 79 69 6e 67    The underlying
9930: 20 56 46 53 20 69 73 20 66 72 65 65 20 74 6f 20   VFS is free to 
9940: 6d 65 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20  memory map.  ** 
9950: 61 73 20 6c 69 74 74 6c 65 20 6f 72 20 61 73 20  as little or as 
9960: 6d 75 63 68 20 61 73 20 69 74 20 77 61 6e 74 73  much as it wants
9970: 2e 20 20 45 78 63 65 70 74 2c 20 69 66 20 4e 20  .  Except, if N 
9980: 69 73 20 73 65 74 20 74 6f 20 30 20 74 68 65 6e  is set to 0 then
9990: 20 74 68 65 0a 20 20 2a 2a 20 75 70 70 65 72 20   the.  ** upper 
99a0: 6c 61 79 65 72 73 20 77 69 6c 6c 20 6e 65 76 65  layers will neve
99b0: 72 20 69 6e 76 6f 6b 65 20 74 68 65 20 78 46 65  r invoke the xFe
99c0: 74 63 68 20 69 6e 74 65 72 66 61 63 65 73 20 74  tch interfaces t
99d0: 6f 20 74 68 65 20 56 46 53 2e 0a 20 20 2a 2f 0a  o the VFS..  */.
99e0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4d    case PragTyp_M
99f0: 4d 41 50 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20  MAP_SIZE: {.    
9a00: 73 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a  sqlite3_int64 sz
9a10: 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58  ;.#if SQLITE_MAX
9a20: 5f 4d 4d 41 50 5f 53 49 5a 45 3e 30 0a 20 20 20  _MMAP_SIZE>0.   
9a30: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
9a40: 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
9a50: 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20  db, iDb, 0) );. 
9a60: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
9a70: 0a 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20  .      int ii;. 
9a80: 20 20 20 20 20 73 71 6c 69 74 65 33 41 74 6f 69       sqlite3Atoi
9a90: 36 34 28 7a 52 69 67 68 74 2c 20 26 73 7a 2c 20  64(zRight, &sz, 
9aa0: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
9ab0: 7a 52 69 67 68 74 29 2c 20 53 51 4c 49 54 45 5f  zRight), SQLITE_
9ac0: 55 54 46 38 29 3b 0a 20 20 20 20 20 20 69 66 28  UTF8);.      if(
9ad0: 20 73 7a 3c 30 20 29 20 73 7a 20 3d 20 73 71 6c   sz<0 ) sz = sql
9ae0: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
9af0: 2e 73 7a 4d 6d 61 70 3b 0a 20 20 20 20 20 20 69  .szMmap;.      i
9b00: 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 20  f( pId2->n==0 ) 
9b10: 64 62 2d 3e 73 7a 4d 6d 61 70 20 3d 20 73 7a 3b  db->szMmap = sz;
9b20: 0a 20 20 20 20 20 20 66 6f 72 28 69 69 3d 64 62  .      for(ii=db
9b30: 2d 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20  ->nDb-1; ii>=0; 
9b40: 69 69 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 69  ii--){.        i
9b50: 66 28 20 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  f( db->aDb[ii].p
9b60: 42 74 20 26 26 20 28 69 69 3d 3d 69 44 62 20 7c  Bt && (ii==iDb |
9b70: 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b  | pId2->n==0) ){
9b80: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
9b90: 65 33 42 74 72 65 65 53 65 74 4d 6d 61 70 4c 69  e3BtreeSetMmapLi
9ba0: 6d 69 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  mit(db->aDb[ii].
9bb0: 70 42 74 2c 20 73 7a 29 3b 0a 20 20 20 20 20 20  pBt, sz);.      
9bc0: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
9bd0: 7d 0a 20 20 20 20 73 7a 20 3d 20 2d 31 3b 0a 20  }.    sz = -1;. 
9be0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
9bf0: 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c  file_control(db,
9c00: 20 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e   zDb, SQLITE_FCN
9c10: 54 4c 5f 4d 4d 41 50 5f 53 49 5a 45 2c 20 26 73  TL_MMAP_SIZE, &s
9c20: 7a 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 73 7a  z);.#else.    sz
9c30: 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 53   = 0;.    rc = S
9c40: 51 4c 49 54 45 5f 4f 4b 3b 0a 23 65 6e 64 69 66  QLITE_OK;.#endif
9c50: 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
9c60: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
9c70: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
9c80: 70 50 61 72 73 65 2c 20 22 6d 6d 61 70 5f 73 69  pParse, "mmap_si
9c90: 7a 65 22 2c 20 73 7a 29 3b 0a 20 20 20 20 7d 65  ze", sz);.    }e
9ca0: 6c 73 65 20 69 66 28 20 72 63 21 3d 53 51 4c 49  lse if( rc!=SQLI
9cb0: 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a 20  TE_NOTFOUND ){. 
9cc0: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 45 72       pParse->nEr
9cd0: 72 2b 2b 3b 0a 20 20 20 20 20 20 70 50 61 72 73  r++;.      pPars
9ce0: 65 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20  e->rc = rc;.    
9cf0: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
9d00: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  ..  /*.  **   PR
9d10: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 0a  AGMA temp_store.
9d20: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 65    **   PRAGMA te
9d30: 6d 70 5f 73 74 6f 72 65 20 3d 20 22 64 65 66 61  mp_store = "defa
9d40: 75 6c 74 22 7c 22 6d 65 6d 6f 72 79 22 7c 22 66  ult"|"memory"|"f
9d50: 69 6c 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52  ile".  **.  ** R
9d60: 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65  eturn or set the
9d70: 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20   local value of 
9d80: 74 68 65 20 74 65 6d 70 5f 73 74 6f 72 65 20 66  the temp_store f
9d90: 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20  lag.  Changing. 
9da0: 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20 76 61   ** the local va
9db0: 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b  lue does not mak
9dc0: 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65  e changes to the
9dd0: 20 64 69 73 6b 20 66 69 6c 65 20 61 6e 64 20 74   disk file and t
9de0: 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20  he default.  ** 
9df0: 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65  value will be re
9e00: 73 74 6f 72 65 64 20 74 68 65 20 6e 65 78 74 20  stored the next 
9e10: 74 69 6d 65 20 74 68 65 20 64 61 74 61 62 61 73  time the databas
9e20: 65 20 69 73 20 6f 70 65 6e 65 64 2e 0a 20 20 2a  e is opened..  *
9e30: 2a 0a 20 20 2a 2a 20 4e 6f 74 65 20 74 68 61 74  *.  ** Note that
9e40: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
9e50: 66 6f 72 20 74 68 65 20 6c 69 62 72 61 72 79 20  for the library 
9e60: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
9e70: 69 6f 6e 73 20 74 6f 0a 20 20 2a 2a 20 6f 76 65  ions to.  ** ove
9e80: 72 72 69 64 65 20 74 68 69 73 20 73 65 74 74 69  rride this setti
9e90: 6e 67 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  ng.  */.  case P
9ea0: 72 61 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52  ragTyp_TEMP_STOR
9eb0: 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52  E: {.    if( !zR
9ec0: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65  ight ){.      re
9ed0: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50  turnSingleInt(pP
9ee0: 61 72 73 65 2c 20 22 74 65 6d 70 5f 73 74 6f 72  arse, "temp_stor
9ef0: 65 22 2c 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f  e", db->temp_sto
9f00: 72 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  re);.    }else{.
9f10: 20 20 20 20 20 20 63 68 61 6e 67 65 54 65 6d 70        changeTemp
9f20: 53 74 6f 72 61 67 65 28 70 50 61 72 73 65 2c 20  Storage(pParse, 
9f30: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 7d 0a 20  zRight);.    }. 
9f40: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
9f50: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
9f60: 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  A temp_store_dir
9f70: 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52  ectory.  **   PR
9f80: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f  AGMA temp_store_
9f90: 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22  directory = ""|"
9fa0: 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a  directory_name".
9fb0: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
9fc0: 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61   or set the loca
9fd0: 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 74  l value of the t
9fe0: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
9ff0: 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ory flag.  Chang
a000: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c  ing.  ** the val
a010: 75 65 20 73 65 74 73 20 61 20 73 70 65 63 69 66  ue sets a specif
a020: 69 63 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20  ic directory to 
a030: 62 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70  be used for temp
a040: 6f 72 61 72 79 20 66 69 6c 65 73 2e 0a 20 20 2a  orary files..  *
a050: 2a 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e  * Setting to a n
a060: 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72  ull string rever
a070: 74 73 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c  ts to the defaul
a080: 74 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65  t temporary dire
a090: 63 74 6f 72 79 20 73 65 61 72 63 68 2e 0a 20 20  ctory search..  
a0a0: 2a 2a 20 49 66 20 74 65 6d 70 6f 72 61 72 79 20  ** If temporary 
a0b0: 64 69 72 65 63 74 6f 72 79 20 69 73 20 63 68 61  directory is cha
a0c0: 6e 67 65 64 2c 20 74 68 65 6e 20 69 6e 76 61 6c  nged, then inval
a0d0: 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65  idateTempStorage
a0e0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61  ..  **.  */.  ca
a0f0: 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f  se PragTyp_TEMP_
a100: 53 54 4f 52 45 5f 44 49 52 45 43 54 4f 52 59 3a  STORE_DIRECTORY:
a110: 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67   {.    if( !zRig
a120: 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ht ){.      if( 
a130: 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72  sqlite3_temp_dir
a140: 65 63 74 6f 72 79 20 29 7b 0a 20 20 20 20 20 20  ectory ){.      
a150: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
a160: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
a170: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
a180: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
a190: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
a1a0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 74   .            "t
a1b0: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
a1c0: 6f 72 79 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ory", SQLITE_STA
a1d0: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71  TIC);.        sq
a1e0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
a1f0: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
a200: 2c 20 31 2c 20 30 2c 20 73 71 6c 69 74 65 33 5f  , 1, 0, sqlite3_
a210: 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 2c 20  temp_directory, 
a220: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
a230: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
a240: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
a250: 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 1);.      }.  
a260: 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66    }else{.#ifndef
a270: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
a280: 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68  .      if( zRigh
a290: 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  t[0] ){.        
a2a0: 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20 20 20  int res;.       
a2b0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41   rc = sqlite3OsA
a2c0: 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20  ccess(db->pVfs, 
a2d0: 7a 52 69 67 68 74 2c 20 53 51 4c 49 54 45 5f 41  zRight, SQLITE_A
a2e0: 43 43 45 53 53 5f 52 45 41 44 57 52 49 54 45 2c  CCESS_READWRITE,
a2f0: 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
a300: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
a310: 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20  K || res==0 ){. 
a320: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
a330: 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c  ErrorMsg(pParse,
a340: 20 22 6e 6f 74 20 61 20 77 72 69 74 61 62 6c 65   "not a writable
a350: 20 64 69 72 65 63 74 6f 72 79 22 29 3b 0a 20 20   directory");.  
a360: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61          goto pra
a370: 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20  gma_out;.       
a380: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
a390: 20 69 66 28 20 53 51 4c 49 54 45 5f 54 45 4d 50   if( SQLITE_TEMP
a3a0: 5f 53 54 4f 52 45 3d 3d 30 0a 20 20 20 20 20 20  _STORE==0.      
a3b0: 20 7c 7c 20 28 53 51 4c 49 54 45 5f 54 45 4d 50   || (SQLITE_TEMP
a3c0: 5f 53 54 4f 52 45 3d 3d 31 20 26 26 20 64 62 2d  _STORE==1 && db-
a3d0: 3e 74 65 6d 70 5f 73 74 6f 72 65 3c 3d 31 29 0a  >temp_store<=1).
a3e0: 20 20 20 20 20 20 20 7c 7c 20 28 53 51 4c 49 54         || (SQLIT
a3f0: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 32 20  E_TEMP_STORE==2 
a400: 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  && db->temp_stor
a410: 65 3d 3d 31 29 0a 20 20 20 20 20 20 29 7b 0a 20  e==1).      ){. 
a420: 20 20 20 20 20 20 20 69 6e 76 61 6c 69 64 61 74         invalidat
a430: 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70 50 61  eTempStorage(pPa
a440: 72 73 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rse);.      }.  
a450: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
a460: 28 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69  (sqlite3_temp_di
a470: 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20 20 20  rectory);.      
a480: 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b  if( zRight[0] ){
a490: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
a4a0: 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20  _temp_directory 
a4b0: 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
a4c0: 66 28 22 25 73 22 2c 20 7a 52 69 67 68 74 29 3b  f("%s", zRight);
a4d0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
a4e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 74 65        sqlite3_te
a4f0: 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 30  mp_directory = 0
a500: 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66  ;.      }.#endif
a510: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
a520: 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20  WSD */.    }.   
a530: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66   break;.  }..#if
a540: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 0a 20   SQLITE_OS_WIN. 
a550: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
a560: 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72  A data_store_dir
a570: 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52  ectory.  **   PR
a580: 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f  AGMA data_store_
a590: 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22  directory = ""|"
a5a0: 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a  directory_name".
a5b0: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
a5c0: 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61   or set the loca
a5d0: 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64  l value of the d
a5e0: 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  ata_store_direct
a5f0: 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ory flag.  Chang
a600: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c  ing.  ** the val
a610: 75 65 20 73 65 74 73 20 61 20 73 70 65 63 69 66  ue sets a specif
a620: 69 63 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20  ic directory to 
a630: 62 65 20 75 73 65 64 20 66 6f 72 20 64 61 74 61  be used for data
a640: 62 61 73 65 20 66 69 6c 65 73 20 74 68 61 74 0a  base files that.
a650: 20 20 2a 2a 20 77 65 72 65 20 73 70 65 63 69 66    ** were specif
a660: 69 65 64 20 77 69 74 68 20 61 20 72 65 6c 61 74  ied with a relat
a670: 69 76 65 20 70 61 74 68 6e 61 6d 65 2e 20 20 53  ive pathname.  S
a680: 65 74 74 69 6e 67 20 74 6f 20 61 20 6e 75 6c 6c  etting to a null
a690: 20 73 74 72 69 6e 67 20 72 65 76 65 72 74 73 0a   string reverts.
a6a0: 20 20 2a 2a 20 74 6f 20 74 68 65 20 64 65 66 61    ** to the defa
a6b0: 75 6c 74 20 64 61 74 61 62 61 73 65 20 64 69 72  ult database dir
a6c0: 65 63 74 6f 72 79 2c 20 77 68 69 63 68 20 66 6f  ectory, which fo
a6d0: 72 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  r database files
a6e0: 20 73 70 65 63 69 66 69 65 64 20 77 69 74 68 0a   specified with.
a6f0: 20 20 2a 2a 20 61 20 72 65 6c 61 74 69 76 65 20    ** a relative 
a700: 70 61 74 68 20 77 69 6c 6c 20 70 72 6f 62 61 62  path will probab
a710: 6c 79 20 62 65 20 62 61 73 65 64 20 6f 6e 20 74  ly be based on t
a720: 68 65 20 63 75 72 72 65 6e 74 20 64 69 72 65 63  he current direc
a730: 74 6f 72 79 20 66 6f 72 20 74 68 65 0a 20 20 2a  tory for the.  *
a740: 2a 20 70 72 6f 63 65 73 73 2e 20 20 44 61 74 61  * process.  Data
a750: 62 61 73 65 20 66 69 6c 65 20 73 70 65 63 69 66  base file specif
a760: 69 65 64 20 77 69 74 68 20 61 6e 20 61 62 73 6f  ied with an abso
a770: 6c 75 74 65 20 70 61 74 68 20 61 72 65 20 6e 6f  lute path are no
a780: 74 20 69 6d 70 61 63 74 65 64 0a 20 20 2a 2a 20  t impacted.  ** 
a790: 62 79 20 74 68 69 73 20 73 65 74 74 69 6e 67 2c  by this setting,
a7a0: 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 69   regardless of i
a7b0: 74 73 20 76 61 6c 75 65 2e 0a 20 20 2a 2a 0a 20  ts value..  **. 
a7c0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
a7d0: 79 70 5f 44 41 54 41 5f 53 54 4f 52 45 5f 44 49  yp_DATA_STORE_DI
a7e0: 52 45 43 54 4f 52 59 3a 20 7b 0a 20 20 20 20 69  RECTORY: {.    i
a7f0: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
a800: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
a810: 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79 20 29  data_directory )
a820: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
a830: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
a840: 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73  v, 1);.        s
a850: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
a860: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
a870: 4d 45 5f 4e 41 4d 45 2c 20 0a 20 20 20 20 20 20  ME_NAME, .      
a880: 20 20 20 20 20 20 22 64 61 74 61 5f 73 74 6f 72        "data_stor
a890: 65 5f 64 69 72 65 63 74 6f 72 79 22 2c 20 53 51  e_directory", SQ
a8a0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
a8b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
a8c0: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
a8d0: 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20  ring8, 0, 1, 0, 
a8e0: 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72  sqlite3_data_dir
a8f0: 65 63 74 6f 72 79 2c 20 30 29 3b 0a 20 20 20 20  ectory, 0);.    
a900: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
a910: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
a920: 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20  ltRow, 1, 1);.  
a930: 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
a940: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
a950: 4f 4d 49 54 5f 57 53 44 0a 20 20 20 20 20 20 69  OMIT_WSD.      i
a960: 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a  f( zRight[0] ){.
a970: 20 20 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b          int res;
a980: 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
a990: 6c 69 74 65 33 4f 73 41 63 63 65 73 73 28 64 62  lite3OsAccess(db
a9a0: 2d 3e 70 56 66 73 2c 20 7a 52 69 67 68 74 2c 20  ->pVfs, zRight, 
a9b0: 53 51 4c 49 54 45 5f 41 43 43 45 53 53 5f 52 45  SQLITE_ACCESS_RE
a9c0: 41 44 57 52 49 54 45 2c 20 26 72 65 73 29 3b 0a  ADWRITE, &res);.
a9d0: 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
a9e0: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73  SQLITE_OK || res
a9f0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
aa00: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
aa10: 28 70 50 61 72 73 65 2c 20 22 6e 6f 74 20 61 20  (pParse, "not a 
aa20: 77 72 69 74 61 62 6c 65 20 64 69 72 65 63 74 6f  writable directo
aa30: 72 79 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ry");.          
aa40: 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b  goto pragma_out;
aa50: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
aa60: 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
aa70: 5f 66 72 65 65 28 73 71 6c 69 74 65 33 5f 64 61  _free(sqlite3_da
aa80: 74 61 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20  ta_directory);. 
aa90: 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b       if( zRight[
aaa0: 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  0] ){.        sq
aab0: 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63  lite3_data_direc
aac0: 74 6f 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d  tory = sqlite3_m
aad0: 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 52 69  printf("%s", zRi
aae0: 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ght);.      }els
aaf0: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
ab00: 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72  e3_data_director
ab10: 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23  y = 0;.      }.#
ab20: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
ab30: 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20  OMIT_WSD */.    
ab40: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
ab50: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c  .#endif..#if SQL
ab60: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
ab70: 4e 47 5f 53 54 59 4c 45 0a 20 20 2f 2a 0a 20 20  NG_STYLE.  /*.  
ab80: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74  **   PRAGMA [dat
ab90: 61 62 61 73 65 2e 5d 6c 6f 63 6b 5f 70 72 6f 78  abase.]lock_prox
aba0: 79 5f 66 69 6c 65 0a 20 20 2a 2a 20 20 20 50 52  y_file.  **   PR
abb0: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
abc0: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 20  lock_proxy_file 
abd0: 3d 20 22 3a 61 75 74 6f 3a 22 7c 22 6c 6f 63 6b  = ":auto:"|"lock
abe0: 5f 66 69 6c 65 5f 70 61 74 68 22 0a 20 20 2a 2a  _file_path".  **
abf0: 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20  .  ** Return or 
ac00: 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  set the value of
ac10: 20 74 68 65 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f   the lock_proxy_
ac20: 66 69 6c 65 20 66 6c 61 67 2e 20 20 43 68 61 6e  file flag.  Chan
ac30: 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61  ging.  ** the va
ac40: 6c 75 65 20 73 65 74 73 20 61 20 73 70 65 63 69  lue sets a speci
ac50: 66 69 63 20 66 69 6c 65 20 74 6f 20 62 65 20 75  fic file to be u
ac60: 73 65 64 20 66 6f 72 20 64 61 74 61 62 61 73 65  sed for database
ac70: 20 61 63 63 65 73 73 20 6c 6f 63 6b 73 2e 0a 20   access locks.. 
ac80: 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20   **.  */.  case 
ac90: 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 50 52 4f  PragTyp_LOCK_PRO
aca0: 58 59 5f 46 49 4c 45 3a 20 7b 0a 20 20 20 20 69  XY_FILE: {.    i
acb0: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
acc0: 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65      Pager *pPage
acd0: 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  r = sqlite3Btree
ace0: 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b  Pager(pDb->pBt);
acf0: 0a 20 20 20 20 20 20 63 68 61 72 20 2a 70 72 6f  .      char *pro
ad00: 78 79 5f 66 69 6c 65 5f 70 61 74 68 20 3d 20 4e  xy_file_path = N
ad10: 55 4c 4c 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ULL;.      sqlit
ad20: 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20 3d  e3_file *pFile =
ad30: 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c   sqlite3PagerFil
ad40: 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20  e(pPager);.     
ad50: 20 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f   sqlite3OsFileCo
ad60: 6e 74 72 6f 6c 48 69 6e 74 28 70 46 69 6c 65 2c  ntrolHint(pFile,
ad70: 20 53 51 4c 49 54 45 5f 47 45 54 5f 4c 4f 43 4b   SQLITE_GET_LOCK
ad80: 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20  PROXYFILE, .    
ad90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ada0: 20 20 20 20 20 20 20 26 70 72 6f 78 79 5f 66 69         &proxy_fi
adb0: 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20 20 20 20  le_path);.      
adc0: 0a 20 20 20 20 20 20 69 66 28 20 70 72 6f 78 79  .      if( proxy
add0: 5f 66 69 6c 65 5f 70 61 74 68 20 29 7b 0a 20 20  _file_path ){.  
ade0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
adf0: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
ae00: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
ae10: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
ae20: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
ae30: 41 4d 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20  AME, .          
ae40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae50: 20 20 20 20 22 6c 6f 63 6b 5f 70 72 6f 78 79 5f      "lock_proxy_
ae60: 66 69 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  file", SQLITE_ST
ae70: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73  ATIC);.        s
ae80: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
ae90: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
aea0: 30 2c 20 31 2c 20 30 2c 20 70 72 6f 78 79 5f 66  0, 1, 0, proxy_f
aeb0: 69 6c 65 5f 70 61 74 68 2c 20 30 29 3b 0a 20 20  ile_path, 0);.  
aec0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
aed0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
aee0: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a  sultRow, 1, 1);.
aef0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
af00: 65 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20 2a  e{.      Pager *
af10: 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33  pPager = sqlite3
af20: 42 74 72 65 65 50 61 67 65 72 28 70 44 62 2d 3e  BtreePager(pDb->
af30: 70 42 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  pBt);.      sqli
af40: 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20  te3_file *pFile 
af50: 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69  = sqlite3PagerFi
af60: 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20  le(pPager);.    
af70: 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20    int res;.     
af80: 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29   if( zRight[0] )
af90: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d 73 71  {.        res=sq
afa0: 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72  lite3OsFileContr
afb0: 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45  ol(pFile, SQLITE
afc0: 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49  _SET_LOCKPROXYFI
afd0: 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  LE, .           
afe0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aff0: 20 20 20 20 20 20 20 20 20 20 7a 52 69 67 68 74            zRight
b000: 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  );.      } else 
b010: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d 73 71  {.        res=sq
b020: 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72  lite3OsFileContr
b030: 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45  ol(pFile, SQLITE
b040: 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49  _SET_LOCKPROXYFI
b050: 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  LE, .           
b060: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b070: 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 29 3b            NULL);
b080: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
b090: 66 28 20 72 65 73 21 3d 53 51 4c 49 54 45 5f 4f  f( res!=SQLITE_O
b0a0: 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  K ){.        sql
b0b0: 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61  ite3ErrorMsg(pPa
b0c0: 72 73 65 2c 20 22 66 61 69 6c 65 64 20 74 6f 20  rse, "failed to 
b0d0: 73 65 74 20 6c 6f 63 6b 20 70 72 6f 78 79 20 66  set lock proxy f
b0e0: 69 6c 65 22 29 3b 0a 20 20 20 20 20 20 20 20 67  ile");.        g
b0f0: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
b100: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
b110: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
b120: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e  dif /* SQLITE_EN
b130: 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59  ABLE_LOCKING_STY
b140: 4c 45 20 2a 2f 20 20 20 20 20 20 0a 20 20 20 20  LE */      .    
b150: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
b160: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73  GMA [database.]s
b170: 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20  ynchronous.  ** 
b180: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
b190: 73 65 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 3d  se.]synchronous=
b1a0: 4f 46 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c 7c 46 55  OFF|ON|NORMAL|FU
b1b0: 4c 4c 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  LL.  **.  ** Ret
b1c0: 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c  urn or set the l
b1d0: 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68  ocal value of th
b1e0: 65 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 66 6c  e synchronous fl
b1f0: 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20  ag.  Changing.  
b200: 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c  ** the local val
b210: 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65  ue does not make
b220: 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20   changes to the 
b230: 64 69 73 6b 20 66 69 6c 65 20 61 6e 64 20 74 68  disk file and th
b240: 65 0a 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 76  e.  ** default v
b250: 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65 73  alue will be res
b260: 74 6f 72 65 64 20 74 68 65 20 6e 65 78 74 20 74  tored the next t
b270: 69 6d 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ime the database
b280: 20 69 73 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 2e   is.  ** opened.
b290: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
b2a0: 67 54 79 70 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  gTyp_SYNCHRONOUS
b2b0: 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69  : {.    if( !zRi
b2c0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ght ){.      ret
b2d0: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
b2e0: 72 73 65 2c 20 22 73 79 6e 63 68 72 6f 6e 6f 75  rse, "synchronou
b2f0: 73 22 2c 20 70 44 62 2d 3e 73 61 66 65 74 79 5f  s", pDb->safety_
b300: 6c 65 76 65 6c 2d 31 29 3b 0a 20 20 20 20 7d 65  level-1);.    }e
b310: 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 21  lse{.      if( !
b320: 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
b330: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
b340: 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65  3ErrorMsg(pParse
b350: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  , .            "
b360: 53 61 66 65 74 79 20 6c 65 76 65 6c 20 6d 61 79  Safety level may
b370: 20 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20   not be changed 
b380: 69 6e 73 69 64 65 20 61 20 74 72 61 6e 73 61 63  inside a transac
b390: 74 69 6f 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65  tion");.      }e
b3a0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 44 62  lse{.        pDb
b3b0: 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d  ->safety_level =
b3c0: 20 67 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28   getSafetyLevel(
b3d0: 7a 52 69 67 68 74 2c 30 2c 31 29 2b 31 3b 0a 20  zRight,0,1)+1;. 
b3e0: 20 20 20 20 20 20 20 73 65 74 41 6c 6c 50 61 67         setAllPag
b3f0: 65 72 46 6c 61 67 73 28 64 62 29 3b 0a 20 20 20  erFlags(db);.   
b400: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62     }.    }.    b
b410: 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
b420: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
b430: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f  PAGER_PRAGMAS */
b440: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
b450: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
b460: 41 53 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  AS.  case PragTy
b470: 70 5f 46 4c 41 47 3a 20 7b 0a 20 20 20 20 69 66  p_FLAG: {.    if
b480: 28 20 7a 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20  ( zRight==0 ){. 
b490: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
b4a0: 65 49 6e 74 28 70 50 61 72 73 65 2c 20 61 50 72  eInt(pParse, aPr
b4b0: 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 7a  agmaNames[mid].z
b4c0: 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20  Name,.          
b4d0: 20 20 20 20 20 20 20 20 20 20 20 28 64 62 2d 3e             (db->
b4e0: 66 6c 61 67 73 20 26 20 61 50 72 61 67 6d 61 4e  flags & aPragmaN
b4f0: 61 6d 65 73 5b 6d 69 64 5d 2e 69 41 72 67 29 21  ames[mid].iArg)!
b500: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =0 );.    }else{
b510: 0a 20 20 20 20 20 20 69 6e 74 20 6d 61 73 6b 20  .      int mask 
b520: 3d 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d  = aPragmaNames[m
b530: 69 64 5d 2e 69 41 72 67 3b 20 20 20 20 2f 2a 20  id].iArg;    /* 
b540: 4d 61 73 6b 20 6f 66 20 62 69 74 73 20 74 6f 20  Mask of bits to 
b550: 73 65 74 20 6f 72 20 63 6c 65 61 72 2e 20 2a 2f  set or clear. */
b560: 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61  .      if( db->a
b570: 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 7b 0a  utoCommit==0 ){.
b580: 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 65 69          /* Forei
b590: 67 6e 20 6b 65 79 20 73 75 70 70 6f 72 74 20 6d  gn key support m
b5a0: 61 79 20 6e 6f 74 20 62 65 20 65 6e 61 62 6c 65  ay not be enable
b5b0: 64 20 6f 72 20 64 69 73 61 62 6c 65 64 20 77 68  d or disabled wh
b5c0: 69 6c 65 20 6e 6f 74 0a 20 20 20 20 20 20 20 20  ile not.        
b5d0: 2a 2a 20 69 6e 20 61 75 74 6f 2d 63 6f 6d 6d 69  ** in auto-commi
b5e0: 74 20 6d 6f 64 65 2e 20 20 2a 2f 0a 20 20 20 20  t mode.  */.    
b5f0: 20 20 20 20 6d 61 73 6b 20 26 3d 20 7e 28 53 51      mask &= ~(SQ
b600: 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73  LITE_ForeignKeys
b610: 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20  );.      }..    
b620: 20 20 69 66 28 20 73 71 6c 69 74 65 33 47 65 74    if( sqlite3Get
b630: 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20  Boolean(zRight, 
b640: 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 64 62  0) ){.        db
b650: 2d 3e 66 6c 61 67 73 20 7c 3d 20 6d 61 73 6b 3b  ->flags |= mask;
b660: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
b670: 20 20 20 20 20 20 64 62 2d 3e 66 6c 61 67 73 20        db->flags 
b680: 26 3d 20 7e 6d 61 73 6b 3b 0a 20 20 20 20 20 20  &= ~mask;.      
b690: 20 20 69 66 28 20 6d 61 73 6b 3d 3d 53 51 4c 49    if( mask==SQLI
b6a0: 54 45 5f 44 65 66 65 72 46 4b 73 20 29 20 64 62  TE_DeferFKs ) db
b6b0: 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d 6d 43 6f  ->nDeferredImmCo
b6c0: 6e 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a  ns = 0;.      }.
b6d0: 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6e 79 20 6f  .      /* Many o
b6e0: 66 20 74 68 65 20 66 6c 61 67 2d 70 72 61 67 6d  f the flag-pragm
b6f0: 61 73 20 6d 6f 64 69 66 79 20 74 68 65 20 63 6f  as modify the co
b700: 64 65 20 67 65 6e 65 72 61 74 65 64 20 62 79 20  de generated by 
b710: 74 68 65 20 53 51 4c 20 0a 20 20 20 20 20 20 2a  the SQL .      *
b720: 2a 20 63 6f 6d 70 69 6c 65 72 20 28 65 67 2e 20  * compiler (eg. 
b730: 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 29 2e 20  count_changes). 
b740: 53 6f 20 61 64 64 20 61 6e 20 6f 70 63 6f 64 65  So add an opcode
b750: 20 74 6f 20 65 78 70 69 72 65 20 61 6c 6c 0a 20   to expire all. 
b760: 20 20 20 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 64       ** compiled
b770: 20 53 51 4c 20 73 74 61 74 65 6d 65 6e 74 73 20   SQL statements 
b780: 61 66 74 65 72 20 6d 6f 64 69 66 79 69 6e 67 20  after modifying 
b790: 61 20 70 72 61 67 6d 61 20 76 61 6c 75 65 2e 0a  a pragma value..
b7a0: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 73        */.      s
b7b0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
b7c0: 28 76 2c 20 4f 50 5f 45 78 70 69 72 65 2c 20 30  (v, OP_Expire, 0
b7d0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 65 74 41  , 0);.      setA
b7e0: 6c 6c 50 61 67 65 72 46 6c 61 67 73 28 64 62 29  llPagerFlags(db)
b7f0: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65 61  ;.    }.    brea
b800: 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a  k;.  }.#endif /*
b810: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41   SQLITE_OMIT_FLA
b820: 47 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69  G_PRAGMAS */..#i
b830: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
b840: 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d 41 53  T_SCHEMA_PRAGMAS
b850: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
b860: 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66 6f 28 3c  GMA table_info(<
b870: 74 61 62 6c 65 3e 29 0a 20 20 2a 2a 0a 20 20 2a  table>).  **.  *
b880: 2a 20 52 65 74 75 72 6e 20 61 20 73 69 6e 67 6c  * Return a singl
b890: 65 20 72 6f 77 20 66 6f 72 20 65 61 63 68 20 63  e row for each c
b8a0: 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20 6e 61 6d  olumn of the nam
b8b0: 65 64 20 74 61 62 6c 65 2e 20 54 68 65 20 63 6f  ed table. The co
b8c0: 6c 75 6d 6e 73 20 6f 66 0a 20 20 2a 2a 20 74 68  lumns of.  ** th
b8d0: 65 20 72 65 74 75 72 6e 65 64 20 64 61 74 61 20  e returned data 
b8e0: 73 65 74 20 61 72 65 3a 0a 20 20 2a 2a 0a 20 20  set are:.  **.  
b8f0: 2a 2a 20 63 69 64 3a 20 20 20 20 20 20 20 20 43  ** cid:        C
b900: 6f 6c 75 6d 6e 20 69 64 20 28 6e 75 6d 62 65 72  olumn id (number
b910: 65 64 20 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20  ed from left to 
b920: 72 69 67 68 74 2c 20 73 74 61 72 74 69 6e 67 20  right, starting 
b930: 61 74 20 30 29 0a 20 20 2a 2a 20 6e 61 6d 65 3a  at 0).  ** name:
b940: 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 6e 61         Column na
b950: 6d 65 0a 20 20 2a 2a 20 74 79 70 65 3a 20 20 20  me.  ** type:   
b960: 20 20 20 20 43 6f 6c 75 6d 6e 20 64 65 63 6c 61      Column decla
b970: 72 61 74 69 6f 6e 20 74 79 70 65 2e 0a 20 20 2a  ration type..  *
b980: 2a 20 6e 6f 74 6e 75 6c 6c 3a 20 20 20 20 54 72  * notnull:    Tr
b990: 75 65 20 69 66 20 27 4e 4f 54 20 4e 55 4c 4c 27  ue if 'NOT NULL'
b9a0: 20 69 73 20 70 61 72 74 20 6f 66 20 63 6f 6c 75   is part of colu
b9b0: 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f 6e 0a 20  mn declaration. 
b9c0: 20 2a 2a 20 64 66 6c 74 5f 76 61 6c 75 65 3a 20   ** dflt_value: 
b9d0: 54 68 65 20 64 65 66 61 75 6c 74 20 76 61 6c 75  The default valu
b9e0: 65 20 66 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e  e for the column
b9f0: 2c 20 69 66 20 61 6e 79 2e 0a 20 20 2a 2f 0a 20  , if any..  */. 
ba00: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 41   case PragTyp_TA
ba10: 42 4c 45 5f 49 4e 46 4f 3a 20 69 66 28 20 7a 52  BLE_INFO: if( zR
ba20: 69 67 68 74 20 29 7b 0a 20 20 20 20 54 61 62 6c  ight ){.    Tabl
ba30: 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 54 61  e *pTab;.    pTa
ba40: 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 54  b = sqlite3FindT
ba50: 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68 74 2c  able(db, zRight,
ba60: 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70   zDb);.    if( p
ba70: 54 61 62 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  Tab ){.      int
ba80: 20 69 2c 20 6b 3b 0a 20 20 20 20 20 20 69 6e 74   i, k;.      int
ba90: 20 6e 48 69 64 64 65 6e 20 3d 20 30 3b 0a 20 20   nHidden = 0;.  
baa0: 20 20 20 20 43 6f 6c 75 6d 6e 20 2a 70 43 6f 6c      Column *pCol
bab0: 3b 0a 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70  ;.      Index *p
bac0: 50 6b 20 3d 20 73 71 6c 69 74 65 33 50 72 69 6d  Pk = sqlite3Prim
bad0: 61 72 79 4b 65 79 49 6e 64 65 78 28 70 54 61 62  aryKeyIndex(pTab
bae0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
baf0: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
bb00: 2c 20 36 29 3b 0a 20 20 20 20 20 20 70 50 61 72  , 6);.      pPar
bb10: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20  se->nMem = 6;.  
bb20: 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56      sqlite3CodeV
bb30: 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72  erifySchema(pPar
bb40: 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  se, iDb);.      
bb50: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
bb60: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
bb70: 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 69 64 22 2c  AME_NAME, "cid",
bb80: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
bb90: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
bba0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
bbb0: 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  1, COLNAME_NAME,
bbc0: 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f   "name", SQLITE_
bbd0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
bbe0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
bbf0: 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41  Name(v, 2, COLNA
bc00: 4d 45 5f 4e 41 4d 45 2c 20 22 74 79 70 65 22 2c  ME_NAME, "type",
bc10: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
bc20: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
bc30: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
bc40: 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  3, COLNAME_NAME,
bc50: 20 22 6e 6f 74 6e 75 6c 6c 22 2c 20 53 51 4c 49   "notnull", SQLI
bc60: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
bc70: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
bc80: 43 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c 20 43 4f  ColName(v, 4, CO
bc90: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 64 66 6c  LNAME_NAME, "dfl
bca0: 74 5f 76 61 6c 75 65 22 2c 20 53 51 4c 49 54 45  t_value", SQLITE
bcb0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
bcc0: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
bcd0: 6c 4e 61 6d 65 28 76 2c 20 35 2c 20 43 4f 4c 4e  lName(v, 5, COLN
bce0: 41 4d 45 5f 4e 41 4d 45 2c 20 22 70 6b 22 2c 20  AME_NAME, "pk", 
bcf0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
bd00: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 69 65        sqlite3Vie
bd10: 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28  wGetColumnNames(
bd20: 70 50 61 72 73 65 2c 20 70 54 61 62 29 3b 0a 20  pParse, pTab);. 
bd30: 20 20 20 20 20 66 6f 72 28 69 3d 30 2c 20 70 43       for(i=0, pC
bd40: 6f 6c 3d 70 54 61 62 2d 3e 61 43 6f 6c 3b 20 69  ol=pTab->aCol; i
bd50: 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20 69 2b 2b  <pTab->nCol; i++
bd60: 2c 20 70 43 6f 6c 2b 2b 29 7b 0a 20 20 20 20 20  , pCol++){.     
bd70: 20 20 20 69 66 28 20 49 73 48 69 64 64 65 6e 43     if( IsHiddenC
bd80: 6f 6c 75 6d 6e 28 70 43 6f 6c 29 20 29 7b 0a 20  olumn(pCol) ){. 
bd90: 20 20 20 20 20 20 20 20 20 6e 48 69 64 64 65 6e           nHidden
bda0: 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20 20 63 6f  ++;.          co
bdb0: 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20  ntinue;.        
bdc0: 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  }.        sqlite
bdd0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
bde0: 50 5f 49 6e 74 65 67 65 72 2c 20 69 2d 6e 48 69  P_Integer, i-nHi
bdf0: 64 64 65 6e 2c 20 31 29 3b 0a 20 20 20 20 20 20  dden, 1);.      
be00: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
be10: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
be20: 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70 43 6f 6c  8, 0, 2, 0, pCol
be30: 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20  ->zName, 0);.   
be40: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
be50: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
be60: 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20  ing8, 0, 3, 0,. 
be70: 20 20 20 20 20 20 20 20 20 20 70 43 6f 6c 2d 3e            pCol->
be80: 7a 54 79 70 65 20 3f 20 70 43 6f 6c 2d 3e 7a 54  zType ? pCol->zT
be90: 79 70 65 20 3a 20 22 22 2c 20 30 29 3b 0a 20 20  ype : "", 0);.  
bea0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
beb0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
bec0: 74 65 67 65 72 2c 20 28 70 43 6f 6c 2d 3e 6e 6f  teger, (pCol->no
bed0: 74 4e 75 6c 6c 20 3f 20 31 20 3a 20 30 29 2c 20  tNull ? 1 : 0), 
bee0: 34 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  4);.        if( 
bef0: 70 43 6f 6c 2d 3e 7a 44 66 6c 74 20 29 7b 0a 20  pCol->zDflt ){. 
bf00: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
bf10: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
bf20: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 35 2c 20  _String8, 0, 5, 
bf30: 30 2c 20 28 63 68 61 72 2a 29 70 43 6f 6c 2d 3e  0, (char*)pCol->
bf40: 7a 44 66 6c 74 2c 20 30 29 3b 0a 20 20 20 20 20  zDflt, 0);.     
bf50: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
bf60: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
bf70: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 75 6c 6c  ddOp2(v, OP_Null
bf80: 2c 20 30 2c 20 35 29 3b 0a 20 20 20 20 20 20 20  , 0, 5);.       
bf90: 20 7d 0a 20 20 20 20 20 20 20 20 69 66 28 20 28   }.        if( (
bfa0: 70 43 6f 6c 2d 3e 63 6f 6c 46 6c 61 67 73 20 26  pCol->colFlags &
bfb0: 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59   COLFLAG_PRIMKEY
bfc0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  )==0 ){.        
bfd0: 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 20    k = 0;.       
bfe0: 20 7d 65 6c 73 65 20 69 66 28 20 70 50 6b 3d 3d   }else if( pPk==
bff0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6b  0 ){.          k
c000: 20 3d 20 31 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 1;.        }e
c010: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 66  lse{.          f
c020: 6f 72 28 6b 3d 31 3b 20 41 4c 57 41 59 53 28 6b  or(k=1; ALWAYS(k
c030: 3c 3d 70 54 61 62 2d 3e 6e 43 6f 6c 29 20 26 26  <=pTab->nCol) &&
c040: 20 70 50 6b 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b   pPk->aiColumn[k
c050: 2d 31 5d 21 3d 69 3b 20 6b 2b 2b 29 7b 7d 0a 20  -1]!=i; k++){}. 
c060: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
c070: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c080: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
c090: 2c 20 6b 2c 20 36 29 3b 0a 20 20 20 20 20 20 20  , k, 6);.       
c0a0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
c0b0: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
c0c0: 6f 77 2c 20 31 2c 20 36 29 3b 0a 20 20 20 20 20  ow, 1, 6);.     
c0d0: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62   }.    }.  }.  b
c0e0: 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72  reak;..  case Pr
c0f0: 61 67 54 79 70 5f 53 54 41 54 53 3a 20 7b 0a 20  agTyp_STATS: {. 
c100: 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a     Index *pIdx;.
c110: 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 69 3b      HashElem *i;
c120: 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33  .    v = sqlite3
c130: 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29 3b  GetVdbe(pParse);
c140: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
c150: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 34 29  SetNumCols(v, 4)
c160: 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d  ;.    pParse->nM
c170: 65 6d 20 3d 20 34 3b 0a 20 20 20 20 73 71 6c 69  em = 4;.    sqli
c180: 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68  te3CodeVerifySch
c190: 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29  ema(pParse, iDb)
c1a0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
c1b0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
c1c0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
c1d0: 22 74 61 62 6c 65 22 2c 20 53 51 4c 49 54 45 5f  "table", SQLITE_
c1e0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
c1f0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
c200: 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45  me(v, 1, COLNAME
c210: 5f 4e 41 4d 45 2c 20 22 69 6e 64 65 78 22 2c 20  _NAME, "index", 
c220: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
c230: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
c240: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20  etColName(v, 2, 
c250: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 77  COLNAME_NAME, "w
c260: 69 64 74 68 22 2c 20 53 51 4c 49 54 45 5f 53 54  idth", SQLITE_ST
c270: 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
c280: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
c290: 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 3, COLNAME_N
c2a0: 41 4d 45 2c 20 22 68 65 69 67 68 74 22 2c 20 53  AME, "height", S
c2b0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
c2c0: 20 20 20 66 6f 72 28 69 3d 73 71 6c 69 74 65 48     for(i=sqliteH
c2d0: 61 73 68 46 69 72 73 74 28 26 70 44 62 2d 3e 70  ashFirst(&pDb->p
c2e0: 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68 29  Schema->tblHash)
c2f0: 3b 20 69 3b 20 69 3d 73 71 6c 69 74 65 48 61 73  ; i; i=sqliteHas
c300: 68 4e 65 78 74 28 69 29 29 7b 0a 20 20 20 20 20  hNext(i)){.     
c310: 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73   Table *pTab = s
c320: 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 69 29  qliteHashData(i)
c330: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
c340: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
c350: 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30  String8, 0, 1, 0
c360: 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 20 30  , pTab->zName, 0
c370: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
c380: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
c390: 5f 4e 75 6c 6c 2c 20 30 2c 20 32 29 3b 0a 20 20  _Null, 0, 2);.  
c3a0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c3b0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
c3c0: 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ger,.           
c3d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c3e0: 28 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67 45  (int)sqlite3LogE
c3f0: 73 74 54 6f 49 6e 74 28 70 54 61 62 2d 3e 73 7a  stToInt(pTab->sz
c400: 54 61 62 52 6f 77 29 2c 20 33 29 3b 0a 20 20 20  TabRow), 3);.   
c410: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c420: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
c430: 65 72 2c 20 28 69 6e 74 29 70 54 61 62 2d 3e 6e  er, (int)pTab->n
c440: 52 6f 77 45 73 74 2c 20 34 29 3b 0a 20 20 20 20  RowEst, 4);.    
c450: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c460: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
c470: 52 6f 77 2c 20 31 2c 20 34 29 3b 0a 20 20 20 20  Row, 1, 4);.    
c480: 20 20 66 6f 72 28 70 49 64 78 3d 70 54 61 62 2d    for(pIdx=pTab-
c490: 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70  >pIndex; pIdx; p
c4a0: 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 29  Idx=pIdx->pNext)
c4b0: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
c4c0: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
c4d0: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c  P_String8, 0, 2,
c4e0: 20 30 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c   0, pIdx->zName,
c4f0: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   0);.        sql
c500: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
c510: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 0a 20 20  , OP_Integer,.  
c520: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c530: 20 20 20 20 20 20 20 20 20 20 20 28 69 6e 74 29             (int)
c540: 73 71 6c 69 74 65 33 4c 6f 67 45 73 74 54 6f 49  sqlite3LogEstToI
c550: 6e 74 28 70 49 64 78 2d 3e 73 7a 49 64 78 52 6f  nt(pIdx->szIdxRo
c560: 77 29 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20  w), 3);.        
c570: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c580: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
c590: 20 28 69 6e 74 29 70 49 64 78 2d 3e 61 69 52 6f   (int)pIdx->aiRo
c5a0: 77 45 73 74 5b 30 5d 2c 20 34 29 3b 0a 20 20 20  wEst[0], 4);.   
c5b0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c5c0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
c5d0: 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29 3b 0a 20  ultRow, 1, 4);. 
c5e0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
c5f0: 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73  .  break;..  cas
c600: 65 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f  e PragTyp_INDEX_
c610: 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67 68 74  INFO: if( zRight
c620: 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70   ){.    Index *p
c630: 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a  Idx;.    Table *
c640: 70 54 61 62 3b 0a 20 20 20 20 70 49 64 78 20 3d  pTab;.    pIdx =
c650: 20 73 71 6c 69 74 65 33 46 69 6e 64 49 6e 64 65   sqlite3FindInde
c660: 78 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44  x(db, zRight, zD
c670: 62 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64 78  b);.    if( pIdx
c680: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 3b   ){.      int i;
c690: 0a 20 20 20 20 20 20 70 54 61 62 20 3d 20 70 49  .      pTab = pI
c6a0: 64 78 2d 3e 70 54 61 62 6c 65 3b 0a 20 20 20 20  dx->pTable;.    
c6b0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
c6c0: 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20  NumCols(v, 3);. 
c6d0: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
c6e0: 6d 20 3d 20 33 3b 0a 20 20 20 20 20 20 73 71 6c  m = 3;.      sql
c6f0: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
c700: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
c710: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
c720: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
c730: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
c740: 45 2c 20 22 73 65 71 6e 6f 22 2c 20 53 51 4c 49  E, "seqno", SQLI
c750: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
c760: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
c770: 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f  ColName(v, 1, CO
c780: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 69 64  LNAME_NAME, "cid
c790: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
c7a0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
c7b0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
c7c0: 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 2, COLNAME_NAM
c7d0: 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54  E, "name", SQLIT
c7e0: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
c7f0: 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70 49 64 78   for(i=0; i<pIdx
c800: 2d 3e 6e 4b 65 79 43 6f 6c 3b 20 69 2b 2b 29 7b  ->nKeyCol; i++){
c810: 0a 20 20 20 20 20 20 20 20 69 31 36 20 63 6e 75  .        i16 cnu
c820: 6d 20 3d 20 70 49 64 78 2d 3e 61 69 43 6f 6c 75  m = pIdx->aiColu
c830: 6d 6e 5b 69 5d 3b 0a 20 20 20 20 20 20 20 20 73  mn[i];.        s
c840: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
c850: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
c860: 69 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73  i, 1);.        s
c870: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
c880: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
c890: 63 6e 75 6d 2c 20 32 29 3b 0a 20 20 20 20 20 20  cnum, 2);.      
c8a0: 20 20 61 73 73 65 72 74 28 20 70 54 61 62 2d 3e    assert( pTab->
c8b0: 6e 43 6f 6c 3e 63 6e 75 6d 20 29 3b 0a 20 20 20  nCol>cnum );.   
c8c0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c8d0: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
c8e0: 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 70  ing8, 0, 3, 0, p
c8f0: 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e 75 6d 5d 2e  Tab->aCol[cnum].
c900: 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20  zName, 0);.     
c910: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c920: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
c930: 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 20  tRow, 1, 3);.   
c940: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
c950: 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20   break;..  case 
c960: 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c 49  PragTyp_INDEX_LI
c970: 53 54 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29  ST: if( zRight )
c980: 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64  {.    Index *pId
c990: 78 3b 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54  x;.    Table *pT
c9a0: 61 62 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20  ab;.    int i;. 
c9b0: 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65     pTab = sqlite
c9c0: 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a  3FindTable(db, z
c9d0: 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20  Right, zDb);.   
c9e0: 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20   if( pTab ){.   
c9f0: 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65     v = sqlite3Ge
ca00: 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20  tVdbe(pParse);. 
ca10: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ca20: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29  SetNumCols(v, 3)
ca30: 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e  ;.      pParse->
ca40: 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 20 20  nMem = 3;.      
ca50: 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
ca60: 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20  ySchema(pParse, 
ca70: 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
ca80: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
ca90: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
caa0: 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53 51 4c  NAME, "seq", SQL
cab0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
cac0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
cad0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43  tColName(v, 1, C
cae0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61  OLNAME_NAME, "na
caf0: 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  me", SQLITE_STAT
cb00: 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
cb10: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
cb20: 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 2, COLNAME_N
cb30: 41 4d 45 2c 20 22 75 6e 69 71 75 65 22 2c 20 53  AME, "unique", S
cb40: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
cb50: 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d 70 54       for(pIdx=pT
cb60: 61 62 2d 3e 70 49 6e 64 65 78 2c 20 69 3d 30 3b  ab->pIndex, i=0;
cb70: 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78   pIdx; pIdx=pIdx
cb80: 2d 3e 70 4e 65 78 74 2c 20 69 2b 2b 29 7b 0a 20  ->pNext, i++){. 
cb90: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
cba0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
cbb0: 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20  nteger, i, 1);. 
cbc0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
cbd0: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
cbe0: 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c  tring8, 0, 2, 0,
cbf0: 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 30 29   pIdx->zName, 0)
cc00: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
cc10: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
cc20: 50 5f 49 6e 74 65 67 65 72 2c 20 70 49 64 78 2d  P_Integer, pIdx-
cc30: 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f 4e 6f 6e  >onError!=OE_Non
cc40: 65 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20 73  e, 3);.        s
cc50: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
cc60: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
cc70: 2c 20 31 2c 20 33 29 3b 0a 20 20 20 20 20 20 7d  , 1, 3);.      }
cc80: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
cc90: 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67  ak;..  case Prag
cca0: 54 79 70 5f 44 41 54 41 42 41 53 45 5f 4c 49 53  Typ_DATABASE_LIS
ccb0: 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 3b 0a  T: {.    int i;.
ccc0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
ccd0: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29 3b  etNumCols(v, 3);
cce0: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65  .    pParse->nMe
ccf0: 6d 20 3d 20 33 3b 0a 20 20 20 20 73 71 6c 69 74  m = 3;.    sqlit
cd00: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
cd10: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
cd20: 41 4d 45 2c 20 22 73 65 71 22 2c 20 53 51 4c 49  AME, "seq", SQLI
cd30: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
cd40: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
cd50: 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e  lName(v, 1, COLN
cd60: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22  AME_NAME, "name"
cd70: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
cd80: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
cd90: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32  eSetColName(v, 2
cda0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
cdb0: 22 66 69 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53  "file", SQLITE_S
cdc0: 54 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28  TATIC);.    for(
cdd0: 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20  i=0; i<db->nDb; 
cde0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69 66 28 20  i++){.      if( 
cdf0: 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3d 3d  db->aDb[i].pBt==
ce00: 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  0 ) continue;.  
ce10: 20 20 20 20 61 73 73 65 72 74 28 20 64 62 2d 3e      assert( db->
ce20: 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 21 3d 30 20  aDb[i].zName!=0 
ce30: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
ce40: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
ce50: 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b  _Integer, i, 1);
ce60: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
ce70: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
ce80: 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c  tring8, 0, 2, 0,
ce90: 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d   db->aDb[i].zNam
cea0: 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  e, 0);.      sql
ceb0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
cec0: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
ced0: 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20   3, 0,.         
cee0: 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 47 65    sqlite3BtreeGe
cef0: 74 46 69 6c 65 6e 61 6d 65 28 64 62 2d 3e 61 44  tFilename(db->aD
cf00: 62 5b 69 5d 2e 70 42 74 29 2c 20 30 29 3b 0a 20  b[i].pBt), 0);. 
cf10: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cf20: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
cf30: 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20  ultRow, 1, 3);. 
cf40: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
cf50: 3b 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  ;..  case PragTy
cf60: 70 5f 43 4f 4c 4c 41 54 49 4f 4e 5f 4c 49 53 54  p_COLLATION_LIST
cf70: 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 20 3d 20  : {.    int i = 
cf80: 30 3b 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20  0;.    HashElem 
cf90: 2a 70 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  *p;.    sqlite3V
cfa0: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
cfb0: 20 32 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d   2);.    pParse-
cfc0: 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 20 20 20 20 73  >nMem = 2;.    s
cfd0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
cfe0: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
cff0: 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20  ME_NAME, "seq", 
d000: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
d010: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
d020: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20  etColName(v, 1, 
d030: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e  COLNAME_NAME, "n
d040: 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ame", SQLITE_STA
d050: 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28 70 3d  TIC);.    for(p=
d060: 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28  sqliteHashFirst(
d070: 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71 29 3b 20  &db->aCollSeq); 
d080: 70 3b 20 70 3d 73 71 6c 69 74 65 48 61 73 68 4e  p; p=sqliteHashN
d090: 65 78 74 28 70 29 29 7b 0a 20 20 20 20 20 20 43  ext(p)){.      C
d0a0: 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c 20 3d 20  ollSeq *pColl = 
d0b0: 28 43 6f 6c 6c 53 65 71 20 2a 29 73 71 6c 69 74  (CollSeq *)sqlit
d0c0: 65 48 61 73 68 44 61 74 61 28 70 29 3b 0a 20 20  eHashData(p);.  
d0d0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d0e0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
d0f0: 67 65 72 2c 20 69 2b 2b 2c 20 31 29 3b 0a 20 20  ger, i++, 1);.  
d100: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d110: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
d120: 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70 43  ng8, 0, 2, 0, pC
d130: 6f 6c 6c 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a  oll->zName, 0);.
d140: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d150: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
d160: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 32 29 3b 0a  sultRow, 1, 2);.
d170: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
d180: 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  k;.#endif /* SQL
d190: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
d1a0: 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e  PRAGMAS */..#ifn
d1b0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
d1c0: 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20 20 63 61  FOREIGN_KEY.  ca
d1d0: 73 65 20 50 72 61 67 54 79 70 5f 46 4f 52 45 49  se PragTyp_FOREI
d1e0: 47 4e 5f 4b 45 59 5f 4c 49 53 54 3a 20 69 66 28  GN_KEY_LIST: if(
d1f0: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 46   zRight ){.    F
d200: 4b 65 79 20 2a 70 46 4b 3b 0a 20 20 20 20 54 61  Key *pFK;.    Ta
d210: 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70  ble *pTab;.    p
d220: 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69 6e  Tab = sqlite3Fin
d230: 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67 68  dTable(db, zRigh
d240: 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28  t, zDb);.    if(
d250: 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20 76   pTab ){.      v
d260: 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62   = sqlite3GetVdb
d270: 65 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20  e(pParse);.     
d280: 20 70 46 4b 20 3d 20 70 54 61 62 2d 3e 70 46 4b   pFK = pTab->pFK
d290: 65 79 3b 0a 20 20 20 20 20 20 69 66 28 20 70 46  ey;.      if( pF
d2a0: 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74  K ){.        int
d2b0: 20 69 20 3d 20 30 3b 20 0a 20 20 20 20 20 20 20   i = 0; .       
d2c0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e   sqlite3VdbeSetN
d2d0: 75 6d 43 6f 6c 73 28 76 2c 20 38 29 3b 0a 20 20  umCols(v, 8);.  
d2e0: 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d        pParse->nM
d2f0: 65 6d 20 3d 20 38 3b 0a 20 20 20 20 20 20 20 20  em = 8;.        
d300: 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
d310: 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20  ySchema(pParse, 
d320: 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71  iDb);.        sq
d330: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
d340: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
d350: 45 5f 4e 41 4d 45 2c 20 22 69 64 22 2c 20 53 51  E_NAME, "id", SQ
d360: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
d370: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d380: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31  eSetColName(v, 1
d390: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
d3a0: 22 73 65 71 22 2c 20 53 51 4c 49 54 45 5f 53 54  "seq", SQLITE_ST
d3b0: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73  ATIC);.        s
d3c0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
d3d0: 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41  Name(v, 2, COLNA
d3e0: 4d 45 5f 4e 41 4d 45 2c 20 22 74 61 62 6c 65 22  ME_NAME, "table"
d3f0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
d400: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
d410: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
d420: 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 3, COLNAME_NA
d430: 4d 45 2c 20 22 66 72 6f 6d 22 2c 20 53 51 4c 49  ME, "from", SQLI
d440: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
d450: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
d460: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c 20  etColName(v, 4, 
d470: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74  COLNAME_NAME, "t
d480: 6f 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  o", SQLITE_STATI
d490: 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  C);.        sqli
d4a0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
d4b0: 65 28 76 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 5, COLNAME_
d4c0: 4e 41 4d 45 2c 20 22 6f 6e 5f 75 70 64 61 74 65  NAME, "on_update
d4d0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
d4e0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
d4f0: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
d500: 28 76 2c 20 36 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 6, COLNAME_N
d510: 41 4d 45 2c 20 22 6f 6e 5f 64 65 6c 65 74 65 22  AME, "on_delete"
d520: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
d530: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
d540: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
d550: 76 2c 20 37 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 7, COLNAME_NA
d560: 4d 45 2c 20 22 6d 61 74 63 68 22 2c 20 53 51 4c  ME, "match", SQL
d570: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
d580: 20 20 20 20 20 77 68 69 6c 65 28 70 46 4b 29 7b       while(pFK){
d590: 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a  .          int j
d5a0: 3b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28  ;.          for(
d5b0: 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c  j=0; j<pFK->nCol
d5c0: 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; j++){.        
d5d0: 20 20 20 20 63 68 61 72 20 2a 7a 43 6f 6c 20 3d      char *zCol =
d5e0: 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 7a 43   pFK->aCol[j].zC
d5f0: 6f 6c 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  ol;.            
d600: 63 68 61 72 20 2a 7a 4f 6e 44 65 6c 65 74 65 20  char *zOnDelete 
d610: 3d 20 28 63 68 61 72 20 2a 29 61 63 74 69 6f 6e  = (char *)action
d620: 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63 74 69 6f  Name(pFK->aActio
d630: 6e 5b 30 5d 29 3b 0a 20 20 20 20 20 20 20 20 20  n[0]);.         
d640: 20 20 20 63 68 61 72 20 2a 7a 4f 6e 55 70 64 61     char *zOnUpda
d650: 74 65 20 3d 20 28 63 68 61 72 20 2a 29 61 63 74  te = (char *)act
d660: 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63  ionName(pFK->aAc
d670: 74 69 6f 6e 5b 31 5d 29 3b 0a 20 20 20 20 20 20  tion[1]);.      
d680: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d690: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
d6a0: 74 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20  teger, i, 1);.  
d6b0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
d6c0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
d6d0: 50 5f 49 6e 74 65 67 65 72 2c 20 6a 2c 20 32 29  P_Integer, j, 2)
d6e0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
d6f0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
d700: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
d710: 2c 20 33 2c 20 30 2c 20 70 46 4b 2d 3e 7a 54 6f  , 3, 0, pFK->zTo
d720: 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 0);.          
d730: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
d740: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
d750: 38 2c 20 30 2c 20 34 2c 20 30 2c 0a 20 20 20 20  8, 0, 4, 0,.    
d760: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d770: 20 20 20 20 20 20 20 20 20 20 70 54 61 62 2d 3e            pTab->
d780: 61 43 6f 6c 5b 70 46 4b 2d 3e 61 43 6f 6c 5b 6a  aCol[pFK->aCol[j
d790: 5d 2e 69 46 72 6f 6d 5d 2e 7a 4e 61 6d 65 2c 20  ].iFrom].zName, 
d7a0: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0);.            
d7b0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d7c0: 34 28 76 2c 20 7a 43 6f 6c 20 3f 20 4f 50 5f 53  4(v, zCol ? OP_S
d7d0: 74 72 69 6e 67 38 20 3a 20 4f 50 5f 4e 75 6c 6c  tring8 : OP_Null
d7e0: 2c 20 30 2c 20 35 2c 20 30 2c 20 7a 43 6f 6c 2c  , 0, 5, 0, zCol,
d7f0: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   0);.           
d800: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d810: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
d820: 2c 20 30 2c 20 36 2c 20 30 2c 20 7a 4f 6e 55 70  , 0, 6, 0, zOnUp
d830: 64 61 74 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  date, 0);.      
d840: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d850: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
d860: 72 69 6e 67 38 2c 20 30 2c 20 37 2c 20 30 2c 20  ring8, 0, 7, 0, 
d870: 7a 4f 6e 44 65 6c 65 74 65 2c 20 30 29 3b 0a 20  zOnDelete, 0);. 
d880: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
d890: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
d8a0: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 38  OP_String8, 0, 8
d8b0: 2c 20 30 2c 20 22 4e 4f 4e 45 22 2c 20 30 29 3b  , 0, "NONE", 0);
d8c0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
d8d0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
d8e0: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
d8f0: 31 2c 20 38 29 3b 0a 20 20 20 20 20 20 20 20 20  1, 8);.         
d900: 20 7d 0a 20 20 20 20 20 20 20 20 20 20 2b 2b 69   }.          ++i
d910: 3b 0a 20 20 20 20 20 20 20 20 20 20 70 46 4b 20  ;.          pFK 
d920: 3d 20 70 46 4b 2d 3e 70 4e 65 78 74 46 72 6f 6d  = pFK->pNextFrom
d930: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
d940: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
d950: 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a  break;.#endif /*
d960: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
d970: 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45  _OMIT_FOREIGN_KE
d980: 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  Y) */..#ifndef S
d990: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49  QLITE_OMIT_FOREI
d9a0: 47 4e 5f 4b 45 59 0a 23 69 66 6e 64 65 66 20 53  GN_KEY.#ifndef S
d9b0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47  QLITE_OMIT_TRIGG
d9c0: 45 52 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  ER.  case PragTy
d9d0: 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 5f 43 48  p_FOREIGN_KEY_CH
d9e0: 45 43 4b 3a 20 7b 0a 20 20 20 20 46 4b 65 79 20  ECK: {.    FKey 
d9f0: 2a 70 46 4b 3b 20 20 20 20 20 20 20 20 20 20 20  *pFK;           
da00: 20 20 2f 2a 20 41 20 66 6f 72 65 69 67 6e 20 6b    /* A foreign k
da10: 65 79 20 63 6f 6e 73 74 72 61 69 6e 74 20 2a 2f  ey constraint */
da20: 0a 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62  .    Table *pTab
da30: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 43  ;           /* C
da40: 68 69 6c 64 20 74 61 62 6c 65 20 63 6f 6e 74 61  hild table conta
da50: 69 6e 20 22 52 45 46 45 52 45 4e 43 45 53 22 20  in "REFERENCES" 
da60: 6b 65 79 77 6f 72 64 20 2a 2f 0a 20 20 20 20 54  keyword */.    T
da70: 61 62 6c 65 20 2a 70 50 61 72 65 6e 74 3b 20 20  able *pParent;  
da80: 20 20 20 20 20 20 2f 2a 20 50 61 72 65 6e 74 20        /* Parent 
da90: 74 61 62 6c 65 20 74 68 61 74 20 63 68 69 6c 64  table that child
daa0: 20 70 6f 69 6e 74 73 20 74 6f 20 2a 2f 0a 20 20   points to */.  
dab0: 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 20 20    Index *pIdx;  
dac0: 20 20 20 20 20 20 20 20 20 2f 2a 20 49 6e 64 65           /* Inde
dad0: 78 20 69 6e 20 74 68 65 20 70 61 72 65 6e 74 20  x in the parent 
dae0: 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74  table */.    int
daf0: 20 69 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   i;             
db00: 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
db10: 74 65 72 3a 20 20 46 6f 72 65 69 67 6e 20 6b 65  ter:  Foreign ke
db20: 79 20 6e 75 6d 62 65 72 20 66 6f 72 20 70 54 61  y number for pTa
db30: 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 6a 3b 20  b */.    int j; 
db40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
db50: 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a  /* Loop counter:
db60: 20 20 46 69 65 6c 64 20 6f 66 20 74 68 65 20 66    Field of the f
db70: 6f 72 65 69 67 6e 20 6b 65 79 20 2a 2f 0a 20 20  oreign key */.  
db80: 20 20 48 61 73 68 45 6c 65 6d 20 2a 6b 3b 20 20    HashElem *k;  
db90: 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70           /* Loop
dba0: 20 63 6f 75 6e 74 65 72 3a 20 20 4e 65 78 74 20   counter:  Next 
dbb0: 74 61 62 6c 65 20 69 6e 20 73 63 68 65 6d 61 20  table in schema 
dbc0: 2a 2f 0a 20 20 20 20 69 6e 74 20 78 3b 20 20 20  */.    int x;   
dbd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
dbe0: 20 72 65 73 75 6c 74 20 76 61 72 69 61 62 6c 65   result variable
dbf0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52   */.    int regR
dc00: 65 73 75 6c 74 3b 20 20 20 20 20 20 20 20 20 2f  esult;         /
dc10: 2a 20 33 20 72 65 67 69 73 74 65 72 73 20 74 6f  * 3 registers to
dc20: 20 68 6f 6c 64 20 61 20 72 65 73 75 6c 74 20 72   hold a result r
dc30: 6f 77 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65  ow */.    int re
dc40: 67 4b 65 79 3b 20 20 20 20 20 20 20 20 20 20 20  gKey;           
dc50: 20 2f 2a 20 52 65 67 69 73 74 65 72 20 74 6f 20   /* Register to 
dc60: 68 6f 6c 64 20 6b 65 79 20 66 6f 72 20 63 68 65  hold key for che
dc70: 63 6b 69 6e 67 20 74 68 65 20 46 4b 20 2a 2f 0a  cking the FK */.
dc80: 20 20 20 20 69 6e 74 20 72 65 67 52 6f 77 3b 20      int regRow; 
dc90: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 52 65             /* Re
dca0: 67 69 73 74 65 72 73 20 74 6f 20 68 6f 6c 64 20  gisters to hold 
dcb0: 61 20 72 6f 77 20 66 72 6f 6d 20 70 54 61 62 20  a row from pTab 
dcc0: 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64 64 72 54  */.    int addrT
dcd0: 6f 70 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  op;           /*
dce0: 20 54 6f 70 20 6f 66 20 61 20 6c 6f 6f 70 20 63   Top of a loop c
dcf0: 68 65 63 6b 69 6e 67 20 66 6f 72 65 69 67 6e 20  hecking foreign 
dd00: 6b 65 79 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20  keys */.    int 
dd10: 61 64 64 72 4f 6b 3b 20 20 20 20 20 20 20 20 20  addrOk;         
dd20: 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65 72 65 20     /* Jump here 
dd30: 69 66 20 74 68 65 20 6b 65 79 20 69 73 20 4f 4b  if the key is OK
dd40: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a 61 69 43   */.    int *aiC
dd50: 6f 6c 73 3b 20 20 20 20 20 20 20 20 20 20 20 2f  ols;           /
dd60: 2a 20 63 68 69 6c 64 20 74 6f 20 70 61 72 65 6e  * child to paren
dd70: 74 20 63 6f 6c 75 6d 6e 20 6d 61 70 70 69 6e 67  t column mapping
dd80: 20 2a 2f 0a 0a 20 20 20 20 72 65 67 52 65 73 75   */..    regResu
dd90: 6c 74 20 3d 20 70 50 61 72 73 65 2d 3e 6e 4d 65  lt = pParse->nMe
dda0: 6d 2b 31 3b 0a 20 20 20 20 70 50 61 72 73 65 2d  m+1;.    pParse-
ddb0: 3e 6e 4d 65 6d 20 2b 3d 20 34 3b 0a 20 20 20 20  >nMem += 4;.    
ddc0: 72 65 67 4b 65 79 20 3d 20 2b 2b 70 50 61 72 73  regKey = ++pPars
ddd0: 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 72 65 67  e->nMem;.    reg
dde0: 52 6f 77 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e  Row = ++pParse->
ddf0: 6e 4d 65 6d 3b 0a 20 20 20 20 76 20 3d 20 73 71  nMem;.    v = sq
de00: 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61  lite3GetVdbe(pPa
de10: 72 73 65 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  rse);.    sqlite
de20: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
de30: 76 2c 20 34 29 3b 0a 20 20 20 20 73 71 6c 69 74  v, 4);.    sqlit
de40: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
de50: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
de60: 41 4d 45 2c 20 22 74 61 62 6c 65 22 2c 20 53 51  AME, "table", SQ
de70: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
de80: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
de90: 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f  ColName(v, 1, CO
dea0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 72 6f 77  LNAME_NAME, "row
deb0: 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  id", SQLITE_STAT
dec0: 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  IC);.    sqlite3
ded0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
dee0: 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 2, COLNAME_NAM
def0: 45 2c 20 22 70 61 72 65 6e 74 22 2c 20 53 51 4c  E, "parent", SQL
df00: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
df10: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
df20: 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c  olName(v, 3, COL
df30: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 66 6b 69 64  NAME_NAME, "fkid
df40: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
df50: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 43 6f  );.    sqlite3Co
df60: 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70  deVerifySchema(p
df70: 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20  Parse, iDb);.   
df80: 20 6b 20 3d 20 73 71 6c 69 74 65 48 61 73 68 46   k = sqliteHashF
df90: 69 72 73 74 28 26 64 62 2d 3e 61 44 62 5b 69 44  irst(&db->aDb[iD
dfa0: 62 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48  b].pSchema->tblH
dfb0: 61 73 68 29 3b 0a 20 20 20 20 77 68 69 6c 65 28  ash);.    while(
dfc0: 20 6b 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20   k ){.      if( 
dfd0: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
dfe0: 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33    pTab = sqlite3
dff0: 4c 6f 63 61 74 65 54 61 62 6c 65 28 70 50 61 72  LocateTable(pPar
e000: 73 65 2c 20 30 2c 20 7a 52 69 67 68 74 2c 20 7a  se, 0, zRight, z
e010: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 6b 20 3d  Db);.        k =
e020: 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b   0;.      }else{
e030: 0a 20 20 20 20 20 20 20 20 70 54 61 62 20 3d 20  .        pTab = 
e040: 28 54 61 62 6c 65 2a 29 73 71 6c 69 74 65 48 61  (Table*)sqliteHa
e050: 73 68 44 61 74 61 28 6b 29 3b 0a 20 20 20 20 20  shData(k);.     
e060: 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48 61 73     k = sqliteHas
e070: 68 4e 65 78 74 28 6b 29 3b 0a 20 20 20 20 20 20  hNext(k);.      
e080: 7d 0a 20 20 20 20 20 20 69 66 28 20 70 54 61 62  }.      if( pTab
e090: 3d 3d 30 20 7c 7c 20 70 54 61 62 2d 3e 70 46 4b  ==0 || pTab->pFK
e0a0: 65 79 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  ey==0 ) continue
e0b0: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 54  ;.      sqlite3T
e0c0: 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72 73 65 2c  ableLock(pParse,
e0d0: 20 69 44 62 2c 20 70 54 61 62 2d 3e 74 6e 75 6d   iDb, pTab->tnum
e0e0: 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65  , 0, pTab->zName
e0f0: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 54 61  );.      if( pTa
e100: 62 2d 3e 6e 43 6f 6c 2b 72 65 67 52 6f 77 3e 70  b->nCol+regRow>p
e110: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 29 20 70 50  Parse->nMem ) pP
e120: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 70 54 61  arse->nMem = pTa
e130: 62 2d 3e 6e 43 6f 6c 20 2b 20 72 65 67 52 6f 77  b->nCol + regRow
e140: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f  ;.      sqlite3O
e150: 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c  penTable(pParse,
e160: 20 30 2c 20 69 44 62 2c 20 70 54 61 62 2c 20 4f   0, iDb, pTab, O
e170: 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a 20 20 20  P_OpenRead);.   
e180: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
e190: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
e1a0: 67 38 2c 20 30 2c 20 72 65 67 52 65 73 75 6c 74  g8, 0, regResult
e1b0: 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65  , 0, pTab->zName
e1c0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
e1d0: 20 20 20 20 20 20 20 20 20 20 50 34 5f 54 52 41            P4_TRA
e1e0: 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 66  NSIENT);.      f
e1f0: 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54 61 62  or(i=1, pFK=pTab
e200: 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20 69 2b  ->pFKey; pFK; i+
e210: 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e 65 78  +, pFK=pFK->pNex
e220: 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20 20 20  tFrom){.        
e230: 70 50 61 72 65 6e 74 20 3d 20 73 71 6c 69 74 65  pParent = sqlite
e240: 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 70  3FindTable(db, p
e250: 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b 0a 20  FK->zTo, zDb);. 
e260: 20 20 20 20 20 20 20 69 66 28 20 70 50 61 72 65         if( pPare
e270: 6e 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  nt==0 ) continue
e280: 3b 0a 20 20 20 20 20 20 20 20 70 49 64 78 20 3d  ;.        pIdx =
e290: 20 30 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   0;.        sqli
e2a0: 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61  te3TableLock(pPa
e2b0: 72 73 65 2c 20 69 44 62 2c 20 70 50 61 72 65 6e  rse, iDb, pParen
e2c0: 74 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70 50 61 72  t->tnum, 0, pPar
e2d0: 65 6e 74 2d 3e 7a 4e 61 6d 65 29 3b 0a 20 20 20  ent->zName);.   
e2e0: 20 20 20 20 20 78 20 3d 20 73 71 6c 69 74 65 33       x = sqlite3
e2f0: 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78 28 70 50  FkLocateIndex(pP
e300: 61 72 73 65 2c 20 70 50 61 72 65 6e 74 2c 20 70  arse, pParent, p
e310: 46 4b 2c 20 26 70 49 64 78 2c 20 30 29 3b 0a 20  FK, &pIdx, 0);. 
e320: 20 20 20 20 20 20 20 69 66 28 20 78 3d 3d 30 20         if( x==0 
e330: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  ){.          if(
e340: 20 70 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20   pIdx==0 ){.    
e350: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 4f          sqlite3O
e360: 70 65 6e 54 61 62 6c 65 28 70 50 61 72 73 65 2c  penTable(pParse,
e370: 20 69 2c 20 69 44 62 2c 20 70 50 61 72 65 6e 74   i, iDb, pParent
e380: 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a  , OP_OpenRead);.
e390: 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b            }else{
e3a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 4b 65 79  .            Key
e3b0: 49 6e 66 6f 20 2a 70 4b 65 79 20 3d 20 73 71 6c  Info *pKey = sql
e3c0: 69 74 65 33 49 6e 64 65 78 4b 65 79 69 6e 66 6f  ite3IndexKeyinfo
e3d0: 28 70 50 61 72 73 65 2c 20 70 49 64 78 29 3b 0a  (pParse, pIdx);.
e3e0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
e3f0: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
e400: 20 4f 50 5f 4f 70 65 6e 52 65 61 64 2c 20 69 2c   OP_OpenRead, i,
e410: 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 69 44 62   pIdx->tnum, iDb
e420: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
e430: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
e440: 50 34 28 76 2c 20 2d 31 2c 20 28 63 68 61 72 2a  P4(v, -1, (char*
e450: 29 70 4b 65 79 2c 20 50 34 5f 4b 45 59 49 4e 46  )pKey, P4_KEYINF
e460: 4f 5f 48 41 4e 44 4f 46 46 29 3b 0a 20 20 20 20  O_HANDOFF);.    
e470: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20        }.        
e480: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
e490: 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20   k = 0;.        
e4a0: 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20    break;.       
e4b0: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
e4c0: 20 61 73 73 65 72 74 28 20 70 50 61 72 73 65 2d   assert( pParse-
e4d0: 3e 6e 45 72 72 3e 30 20 7c 7c 20 70 46 4b 3d 3d  >nErr>0 || pFK==
e4e0: 30 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70  0 );.      if( p
e4f0: 46 4b 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20  FK ) break;.    
e500: 20 20 69 66 28 20 70 50 61 72 73 65 2d 3e 6e 54    if( pParse->nT
e510: 61 62 3c 69 20 29 20 70 50 61 72 73 65 2d 3e 6e  ab<i ) pParse->n
e520: 54 61 62 20 3d 20 69 3b 0a 20 20 20 20 20 20 61  Tab = i;.      a
e530: 64 64 72 54 6f 70 20 3d 20 73 71 6c 69 74 65 33  ddrTop = sqlite3
e540: 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50  VdbeAddOp1(v, OP
e550: 5f 52 65 77 69 6e 64 2c 20 30 29 3b 0a 20 20 20  _Rewind, 0);.   
e560: 20 20 20 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d     for(i=1, pFK=
e570: 70 54 61 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b  pTab->pFKey; pFK
e580: 3b 20 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e  ; i++, pFK=pFK->
e590: 70 4e 65 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20  pNextFrom){.    
e5a0: 20 20 20 20 70 50 61 72 65 6e 74 20 3d 20 73 71      pParent = sq
e5b0: 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64  lite3FindTable(d
e5c0: 62 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62  b, pFK->zTo, zDb
e5d0: 29 3b 0a 20 20 20 20 20 20 20 20 70 49 64 78 20  );.        pIdx 
e5e0: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 61 69 43  = 0;.        aiC
e5f0: 6f 6c 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  ols = 0;.       
e600: 20 69 66 28 20 70 50 61 72 65 6e 74 20 29 7b 0a   if( pParent ){.
e610: 20 20 20 20 20 20 20 20 20 20 78 20 3d 20 73 71            x = sq
e620: 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
e630: 65 78 28 70 50 61 72 73 65 2c 20 70 50 61 72 65  ex(pParse, pPare
e640: 6e 74 2c 20 70 46 4b 2c 20 26 70 49 64 78 2c 20  nt, pFK, &pIdx, 
e650: 26 61 69 43 6f 6c 73 29 3b 0a 20 20 20 20 20 20  &aiCols);.      
e660: 20 20 20 20 61 73 73 65 72 74 28 20 78 3d 3d 30      assert( x==0
e670: 20 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   );.        }.  
e680: 20 20 20 20 20 20 61 64 64 72 4f 6b 20 3d 20 73        addrOk = s
e690: 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 4c 61  qlite3VdbeMakeLa
e6a0: 62 65 6c 28 76 29 3b 0a 20 20 20 20 20 20 20 20  bel(v);.        
e6b0: 69 66 28 20 70 50 61 72 65 6e 74 20 26 26 20 70  if( pParent && p
e6c0: 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Idx==0 ){.      
e6d0: 20 20 20 20 69 6e 74 20 69 4b 65 79 20 3d 20 70      int iKey = p
e6e0: 46 4b 2d 3e 61 43 6f 6c 5b 30 5d 2e 69 46 72 6f  FK->aCol[0].iFro
e6f0: 6d 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  m;.          ass
e700: 65 72 74 28 20 69 4b 65 79 3e 3d 30 20 26 26 20  ert( iKey>=0 && 
e710: 69 4b 65 79 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20  iKey<pTab->nCol 
e720: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
e730: 20 69 4b 65 79 21 3d 70 54 61 62 2d 3e 69 50 4b   iKey!=pTab->iPK
e740: 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ey ){.          
e750: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
e760: 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6c 75 6d 6e  Op3(v, OP_Column
e770: 2c 20 30 2c 20 69 4b 65 79 2c 20 72 65 67 52 6f  , 0, iKey, regRo
e780: 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  w);.            
e790: 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66  sqlite3ColumnDef
e7a0: 61 75 6c 74 28 76 2c 20 70 54 61 62 2c 20 69 4b  ault(v, pTab, iK
e7b0: 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20  ey, regRow);.   
e7c0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
e7d0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
e7e0: 5f 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2c  _IsNull, regRow,
e7f0: 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20   addrOk);.      
e800: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
e810: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4d 75  eAddOp2(v, OP_Mu
e820: 73 74 42 65 49 6e 74 2c 20 72 65 67 52 6f 77 2c  stBeInt, regRow,
e830: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
e840: 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72 65  sqlite3VdbeCurre
e850: 6e 74 41 64 64 72 28 76 29 2b 33 29 3b 0a 20 20  ntAddr(v)+3);.  
e860: 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20          }else{. 
e870: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
e880: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
e890: 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72 65 67  OP_Rowid, 0, reg
e8a0: 52 6f 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Row);.          
e8b0: 7d 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  }.          sqli
e8c0: 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
e8d0: 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73 2c 20 69   OP_NotExists, i
e8e0: 2c 20 30 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20  , 0, regRow);.  
e8f0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
e900: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
e910: 47 6f 74 6f 2c 20 30 2c 20 61 64 64 72 4f 6b 29  Goto, 0, addrOk)
e920: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
e930: 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
e940: 76 2c 20 73 71 6c 69 74 65 33 56 64 62 65 43 75  v, sqlite3VdbeCu
e950: 72 72 65 6e 74 41 64 64 72 28 76 29 2d 32 29 3b  rrentAddr(v)-2);
e960: 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a  .        }else{.
e970: 20 20 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d            for(j=
e980: 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20  0; j<pFK->nCol; 
e990: 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  j++){.          
e9a0: 20 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64    sqlite3ExprCod
e9b0: 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c  eGetColumnOfTabl
e9c0: 65 28 76 2c 20 70 54 61 62 2c 20 30 2c 0a 20 20  e(v, pTab, 0,.  
e9d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e9e0: 20 20 20 20 20 20 20 20 20 20 61 69 43 6f 6c 73            aiCols
e9f0: 20 3f 20 61 69 43 6f 6c 73 5b 6a 5d 20 3a 20 70   ? aiCols[j] : p
ea00: 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f  FK->aCol[j].iFro
ea10: 6d 2c 20 72 65 67 52 6f 77 2b 6a 29 3b 0a 20 20  m, regRow+j);.  
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 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
ea40: 50 5f 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77  P_IsNull, regRow
ea50: 2b 6a 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20  +j, addrOk);.   
ea60: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
ea70: 20 20 20 69 66 28 20 70 50 61 72 65 6e 74 20 29     if( pParent )
ea80: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  {.            sq
ea90: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
eaa0: 76 2c 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64  v, OP_MakeRecord
eab0: 2c 20 72 65 67 52 6f 77 2c 20 70 46 4b 2d 3e 6e  , regRow, pFK->n
eac0: 43 6f 6c 2c 20 72 65 67 4b 65 79 29 3b 0a 20 20  Col, regKey);.  
ead0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
eae0: 33 56 64 62 65 43 68 61 6e 67 65 50 34 28 76 2c  3VdbeChangeP4(v,
eaf0: 20 2d 31 2c 0a 20 20 20 20 20 20 20 20 20 20 20   -1,.           
eb00: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
eb10: 33 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74  3IndexAffinitySt
eb20: 72 28 76 2c 70 49 64 78 29 2c 20 50 34 5f 54 52  r(v,pIdx), P4_TR
eb30: 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20  ANSIENT);.      
eb40: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
eb50: 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50  eAddOp4Int(v, OP
eb60: 5f 46 6f 75 6e 64 2c 20 69 2c 20 61 64 64 72 4f  _Found, i, addrO
eb70: 6b 2c 20 72 65 67 4b 65 79 2c 20 30 29 3b 0a 20  k, regKey, 0);. 
eb80: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
eb90: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c     }.        sql
eba0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
ebb0: 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72  , OP_Rowid, 0, r
ebc0: 65 67 52 65 73 75 6c 74 2b 31 29 3b 0a 20 20 20  egResult+1);.   
ebd0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ebe0: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
ebf0: 69 6e 67 38 2c 20 30 2c 20 72 65 67 52 65 73 75  ing8, 0, regResu
ec00: 6c 74 2b 32 2c 20 30 2c 20 0a 20 20 20 20 20 20  lt+2, 0, .      
ec10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec20: 20 20 20 20 70 46 4b 2d 3e 7a 54 6f 2c 20 50 34      pFK->zTo, P4
ec30: 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20  _TRANSIENT);.   
ec40: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
ec50: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
ec60: 65 67 65 72 2c 20 69 2d 31 2c 20 72 65 67 52 65  eger, i-1, regRe
ec70: 73 75 6c 74 2b 33 29 3b 0a 20 20 20 20 20 20 20  sult+3);.       
ec80: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ec90: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
eca0: 6f 77 2c 20 72 65 67 52 65 73 75 6c 74 2c 20 34  ow, regResult, 4
ecb0: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
ecc0: 65 33 56 64 62 65 52 65 73 6f 6c 76 65 4c 61 62  e3VdbeResolveLab
ecd0: 65 6c 28 76 2c 20 61 64 64 72 4f 6b 29 3b 0a 20  el(v, addrOk);. 
ece0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
ecf0: 46 72 65 65 28 64 62 2c 20 61 69 43 6f 6c 73 29  Free(db, aiCols)
ed00: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
ed10: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
ed20: 32 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 30 2c  2(v, OP_Next, 0,
ed30: 20 61 64 64 72 54 6f 70 2b 31 29 3b 0a 20 20 20   addrTop+1);.   
ed40: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
ed50: 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 54 6f  mpHere(v, addrTo
ed60: 70 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  p);.    }.  }.  
ed70: 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a  break;.#endif /*
ed80: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
ed90: 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 20 2a  _OMIT_TRIGGER) *
eda0: 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65 66  /.#endif /* !def
edb0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
edc0: 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 2a 2f  _FOREIGN_KEY) */
edd0: 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55 47  ..#ifndef NDEBUG
ede0: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
edf0: 50 41 52 53 45 52 5f 54 52 41 43 45 3a 20 7b 0a  PARSER_TRACE: {.
ee00: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
ee10: 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69  {.      if( sqli
ee20: 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52  te3GetBoolean(zR
ee30: 69 67 68 74 2c 20 30 29 20 29 7b 0a 20 20 20 20  ight, 0) ){.    
ee40: 20 20 20 20 73 71 6c 69 74 65 33 50 61 72 73 65      sqlite3Parse
ee50: 72 54 72 61 63 65 28 73 74 64 65 72 72 2c 20 22  rTrace(stderr, "
ee60: 70 61 72 73 65 72 3a 20 22 29 3b 0a 20 20 20 20  parser: ");.    
ee70: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20    }else{.       
ee80: 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72   sqlite3ParserTr
ee90: 61 63 65 28 30 2c 20 30 29 3b 0a 20 20 20 20 20  ace(0, 0);.     
eea0: 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62   }.    }.  }.  b
eeb0: 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20  reak;.#endif..  
eec0: 2f 2a 20 52 65 69 6e 73 74 61 6c 6c 20 74 68 65  /* Reinstall the
eed0: 20 4c 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20 66   LIKE and GLOB f
eee0: 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20 76  unctions.  The v
eef0: 61 72 69 61 6e 74 20 6f 66 20 4c 49 4b 45 0a 20  ariant of LIKE. 
ef00: 20 2a 2a 20 75 73 65 64 20 77 69 6c 6c 20 62 65   ** used will be
ef10: 20 63 61 73 65 20 73 65 6e 73 69 74 69 76 65 20   case sensitive 
ef20: 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e 67  or not depending
ef30: 20 6f 6e 20 74 68 65 20 52 48 53 2e 0a 20 20 2a   on the RHS..  *
ef40: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
ef50: 5f 43 41 53 45 5f 53 45 4e 53 49 54 49 56 45 5f  _CASE_SENSITIVE_
ef60: 4c 49 4b 45 3a 20 7b 0a 20 20 20 20 69 66 28 20  LIKE: {.    if( 
ef70: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
ef80: 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72 4c  sqlite3RegisterL
ef90: 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 64 62 2c  ikeFunctions(db,
efa0: 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c 65   sqlite3GetBoole
efb0: 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 29 3b 0a  an(zRight, 0));.
efc0: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
efd0: 6b 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  k;..#ifndef SQLI
efe0: 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  TE_INTEGRITY_CHE
eff0: 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 0a 23 20 64  CK_ERROR_MAX.# d
f000: 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e 54  efine SQLITE_INT
f010: 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52  EGRITY_CHECK_ERR
f020: 4f 52 5f 4d 41 58 20 31 30 30 0a 23 65 6e 64 69  OR_MAX 100.#endi
f030: 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  f..#ifndef SQLIT
f040: 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
f050: 5f 43 48 45 43 4b 0a 20 20 2f 2a 20 50 72 61 67  _CHECK.  /* Prag
f060: 6d 61 20 22 71 75 69 63 6b 5f 63 68 65 63 6b 22  ma "quick_check"
f070: 20 69 73 20 72 65 64 75 63 65 64 20 76 65 72 73   is reduced vers
f080: 69 6f 6e 20 6f 66 20 0a 20 20 2a 2a 20 69 6e 74  ion of .  ** int
f090: 65 67 72 69 74 79 5f 63 68 65 63 6b 20 64 65 73  egrity_check des
f0a0: 69 67 6e 65 64 20 74 6f 20 64 65 74 65 63 74 20  igned to detect 
f0b0: 6d 6f 73 74 20 64 61 74 61 62 61 73 65 20 63 6f  most database co
f0c0: 72 72 75 70 74 69 6f 6e 0a 20 20 2a 2a 20 77 69  rruption.  ** wi
f0d0: 74 68 6f 75 74 20 6d 6f 73 74 20 6f 66 20 74 68  thout most of th
f0e0: 65 20 6f 76 65 72 68 65 61 64 20 6f 66 20 61 20  e overhead of a 
f0f0: 66 75 6c 6c 20 69 6e 74 65 67 72 69 74 79 2d 63  full integrity-c
f100: 68 65 63 6b 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  heck..  */.  cas
f110: 65 20 50 72 61 67 54 79 70 5f 49 4e 54 45 47 52  e PragTyp_INTEGR
f120: 49 54 59 5f 43 48 45 43 4b 3a 20 7b 0a 20 20 20  ITY_CHECK: {.   
f130: 20 69 6e 74 20 69 2c 20 6a 2c 20 61 64 64 72 2c   int i, j, addr,
f140: 20 6d 78 45 72 72 3b 0a 0a 20 20 20 20 2f 2a 20   mxErr;..    /* 
f150: 43 6f 64 65 20 74 68 61 74 20 61 70 70 65 61 72  Code that appear
f160: 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66 20  s at the end of 
f170: 74 68 65 20 69 6e 74 65 67 72 69 74 79 20 63 68  the integrity ch
f180: 65 63 6b 2e 20 20 49 66 20 6e 6f 20 65 72 72 6f  eck.  If no erro
f190: 72 0a 20 20 20 20 2a 2a 20 6d 65 73 73 61 67 65  r.    ** message
f1a0: 73 20 68 61 76 65 20 62 65 65 6e 20 67 65 6e 65  s have been gene
f1b0: 72 61 74 65 64 2c 20 6f 75 74 70 75 74 20 4f 4b  rated, output OK
f1c0: 2e 20 20 4f 74 68 65 72 77 69 73 65 20 6f 75 74  .  Otherwise out
f1d0: 70 75 74 20 74 68 65 0a 20 20 20 20 2a 2a 20 65  put the.    ** e
f1e0: 72 72 6f 72 20 6d 65 73 73 61 67 65 0a 20 20 20  rror message.   
f1f0: 20 2a 2f 0a 20 20 20 20 73 74 61 74 69 63 20 63   */.    static c
f200: 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20  onst VdbeOpList 
f210: 65 6e 64 43 6f 64 65 5b 5d 20 3d 20 7b 0a 20 20  endCode[] = {.  
f220: 20 20 20 20 7b 20 4f 50 5f 41 64 64 49 6d 6d 2c      { OP_AddImm,
f230: 20 20 20 20 20 20 31 2c 20 30 2c 20 20 20 20 20        1, 0,     
f240: 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a     0},    /* 0 *
f250: 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 4e  /.      { OP_IfN
f260: 65 67 2c 20 20 20 20 20 20 20 31 2c 20 30 2c 20  eg,       1, 0, 
f270: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a         0},    /*
f280: 20 31 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50   1 */.      { OP
f290: 5f 53 74 72 69 6e 67 38 2c 20 20 20 20 20 30 2c  _String8,     0,
f2a0: 20 33 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20   3,        0},  
f2b0: 20 20 2f 2a 20 32 20 2a 2f 0a 20 20 20 20 20 20    /* 2 */.      
f2c0: 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  { OP_ResultRow, 
f2d0: 20 20 33 2c 20 31 2c 20 20 20 20 20 20 20 20 30    3, 1,        0
f2e0: 7d 2c 0a 20 20 20 20 7d 3b 0a 0a 20 20 20 20 69  },.    };..    i
f2f0: 6e 74 20 69 73 51 75 69 63 6b 20 3d 20 28 73 71  nt isQuick = (sq
f300: 6c 69 74 65 33 54 6f 6c 6f 77 65 72 28 7a 4c 65  lite3Tolower(zLe
f310: 66 74 5b 30 5d 29 3d 3d 27 71 27 29 3b 0a 0a 20  ft[0])=='q');.. 
f320: 20 20 20 2f 2a 20 49 66 20 74 68 65 20 50 52 41     /* If the PRA
f330: 47 4d 41 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20  GMA command was 
f340: 6f 66 20 74 68 65 20 66 6f 72 6d 20 22 50 52 41  of the form "PRA
f350: 47 4d 41 20 3c 64 62 3e 2e 69 6e 74 65 67 72 69  GMA <db>.integri
f360: 74 79 5f 63 68 65 63 6b 22 2c 0a 20 20 20 20 2a  ty_check",.    *
f370: 2a 20 74 68 65 6e 20 69 44 62 20 69 73 20 73 65  * then iDb is se
f380: 74 20 74 6f 20 74 68 65 20 69 6e 64 65 78 20 6f  t to the index o
f390: 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69  f the database i
f3a0: 64 65 6e 74 69 66 69 65 64 20 62 79 20 3c 64 62  dentified by <db
f3b0: 3e 2e 0a 20 20 20 20 2a 2a 20 49 6e 20 74 68 69  >..    ** In thi
f3c0: 73 20 63 61 73 65 2c 20 74 68 65 20 69 6e 74 65  s case, the inte
f3d0: 67 72 69 74 79 20 6f 66 20 64 61 74 61 62 61 73  grity of databas
f3e0: 65 20 69 44 62 20 6f 6e 6c 79 20 69 73 20 76 65  e iDb only is ve
f3f0: 72 69 66 69 65 64 20 62 79 0a 20 20 20 20 2a 2a  rified by.    **
f400: 20 74 68 65 20 56 44 42 45 20 63 72 65 61 74 65   the VDBE create
f410: 64 20 62 65 6c 6f 77 2e 0a 20 20 20 20 2a 2a 0a  d below..    **.
f420: 20 20 20 20 2a 2a 20 4f 74 68 65 72 77 69 73 65      ** Otherwise
f430: 2c 20 69 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64  , if the command
f440: 20 77 61 73 20 73 69 6d 70 6c 79 20 22 50 52 41   was simply "PRA
f450: 47 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68  GMA integrity_ch
f460: 65 63 6b 22 20 28 6f 72 0a 20 20 20 20 2a 2a 20  eck" (or.    ** 
f470: 22 50 52 41 47 4d 41 20 71 75 69 63 6b 5f 63 68  "PRAGMA quick_ch
f480: 65 63 6b 22 29 2c 20 74 68 65 6e 20 69 44 62 20  eck"), then iDb 
f490: 69 73 20 73 65 74 20 74 6f 20 30 2e 20 49 6e 20  is set to 0. In 
f4a0: 74 68 69 73 20 63 61 73 65 2c 20 73 65 74 20 69  this case, set i
f4b0: 44 62 0a 20 20 20 20 2a 2a 20 74 6f 20 2d 31 20  Db.    ** to -1 
f4c0: 68 65 72 65 2c 20 74 6f 20 69 6e 64 69 63 61 74  here, to indicat
f4d0: 65 20 74 68 61 74 20 74 68 65 20 56 44 42 45 20  e that the VDBE 
f4e0: 73 68 6f 75 6c 64 20 76 65 72 69 66 79 20 74 68  should verify th
f4f0: 65 20 69 6e 74 65 67 72 69 74 79 0a 20 20 20 20  e integrity.    
f500: 2a 2a 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68  ** of all attach
f510: 65 64 20 64 61 74 61 62 61 73 65 73 2e 20 20 2a  ed databases.  *
f520: 2f 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44  /.    assert( iD
f530: 62 3e 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65  b>=0 );.    asse
f540: 72 74 28 20 69 44 62 3d 3d 30 20 7c 7c 20 70 49  rt( iDb==0 || pI
f550: 64 32 2d 3e 7a 20 29 3b 0a 20 20 20 20 69 66 28  d2->z );.    if(
f560: 20 70 49 64 32 2d 3e 7a 3d 3d 30 20 29 20 69 44   pId2->z==0 ) iD
f570: 62 20 3d 20 2d 31 3b 0a 0a 20 20 20 20 2f 2a 20  b = -1;..    /* 
f580: 49 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 56  Initialize the V
f590: 44 42 45 20 70 72 6f 67 72 61 6d 20 2a 2f 0a 20  DBE program */. 
f5a0: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
f5b0: 3d 20 36 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  = 6;.    sqlite3
f5c0: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
f5d0: 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 1);.    sqlite
f5e0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
f5f0: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
f600: 4d 45 2c 20 22 69 6e 74 65 67 72 69 74 79 5f 63  ME, "integrity_c
f610: 68 65 63 6b 22 2c 20 53 51 4c 49 54 45 5f 53 54  heck", SQLITE_ST
f620: 41 54 49 43 29 3b 0a 0a 20 20 20 20 2f 2a 20 53  ATIC);..    /* S
f630: 65 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 65  et the maximum e
f640: 72 72 6f 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20  rror count */.  
f650: 20 20 6d 78 45 72 72 20 3d 20 53 51 4c 49 54 45    mxErr = SQLITE
f660: 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
f670: 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20 20 20  _ERROR_MAX;.    
f680: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
f690: 20 20 20 20 73 71 6c 69 74 65 33 47 65 74 49 6e      sqlite3GetIn
f6a0: 74 33 32 28 7a 52 69 67 68 74 2c 20 26 6d 78 45  t32(zRight, &mxE
f6b0: 72 72 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6d  rr);.      if( m
f6c0: 78 45 72 72 3c 3d 30 20 29 7b 0a 20 20 20 20 20  xErr<=0 ){.     
f6d0: 20 20 20 6d 78 45 72 72 20 3d 20 53 51 4c 49 54     mxErr = SQLIT
f6e0: 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43  E_INTEGRITY_CHEC
f6f0: 4b 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20 20  K_ERROR_MAX;.   
f700: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73     }.    }.    s
f710: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
f720: 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
f730: 6d 78 45 72 72 2c 20 31 29 3b 20 20 2f 2a 20 72  mxErr, 1);  /* r
f740: 65 67 5b 31 5d 20 68 6f 6c 64 73 20 65 72 72 6f  eg[1] holds erro
f750: 72 73 20 6c 65 66 74 20 2a 2f 0a 0a 20 20 20 20  rs left */..    
f760: 2f 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67 72 69  /* Do an integri
f770: 74 79 20 63 68 65 63 6b 20 6f 6e 20 65 61 63 68  ty check on each
f780: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a   database file *
f790: 2f 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69  /.    for(i=0; i
f7a0: 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a  <db->nDb; i++){.
f7b0: 20 20 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a        HashElem *
f7c0: 78 3b 0a 20 20 20 20 20 20 48 61 73 68 20 2a 70  x;.      Hash *p
f7d0: 54 62 6c 73 3b 0a 20 20 20 20 20 20 69 6e 74 20  Tbls;.      int 
f7e0: 63 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20  cnt = 0;..      
f7f0: 69 66 28 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20  if( OMIT_TEMPDB 
f800: 26 26 20 69 3d 3d 31 20 29 20 63 6f 6e 74 69 6e  && i==1 ) contin
f810: 75 65 3b 0a 20 20 20 20 20 20 69 66 28 20 69 44  ue;.      if( iD
f820: 62 3e 3d 30 20 26 26 20 69 21 3d 69 44 62 20 29  b>=0 && i!=iDb )
f830: 20 63 6f 6e 74 69 6e 75 65 3b 0a 0a 20 20 20 20   continue;..    
f840: 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72    sqlite3CodeVer
f850: 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65  ifySchema(pParse
f860: 2c 20 69 29 3b 0a 20 20 20 20 20 20 61 64 64 72  , i);.      addr
f870: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
f880: 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73  dOp1(v, OP_IfPos
f890: 2c 20 31 29 3b 20 2f 2a 20 48 61 6c 74 20 69 66  , 1); /* Halt if
f8a0: 20 6f 75 74 20 6f 66 20 65 72 72 6f 72 73 20 2a   out of errors *
f8b0: 2f 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  /.      sqlite3V
f8c0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
f8d0: 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20  Halt, 0, 0);.   
f8e0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75     sqlite3VdbeJu
f8f0: 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b  mpHere(v, addr);
f900: 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 61 6e  ..      /* Do an
f910: 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b   integrity check
f920: 20 6f 66 20 74 68 65 20 42 2d 54 72 65 65 0a 20   of the B-Tree. 
f930: 20 20 20 20 20 2a 2a 0a 20 20 20 20 20 20 2a 2a       **.      **
f940: 20 42 65 67 69 6e 20 62 79 20 66 69 6c 6c 69 6e   Begin by fillin
f950: 67 20 72 65 67 69 73 74 65 72 73 20 32 2c 20 33  g registers 2, 3
f960: 2c 20 2e 2e 2e 20 77 69 74 68 20 74 68 65 20 72  , ... with the r
f970: 6f 6f 74 20 70 61 67 65 73 20 6e 75 6d 62 65 72  oot pages number
f980: 73 0a 20 20 20 20 20 20 2a 2a 20 66 6f 72 20 61  s.      ** for a
f990: 6c 6c 20 74 61 62 6c 65 73 20 61 6e 64 20 69 6e  ll tables and in
f9a0: 64 69 63 65 73 20 69 6e 20 74 68 65 20 64 61 74  dices in the dat
f9b0: 61 62 61 73 65 2e 0a 20 20 20 20 20 20 2a 2f 0a  abase..      */.
f9c0: 20 20 20 20 20 20 61 73 73 65 72 74 28 20 73 71        assert( sq
f9d0: 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
f9e0: 48 65 6c 64 28 64 62 2c 20 69 2c 20 30 29 20 29  Held(db, i, 0) )
f9f0: 3b 0a 20 20 20 20 20 20 70 54 62 6c 73 20 3d 20  ;.      pTbls = 
fa00: 26 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 53 63 68  &db->aDb[i].pSch
fa10: 65 6d 61 2d 3e 74 62 6c 48 61 73 68 3b 0a 20 20  ema->tblHash;.  
fa20: 20 20 20 20 66 6f 72 28 78 3d 73 71 6c 69 74 65      for(x=sqlite
fa30: 48 61 73 68 46 69 72 73 74 28 70 54 62 6c 73 29  HashFirst(pTbls)
fa40: 3b 20 78 3b 20 78 3d 73 71 6c 69 74 65 48 61 73  ; x; x=sqliteHas
fa50: 68 4e 65 78 74 28 78 29 29 7b 0a 20 20 20 20 20  hNext(x)){.     
fa60: 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d     Table *pTab =
fa70: 20 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28   sqliteHashData(
fa80: 78 29 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65  x);.        Inde
fa90: 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 20 20 20  x *pIdx;.       
faa0: 20 69 66 28 20 48 61 73 52 6f 77 69 64 28 70 54   if( HasRowid(pT
fab0: 61 62 29 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ab) ){.         
fac0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
fad0: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
fae0: 2c 20 70 54 61 62 2d 3e 74 6e 75 6d 2c 20 32 2b  , pTab->tnum, 2+
faf0: 63 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  cnt);.          
fb00: 56 64 62 65 43 6f 6d 6d 65 6e 74 28 28 76 2c 20  VdbeComment((v, 
fb10: 22 25 73 22 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d  "%s", pTab->zNam
fb20: 65 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20 63  e));.          c
fb30: 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a  nt++;.        }.
fb40: 20 20 20 20 20 20 20 20 66 6f 72 28 70 49 64 78          for(pIdx
fb50: 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70  =pTab->pIndex; p
fb60: 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e  Idx; pIdx=pIdx->
fb70: 70 4e 65 78 74 29 7b 0a 20 20 20 20 20 20 20 20  pNext){.        
fb80: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
fb90: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
fba0: 72 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c 20 32  r, pIdx->tnum, 2
fbb0: 2b 63 6e 74 29 3b 0a 20 20 20 20 20 20 20 20 20  +cnt);.         
fbc0: 20 56 64 62 65 43 6f 6d 6d 65 6e 74 28 28 76 2c   VdbeComment((v,
fbd0: 20 22 25 73 22 2c 20 70 49 64 78 2d 3e 7a 4e 61   "%s", pIdx->zNa
fbe0: 6d 65 29 29 3b 0a 20 20 20 20 20 20 20 20 20 20  me));.          
fbf0: 63 6e 74 2b 2b 3b 0a 20 20 20 20 20 20 20 20 7d  cnt++;.        }
fc00: 0a 20 20 20 20 20 20 7d 0a 0a 20 20 20 20 20 20  .      }..      
fc10: 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 73 75 66  /* Make sure suf
fc20: 66 69 63 69 65 6e 74 20 6e 75 6d 62 65 72 20 6f  ficient number o
fc30: 66 20 72 65 67 69 73 74 65 72 73 20 68 61 76 65  f registers have
fc40: 20 62 65 65 6e 20 61 6c 6c 6f 63 61 74 65 64 20   been allocated 
fc50: 2a 2f 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d  */.      pParse-
fc60: 3e 6e 4d 65 6d 20 3d 20 4d 41 58 28 20 70 50 61  >nMem = MAX( pPa
fc70: 72 73 65 2d 3e 6e 4d 65 6d 2c 20 63 6e 74 2b 38  rse->nMem, cnt+8
fc80: 20 29 3b 0a 0a 20 20 20 20 20 20 2f 2a 20 44 6f   );..      /* Do
fc90: 20 74 68 65 20 62 2d 74 72 65 65 20 69 6e 74 65   the b-tree inte
fca0: 67 72 69 74 79 20 63 68 65 63 6b 73 20 2a 2f 0a  grity checks */.
fcb0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
fcc0: 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 49 6e  eAddOp3(v, OP_In
fcd0: 74 65 67 72 69 74 79 43 6b 2c 20 32 2c 20 63 6e  tegrityCk, 2, cn
fce0: 74 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c  t, 1);.      sql
fcf0: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 35  ite3VdbeChangeP5
fd00: 28 76 2c 20 28 75 38 29 69 29 3b 0a 20 20 20 20  (v, (u8)i);.    
fd10: 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33    addr = sqlite3
fd20: 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50  VdbeAddOp1(v, OP
fd30: 5f 49 73 4e 75 6c 6c 2c 20 32 29 3b 0a 20 20 20  _IsNull, 2);.   
fd40: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
fd50: 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
fd60: 67 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20  g8, 0, 3, 0,.   
fd70: 20 20 20 20 20 20 73 71 6c 69 74 65 33 4d 50 72        sqlite3MPr
fd80: 69 6e 74 66 28 64 62 2c 20 22 2a 2a 2a 20 69 6e  intf(db, "*** in
fd90: 20 64 61 74 61 62 61 73 65 20 25 73 20 2a 2a 2a   database %s ***
fda0: 5c 6e 22 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  \n", db->aDb[i].
fdb0: 7a 4e 61 6d 65 29 2c 0a 20 20 20 20 20 20 20 20  zName),.        
fdc0: 20 50 34 5f 44 59 4e 41 4d 49 43 29 3b 0a 20 20   P4_DYNAMIC);.  
fdd0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
fde0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4d 6f 76 65  ddOp2(v, OP_Move
fdf0: 2c 20 32 2c 20 34 29 3b 0a 20 20 20 20 20 20 73  , 2, 4);.      s
fe00: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
fe10: 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34  (v, OP_Concat, 4
fe20: 2c 20 33 2c 20 32 29 3b 0a 20 20 20 20 20 20 73  , 3, 2);.      s
fe30: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
fe40: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
fe50: 2c 20 32 2c 20 31 29 3b 0a 20 20 20 20 20 20 73  , 2, 1);.      s
fe60: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
fe70: 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 0a 20 20  re(v, addr);..  
fe80: 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75 72 65      /* Make sure
fe90: 20 61 6c 6c 20 74 68 65 20 69 6e 64 69 63 65 73   all the indices
fea0: 20 61 72 65 20 63 6f 6e 73 74 72 75 63 74 65 64   are constructed
feb0: 20 63 6f 72 72 65 63 74 6c 79 2e 0a 20 20 20 20   correctly..    
fec0: 20 20 2a 2f 0a 20 20 20 20 20 20 66 6f 72 28 78    */.      for(x
fed0: 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74  =sqliteHashFirst
fee0: 28 70 54 62 6c 73 29 3b 20 78 20 26 26 20 21 69  (pTbls); x && !i
fef0: 73 51 75 69 63 6b 3b 20 78 3d 73 71 6c 69 74 65  sQuick; x=sqlite
ff00: 48 61 73 68 4e 65 78 74 28 78 29 29 7b 0a 20 20  HashNext(x)){.  
ff10: 20 20 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61        Table *pTa
ff20: 62 20 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61  b = sqliteHashDa
ff30: 74 61 28 78 29 3b 0a 20 20 20 20 20 20 20 20 49  ta(x);.        I
ff40: 6e 64 65 78 20 2a 70 49 64 78 2c 20 2a 70 50 6b  ndex *pIdx, *pPk
ff50: 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 6c 6f  ;.        int lo
ff60: 6f 70 54 6f 70 3b 0a 20 20 20 20 20 20 20 20 69  opTop;.        i
ff70: 6e 74 20 69 44 61 74 61 43 75 72 2c 20 69 49 64  nt iDataCur, iId
ff80: 78 43 75 72 3b 0a 0a 20 20 20 20 20 20 20 20 69  xCur;..        i
ff90: 66 28 20 70 54 61 62 2d 3e 70 49 6e 64 65 78 3d  f( pTab->pIndex=
ffa0: 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20  =0 ) continue;. 
ffb0: 20 20 20 20 20 20 20 70 50 6b 20 3d 20 48 61 73         pPk = Has
ffc0: 52 6f 77 69 64 28 70 54 61 62 29 20 3f 20 30 20  Rowid(pTab) ? 0 
ffd0: 3a 20 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79  : sqlite3Primary
ffe0: 4b 65 79 49 6e 64 65 78 28 70 54 61 62 29 3b 0a  KeyIndex(pTab);.
fff0: 20 20 20 20 20 20 20 20 61 64 64 72 20 3d 20 73          addr = s
10000 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
10010 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29  (v, OP_IfPos, 1)
10020 3b 20 20 2f 2a 20 53 74 6f 70 20 69 66 20 6f 75  ;  /* Stop if ou
10030 74 20 6f 66 20 65 72 72 6f 72 73 20 2a 2f 0a 20  t of errors */. 
10040 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
10050 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48  beAddOp2(v, OP_H
10060 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20  alt, 0, 0);.    
10070 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
10080 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 29  umpHere(v, addr)
10090 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
100a0 33 45 78 70 72 43 61 63 68 65 43 6c 65 61 72 28  3ExprCacheClear(
100b0 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 20  pParse);.       
100c0 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 61 62 6c   sqlite3OpenTabl
100d0 65 41 6e 64 49 6e 64 69 63 65 73 28 70 50 61 72  eAndIndices(pPar
100e0 73 65 2c 20 70 54 61 62 2c 20 4f 50 5f 4f 70 65  se, pTab, OP_Ope
100f0 6e 52 65 61 64 2c 0a 20 20 20 20 20 20 20 20 20  nRead,.         
10100 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10110 20 20 20 20 20 20 20 20 20 20 31 2c 20 26 69 44            1, &iD
10120 61 74 61 43 75 72 2c 20 26 69 49 64 78 43 75 72  ataCur, &iIdxCur
10130 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
10140 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
10150 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20 37  OP_Integer, 0, 7
10160 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a  );.        for(j
10170 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70  =0, pIdx=pTab->p
10180 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64  Index; pIdx; pId
10190 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a  x=pIdx->pNext, j
101a0 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73  ++){.          s
101b0 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
101c0 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20  (v, OP_Integer, 
101d0 30 2c 20 38 2b 6a 29 3b 20 2f 2a 20 69 6e 64 65  0, 8+j); /* inde
101e0 78 20 65 6e 74 72 69 65 73 20 63 6f 75 6e 74 65  x entries counte
101f0 72 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20  r */.        }. 
10200 20 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e         pParse->n
10210 4d 65 6d 20 3d 20 4d 41 58 28 70 50 61 72 73 65  Mem = MAX(pParse
10220 2d 3e 6e 4d 65 6d 2c 20 38 2b 6a 29 3b 0a 20 20  ->nMem, 8+j);.  
10230 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10240 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
10250 77 69 6e 64 2c 20 69 44 61 74 61 43 75 72 2c 20  wind, iDataCur, 
10260 30 29 3b 0a 20 20 20 20 20 20 20 20 6c 6f 6f 70  0);.        loop
10270 54 6f 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62  Top = sqlite3Vdb
10280 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64  eAddOp2(v, OP_Ad
10290 64 49 6d 6d 2c 20 37 2c 20 31 29 3b 0a 20 20 20  dImm, 7, 1);.   
102a0 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49       for(j=0, pI
102b0 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b  dx=pTab->pIndex;
102c0 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78   pIdx; pIdx=pIdx
102d0 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20  ->pNext, j++){. 
102e0 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a 6d 70           int jmp
102f0 32 2c 20 6a 6d 70 33 2c 20 6a 6d 70 34 3b 0a 20  2, jmp3, jmp4;. 
10300 20 20 20 20 20 20 20 20 20 69 6e 74 20 72 31 3b           int r1;
10310 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70  .          if( p
10320 50 6b 3d 3d 70 49 64 78 20 29 20 63 6f 6e 74 69  Pk==pIdx ) conti
10330 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 72  nue;.          r
10340 31 20 3d 20 73 71 6c 69 74 65 33 47 65 6e 65 72  1 = sqlite3Gener
10350 61 74 65 49 6e 64 65 78 4b 65 79 28 70 50 61 72  ateIndexKey(pPar
10360 73 65 2c 20 70 49 64 78 2c 20 69 44 61 74 61 43  se, pIdx, iDataC
10370 75 72 2c 20 30 2c 20 30 2c 20 26 6a 6d 70 33 29  ur, 0, 0, &jmp3)
10380 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
10390 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
103a0 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 38 2b 6a 2c   OP_AddImm, 8+j,
103b0 20 31 29 3b 20 20 2f 2a 20 69 6e 63 72 65 6d 65   1);  /* increme
103c0 6e 74 20 65 6e 74 72 79 20 63 6f 75 6e 74 20 2a  nt entry count *
103d0 2f 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70 32  /.          jmp2
103e0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
103f0 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46 6f  dOp4Int(v, OP_Fo
10400 75 6e 64 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20  und, iIdxCur+j, 
10410 30 2c 20 72 31 2c 0a 20 20 20 20 20 20 20 20 20  0, r1,.         
10420 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10430 20 20 20 20 20 20 20 20 20 20 20 20 20 70 49 64               pId
10440 78 2d 3e 6e 4b 65 79 43 6f 6c 2b 31 29 3b 0a 20  x->nKeyCol+1);. 
10450 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
10460 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
10470 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b  _AddImm, 1, -1);
10480 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20 65 72   /* Decrement er
10490 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20  ror limit */.   
104a0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
104b0 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
104c0 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c  tring8, 0, 3, 0,
104d0 20 22 72 6f 77 20 22 2c 20 50 34 5f 53 54 41 54   "row ", P4_STAT
104e0 49 43 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  IC);.          s
104f0 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
10500 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 37  (v, OP_Concat, 7
10510 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20 20 20  , 3, 3);.       
10520 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
10530 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
10540 67 38 2c 20 30 2c 20 34 2c 20 30 2c 20 22 20 6d  g8, 0, 4, 0, " m
10550 69 73 73 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65  issing from inde
10560 78 20 22 2c 0a 20 20 20 20 20 20 20 20 20 20 20  x ",.           
10570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10580 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20   P4_STATIC);.   
10590 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
105a0 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43  beAddOp3(v, OP_C
105b0 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20 33 29 3b  oncat, 4, 3, 3);
105c0 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
105d0 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
105e0 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 34  OP_String8, 0, 4
105f0 2c 20 30 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65  , 0, pIdx->zName
10600 2c 20 50 34 5f 54 52 41 4e 53 49 45 4e 54 29 3b  , P4_TRANSIENT);
10610 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
10620 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
10630 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c  OP_Concat, 4, 3,
10640 20 33 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   3);.          s
10650 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
10660 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
10670 2c 20 33 2c 20 31 29 3b 0a 20 20 20 20 20 20 20  , 3, 1);.       
10680 20 20 20 6a 6d 70 34 20 3d 20 73 71 6c 69 74 65     jmp4 = sqlite
10690 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f  3VdbeAddOp1(v, O
106a0 50 5f 49 66 50 6f 73 2c 20 31 29 3b 0a 20 20 20  P_IfPos, 1);.   
106b0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
106c0 62 65 41 64 64 4f 70 30 28 76 2c 20 4f 50 5f 48  beAddOp0(v, OP_H
106d0 61 6c 74 29 3b 0a 20 20 20 20 20 20 20 20 20 20  alt);.          
106e0 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
106f0 65 72 65 28 76 2c 20 6a 6d 70 34 29 3b 0a 20 20  ere(v, jmp4);.  
10700 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
10710 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a  dbeJumpHere(v, j
10720 6d 70 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20  mp2);.          
10730 73 71 6c 69 74 65 33 56 64 62 65 52 65 73 6f 6c  sqlite3VdbeResol
10740 76 65 4c 61 62 65 6c 28 76 2c 20 6a 6d 70 33 29  veLabel(v, jmp3)
10750 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
10760 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
10770 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e 65 78 74  ddOp2(v, OP_Next
10780 2c 20 69 44 61 74 61 43 75 72 2c 20 6c 6f 6f 70  , iDataCur, loop
10790 54 6f 70 29 3b 0a 20 20 20 20 20 20 20 20 73 71  Top);.        sq
107a0 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72  lite3VdbeJumpHer
107b0 65 28 76 2c 20 6c 6f 6f 70 54 6f 70 2d 31 29 3b  e(v, loopTop-1);
107c0 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
107d0 4f 4d 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 0a  OMIT_BTREECOUNT.
107e0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
107f0 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
10800 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30  String8, 0, 2, 0
10810 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
10820 20 20 20 20 20 20 20 20 22 77 72 6f 6e 67 20 23          "wrong #
10830 20 6f 66 20 65 6e 74 72 69 65 73 20 69 6e 20 69   of entries in i
10840 6e 64 65 78 20 22 2c 20 50 34 5f 53 54 41 54 49  ndex ", P4_STATI
10850 43 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28  C);.        for(
10860 6a 3d 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e  j=0, pIdx=pTab->
10870 70 49 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49  pIndex; pIdx; pI
10880 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20  dx=pIdx->pNext, 
10890 6a 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  j++){.          
108a0 69 66 28 20 70 50 6b 3d 3d 70 49 64 78 20 29 20  if( pPk==pIdx ) 
108b0 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20  continue;.      
108c0 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74      addr = sqlit
108d0 65 33 56 64 62 65 43 75 72 72 65 6e 74 41 64 64  e3VdbeCurrentAdd
108e0 72 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  r(v);.          
108f0 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
10900 32 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31  2(v, OP_IfPos, 1
10910 2c 20 61 64 64 72 2b 32 29 3b 0a 20 20 20 20 20  , addr+2);.     
10920 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10930 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c  AddOp2(v, OP_Hal
10940 74 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20  t, 0, 0);.      
10950 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
10960 64 64 4f 70 32 28 76 2c 20 4f 50 5f 43 6f 75 6e  ddOp2(v, OP_Coun
10970 74 2c 20 69 49 64 78 43 75 72 2b 6a 2c 20 33 29  t, iIdxCur+j, 3)
10980 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
10990 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
109a0 20 4f 50 5f 45 71 2c 20 38 2b 6a 2c 20 61 64 64   OP_Eq, 8+j, add
109b0 72 2b 38 2c 20 33 29 3b 0a 20 20 20 20 20 20 20  r+8, 3);.       
109c0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
109d0 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d  dOp2(v, OP_AddIm
109e0 6d 2c 20 31 2c 20 2d 31 29 3b 0a 20 20 20 20 20  m, 1, -1);.     
109f0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10a00 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
10a10 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 70  ing8, 0, 3, 0, p
10a20 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 50 34 5f 54  Idx->zName, P4_T
10a30 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20  RANSIENT);.     
10a40 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10a50 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e  AddOp3(v, OP_Con
10a60 63 61 74 2c 20 33 2c 20 32 2c 20 37 29 3b 0a 20  cat, 3, 2, 7);. 
10a70 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
10a80 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
10a90 5f 52 65 73 75 6c 74 52 6f 77 2c 20 37 2c 20 31  _ResultRow, 7, 1
10aa0 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 23 65 6e  );.        }.#en
10ab0 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
10ac0 49 54 5f 42 54 52 45 45 43 4f 55 4e 54 20 2a 2f  IT_BTREECOUNT */
10ad0 0a 20 20 20 20 20 20 7d 20 0a 20 20 20 20 7d 0a  .      } .    }.
10ae0 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74      addr = sqlit
10af0 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28  e3VdbeAddOpList(
10b00 76 2c 20 41 72 72 61 79 53 69 7a 65 28 65 6e 64  v, ArraySize(end
10b10 43 6f 64 65 29 2c 20 65 6e 64 43 6f 64 65 29 3b  Code), endCode);
10b20 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
10b30 43 68 61 6e 67 65 50 32 28 76 2c 20 61 64 64 72  ChangeP2(v, addr
10b40 2c 20 2d 6d 78 45 72 72 29 3b 0a 20 20 20 20 73  , -mxErr);.    s
10b50 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
10b60 72 65 28 76 2c 20 61 64 64 72 2b 31 29 3b 0a 20  re(v, addr+1);. 
10b70 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
10b80 61 6e 67 65 50 34 28 76 2c 20 61 64 64 72 2b 32  angeP4(v, addr+2
10b90 2c 20 22 6f 6b 22 2c 20 50 34 5f 53 54 41 54 49  , "ok", P4_STATI
10ba0 43 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  C);.  }.  break;
10bb0 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
10bc0 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59  E_OMIT_INTEGRITY
10bd0 5f 43 48 45 43 4b 20 2a 2f 0a 0a 23 69 66 6e 64  _CHECK */..#ifnd
10be0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ef SQLITE_OMIT_U
10bf0 54 46 31 36 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20  TF16.  /*.  **  
10c00 20 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67   PRAGMA encoding
10c10 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 65  .  **   PRAGMA e
10c20 6e 63 6f 64 69 6e 67 20 3d 20 22 75 74 66 2d 38  ncoding = "utf-8
10c30 22 7c 22 75 74 66 2d 31 36 22 7c 22 75 74 66 2d  "|"utf-16"|"utf-
10c40 31 36 6c 65 22 7c 22 75 74 66 2d 31 36 62 65 22  16le"|"utf-16be"
10c50 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 69 74  .  **.  ** In it
10c60 73 20 66 69 72 73 74 20 66 6f 72 6d 2c 20 74 68  s first form, th
10c70 69 73 20 70 72 61 67 6d 61 20 72 65 74 75 72 6e  is pragma return
10c80 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20 6f  s the encoding o
10c90 66 20 74 68 65 20 6d 61 69 6e 0a 20 20 2a 2a 20  f the main.  ** 
10ca0 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68 65  database. If the
10cb0 20 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f 74   database is not
10cc0 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 69 74   initialized, it
10cd0 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64 20   is initialized 
10ce0 6e 6f 77 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  now..  **.  ** T
10cf0 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 6f  he second form o
10d00 66 20 74 68 69 73 20 70 72 61 67 6d 61 20 69 73  f this pragma is
10d10 20 61 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65 20   a no-op if the 
10d20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66 69  main database fi
10d30 6c 65 0a 20 20 2a 2a 20 68 61 73 20 6e 6f 74 20  le.  ** has not 
10d40 61 6c 72 65 61 64 79 20 62 65 65 6e 20 69 6e 69  already been ini
10d50 74 69 61 6c 69 7a 65 64 2e 20 49 6e 20 74 68 69  tialized. In thi
10d60 73 20 63 61 73 65 20 69 74 20 73 65 74 73 20 74  s case it sets t
10d70 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20  he default.  ** 
10d80 65 6e 63 6f 64 69 6e 67 20 74 68 61 74 20 77 69  encoding that wi
10d90 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  ll be used for t
10da0 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65  he main database
10db0 20 66 69 6c 65 20 69 66 20 61 20 6e 65 77 20 66   file if a new f
10dc0 69 6c 65 0a 20 20 2a 2a 20 69 73 20 63 72 65 61  ile.  ** is crea
10dd0 74 65 64 2e 20 49 66 20 61 6e 20 65 78 69 73 74  ted. If an exist
10de0 69 6e 67 20 6d 61 69 6e 20 64 61 74 61 62 61 73  ing main databas
10df0 65 20 66 69 6c 65 20 69 73 20 6f 70 65 6e 65 64  e file is opened
10e00 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20  , then the.  ** 
10e10 64 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e 63  default text enc
10e20 6f 64 69 6e 67 20 66 6f 72 20 74 68 65 20 65 78  oding for the ex
10e30 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65 20  isting database 
10e40 69 73 20 75 73 65 64 2e 0a 20 20 2a 2a 20 0a 20  is used..  ** . 
10e50 20 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65 73   ** In all cases
10e60 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20 63   new databases c
10e70 72 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 65  reated using the
10e80 20 41 54 54 41 43 48 20 63 6f 6d 6d 61 6e 64 20   ATTACH command 
10e90 61 72 65 0a 20 20 2a 2a 20 63 72 65 61 74 65 64  are.  ** created
10ea0 20 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d 65   to use the same
10eb0 20 64 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e   default text en
10ec0 63 6f 64 69 6e 67 20 61 73 20 74 68 65 20 6d 61  coding as the ma
10ed0 69 6e 20 64 61 74 61 62 61 73 65 2e 20 49 66 0a  in database. If.
10ee0 20 20 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64 61    ** the main da
10ef0 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20 62  tabase has not b
10f00 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 20  een initialized 
10f10 61 6e 64 2f 6f 72 20 63 72 65 61 74 65 64 20 77  and/or created w
10f20 68 65 6e 20 41 54 54 41 43 48 0a 20 20 2a 2a 20  hen ATTACH.  ** 
10f30 69 73 20 65 78 65 63 75 74 65 64 2c 20 74 68 69  is executed, thi
10f40 73 20 69 73 20 64 6f 6e 65 20 62 65 66 6f 72 65  s is done before
10f50 20 74 68 65 20 41 54 54 41 43 48 20 6f 70 65 72   the ATTACH oper
10f60 61 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a  ation..  **.  **
10f70 20 49 6e 20 74 68 65 20 73 65 63 6f 6e 64 20 66   In the second f
10f80 6f 72 6d 20 74 68 69 73 20 70 72 61 67 6d 61 20  orm this pragma 
10f90 73 65 74 73 20 74 68 65 20 74 65 78 74 20 65 6e  sets the text en
10fa0 63 6f 64 69 6e 67 20 74 6f 20 62 65 20 75 73 65  coding to be use
10fb0 64 20 69 6e 0a 20 20 2a 2a 20 6e 65 77 20 64 61  d in.  ** new da
10fc0 74 61 62 61 73 65 20 66 69 6c 65 73 20 63 72 65  tabase files cre
10fd0 61 74 65 64 20 75 73 69 6e 67 20 74 68 69 73 20  ated using this 
10fe0 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65 2e  database handle.
10ff0 20 49 74 20 69 73 20 6f 6e 6c 79 0a 20 20 2a 2a   It is only.  **
11000 20 75 73 65 66 75 6c 20 69 66 20 69 6e 76 6f 6b   useful if invok
11010 65 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 20 61  ed immediately a
11020 66 74 65 72 20 74 68 65 20 6d 61 69 6e 20 64 61  fter the main da
11030 74 61 62 61 73 65 20 69 0a 20 20 2a 2f 0a 20 20  tabase i.  */.  
11040 63 61 73 65 20 50 72 61 67 54 79 70 5f 45 4e 43  case PragTyp_ENC
11050 4f 44 49 4e 47 3a 20 7b 0a 20 20 20 20 73 74 61  ODING: {.    sta
11060 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74  tic const struct
11070 20 45 6e 63 4e 61 6d 65 20 7b 0a 20 20 20 20 20   EncName {.     
11080 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20 20   char *zName;.  
11090 20 20 20 20 75 38 20 65 6e 63 3b 0a 20 20 20 20      u8 enc;.    
110a0 7d 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20 7b  } encnames[] = {
110b0 0a 20 20 20 20 20 20 7b 20 22 55 54 46 38 22 2c  .      { "UTF8",
110c0 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46 38       SQLITE_UTF8
110d0 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20 20          },.     
110e0 20 7b 20 22 55 54 46 2d 38 22 2c 20 20 20 20 53   { "UTF-8",    S
110f0 51 4c 49 54 45 5f 55 54 46 38 20 20 20 20 20 20  QLITE_UTF8      
11100 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62 65    },  /* Must be
11110 20 65 6c 65 6d 65 6e 74 20 5b 31 5d 20 2a 2f 0a   element [1] */.
11120 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36 6c        { "UTF-16l
11130 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31 36  e", SQLITE_UTF16
11140 4c 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d 75  LE     },  /* Mu
11150 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b 32  st be element [2
11160 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55 54  ] */.      { "UT
11170 46 2d 31 36 62 65 22 2c 20 53 51 4c 49 54 45 5f  F-16be", SQLITE_
11180 55 54 46 31 36 42 45 20 20 20 20 20 7d 2c 20 20  UTF16BE     },  
11190 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d 65  /* Must be eleme
111a0 6e 74 20 5b 33 5d 20 2a 2f 0a 20 20 20 20 20 20  nt [3] */.      
111b0 7b 20 22 55 54 46 31 36 6c 65 22 2c 20 20 53 51  { "UTF16le",  SQ
111c0 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 20 20 20  LITE_UTF16LE    
111d0 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46   },.      { "UTF
111e0 31 36 62 65 22 2c 20 20 53 51 4c 49 54 45 5f 55  16be",  SQLITE_U
111f0 54 46 31 36 42 45 20 20 20 20 20 7d 2c 0a 20 20  TF16BE     },.  
11200 20 20 20 20 7b 20 22 55 54 46 2d 31 36 22 2c 20      { "UTF-16", 
11210 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20 20    0             
11220 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49 54       }, /* SQLIT
11230 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a 2f  E_UTF16NATIVE */
11240 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 22  .      { "UTF16"
11250 2c 20 20 20 20 30 20 20 20 20 20 20 20 20 20 20  ,    0          
11260 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51          }, /* SQ
11270 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45  LITE_UTF16NATIVE
11280 20 2a 2f 0a 20 20 20 20 20 20 7b 20 30 2c 20 30   */.      { 0, 0
11290 20 7d 0a 20 20 20 20 7d 3b 0a 20 20 20 20 63 6f   }.    };.    co
112a0 6e 73 74 20 73 74 72 75 63 74 20 45 6e 63 4e 61  nst struct EncNa
112b0 6d 65 20 2a 70 45 6e 63 3b 0a 20 20 20 20 69 66  me *pEnc;.    if
112c0 28 20 21 7a 52 69 67 68 74 20 29 7b 20 20 20 20  ( !zRight ){    
112d0 2f 2a 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64  /* "PRAGMA encod
112e0 69 6e 67 22 20 2a 2f 0a 20 20 20 20 20 20 69 66  ing" */.      if
112f0 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  ( sqlite3ReadSch
11300 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f  ema(pParse) ) go
11310 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
11320 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
11330 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
11340 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
11350 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
11360 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
11370 2c 20 22 65 6e 63 6f 64 69 6e 67 22 2c 20 53 51  , "encoding", SQ
11380 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
11390 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
113a0 64 64 4f 70 32 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp2(v, OP_Stri
113b0 6e 67 38 2c 20 30 2c 20 31 29 3b 0a 20 20 20 20  ng8, 0, 1);.    
113c0 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d    assert( encnam
113d0 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 38 5d 2e  es[SQLITE_UTF8].
113e0 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 38  enc==SQLITE_UTF8
113f0 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74   );.      assert
11400 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54  ( encnames[SQLIT
11410 45 5f 55 54 46 31 36 4c 45 5d 2e 65 6e 63 3d 3d  E_UTF16LE].enc==
11420 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 29  SQLITE_UTF16LE )
11430 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
11440 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45 5f  encnames[SQLITE_
11450 55 54 46 31 36 42 45 5d 2e 65 6e 63 3d 3d 53 51  UTF16BE].enc==SQ
11460 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29 3b 0a  LITE_UTF16BE );.
11470 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
11480 65 43 68 61 6e 67 65 50 34 28 76 2c 20 2d 31 2c  eChangeP4(v, -1,
11490 20 65 6e 63 6e 61 6d 65 73 5b 45 4e 43 28 70 50   encnames[ENC(pP
114a0 61 72 73 65 2d 3e 64 62 29 5d 2e 7a 4e 61 6d 65  arse->db)].zName
114b0 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P4_STATIC);.  
114c0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
114d0 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
114e0 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20  ltRow, 1, 1);.  
114f0 20 20 7d 65 6c 73 65 7b 20 20 20 20 20 20 20 20    }else{        
11500 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11510 2f 2a 20 22 50 52 41 47 4d 41 20 65 6e 63 6f 64  /* "PRAGMA encod
11520 69 6e 67 20 3d 20 58 58 58 22 20 2a 2f 0a 20 20  ing = XXX" */.  
11530 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 63 68 61 6e      /* Only chan
11540 67 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66 20  ge the value of 
11550 73 71 6c 69 74 65 2e 65 6e 63 20 69 66 20 74 68  sqlite.enc if th
11560 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c  e database handl
11570 65 20 69 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a  e is not.      *
11580 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20 49  * initialized. I
11590 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62  f the main datab
115a0 61 73 65 20 65 78 69 73 74 73 2c 20 74 68 65 20  ase exists, the 
115b0 6e 65 77 20 73 71 6c 69 74 65 2e 65 6e 63 20 76  new sqlite.enc v
115c0 61 6c 75 65 0a 20 20 20 20 20 20 2a 2a 20 77 69  alue.      ** wi
115d0 6c 6c 20 62 65 20 6f 76 65 72 77 72 69 74 74 65  ll be overwritte
115e0 6e 20 77 68 65 6e 20 74 68 65 20 73 63 68 65 6d  n when the schem
115f0 61 20 69 73 20 6e 65 78 74 20 6c 6f 61 64 65 64  a is next loaded
11600 2e 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f 74  . If it does not
11610 0a 20 20 20 20 20 20 2a 2a 20 61 6c 72 65 61 64  .      ** alread
11620 79 20 65 78 69 73 74 73 2c 20 69 74 20 77 69 6c  y exists, it wil
11630 6c 20 62 65 20 63 72 65 61 74 65 64 20 74 6f 20  l be created to 
11640 75 73 65 20 74 68 65 20 6e 65 77 20 65 6e 63 6f  use the new enco
11650 64 69 6e 67 20 76 61 6c 75 65 2e 0a 20 20 20 20  ding value..    
11660 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 0a    */.      if( .
11670 20 20 20 20 20 20 20 20 21 28 44 62 48 61 73 50          !(DbHasP
11680 72 6f 70 65 72 74 79 28 64 62 2c 20 30 2c 20 44  roperty(db, 0, D
11690 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29 29  B_SchemaLoaded))
116a0 20 7c 7c 20 0a 20 20 20 20 20 20 20 20 44 62 48   || .        DbH
116b0 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20 30  asProperty(db, 0
116c0 2c 20 44 42 5f 45 6d 70 74 79 29 20 0a 20 20 20  , DB_Empty) .   
116d0 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 66 6f     ){.        fo
116e0 72 28 70 45 6e 63 3d 26 65 6e 63 6e 61 6d 65 73  r(pEnc=&encnames
116f0 5b 30 5d 3b 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65  [0]; pEnc->zName
11700 3b 20 70 45 6e 63 2b 2b 29 7b 0a 20 20 20 20 20  ; pEnc++){.     
11710 20 20 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69       if( 0==sqli
11720 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68  te3StrICmp(zRigh
11730 74 2c 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 29 20  t, pEnc->zName) 
11740 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 45  ){.            E
11750 4e 43 28 70 50 61 72 73 65 2d 3e 64 62 29 20 3d  NC(pParse->db) =
11760 20 70 45 6e 63 2d 3e 65 6e 63 20 3f 20 70 45 6e   pEnc->enc ? pEn
11770 63 2d 3e 65 6e 63 20 3a 20 53 51 4c 49 54 45 5f  c->enc : SQLITE_
11780 55 54 46 31 36 4e 41 54 49 56 45 3b 0a 20 20 20  UTF16NATIVE;.   
11790 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a           break;.
117a0 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
117b0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
117c0 28 20 21 70 45 6e 63 2d 3e 7a 4e 61 6d 65 20 29  ( !pEnc->zName )
117d0 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
117e0 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72  te3ErrorMsg(pPar
117f0 73 65 2c 20 22 75 6e 73 75 70 70 6f 72 74 65 64  se, "unsupported
11800 20 65 6e 63 6f 64 69 6e 67 3a 20 25 73 22 2c 20   encoding: %s", 
11810 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 20  zRight);.       
11820 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d   }.      }.    }
11830 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65  .  }.  break;.#e
11840 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
11850 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 23 69  MIT_UTF16 */..#i
11860 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
11870 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e  T_SCHEMA_VERSION
11880 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20  _PRAGMAS.  /*.  
11890 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74  **   PRAGMA [dat
118a0 61 62 61 73 65 2e 5d 73 63 68 65 6d 61 5f 76 65  abase.]schema_ve
118b0 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41  rsion.  **   PRA
118c0 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73  GMA [database.]s
118d0 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d 20  chema_version = 
118e0 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20  <integer>.  **. 
118f0 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61   **   PRAGMA [da
11900 74 61 62 61 73 65 2e 5d 75 73 65 72 5f 76 65 72  tabase.]user_ver
11910 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41 47  sion.  **   PRAG
11920 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 75 73  MA [database.]us
11930 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69 6e  er_version = <in
11940 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a  teger>.  **.  **
11950 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
11960 61 73 65 2e 5d 66 72 65 65 6c 69 73 74 5f 63 6f  ase.]freelist_co
11970 75 6e 74 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a  unt = <integer>.
11980 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    **.  **   PRAG
11990 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 61 70  MA [database.]ap
119a0 70 6c 69 63 61 74 69 6f 6e 5f 69 64 0a 20 20 2a  plication_id.  *
119b0 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  *   PRAGMA [data
119c0 62 61 73 65 2e 5d 61 70 70 6c 69 63 61 74 69 6f  base.]applicatio
119d0 6e 5f 69 64 20 3d 20 3c 69 6e 74 65 67 65 72 3e  n_id = <integer>
119e0 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 70  .  **.  ** The p
119f0 72 61 67 6d 61 27 73 20 73 63 68 65 6d 61 5f 76  ragma's schema_v
11a00 65 72 73 69 6f 6e 20 61 6e 64 20 75 73 65 72 5f  ersion and user_
11a10 76 65 72 73 69 6f 6e 20 61 72 65 20 75 73 65 64  version are used
11a20 20 74 6f 20 73 65 74 20 6f 72 20 67 65 74 0a 20   to set or get. 
11a30 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f 66   ** the value of
11a40 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73   the schema-vers
11a50 69 6f 6e 20 61 6e 64 20 75 73 65 72 2d 76 65 72  ion and user-ver
11a60 73 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76 65  sion, respective
11a70 6c 79 2e 20 42 6f 74 68 0a 20 20 2a 2a 20 74 68  ly. Both.  ** th
11a80 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e  e schema-version
11a90 20 61 6e 64 20 74 68 65 20 75 73 65 72 2d 76 65   and the user-ve
11aa0 72 73 69 6f 6e 20 61 72 65 20 33 32 2d 62 69 74  rsion are 32-bit
11ab0 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72 73   signed integers
11ac0 0a 20 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e 20  .  ** stored in 
11ad0 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61  the database hea
11ae0 64 65 72 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  der..  **.  ** T
11af0 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69 65  he schema-cookie
11b00 20 69 73 20 75 73 75 61 6c 6c 79 20 6f 6e 6c 79   is usually only
11b10 20 6d 61 6e 69 70 75 6c 61 74 65 64 20 69 6e 74   manipulated int
11b20 65 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74  ernally by SQLit
11b30 65 2e 20 49 74 0a 20 20 2a 2a 20 69 73 20 69 6e  e. It.  ** is in
11b40 63 72 65 6d 65 6e 74 65 64 20 62 79 20 53 51 4c  cremented by SQL
11b50 69 74 65 20 77 68 65 6e 65 76 65 72 20 74 68 65  ite whenever the
11b60 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
11b70 20 69 73 20 6d 6f 64 69 66 69 65 64 20 28 62 79   is modified (by
11b80 0a 20 20 2a 2a 20 63 72 65 61 74 69 6e 67 20 6f  .  ** creating o
11b90 72 20 64 72 6f 70 70 69 6e 67 20 61 20 74 61 62  r dropping a tab
11ba0 6c 65 20 6f 72 20 69 6e 64 65 78 29 2e 20 54 68  le or index). Th
11bb0 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f 6e  e schema version
11bc0 20 69 73 20 75 73 65 64 20 62 79 0a 20 20 2a 2a   is used by.  **
11bd0 20 53 51 4c 69 74 65 20 65 61 63 68 20 74 69 6d   SQLite each tim
11be0 65 20 61 20 71 75 65 72 79 20 69 73 20 65 78 65  e a query is exe
11bf0 63 75 74 65 64 20 74 6f 20 65 6e 73 75 72 65 20  cuted to ensure 
11c00 74 68 61 74 20 74 68 65 20 69 6e 74 65 72 6e 61  that the interna
11c10 6c 20 63 61 63 68 65 0a 20 20 2a 2a 20 6f 66 20  l cache.  ** of 
11c20 74 68 65 20 73 63 68 65 6d 61 20 75 73 65 64 20  the schema used 
11c30 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20 74  when compiling t
11c40 68 65 20 53 51 4c 20 71 75 65 72 79 20 6d 61 74  he SQL query mat
11c50 63 68 65 73 20 74 68 65 20 73 63 68 65 6d 61 20  ches the schema 
11c60 6f 66 0a 20 20 2a 2a 20 74 68 65 20 64 61 74 61  of.  ** the data
11c70 62 61 73 65 20 61 67 61 69 6e 73 74 20 77 68 69  base against whi
11c80 63 68 20 74 68 65 20 63 6f 6d 70 69 6c 65 64 20  ch the compiled 
11c90 71 75 65 72 79 20 69 73 20 61 63 74 75 61 6c 6c  query is actuall
11ca0 79 20 65 78 65 63 75 74 65 64 2e 0a 20 20 2a 2a  y executed..  **
11cb0 20 53 75 62 76 65 72 74 69 6e 67 20 74 68 69 73   Subverting this
11cc0 20 6d 65 63 68 61 6e 69 73 6d 20 62 79 20 75 73   mechanism by us
11cd0 69 6e 67 20 22 50 52 41 47 4d 41 20 73 63 68 65  ing "PRAGMA sche
11ce0 6d 61 5f 76 65 72 73 69 6f 6e 22 20 74 6f 20 6d  ma_version" to m
11cf0 6f 64 69 66 79 0a 20 20 2a 2a 20 74 68 65 20 73  odify.  ** the s
11d00 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 69 73  chema-version is
11d10 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20 64 61 6e   potentially dan
11d20 67 65 72 6f 75 73 20 61 6e 64 20 6d 61 79 20 6c  gerous and may l
11d30 65 61 64 20 74 6f 20 70 72 6f 67 72 61 6d 0a 20  ead to program. 
11d40 20 2a 2a 20 63 72 61 73 68 65 73 20 6f 72 20 64   ** crashes or d
11d50 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74 69  atabase corrupti
11d60 6f 6e 2e 20 55 73 65 20 77 69 74 68 20 63 61 75  on. Use with cau
11d70 74 69 6f 6e 21 0a 20 20 2a 2a 0a 20 20 2a 2a 20  tion!.  **.  ** 
11d80 54 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f 6e  The user-version
11d90 20 69 73 20 6e 6f 74 20 75 73 65 64 20 69 6e 74   is not used int
11da0 65 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69 74  ernally by SQLit
11db0 65 2e 20 49 74 20 6d 61 79 20 62 65 20 75 73 65  e. It may be use
11dc0 64 20 62 79 0a 20 20 2a 2a 20 61 70 70 6c 69 63  d by.  ** applic
11dd0 61 74 69 6f 6e 73 20 66 6f 72 20 61 6e 79 20 70  ations for any p
11de0 75 72 70 6f 73 65 2e 0a 20 20 2a 2f 0a 20 20 63  urpose..  */.  c
11df0 61 73 65 20 50 72 61 67 54 79 70 5f 48 45 41 44  ase PragTyp_HEAD
11e00 45 52 5f 56 41 4c 55 45 3a 20 7b 0a 20 20 20 20  ER_VALUE: {.    
11e10 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 20 20 20 2f  int iCookie;   /
11e20 2a 20 43 6f 6f 6b 69 65 20 69 6e 64 65 78 2e 20  * Cookie index. 
11e30 31 20 66 6f 72 20 73 63 68 65 6d 61 2d 63 6f 6f  1 for schema-coo
11e40 6b 69 65 2c 20 36 20 66 6f 72 20 75 73 65 72 2d  kie, 6 for user-
11e50 63 6f 6f 6b 69 65 2e 20 2a 2f 0a 20 20 20 20 73  cookie. */.    s
11e60 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74  qlite3VdbeUsesBt
11e70 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20  ree(v, iDb);.   
11e80 20 73 77 69 74 63 68 28 20 7a 4c 65 66 74 5b 30   switch( zLeft[0
11e90 5d 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65 20  ] ){.      case 
11ea0 27 61 27 3a 20 63 61 73 65 20 27 41 27 3a 0a 20  'a': case 'A':. 
11eb0 20 20 20 20 20 20 20 69 43 6f 6f 6b 69 65 20 3d         iCookie =
11ec0 20 42 54 52 45 45 5f 41 50 50 4c 49 43 41 54 49   BTREE_APPLICATI
11ed0 4f 4e 5f 49 44 3b 0a 20 20 20 20 20 20 20 20 62  ON_ID;.        b
11ee0 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73 65  reak;.      case
11ef0 20 27 66 27 3a 20 63 61 73 65 20 27 46 27 3a 0a   'f': case 'F':.
11f00 20 20 20 20 20 20 20 20 69 43 6f 6f 6b 69 65 20          iCookie 
11f10 3d 20 42 54 52 45 45 5f 46 52 45 45 5f 50 41 47  = BTREE_FREE_PAG
11f20 45 5f 43 4f 55 4e 54 3b 0a 20 20 20 20 20 20 20  E_COUNT;.       
11f30 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61   break;.      ca
11f40 73 65 20 27 73 27 3a 20 63 61 73 65 20 27 53 27  se 's': case 'S'
11f50 3a 0a 20 20 20 20 20 20 20 20 69 43 6f 6f 6b 69  :.        iCooki
11f60 65 20 3d 20 42 54 52 45 45 5f 53 43 48 45 4d 41  e = BTREE_SCHEMA
11f70 5f 56 45 52 53 49 4f 4e 3b 0a 20 20 20 20 20 20  _VERSION;.      
11f80 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 64    break;.      d
11f90 65 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 20 20  efault:.        
11fa0 69 43 6f 6f 6b 69 65 20 3d 20 42 54 52 45 45 5f  iCookie = BTREE_
11fb0 55 53 45 52 5f 56 45 52 53 49 4f 4e 3b 0a 20 20  USER_VERSION;.  
11fc0 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
11fd0 20 7d 0a 0a 20 20 20 20 69 66 28 20 7a 52 69 67   }..    if( zRig
11fe0 68 74 20 26 26 20 69 43 6f 6f 6b 69 65 21 3d 42  ht && iCookie!=B
11ff0 54 52 45 45 5f 46 52 45 45 5f 50 41 47 45 5f 43  TREE_FREE_PAGE_C
12000 4f 55 4e 54 20 29 7b 0a 20 20 20 20 20 20 2f 2a  OUNT ){.      /*
12010 20 57 72 69 74 65 20 74 68 65 20 73 70 65 63 69   Write the speci
12020 66 69 65 64 20 63 6f 6f 6b 69 65 20 76 61 6c 75  fied cookie valu
12030 65 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74 69  e */.      stati
12040 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69  c const VdbeOpLi
12050 73 74 20 73 65 74 43 6f 6f 6b 69 65 5b 5d 20 3d  st setCookie[] =
12060 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f   {.        { OP_
12070 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20 20  Transaction,    
12080 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f  0,  1,  0},    /
12090 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b  * 0 */.        {
120a0 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20   OP_Integer,    
120b0 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20      0,  1,  0}, 
120c0 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20     /* 1 */.     
120d0 20 20 20 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b 69     { OP_SetCooki
120e0 65 2c 20 20 20 20 20 20 30 2c 20 20 30 2c 20 20  e,      0,  0,  
120f0 31 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20  1},    /* 2 */. 
12100 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e       };.      in
12110 74 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33  t addr = sqlite3
12120 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c  VdbeAddOpList(v,
12130 20 41 72 72 61 79 53 69 7a 65 28 73 65 74 43 6f   ArraySize(setCo
12140 6f 6b 69 65 29 2c 20 73 65 74 43 6f 6f 6b 69 65  okie), setCookie
12150 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
12160 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
12170 61 64 64 72 2c 20 69 44 62 29 3b 0a 20 20 20 20  addr, iDb);.    
12180 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61    sqlite3VdbeCha
12190 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b 31 2c  ngeP1(v, addr+1,
121a0 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69   sqlite3Atoi(zRi
121b0 67 68 74 29 29 3b 0a 20 20 20 20 20 20 73 71 6c  ght));.      sql
121c0 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
121d0 28 76 2c 20 61 64 64 72 2b 32 2c 20 69 44 62 29  (v, addr+2, iDb)
121e0 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
121f0 64 62 65 43 68 61 6e 67 65 50 32 28 76 2c 20 61  dbeChangeP2(v, a
12200 64 64 72 2b 32 2c 20 69 43 6f 6f 6b 69 65 29 3b  ddr+2, iCookie);
12210 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20  .    }else{.    
12220 20 20 2f 2a 20 52 65 61 64 20 74 68 65 20 73 70    /* Read the sp
12230 65 63 69 66 69 65 64 20 63 6f 6f 6b 69 65 20 76  ecified cookie v
12240 61 6c 75 65 20 2a 2f 0a 20 20 20 20 20 20 73 74  alue */.      st
12250 61 74 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f  atic const VdbeO
12260 70 4c 69 73 74 20 72 65 61 64 43 6f 6f 6b 69 65  pList readCookie
12270 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b  [] = {.        {
12280 20 4f 50 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c   OP_Transaction,
12290 20 20 20 20 20 30 2c 20 20 30 2c 20 20 30 7d 2c       0,  0,  0},
122a0 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20      /* 0 */.    
122b0 20 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f      { OP_ReadCoo
122c0 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20 31 2c  kie,      0,  1,
122d0 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a 2f    0},    /* 1 */
122e0 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65  .        { OP_Re
122f0 73 75 6c 74 52 6f 77 2c 20 20 20 20 20 20 20 31  sultRow,       1
12300 2c 20 20 31 2c 20 20 30 7d 0a 20 20 20 20 20 20  ,  1,  0}.      
12310 7d 3b 0a 20 20 20 20 20 20 69 6e 74 20 61 64 64  };.      int add
12320 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41  r = sqlite3VdbeA
12330 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61  ddOpList(v, Arra
12340 79 53 69 7a 65 28 72 65 61 64 43 6f 6f 6b 69 65  ySize(readCookie
12350 29 2c 20 72 65 61 64 43 6f 6f 6b 69 65 29 3b 0a  ), readCookie);.
12360 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
12370 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64  eChangeP1(v, add
12380 72 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73  r, iDb);.      s
12390 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
123a0 50 31 28 76 2c 20 61 64 64 72 2b 31 2c 20 69 44  P1(v, addr+1, iD
123b0 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  b);.      sqlite
123c0 33 56 64 62 65 43 68 61 6e 67 65 50 33 28 76 2c  3VdbeChangeP3(v,
123d0 20 61 64 64 72 2b 31 2c 20 69 43 6f 6f 6b 69 65   addr+1, iCookie
123e0 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
123f0 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
12400 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 1);.      sqli
12410 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
12420 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
12430 4e 41 4d 45 2c 20 7a 4c 65 66 74 2c 20 53 51 4c  NAME, zLeft, SQL
12440 49 54 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a  ITE_TRANSIENT);.
12450 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
12460 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  k;.#endif /* SQL
12470 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
12480 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 20  VERSION_PRAGMAS 
12490 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  */..#ifndef SQLI
124a0 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f  TE_OMIT_COMPILEO
124b0 50 54 49 4f 4e 5f 44 49 41 47 53 0a 20 20 2f 2a  PTION_DIAGS.  /*
124c0 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 63  .  **   PRAGMA c
124d0 6f 6d 70 69 6c 65 5f 6f 70 74 69 6f 6e 73 0a 20  ompile_options. 
124e0 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20   **.  ** Return 
124f0 74 68 65 20 6e 61 6d 65 73 20 6f 66 20 61 6c 6c  the names of all
12500 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70   compile-time op
12510 74 69 6f 6e 73 20 75 73 65 64 20 69 6e 20 74 68  tions used in th
12520 69 73 20 62 75 69 6c 64 2c 0a 20 20 2a 2a 20 6f  is build,.  ** o
12530 6e 65 20 6f 70 74 69 6f 6e 20 70 65 72 20 72 6f  ne option per ro
12540 77 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  w..  */.  case P
12550 72 61 67 54 79 70 5f 43 4f 4d 50 49 4c 45 5f 4f  ragTyp_COMPILE_O
12560 50 54 49 4f 4e 53 3a 20 7b 0a 20 20 20 20 69 6e  PTIONS: {.    in
12570 74 20 69 20 3d 20 30 3b 0a 20 20 20 20 63 6f 6e  t i = 0;.    con
12580 73 74 20 63 68 61 72 20 2a 7a 4f 70 74 3b 0a 20  st char *zOpt;. 
12590 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
125a0 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
125b0 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
125c0 20 3d 20 31 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 1;.    sqlite
125d0 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
125e0 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
125f0 4d 45 2c 20 22 63 6f 6d 70 69 6c 65 5f 6f 70 74  ME, "compile_opt
12600 69 6f 6e 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ion", SQLITE_STA
12610 54 49 43 29 3b 0a 20 20 20 20 77 68 69 6c 65 28  TIC);.    while(
12620 20 28 7a 4f 70 74 20 3d 20 73 71 6c 69 74 65 33   (zOpt = sqlite3
12630 5f 63 6f 6d 70 69 6c 65 6f 70 74 69 6f 6e 5f 67  _compileoption_g
12640 65 74 28 69 2b 2b 29 29 21 3d 30 20 29 7b 0a 20  et(i++))!=0 ){. 
12650 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
12660 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
12670 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 7a  ing8, 0, 1, 0, z
12680 4f 70 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  Opt, 0);.      s
12690 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
126a0 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
126b0 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 7d 0a 20  , 1, 1);.    }. 
126c0 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
126d0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
126e0 54 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f  T_COMPILEOPTION_
126f0 44 49 41 47 53 20 2a 2f 0a 0a 23 69 66 6e 64 65  DIAGS */..#ifnde
12700 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 41  f SQLITE_OMIT_WA
12710 4c 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  L.  /*.  **   PR
12720 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
12730 77 61 6c 5f 63 68 65 63 6b 70 6f 69 6e 74 20 3d  wal_checkpoint =
12740 20 70 61 73 73 69 76 65 7c 66 75 6c 6c 7c 72 65   passive|full|re
12750 73 74 61 72 74 0a 20 20 2a 2a 0a 20 20 2a 2a 20  start.  **.  ** 
12760 43 68 65 63 6b 70 6f 69 6e 74 20 74 68 65 20 64  Checkpoint the d
12770 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20 20  atabase..  */.  
12780 63 61 73 65 20 50 72 61 67 54 79 70 5f 57 41 4c  case PragTyp_WAL
12790 5f 43 48 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20  _CHECKPOINT: {. 
127a0 20 20 20 69 6e 74 20 69 42 74 20 3d 20 28 70 49     int iBt = (pI
127b0 64 32 2d 3e 7a 3f 69 44 62 3a 53 51 4c 49 54 45  d2->z?iDb:SQLITE
127c0 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 29 3b 0a  _MAX_ATTACHED);.
127d0 20 20 20 20 69 6e 74 20 65 4d 6f 64 65 20 3d 20      int eMode = 
127e0 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
127f0 54 5f 50 41 53 53 49 56 45 3b 0a 20 20 20 20 69  T_PASSIVE;.    i
12800 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
12810 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74     if( sqlite3St
12820 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 66  rICmp(zRight, "f
12830 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ull")==0 ){.    
12840 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49      eMode = SQLI
12850 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55  TE_CHECKPOINT_FU
12860 4c 4c 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  LL;.      }else 
12870 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
12880 6d 70 28 7a 52 69 67 68 74 2c 20 22 72 65 73 74  mp(zRight, "rest
12890 61 72 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  art")==0 ){.    
128a0 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49      eMode = SQLI
128b0 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45  TE_CHECKPOINT_RE
128c0 53 54 41 52 54 3b 0a 20 20 20 20 20 20 7d 0a 20  START;.      }. 
128d0 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
128e0 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
128f0 2c 20 33 29 3b 0a 20 20 20 20 70 50 61 72 73 65  , 3);.    pParse
12900 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20  ->nMem = 3;.    
12910 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
12920 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
12930 41 4d 45 5f 4e 41 4d 45 2c 20 22 62 75 73 79 22  AME_NAME, "busy"
12940 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
12950 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
12960 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31  eSetColName(v, 1
12970 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
12980 22 6c 6f 67 22 2c 20 53 51 4c 49 54 45 5f 53 54  "log", SQLITE_ST
12990 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
129a0 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
129b0 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 2, COLNAME_N
129c0 41 4d 45 2c 20 22 63 68 65 63 6b 70 6f 69 6e 74  AME, "checkpoint
129d0 65 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ed", SQLITE_STAT
129e0 49 43 29 3b 0a 0a 20 20 20 20 73 71 6c 69 74 65  IC);..    sqlite
129f0 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
12a00 50 5f 43 68 65 63 6b 70 6f 69 6e 74 2c 20 69 42  P_Checkpoint, iB
12a10 74 2c 20 65 4d 6f 64 65 2c 20 31 29 3b 0a 20 20  t, eMode, 1);.  
12a20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
12a30 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
12a40 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 7d 0a  Row, 1, 3);.  }.
12a50 20 20 62 72 65 61 6b 3b 0a 0a 20 20 2f 2a 0a 20    break;..  /*. 
12a60 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 77 61 6c   **   PRAGMA wal
12a70 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 0a  _autocheckpoint.
12a80 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 77 61    **   PRAGMA wa
12a90 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74  l_autocheckpoint
12aa0 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43   = N.  **.  ** C
12ab0 6f 6e 66 69 67 75 72 65 20 61 20 64 61 74 61 62  onfigure a datab
12ac0 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 74  ase connection t
12ad0 6f 20 61 75 74 6f 6d 61 74 69 63 61 6c 6c 79 20  o automatically 
12ae0 63 68 65 63 6b 70 6f 69 6e 74 20 61 20 64 61 74  checkpoint a dat
12af0 61 62 61 73 65 0a 20 20 2a 2a 20 61 66 74 65 72  abase.  ** after
12b00 20 61 63 63 75 6d 75 6c 61 74 69 6e 67 20 4e 20   accumulating N 
12b10 66 72 61 6d 65 73 20 69 6e 20 74 68 65 20 6c 6f  frames in the lo
12b20 67 2e 20 4f 72 20 71 75 65 72 79 20 66 6f 72 20  g. Or query for 
12b30 74 68 65 20 63 75 72 72 65 6e 74 20 76 61 6c 75  the current valu
12b40 65 0a 20 20 2a 2a 20 6f 66 20 4e 2e 0a 20 20 2a  e.  ** of N..  *
12b50 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
12b60 5f 57 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50 4f  _WAL_AUTOCHECKPO
12b70 49 4e 54 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a  INT: {.    if( z
12b80 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73  Right ){.      s
12b90 71 6c 69 74 65 33 5f 77 61 6c 5f 61 75 74 6f 63  qlite3_wal_autoc
12ba0 68 65 63 6b 70 6f 69 6e 74 28 64 62 2c 20 73 71  heckpoint(db, sq
12bb0 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74  lite3Atoi(zRight
12bc0 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65  ));.    }.    re
12bd0 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50  turnSingleInt(pP
12be0 61 72 73 65 2c 20 22 77 61 6c 5f 61 75 74 6f 63  arse, "wal_autoc
12bf0 68 65 63 6b 70 6f 69 6e 74 22 2c 20 0a 20 20 20  heckpoint", .   
12c00 20 20 20 20 64 62 2d 3e 78 57 61 6c 43 61 6c 6c      db->xWalCall
12c10 62 61 63 6b 3d 3d 73 71 6c 69 74 65 33 57 61 6c  back==sqlite3Wal
12c20 44 65 66 61 75 6c 74 48 6f 6f 6b 20 3f 20 0a 20  DefaultHook ? . 
12c30 20 20 20 20 20 20 20 20 20 20 53 51 4c 49 54 45            SQLITE
12c40 5f 50 54 52 5f 54 4f 5f 49 4e 54 28 64 62 2d 3e  _PTR_TO_INT(db->
12c50 70 57 61 6c 41 72 67 29 20 3a 20 30 29 3b 0a 20  pWalArg) : 0);. 
12c60 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64   }.  break;.#end
12c70 69 66 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50  if..  /*.  **  P
12c80 52 41 47 4d 41 20 73 68 72 69 6e 6b 5f 6d 65 6d  RAGMA shrink_mem
12c90 6f 72 79 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  ory.  **.  ** Th
12ca0 69 73 20 70 72 61 67 6d 61 20 61 74 74 65 6d 70  is pragma attemp
12cb0 74 73 20 74 6f 20 66 72 65 65 20 61 73 20 6d 75  ts to free as mu
12cc0 63 68 20 6d 65 6d 6f 72 79 20 61 73 20 70 6f 73  ch memory as pos
12cd0 73 69 62 6c 65 20 66 72 6f 6d 20 74 68 65 0a 20  sible from the. 
12ce0 20 2a 2a 20 63 75 72 72 65 6e 74 20 64 61 74 61   ** current data
12cf0 62 61 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e  base connection.
12d00 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
12d10 67 54 79 70 5f 53 48 52 49 4e 4b 5f 4d 45 4d 4f  gTyp_SHRINK_MEMO
12d20 52 59 3a 20 7b 0a 20 20 20 20 73 71 6c 69 74 65  RY: {.    sqlite
12d30 33 5f 64 62 5f 72 65 6c 65 61 73 65 5f 6d 65 6d  3_db_release_mem
12d40 6f 72 79 28 64 62 29 3b 0a 20 20 20 20 62 72 65  ory(db);.    bre
12d50 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20  ak;.  }..  /*.  
12d60 2a 2a 20 20 20 50 52 41 47 4d 41 20 62 75 73 79  **   PRAGMA busy
12d70 5f 74 69 6d 65 6f 75 74 0a 20 20 2a 2a 20 20 20  _timeout.  **   
12d80 50 52 41 47 4d 41 20 62 75 73 79 5f 74 69 6d 65  PRAGMA busy_time
12d90 6f 75 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20 20 2a  out = N.  **.  *
12da0 2a 20 43 61 6c 6c 20 73 71 6c 69 74 65 33 5f 62  * Call sqlite3_b
12db0 75 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c 20  usy_timeout(db, 
12dc0 4e 29 2e 20 20 52 65 74 75 72 6e 20 74 68 65 20  N).  Return the 
12dd0 63 75 72 72 65 6e 74 20 74 69 6d 65 6f 75 74 20  current timeout 
12de0 76 61 6c 75 65 0a 20 20 2a 2a 20 69 66 20 6f 6e  value.  ** if on
12df0 65 20 69 73 20 73 65 74 2e 20 20 49 66 20 6e 6f  e is set.  If no
12e00 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20 6f 72   busy handler or
12e10 20 61 20 64 69 66 66 65 72 65 6e 74 20 62 75 73   a different bus
12e20 79 20 68 61 6e 64 6c 65 72 20 69 73 20 73 65 74  y handler is set
12e30 0a 20 20 2a 2a 20 74 68 65 6e 20 30 20 69 73 20  .  ** then 0 is 
12e40 72 65 74 75 72 6e 65 64 2e 20 20 53 65 74 74 69  returned.  Setti
12e50 6e 67 20 74 68 65 20 62 75 73 79 5f 74 69 6d 65  ng the busy_time
12e60 6f 75 74 20 74 6f 20 30 20 6f 72 20 6e 65 67 61  out to 0 or nega
12e70 74 69 76 65 0a 20 20 2a 2a 20 64 69 73 61 62 6c  tive.  ** disabl
12e80 65 73 20 74 68 65 20 74 69 6d 65 6f 75 74 2e 0a  es the timeout..
12e90 20 20 2a 2f 0a 20 20 2f 2a 63 61 73 65 20 50 72    */.  /*case Pr
12ea0 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f  agTyp_BUSY_TIMEO
12eb0 55 54 2a 2f 20 64 65 66 61 75 6c 74 3a 20 7b 0a  UT*/ default: {.
12ec0 20 20 20 20 61 73 73 65 72 74 28 20 61 50 72 61      assert( aPra
12ed0 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 65 50  gmaNames[mid].eP
12ee0 72 61 67 54 79 70 3d 3d 50 72 61 67 54 79 70 5f  ragTyp==PragTyp_
12ef0 42 55 53 59 5f 54 49 4d 45 4f 55 54 20 29 3b 0a  BUSY_TIMEOUT );.
12f00 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29      if( zRight )
12f10 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f  {.      sqlite3_
12f20 62 75 73 79 5f 74 69 6d 65 6f 75 74 28 64 62 2c  busy_timeout(db,
12f30 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69   sqlite3Atoi(zRi
12f40 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20 20 20  ght));.    }.   
12f50 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
12f60 28 70 50 61 72 73 65 2c 20 22 74 69 6d 65 6f 75  (pParse, "timeou
12f70 74 22 2c 20 20 64 62 2d 3e 62 75 73 79 54 69 6d  t",  db->busyTim
12f80 65 6f 75 74 29 3b 0a 20 20 20 20 62 72 65 61 6b  eout);.    break
12f90 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a  ;.  }..  /*.  **
12fa0 20 20 20 50 52 41 47 4d 41 20 73 6f 66 74 5f 68     PRAGMA soft_h
12fb0 65 61 70 5f 6c 69 6d 69 74 0a 20 20 2a 2a 20 20  eap_limit.  **  
12fc0 20 50 52 41 47 4d 41 20 73 6f 66 74 5f 68 65 61   PRAGMA soft_hea
12fd0 70 5f 6c 69 6d 69 74 20 3d 20 4e 0a 20 20 2a 2a  p_limit = N.  **
12fe0 0a 20 20 2a 2a 20 43 61 6c 6c 20 73 71 6c 69 74  .  ** Call sqlit
12ff0 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d  e3_soft_heap_lim
13000 69 74 36 34 28 4e 29 2e 20 20 52 65 74 75 72 6e  it64(N).  Return
13010 20 74 68 65 20 72 65 73 75 6c 74 2e 20 20 49 66   the result.  If
13020 20 4e 20 69 73 20 6f 6d 69 74 74 65 64 2c 0a 20   N is omitted,. 
13030 20 2a 2a 20 75 73 65 20 2d 31 2e 0a 20 20 2a 2f   ** use -1..  */
13040 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
13050 53 4f 46 54 5f 48 45 41 50 5f 4c 49 4d 49 54 3a  SOFT_HEAP_LIMIT:
13060 20 7b 0a 20 20 20 20 73 71 6c 69 74 65 33 5f 69   {.    sqlite3_i
13070 6e 74 36 34 20 4e 3b 0a 20 20 20 20 69 66 28 20  nt64 N;.    if( 
13080 7a 52 69 67 68 74 20 26 26 20 73 71 6c 69 74 65  zRight && sqlite
13090 33 41 74 6f 69 36 34 28 7a 52 69 67 68 74 2c 20  3Atoi64(zRight, 
130a0 26 4e 2c 20 31 30 30 30 30 30 30 2c 20 53 51 4c  &N, 1000000, SQL
130b0 49 54 45 5f 55 54 46 38 29 3d 3d 53 51 4c 49 54  ITE_UTF8)==SQLIT
130c0 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 73 71  E_OK ){.      sq
130d0 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61 70 5f  lite3_soft_heap_
130e0 6c 69 6d 69 74 36 34 28 4e 29 3b 0a 20 20 20 20  limit64(N);.    
130f0 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67  }.    returnSing
13100 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 73  leInt(pParse, "s
13110 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 22 2c  oft_heap_limit",
13120 20 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68    sqlite3_soft_h
13130 65 61 70 5f 6c 69 6d 69 74 36 34 28 2d 31 29 29  eap_limit64(-1))
13140 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  ;.    break;.  }
13150 0a 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ..#if defined(SQ
13160 4c 49 54 45 5f 44 45 42 55 47 29 20 7c 7c 20 64  LITE_DEBUG) || d
13170 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 54 45  efined(SQLITE_TE
13180 53 54 29 0a 20 20 2f 2a 0a 20 20 2a 2a 20 52 65  ST).  /*.  ** Re
13190 70 6f 72 74 20 74 68 65 20 63 75 72 72 65 6e 74  port the current
131a0 20 73 74 61 74 65 20 6f 66 20 66 69 6c 65 20 6c   state of file l
131b0 6f 67 73 20 66 6f 72 20 61 6c 6c 20 64 61 74 61  ogs for all data
131c0 62 61 73 65 73 0a 20 20 2a 2f 0a 20 20 63 61 73  bases.  */.  cas
131d0 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 53  e PragTyp_LOCK_S
131e0 54 41 54 55 53 3a 20 7b 0a 20 20 20 20 73 74 61  TATUS: {.    sta
131f0 74 69 63 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  tic const char *
13200 63 6f 6e 73 74 20 61 7a 4c 6f 63 6b 4e 61 6d 65  const azLockName
13210 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 22 75 6e  [] = {.      "un
13220 6c 6f 63 6b 65 64 22 2c 20 22 73 68 61 72 65 64  locked", "shared
13230 22 2c 20 22 72 65 73 65 72 76 65 64 22 2c 20 22  ", "reserved", "
13240 70 65 6e 64 69 6e 67 22 2c 20 22 65 78 63 6c 75  pending", "exclu
13250 73 69 76 65 22 0a 20 20 20 20 7d 3b 0a 20 20 20  sive".    };.   
13260 20 69 6e 74 20 69 3b 0a 20 20 20 20 73 71 6c 69   int i;.    sqli
13270 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
13280 73 28 76 2c 20 32 29 3b 0a 20 20 20 20 70 50 61  s(v, 2);.    pPa
13290 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 20  rse->nMem = 2;. 
132a0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
132b0 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
132c0 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 64 61  OLNAME_NAME, "da
132d0 74 61 62 61 73 65 22 2c 20 53 51 4c 49 54 45 5f  tabase", SQLITE_
132e0 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
132f0 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
13300 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45  me(v, 1, COLNAME
13310 5f 4e 41 4d 45 2c 20 22 73 74 61 74 75 73 22 2c  _NAME, "status",
13320 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
13330 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
13340 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20  db->nDb; i++){. 
13350 20 20 20 20 20 42 74 72 65 65 20 2a 70 42 74 3b       Btree *pBt;
13360 0a 20 20 20 20 20 20 63 6f 6e 73 74 20 63 68 61  .      const cha
13370 72 20 2a 7a 53 74 61 74 65 20 3d 20 22 75 6e 6b  r *zState = "unk
13380 6e 6f 77 6e 22 3b 0a 20 20 20 20 20 20 69 6e 74  nown";.      int
13390 20 6a 3b 0a 20 20 20 20 20 20 69 66 28 20 64 62   j;.      if( db
133a0 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 3d 3d  ->aDb[i].zName==
133b0 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20  0 ) continue;.  
133c0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
133d0 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
133e0 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 64 62  ng8, 0, 1, 0, db
133f0 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 2c 20  ->aDb[i].zName, 
13400 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P4_STATIC);.    
13410 20 20 70 42 74 20 3d 20 64 62 2d 3e 61 44 62 5b    pBt = db->aDb[
13420 69 5d 2e 70 42 74 3b 0a 20 20 20 20 20 20 69 66  i].pBt;.      if
13430 28 20 70 42 74 3d 3d 30 20 7c 7c 20 73 71 6c 69  ( pBt==0 || sqli
13440 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 42  te3BtreePager(pB
13450 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20  t)==0 ){.       
13460 20 7a 53 74 61 74 65 20 3d 20 22 63 6c 6f 73 65   zState = "close
13470 64 22 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  d";.      }else 
13480 69 66 28 20 73 71 6c 69 74 65 33 5f 66 69 6c 65  if( sqlite3_file
13490 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20 69 20 3f  _control(db, i ?
134a0 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d   db->aDb[i].zNam
134b0 65 20 3a 20 30 2c 20 0a 20 20 20 20 20 20 20 20  e : 0, .        
134c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
134d0 20 20 20 20 20 20 20 20 20 20 20 20 20 53 51 4c               SQL
134e0 49 54 45 5f 46 43 4e 54 4c 5f 4c 4f 43 4b 53 54  ITE_FCNTL_LOCKST
134f0 41 54 45 2c 20 26 6a 29 3d 3d 53 51 4c 49 54 45  ATE, &j)==SQLITE
13500 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 20  _OK ){.         
13510 7a 53 74 61 74 65 20 3d 20 61 7a 4c 6f 63 6b 4e  zState = azLockN
13520 61 6d 65 5b 6a 5d 3b 0a 20 20 20 20 20 20 7d 0a  ame[j];.      }.
13530 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
13540 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
13550 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20  ring8, 0, 2, 0, 
13560 7a 53 74 61 74 65 2c 20 50 34 5f 53 54 41 54 49  zState, P4_STATI
13570 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
13580 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
13590 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
135a0 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62 72  2);.    }.    br
135b0 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a  eak;.  }.#endif.
135c0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48  .#ifdef SQLITE_H
135d0 41 53 5f 43 4f 44 45 43 0a 20 20 63 61 73 65 20  AS_CODEC.  case 
135e0 50 72 61 67 54 79 70 5f 4b 45 59 3a 20 7b 0a 20  PragTyp_KEY: {. 
135f0 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 20     if( zRight ) 
13600 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28 64  sqlite3_key_v2(d
13610 62 2c 20 7a 44 62 2c 20 7a 52 69 67 68 74 2c 20  b, zDb, zRight, 
13620 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
13630 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 62 72  zRight));.    br
13640 65 61 6b 3b 0a 20 20 7d 0a 20 20 63 61 73 65 20  eak;.  }.  case 
13650 50 72 61 67 54 79 70 5f 52 45 4b 45 59 3a 20 7b  PragTyp_REKEY: {
13660 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
13670 29 20 73 71 6c 69 74 65 33 5f 72 65 6b 65 79 5f  ) sqlite3_rekey_
13680 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69 67  v2(db, zDb, zRig
13690 68 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c 65  ht, sqlite3Strle
136a0 6e 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20 20  n30(zRight));.  
136b0 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 63    break;.  }.  c
136c0 61 73 65 20 50 72 61 67 54 79 70 5f 48 45 58 4b  ase PragTyp_HEXK
136d0 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  EY: {.    if( zR
136e0 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 75 38  ight ){.      u8
136f0 20 69 42 79 74 65 3b 0a 20 20 20 20 20 20 69 6e   iByte;.      in
13700 74 20 69 3b 0a 20 20 20 20 20 20 63 68 61 72 20  t i;.      char 
13710 7a 4b 65 79 5b 34 30 5d 3b 0a 20 20 20 20 20 20  zKey[40];.      
13720 66 6f 72 28 69 3d 30 2c 20 69 42 79 74 65 3d 30  for(i=0, iByte=0
13730 3b 20 69 3c 73 69 7a 65 6f 66 28 7a 4b 65 79 29  ; i<sizeof(zKey)
13740 2a 32 20 26 26 20 73 71 6c 69 74 65 33 49 73 78  *2 && sqlite3Isx
13750 64 69 67 69 74 28 7a 52 69 67 68 74 5b 69 5d 29  digit(zRight[i])
13760 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
13770 69 42 79 74 65 20 3d 20 28 69 42 79 74 65 3c 3c  iByte = (iByte<<
13780 34 29 20 2b 20 73 71 6c 69 74 65 33 48 65 78 54  4) + sqlite3HexT
13790 6f 49 6e 74 28 7a 52 69 67 68 74 5b 69 5d 29 3b  oInt(zRight[i]);
137a0 0a 20 20 20 20 20 20 20 20 69 66 28 20 28 69 26  .        if( (i&
137b0 31 29 21 3d 30 20 29 20 7a 4b 65 79 5b 69 2f 32  1)!=0 ) zKey[i/2
137c0 5d 20 3d 20 69 42 79 74 65 3b 0a 20 20 20 20 20  ] = iByte;.     
137d0 20 7d 0a 20 20 20 20 20 20 69 66 28 20 28 7a 4c   }.      if( (zL
137e0 65 66 74 5b 33 5d 20 26 20 30 78 66 29 3d 3d 30  eft[3] & 0xf)==0
137f0 78 62 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  xb ){.        sq
13800 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28 64 62 2c  lite3_key_v2(db,
13810 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29   zDb, zKey, i/2)
13820 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20  ;.      }else{. 
13830 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 72         sqlite3_r
13840 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c  ekey_v2(db, zDb,
13850 20 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a 20 20 20   zKey, i/2);.   
13860 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62     }.    }.    b
13870 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
13880 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51 4c  .#if defined(SQL
13890 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 20 7c  ITE_HAS_CODEC) |
138a0 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
138b0 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44 29 0a 20  _ENABLE_CEROD). 
138c0 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 41 43   case PragTyp_AC
138d0 54 49 56 41 54 45 5f 45 58 54 45 4e 53 49 4f 4e  TIVATE_EXTENSION
138e0 53 3a 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b  S: if( zRight ){
138f0 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f 48  .#ifdef SQLITE_H
13900 41 53 5f 43 4f 44 45 43 0a 20 20 20 20 69 66 28  AS_CODEC.    if(
13910 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d 70   sqlite3StrNICmp
13920 28 7a 52 69 67 68 74 2c 20 22 73 65 65 2d 22 2c  (zRight, "see-",
13930 20 34 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20   4)==0 ){.      
13940 73 71 6c 69 74 65 33 5f 61 63 74 69 76 61 74 65  sqlite3_activate
13950 5f 73 65 65 28 26 7a 52 69 67 68 74 5b 34 5d 29  _see(&zRight[4])
13960 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69 66 0a 23  ;.    }.#endif.#
13970 69 66 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41  ifdef SQLITE_ENA
13980 42 4c 45 5f 43 45 52 4f 44 0a 20 20 20 20 69 66  BLE_CEROD.    if
13990 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49 43 6d  ( sqlite3StrNICm
139a0 70 28 7a 52 69 67 68 74 2c 20 22 63 65 72 6f 64  p(zRight, "cerod
139b0 2d 22 2c 20 36 29 3d 3d 30 20 29 7b 0a 20 20 20  -", 6)==0 ){.   
139c0 20 20 20 73 71 6c 69 74 65 33 5f 61 63 74 69 76     sqlite3_activ
139d0 61 74 65 5f 63 65 72 6f 64 28 26 7a 52 69 67 68  ate_cerod(&zRigh
139e0 74 5b 36 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e  t[6]);.    }.#en
139f0 64 69 66 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  dif.  }.  break;
13a00 0a 23 65 6e 64 69 66 0a 0a 20 20 7d 20 2f 2a 20  .#endif..  } /* 
13a10 45 6e 64 20 6f 66 20 74 68 65 20 50 52 41 47 4d  End of the PRAGM
13a20 41 20 73 77 69 74 63 68 20 2a 2f 0a 0a 70 72 61  A switch */..pra
13a30 67 6d 61 5f 6f 75 74 3a 0a 20 20 73 71 6c 69 74  gma_out:.  sqlit
13a40 65 33 44 62 46 72 65 65 28 64 62 2c 20 7a 4c 65  e3DbFree(db, zLe
13a50 66 74 29 3b 0a 20 20 73 71 6c 69 74 65 33 44 62  ft);.  sqlite3Db
13a60 46 72 65 65 28 64 62 2c 20 7a 52 69 67 68 74 29  Free(db, zRight)
13a70 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f 2a 20 53  ;.}..#endif /* S
13a80 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52 41 47 4d  QLITE_OMIT_PRAGM
13a90 41 20 2a 2f 0a                                   A */.