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

Artifact 769d08f10b7848dbd1950d0723bfcb12fb22b7f3:


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 65 71 70 22 2c 0a 20 20 20 20 2f 2a  dbe_eqp",.    /*
3a10: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
3a20: 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20  ragTyp_FLAG,.   
3a30: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
3a40: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
3a50: 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45  :      */ SQLITE
3a60: 5f 56 64 62 65 45 51 50 20 7d 2c 0a 20 20 7b 20  _VdbeEQP },.  { 
3a70: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
3a80: 20 22 76 64 62 65 5f 6c 69 73 74 69 6e 67 22 2c   "vdbe_listing",
3a90: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
3aa0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
3ab0: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
3ac0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
3ad0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
3ae0: 20 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74   SQLITE_VdbeList
3af0: 69 6e 67 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e  ing },.  { /* zN
3b00: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76 64 62  ame:     */ "vdb
3b10: 65 5f 74 72 61 63 65 22 2c 0a 20 20 20 20 2f 2a  e_trace",.    /*
3b20: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
3b30: 72 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20  ragTyp_FLAG,.   
3b40: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
3b50: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
3b60: 3a 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45  :      */ SQLITE
3b70: 5f 56 64 62 65 54 72 61 63 65 20 7d 2c 0a 23 65  _VdbeTrace },.#e
3b80: 6e 64 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 20  ndif.#endif.#if 
3b90: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3ba0: 4f 4d 49 54 5f 57 41 4c 29 0a 20 20 7b 20 2f 2a  OMIT_WAL).  { /*
3bb0: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
3bc0: 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69  wal_autocheckpoi
3bd0: 6e 74 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  nt",.    /* ePra
3be0: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
3bf0: 70 5f 57 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50  p_WAL_AUTOCHECKP
3c00: 4f 49 4e 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72  OINT,.    /* ePr
3c10: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
3c20: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
3c30: 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a  */ 0 },.  { /* z
3c40: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 77 61  Name:     */ "wa
3c50: 6c 5f 63 68 65 63 6b 70 6f 69 6e 74 22 2c 0a 20  l_checkpoint",. 
3c60: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
3c70: 20 2a 2f 20 50 72 61 67 54 79 70 5f 57 41 4c 5f   */ PragTyp_WAL_
3c80: 43 48 45 43 4b 50 4f 49 4e 54 2c 0a 20 20 20 20  CHECKPOINT,.    
3c90: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
3ca0: 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63   PragFlag_NeedSc
3cb0: 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72  hema,.    /* iAr
3cc0: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
3cd0: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
3ce0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
3cf0: 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20  FLAG_PRAGMAS).  
3d00: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
3d10: 2a 2f 20 22 77 72 69 74 61 62 6c 65 5f 73 63 68  */ "writable_sch
3d20: 65 6d 61 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ema",.    /* ePr
3d30: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
3d40: 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20  yp_FLAG,.    /* 
3d50: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
3d60: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
3d70: 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 57 72 69     */ SQLITE_Wri
3d80: 74 65 53 63 68 65 6d 61 7c 53 51 4c 49 54 45 5f  teSchema|SQLITE_
3d90: 52 65 63 6f 76 65 72 79 4d 6f 64 65 20 7d 2c 0a  RecoveryMode },.
3da0: 23 65 6e 64 69 66 0a 7d 3b 0a 2f 2a 20 4e 75 6d  #endif.};./* Num
3db0: 62 65 72 20 6f 66 20 70 72 61 67 6d 61 73 3a 20  ber of pragmas: 
3dc0: 35 36 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74  56 on by default
3dd0: 2c 20 36 39 20 74 6f 74 61 6c 2e 20 2a 2f 0a 2f  , 69 total. */./
3de0: 2a 20 45 6e 64 20 6f 66 20 74 68 65 20 61 75 74  * End of the aut
3df0: 6f 6d 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72  omatically gener
3e00: 61 74 65 64 20 70 72 61 67 6d 61 20 74 61 62 6c  ated pragma tabl
3e10: 65 2e 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  e..*************
3e20: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3e30: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3e40: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
3e50: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a  **************/.
3e60: 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  ./*.** Interpret
3e70: 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e   the given strin
3e80: 67 20 61 73 20 61 20 73 61 66 65 74 79 20 6c 65  g as a safety le
3e90: 76 65 6c 2e 20 20 52 65 74 75 72 6e 20 30 20 66  vel.  Return 0 f
3ea0: 6f 72 20 4f 46 46 2c 0a 2a 2a 20 31 20 66 6f 72  or OFF,.** 1 for
3eb0: 20 4f 4e 20 6f 72 20 4e 4f 52 4d 41 4c 20 61 6e   ON or NORMAL an
3ec0: 64 20 32 20 66 6f 72 20 46 55 4c 4c 2e 20 20 52  d 2 for FULL.  R
3ed0: 65 74 75 72 6e 20 31 20 66 6f 72 20 61 6e 20 65  eturn 1 for an e
3ee0: 6d 70 74 79 20 6f 72 20 0a 2a 2a 20 75 6e 72 65  mpty or .** unre
3ef0: 63 6f 67 6e 69 7a 65 64 20 73 74 72 69 6e 67 20  cognized string 
3f00: 61 72 67 75 6d 65 6e 74 2e 20 20 54 68 65 20 46  argument.  The F
3f10: 55 4c 4c 20 6f 70 74 69 6f 6e 20 69 73 20 64 69  ULL option is di
3f20: 73 61 6c 6c 6f 77 65 64 0a 2a 2a 20 69 66 20 74  sallowed.** if t
3f30: 68 65 20 6f 6d 69 74 46 75 6c 6c 20 70 61 72 61  he omitFull para
3f40: 6d 65 74 65 72 20 69 74 20 31 2e 0a 2a 2a 0a 2a  meter it 1..**.*
3f50: 2a 20 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20  * Note that the 
3f60: 76 61 6c 75 65 73 20 72 65 74 75 72 6e 65 64 20  values returned 
3f70: 61 72 65 20 6f 6e 65 20 6c 65 73 73 20 74 68 61  are one less tha
3f80: 74 20 74 68 65 20 76 61 6c 75 65 73 20 74 68 61  t the values tha
3f90: 74 0a 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20 70  t.** should be p
3fa0: 61 73 73 65 64 20 69 6e 74 6f 20 73 71 6c 69 74  assed into sqlit
3fb0: 65 33 42 74 72 65 65 53 65 74 53 61 66 65 74 79  e3BtreeSetSafety
3fc0: 4c 65 76 65 6c 28 29 2e 20 20 54 68 65 20 69 73  Level().  The is
3fd0: 20 64 6f 6e 65 0a 2a 2a 20 74 6f 20 73 75 70 70   done.** to supp
3fe0: 6f 72 74 20 6c 65 67 61 63 79 20 53 51 4c 20 63  ort legacy SQL c
3ff0: 6f 64 65 2e 20 20 54 68 65 20 73 61 66 65 74 79  ode.  The safety
4000: 20 6c 65 76 65 6c 20 75 73 65 64 20 74 6f 20 62   level used to b
4010: 65 20 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 61 6e 64  e boolean.** and
4020: 20 6f 6c 64 65 72 20 73 63 72 69 70 74 73 20 6d   older scripts m
4030: 61 79 20 68 61 76 65 20 75 73 65 64 20 6e 75 6d  ay have used num
4040: 62 65 72 73 20 30 20 66 6f 72 20 4f 46 46 20 61  bers 0 for OFF a
4050: 6e 64 20 31 20 66 6f 72 20 4f 4e 2e 0a 2a 2f 0a  nd 1 for ON..*/.
4060: 73 74 61 74 69 63 20 75 38 20 67 65 74 53 61 66  static u8 getSaf
4070: 65 74 79 4c 65 76 65 6c 28 63 6f 6e 73 74 20 63  etyLevel(const c
4080: 68 61 72 20 2a 7a 2c 20 69 6e 74 20 6f 6d 69 74  har *z, int omit
4090: 46 75 6c 6c 2c 20 69 6e 74 20 64 66 6c 74 29 7b  Full, int dflt){
40a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
40b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a                /*
40c0: 20 31 32 33 34 35 36 37 38 39 20 31 32 33 34 35   123456789 12345
40d0: 36 37 38 39 20 2a 2f 0a 20 20 73 74 61 74 69 63  6789 */.  static
40e0: 20 63 6f 6e 73 74 20 63 68 61 72 20 7a 54 65 78   const char zTex
40f0: 74 5b 5d 20 3d 20 22 6f 6e 6f 66 66 61 6c 73 65  t[] = "onoffalse
4100: 79 65 73 74 72 75 65 66 75 6c 6c 22 3b 0a 20 20  yestruefull";.  
4110: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 75 38 20  static const u8 
4120: 69 4f 66 66 73 65 74 5b 5d 20 3d 20 7b 30 2c 20  iOffset[] = {0, 
4130: 31 2c 20 32 2c 20 34 2c 20 39 2c 20 31 32 2c 20  1, 2, 4, 9, 12, 
4140: 31 36 7d 3b 0a 20 20 73 74 61 74 69 63 20 63 6f  16};.  static co
4150: 6e 73 74 20 75 38 20 69 4c 65 6e 67 74 68 5b 5d  nst u8 iLength[]
4160: 20 3d 20 7b 32 2c 20 32 2c 20 33 2c 20 35 2c 20   = {2, 2, 3, 5, 
4170: 33 2c 20 34 2c 20 34 7d 3b 0a 20 20 73 74 61 74  3, 4, 4};.  stat
4180: 69 63 20 63 6f 6e 73 74 20 75 38 20 69 56 61 6c  ic const u8 iVal
4190: 75 65 5b 5d 20 3d 20 20 7b 31 2c 20 30 2c 20 30  ue[] =  {1, 0, 0
41a0: 2c 20 30 2c 20 31 2c 20 31 2c 20 32 7d 3b 0a 20  , 0, 1, 1, 2};. 
41b0: 20 69 6e 74 20 69 2c 20 6e 3b 0a 20 20 69 66 28   int i, n;.  if(
41c0: 20 73 71 6c 69 74 65 33 49 73 64 69 67 69 74 28   sqlite3Isdigit(
41d0: 2a 7a 29 20 29 7b 0a 20 20 20 20 72 65 74 75 72  *z) ){.    retur
41e0: 6e 20 28 75 38 29 73 71 6c 69 74 65 33 41 74 6f  n (u8)sqlite3Ato
41f0: 69 28 7a 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20  i(z);.  }.  n = 
4200: 73 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28  sqlite3Strlen30(
4210: 7a 29 3b 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69  z);.  for(i=0; i
4220: 3c 41 72 72 61 79 53 69 7a 65 28 69 4c 65 6e 67  <ArraySize(iLeng
4230: 74 68 29 2d 6f 6d 69 74 46 75 6c 6c 3b 20 69 2b  th)-omitFull; i+
4240: 2b 29 7b 0a 20 20 20 20 69 66 28 20 69 4c 65 6e  +){.    if( iLen
4250: 67 74 68 5b 69 5d 3d 3d 6e 20 26 26 20 73 71 6c  gth[i]==n && sql
4260: 69 74 65 33 53 74 72 4e 49 43 6d 70 28 26 7a 54  ite3StrNICmp(&zT
4270: 65 78 74 5b 69 4f 66 66 73 65 74 5b 69 5d 5d 2c  ext[iOffset[i]],
4280: 7a 2c 6e 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  z,n)==0 ){.     
4290: 20 72 65 74 75 72 6e 20 69 56 61 6c 75 65 5b 69   return iValue[i
42a0: 5d 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72  ];.    }.  }.  r
42b0: 65 74 75 72 6e 20 64 66 6c 74 3b 0a 7d 0a 0a 2f  eturn dflt;.}../
42c0: 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
42d0: 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20  he given string 
42e0: 61 73 20 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c  as a boolean val
42f0: 75 65 2e 0a 2a 2f 0a 75 38 20 73 71 6c 69 74 65  ue..*/.u8 sqlite
4300: 33 47 65 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73  3GetBoolean(cons
4310: 74 20 63 68 61 72 20 2a 7a 2c 20 69 6e 74 20 64  t char *z, int d
4320: 66 6c 74 29 7b 0a 20 20 72 65 74 75 72 6e 20 67  flt){.  return g
4330: 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28 7a 2c  etSafetyLevel(z,
4340: 31 2c 64 66 6c 74 29 21 3d 30 3b 0a 7d 0a 0a 2f  1,dflt)!=0;.}../
4350: 2a 20 54 68 65 20 73 71 6c 69 74 65 33 47 65 74  * The sqlite3Get
4360: 42 6f 6f 6c 65 61 6e 28 29 20 66 75 6e 63 74 69  Boolean() functi
4370: 6f 6e 20 69 73 20 75 73 65 64 20 62 79 20 6f 74  on is used by ot
4380: 68 65 72 20 6d 6f 64 75 6c 65 73 20 62 75 74 20  her modules but 
4390: 74 68 65 0a 2a 2a 20 72 65 6d 61 69 6e 64 65 72  the.** remainder
43a0: 20 6f 66 20 74 68 69 73 20 66 69 6c 65 20 69 73   of this file is
43b0: 20 73 70 65 63 69 66 69 63 20 74 6f 20 50 52 41   specific to PRA
43c0: 47 4d 41 20 70 72 6f 63 65 73 73 69 6e 67 2e 20  GMA processing. 
43d0: 20 53 6f 20 6f 6d 69 74 0a 2a 2a 20 74 68 65 20   So omit.** the 
43e0: 72 65 73 74 20 6f 66 20 74 68 65 20 66 69 6c 65  rest of the file
43f0: 20 69 66 20 50 52 41 47 4d 41 73 20 61 72 65 20   if PRAGMAs are 
4400: 6f 6d 69 74 74 65 64 20 66 72 6f 6d 20 74 68 65  omitted from the
4410: 20 62 75 69 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21   build..*/.#if !
4420: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
4430: 4d 49 54 5f 50 52 41 47 4d 41 29 0a 0a 2f 2a 0a  MIT_PRAGMA)../*.
4440: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
4450: 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73   given string as
4460: 20 61 20 6c 6f 63 6b 69 6e 67 20 6d 6f 64 65 20   a locking mode 
4470: 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  value..*/.static
4480: 20 69 6e 74 20 67 65 74 4c 6f 63 6b 69 6e 67 4d   int getLockingM
4490: 6f 64 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a  ode(const char *
44a0: 7a 29 7b 0a 20 20 69 66 28 20 7a 20 29 7b 0a 20  z){.  if( z ){. 
44b0: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
44c0: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 65 78 63  3StrICmp(z, "exc
44d0: 6c 75 73 69 76 65 22 29 20 29 20 72 65 74 75 72  lusive") ) retur
44e0: 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  n PAGER_LOCKINGM
44f0: 4f 44 45 5f 45 58 43 4c 55 53 49 56 45 3b 0a 20  ODE_EXCLUSIVE;. 
4500: 20 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65     if( 0==sqlite
4510: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 72  3StrICmp(z, "nor
4520: 6d 61 6c 22 29 20 29 20 72 65 74 75 72 6e 20 50  mal") ) return P
4530: 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45  AGER_LOCKINGMODE
4540: 5f 4e 4f 52 4d 41 4c 3b 0a 20 20 7d 0a 20 20 72  _NORMAL;.  }.  r
4550: 65 74 75 72 6e 20 50 41 47 45 52 5f 4c 4f 43 4b  eturn PAGER_LOCK
4560: 49 4e 47 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 7d  INGMODE_QUERY;.}
4570: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
4580: 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d  _OMIT_AUTOVACUUM
4590: 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74  ./*.** Interpret
45a0: 20 74 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e   the given strin
45b0: 67 20 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63  g as an auto-vac
45c0: 75 75 6d 20 6d 6f 64 65 20 76 61 6c 75 65 2e 0a  uum mode value..
45d0: 2a 2a 0a 2a 2a 20 54 68 65 20 66 6f 6c 6c 6f 77  **.** The follow
45e0: 69 6e 67 20 73 74 72 69 6e 67 73 2c 20 22 6e 6f  ing strings, "no
45f0: 6e 65 22 2c 20 22 66 75 6c 6c 22 20 61 6e 64 20  ne", "full" and 
4600: 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22 20 61 72  "incremental" ar
4610: 65 20 0a 2a 2a 20 61 63 63 65 70 74 61 62 6c 65  e .** acceptable
4620: 2c 20 61 73 20 61 72 65 20 74 68 65 69 72 20 6e  , as are their n
4630: 75 6d 65 72 69 63 20 65 71 75 69 76 61 6c 65 6e  umeric equivalen
4640: 74 73 3a 20 30 2c 20 31 20 61 6e 64 20 32 20 72  ts: 0, 1 and 2 r
4650: 65 73 70 65 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a  espectively..*/.
4660: 73 74 61 74 69 63 20 69 6e 74 20 67 65 74 41 75  static int getAu
4670: 74 6f 56 61 63 75 75 6d 28 63 6f 6e 73 74 20 63  toVacuum(const c
4680: 68 61 72 20 2a 7a 29 7b 0a 20 20 69 6e 74 20 69  har *z){.  int i
4690: 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74  ;.  if( 0==sqlit
46a0: 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6e 6f  e3StrICmp(z, "no
46b0: 6e 65 22 29 20 29 20 72 65 74 75 72 6e 20 42 54  ne") ) return BT
46c0: 52 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 4e  REE_AUTOVACUUM_N
46d0: 4f 4e 45 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71  ONE;.  if( 0==sq
46e0: 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20  lite3StrICmp(z, 
46f0: 22 66 75 6c 6c 22 29 20 29 20 72 65 74 75 72 6e  "full") ) return
4700: 20 42 54 52 45 45 5f 41 55 54 4f 56 41 43 55 55   BTREE_AUTOVACUU
4710: 4d 5f 46 55 4c 4c 3b 0a 20 20 69 66 28 20 30 3d  M_FULL;.  if( 0=
4720: 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28  =sqlite3StrICmp(
4730: 7a 2c 20 22 69 6e 63 72 65 6d 65 6e 74 61 6c 22  z, "incremental"
4740: 29 20 29 20 72 65 74 75 72 6e 20 42 54 52 45 45  ) ) return BTREE
4750: 5f 41 55 54 4f 56 41 43 55 55 4d 5f 49 4e 43 52  _AUTOVACUUM_INCR
4760: 3b 0a 20 20 69 20 3d 20 73 71 6c 69 74 65 33 41  ;.  i = sqlite3A
4770: 74 6f 69 28 7a 29 3b 0a 20 20 72 65 74 75 72 6e  toi(z);.  return
4780: 20 28 75 38 29 28 28 69 3e 3d 30 26 26 69 3c 3d   (u8)((i>=0&&i<=
4790: 32 29 3f 69 3a 30 29 3b 0a 7d 0a 23 65 6e 64 69  2)?i:0);.}.#endi
47a0: 66 20 2f 2a 20 69 66 6e 64 65 66 20 53 51 4c 49  f /* ifndef SQLI
47b0: 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55  TE_OMIT_AUTOVACU
47c0: 55 4d 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53  UM */..#ifndef S
47d0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
47e0: 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49  _PRAGMAS./*.** I
47f0: 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69 76  nterpret the giv
4800: 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20 74  en string as a t
4810: 65 6d 70 20 64 62 20 6c 6f 63 61 74 69 6f 6e 2e  emp db location.
4820: 20 52 65 74 75 72 6e 20 31 20 66 6f 72 20 66 69   Return 1 for fi
4830: 6c 65 0a 2a 2a 20 62 61 63 6b 65 64 20 74 65 6d  le.** backed tem
4840: 70 6f 72 61 72 79 20 64 61 74 61 62 61 73 65 73  porary databases
4850: 2c 20 32 20 66 6f 72 20 74 68 65 20 52 65 64 2d  , 2 for the Red-
4860: 42 6c 61 63 6b 20 74 72 65 65 20 69 6e 20 6d 65  Black tree in me
4870: 6d 6f 72 79 20 64 61 74 61 62 61 73 65 0a 2a 2a  mory database.**
4880: 20 61 6e 64 20 30 20 74 6f 20 75 73 65 20 74 68   and 0 to use th
4890: 65 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 64  e compile-time d
48a0: 65 66 61 75 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69  efault..*/.stati
48b0: 63 20 69 6e 74 20 67 65 74 54 65 6d 70 53 74 6f  c int getTempSto
48c0: 72 65 28 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  re(const char *z
48d0: 29 7b 0a 20 20 69 66 28 20 7a 5b 30 5d 3e 3d 27  ){.  if( z[0]>='
48e0: 30 27 20 26 26 20 7a 5b 30 5d 3c 3d 27 32 27 20  0' && z[0]<='2' 
48f0: 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 7a 5b  ){.    return z[
4900: 30 5d 20 2d 20 27 30 27 3b 0a 20 20 7d 65 6c 73  0] - '0';.  }els
4910: 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72  e if( sqlite3Str
4920: 49 43 6d 70 28 7a 2c 20 22 66 69 6c 65 22 29 3d  ICmp(z, "file")=
4930: 3d 30 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e  =0 ){.    return
4940: 20 31 3b 0a 20 20 7d 65 6c 73 65 20 69 66 28 20   1;.  }else if( 
4950: 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a  sqlite3StrICmp(z
4960: 2c 20 22 6d 65 6d 6f 72 79 22 29 3d 3d 30 20 29  , "memory")==0 )
4970: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 32 3b 0a  {.    return 2;.
4980: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 72 65 74    }else{.    ret
4990: 75 72 6e 20 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e  urn 0;.  }.}.#en
49a0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 50 41  dif /* SQLITE_PA
49b0: 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  GER_PRAGMAS */..
49c0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
49d0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
49e0: 53 0a 2f 2a 0a 2a 2a 20 49 6e 76 61 6c 69 64 61  S./*.** Invalida
49f0: 74 65 20 74 65 6d 70 20 73 74 6f 72 61 67 65 2c  te temp storage,
4a00: 20 65 69 74 68 65 72 20 77 68 65 6e 20 74 68 65   either when the
4a10: 20 74 65 6d 70 20 73 74 6f 72 61 67 65 20 69 73   temp storage is
4a20: 20 63 68 61 6e 67 65 64 0a 2a 2a 20 66 72 6f 6d   changed.** from
4a30: 20 64 65 66 61 75 6c 74 2c 20 6f 72 20 77 68 65   default, or whe
4a40: 6e 20 27 66 69 6c 65 27 20 61 6e 64 20 74 68 65  n 'file' and the
4a50: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
4a60: 63 74 6f 72 79 20 68 61 73 20 63 68 61 6e 67 65  ctory has change
4a70: 64 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20  d.*/.static int 
4a80: 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74  invalidateTempSt
4a90: 6f 72 61 67 65 28 50 61 72 73 65 20 2a 70 50 61  orage(Parse *pPa
4aa0: 72 73 65 29 7b 0a 20 20 73 71 6c 69 74 65 33 20  rse){.  sqlite3 
4ab0: 2a 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62  *db = pParse->db
4ac0: 3b 0a 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b  ;.  if( db->aDb[
4ad0: 31 5d 2e 70 42 74 21 3d 30 20 29 7b 0a 20 20 20  1].pBt!=0 ){.   
4ae0: 20 69 66 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f   if( !db->autoCo
4af0: 6d 6d 69 74 20 7c 7c 20 73 71 6c 69 74 65 33 42  mmit || sqlite3B
4b00: 74 72 65 65 49 73 49 6e 52 65 61 64 54 72 61 6e  treeIsInReadTran
4b10: 73 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 42 74  s(db->aDb[1].pBt
4b20: 29 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74  ) ){.      sqlit
4b30: 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73  e3ErrorMsg(pPars
4b40: 65 2c 20 22 74 65 6d 70 6f 72 61 72 79 20 73 74  e, "temporary st
4b50: 6f 72 61 67 65 20 63 61 6e 6e 6f 74 20 62 65 20  orage cannot be 
4b60: 63 68 61 6e 67 65 64 20 22 0a 20 20 20 20 20 20  changed ".      
4b70: 20 20 22 66 72 6f 6d 20 77 69 74 68 69 6e 20 61    "from within a
4b80: 20 74 72 61 6e 73 61 63 74 69 6f 6e 22 29 3b 0a   transaction");.
4b90: 20 20 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c        return SQL
4ba0: 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 20 20 7d  ITE_ERROR;.    }
4bb0: 0a 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65  .    sqlite3Btre
4bc0: 65 43 6c 6f 73 65 28 64 62 2d 3e 61 44 62 5b 31  eClose(db->aDb[1
4bd0: 5d 2e 70 42 74 29 3b 0a 20 20 20 20 64 62 2d 3e  ].pBt);.    db->
4be0: 61 44 62 5b 31 5d 2e 70 42 74 20 3d 20 30 3b 0a  aDb[1].pBt = 0;.
4bf0: 20 20 20 20 73 71 6c 69 74 65 33 52 65 73 65 74      sqlite3Reset
4c00: 41 6c 6c 53 63 68 65 6d 61 73 4f 66 43 6f 6e 6e  AllSchemasOfConn
4c10: 65 63 74 69 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a  ection(db);.  }.
4c20: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
4c30: 4f 4b 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a 20  OK;.}.#endif /* 
4c40: 53 51 4c 49 54 45 5f 50 41 47 45 52 5f 50 52 41  SQLITE_PAGER_PRA
4c50: 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64 65 66  GMAS */..#ifndef
4c60: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47   SQLITE_OMIT_PAG
4c70: 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a  ER_PRAGMAS./*.**
4c80: 20 49 66 20 74 68 65 20 54 45 4d 50 20 64 61 74   If the TEMP dat
4c90: 61 62 61 73 65 20 69 73 20 6f 70 65 6e 2c 20 63  abase is open, c
4ca0: 6c 6f 73 65 20 69 74 20 61 6e 64 20 6d 61 72 6b  lose it and mark
4cb0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 73 63   the database sc
4cc0: 68 65 6d 61 0a 2a 2a 20 61 73 20 6e 65 65 64 69  hema.** as needi
4cd0: 6e 67 20 72 65 6c 6f 61 64 69 6e 67 2e 20 20 54  ng reloading.  T
4ce0: 68 69 73 20 6d 75 73 74 20 62 65 20 64 6f 6e 65  his must be done
4cf0: 20 77 68 65 6e 20 75 73 69 6e 67 20 74 68 65 20   when using the 
4d00: 53 51 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52  SQLITE_TEMP_STOR
4d10: 45 0a 2a 2a 20 6f 72 20 44 45 46 41 55 4c 54 5f  E.** or DEFAULT_
4d20: 54 45 4d 50 5f 53 54 4f 52 45 20 70 72 61 67 6d  TEMP_STORE pragm
4d30: 61 73 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  as..*/.static in
4d40: 74 20 63 68 61 6e 67 65 54 65 6d 70 53 74 6f 72  t changeTempStor
4d50: 61 67 65 28 50 61 72 73 65 20 2a 70 50 61 72 73  age(Parse *pPars
4d60: 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a  e, const char *z
4d70: 53 74 6f 72 61 67 65 54 79 70 65 29 7b 0a 20 20  StorageType){.  
4d80: 69 6e 74 20 74 73 20 3d 20 67 65 74 54 65 6d 70  int ts = getTemp
4d90: 53 74 6f 72 65 28 7a 53 74 6f 72 61 67 65 54 79  Store(zStorageTy
4da0: 70 65 29 3b 0a 20 20 73 71 6c 69 74 65 33 20 2a  pe);.  sqlite3 *
4db0: 64 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b  db = pParse->db;
4dc0: 0a 20 20 69 66 28 20 64 62 2d 3e 74 65 6d 70 5f  .  if( db->temp_
4dd0: 73 74 6f 72 65 3d 3d 74 73 20 29 20 72 65 74 75  store==ts ) retu
4de0: 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20  rn SQLITE_OK;.  
4df0: 69 66 28 20 69 6e 76 61 6c 69 64 61 74 65 54 65  if( invalidateTe
4e00: 6d 70 53 74 6f 72 61 67 65 28 20 70 50 61 72 73  mpStorage( pPars
4e10: 65 20 29 20 21 3d 20 53 51 4c 49 54 45 5f 4f 4b  e ) != SQLITE_OK
4e20: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 53   ){.    return S
4e30: 51 4c 49 54 45 5f 45 52 52 4f 52 3b 0a 20 20 7d  QLITE_ERROR;.  }
4e40: 0a 20 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  .  db->temp_stor
4e50: 65 20 3d 20 28 75 38 29 74 73 3b 0a 20 20 72 65  e = (u8)ts;.  re
4e60: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
4e70: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
4e80: 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  TE_PAGER_PRAGMAS
4e90: 20 2a 2f 0a 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72   */../*.** Gener
4ea0: 61 74 65 20 63 6f 64 65 20 74 6f 20 72 65 74 75  ate code to retu
4eb0: 72 6e 20 61 20 73 69 6e 67 6c 65 20 69 6e 74 65  rn a single inte
4ec0: 67 65 72 20 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74  ger value..*/.st
4ed0: 61 74 69 63 20 76 6f 69 64 20 72 65 74 75 72 6e  atic void return
4ee0: 53 69 6e 67 6c 65 49 6e 74 28 50 61 72 73 65 20  SingleInt(Parse 
4ef0: 2a 70 50 61 72 73 65 2c 20 63 6f 6e 73 74 20 63  *pParse, const c
4f00: 68 61 72 20 2a 7a 4c 61 62 65 6c 2c 20 69 36 34  har *zLabel, i64
4f10: 20 76 61 6c 75 65 29 7b 0a 20 20 56 64 62 65 20   value){.  Vdbe 
4f20: 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56  *v = sqlite3GetV
4f30: 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20 69  dbe(pParse);.  i
4f40: 6e 74 20 6d 65 6d 20 3d 20 2b 2b 70 50 61 72 73  nt mem = ++pPars
4f50: 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 69 36 34 20 2a  e->nMem;.  i64 *
4f60: 70 49 36 34 20 3d 20 73 71 6c 69 74 65 33 44 62  pI64 = sqlite3Db
4f70: 4d 61 6c 6c 6f 63 52 61 77 28 70 50 61 72 73 65  MallocRaw(pParse
4f80: 2d 3e 64 62 2c 20 73 69 7a 65 6f 66 28 76 61 6c  ->db, sizeof(val
4f90: 75 65 29 29 3b 0a 20 20 69 66 28 20 70 49 36 34  ue));.  if( pI64
4fa0: 20 29 7b 0a 20 20 20 20 6d 65 6d 63 70 79 28 70   ){.    memcpy(p
4fb0: 49 36 34 2c 20 26 76 61 6c 75 65 2c 20 73 69 7a  I64, &value, siz
4fc0: 65 6f 66 28 76 61 6c 75 65 29 29 3b 0a 20 20 7d  eof(value));.  }
4fd0: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64  .  sqlite3VdbeAd
4fe0: 64 4f 70 34 28 76 2c 20 4f 50 5f 49 6e 74 36 34  dOp4(v, OP_Int64
4ff0: 2c 20 30 2c 20 6d 65 6d 2c 20 30 2c 20 28 63 68  , 0, mem, 0, (ch
5000: 61 72 2a 29 70 49 36 34 2c 20 50 34 5f 49 4e 54  ar*)pI64, P4_INT
5010: 36 34 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64  64);.  sqlite3Vd
5020: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
5030: 31 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  1);.  sqlite3Vdb
5040: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
5050: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
5060: 7a 4c 61 62 65 6c 2c 20 53 51 4c 49 54 45 5f 53  zLabel, SQLITE_S
5070: 54 41 54 49 43 29 3b 0a 20 20 73 71 6c 69 74 65  TATIC);.  sqlite
5080: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
5090: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 6d 65 6d  P_ResultRow, mem
50a0: 2c 20 31 29 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20  , 1);.}.../*.** 
50b0: 53 65 74 20 74 68 65 20 73 61 66 65 74 79 5f 6c  Set the safety_l
50c0: 65 76 65 6c 20 61 6e 64 20 70 61 67 65 72 20 66  evel and pager f
50d0: 6c 61 67 73 20 66 6f 72 20 70 61 67 65 72 20 69  lags for pager i
50e0: 44 62 2e 20 20 4f 72 20 69 66 20 69 44 62 3c 30  Db.  Or if iDb<0
50f0: 0a 2a 2a 20 73 65 74 20 74 68 65 73 65 20 76 61  .** set these va
5100: 6c 75 65 73 20 66 6f 72 20 61 6c 6c 20 70 61 67  lues for all pag
5110: 65 72 73 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ers..*/.#ifndef 
5120: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
5130: 52 5f 50 52 41 47 4d 41 53 0a 73 74 61 74 69 63  R_PRAGMAS.static
5140: 20 76 6f 69 64 20 73 65 74 41 6c 6c 50 61 67 65   void setAllPage
5150: 72 46 6c 61 67 73 28 73 71 6c 69 74 65 33 20 2a  rFlags(sqlite3 *
5160: 64 62 29 7b 0a 20 20 69 66 28 20 64 62 2d 3e 61  db){.  if( db->a
5170: 75 74 6f 43 6f 6d 6d 69 74 20 29 7b 0a 20 20 20  utoCommit ){.   
5180: 20 44 62 20 2a 70 44 62 20 3d 20 64 62 2d 3e 61   Db *pDb = db->a
5190: 44 62 3b 0a 20 20 20 20 69 6e 74 20 6e 20 3d 20  Db;.    int n = 
51a0: 64 62 2d 3e 6e 44 62 3b 0a 20 20 20 20 61 73 73  db->nDb;.    ass
51b0: 65 72 74 28 20 53 51 4c 49 54 45 5f 46 75 6c 6c  ert( SQLITE_Full
51c0: 46 53 79 6e 63 3d 3d 50 41 47 45 52 5f 46 55 4c  FSync==PAGER_FUL
51d0: 4c 46 53 59 4e 43 20 29 3b 0a 20 20 20 20 61 73  LFSYNC );.    as
51e0: 73 65 72 74 28 20 53 51 4c 49 54 45 5f 43 6b 70  sert( SQLITE_Ckp
51f0: 74 46 75 6c 6c 46 53 79 6e 63 3d 3d 50 41 47 45  tFullFSync==PAGE
5200: 52 5f 43 4b 50 54 5f 46 55 4c 4c 46 53 59 4e 43  R_CKPT_FULLFSYNC
5210: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
5220: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
5230: 6c 3d 3d 50 41 47 45 52 5f 43 41 43 48 45 53 50  l==PAGER_CACHESP
5240: 49 4c 4c 20 29 3b 0a 20 20 20 20 61 73 73 65 72  ILL );.    asser
5250: 74 28 20 28 50 41 47 45 52 5f 46 55 4c 4c 46 53  t( (PAGER_FULLFS
5260: 59 4e 43 20 7c 20 50 41 47 45 52 5f 43 4b 50 54  YNC | PAGER_CKPT
5270: 5f 46 55 4c 4c 46 53 59 4e 43 20 7c 20 50 41 47  _FULLFSYNC | PAG
5280: 45 52 5f 43 41 43 48 45 53 50 49 4c 4c 29 0a 20  ER_CACHESPILL). 
5290: 20 20 20 20 20 20 20 20 20 20 20 20 3d 3d 20 20              ==  
52a0: 50 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b  PAGER_FLAGS_MASK
52b0: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
52c0: 28 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76  (pDb->safety_lev
52d0: 65 6c 20 26 20 50 41 47 45 52 5f 53 59 4e 43 48  el & PAGER_SYNCH
52e0: 52 4f 4e 4f 55 53 5f 4d 41 53 4b 29 3d 3d 70 44  RONOUS_MASK)==pD
52f0: 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  b->safety_level 
5300: 29 3b 0a 20 20 20 20 77 68 69 6c 65 28 20 28 6e  );.    while( (n
5310: 2d 2d 29 20 3e 20 30 20 29 7b 0a 20 20 20 20 20  --) > 0 ){.     
5320: 20 69 66 28 20 70 44 62 2d 3e 70 42 74 20 29 7b   if( pDb->pBt ){
5330: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
5340: 42 74 72 65 65 53 65 74 50 61 67 65 72 46 6c 61  BtreeSetPagerFla
5350: 67 73 28 70 44 62 2d 3e 70 42 74 2c 0a 20 20 20  gs(pDb->pBt,.   
5360: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 44                pD
5370: 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20  b->safety_level 
5380: 7c 20 28 64 62 2d 3e 66 6c 61 67 73 20 26 20 50  | (db->flags & P
5390: 41 47 45 52 5f 46 4c 41 47 53 5f 4d 41 53 4b 29  AGER_FLAGS_MASK)
53a0: 20 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20   );.      }.    
53b0: 20 20 70 44 62 2b 2b 3b 0a 20 20 20 20 7d 0a 20    pDb++;.    }. 
53c0: 20 7d 0a 7d 0a 23 65 6c 73 65 0a 23 20 64 65 66   }.}.#else.# def
53d0: 69 6e 65 20 73 65 74 41 6c 6c 50 61 67 65 72 46  ine setAllPagerF
53e0: 6c 61 67 73 28 58 29 20 20 2f 2a 20 6e 6f 2d 6f  lags(X)  /* no-o
53f0: 70 20 2a 2f 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a  p */.#endif.../*
5400: 0a 2a 2a 20 52 65 74 75 72 6e 20 61 20 68 75 6d  .** Return a hum
5410: 61 6e 2d 72 65 61 64 61 62 6c 65 20 6e 61 6d 65  an-readable name
5420: 20 66 6f 72 20 61 20 63 6f 6e 73 74 72 61 69 6e   for a constrain
5430: 74 20 72 65 73 6f 6c 75 74 69 6f 6e 20 61 63 74  t resolution act
5440: 69 6f 6e 2e 0a 2a 2f 0a 23 69 66 6e 64 65 66 20  ion..*/.#ifndef 
5450: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
5460: 49 47 4e 5f 4b 45 59 0a 73 74 61 74 69 63 20 63  IGN_KEY.static c
5470: 6f 6e 73 74 20 63 68 61 72 20 2a 61 63 74 69 6f  onst char *actio
5480: 6e 4e 61 6d 65 28 75 38 20 61 63 74 69 6f 6e 29  nName(u8 action)
5490: 7b 0a 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a  {.  const char *
54a0: 7a 4e 61 6d 65 3b 0a 20 20 73 77 69 74 63 68 28  zName;.  switch(
54b0: 20 61 63 74 69 6f 6e 20 29 7b 0a 20 20 20 20 63   action ){.    c
54c0: 61 73 65 20 4f 45 5f 53 65 74 4e 75 6c 6c 3a 20  ase OE_SetNull: 
54d0: 20 7a 4e 61 6d 65 20 3d 20 22 53 45 54 20 4e 55   zName = "SET NU
54e0: 4c 4c 22 3b 20 20 20 20 20 20 20 20 62 72 65 61  LL";        brea
54f0: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 53  k;.    case OE_S
5500: 65 74 44 66 6c 74 3a 20 20 7a 4e 61 6d 65 20 3d  etDflt:  zName =
5510: 20 22 53 45 54 20 44 45 46 41 55 4c 54 22 3b 20   "SET DEFAULT"; 
5520: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 63      break;.    c
5530: 61 73 65 20 4f 45 5f 43 61 73 63 61 64 65 3a 20  ase OE_Cascade: 
5540: 20 7a 4e 61 6d 65 20 3d 20 22 43 41 53 43 41 44   zName = "CASCAD
5550: 45 22 3b 20 20 20 20 20 20 20 20 20 62 72 65 61  E";         brea
5560: 6b 3b 0a 20 20 20 20 63 61 73 65 20 4f 45 5f 52  k;.    case OE_R
5570: 65 73 74 72 69 63 74 3a 20 7a 4e 61 6d 65 20 3d  estrict: zName =
5580: 20 22 52 45 53 54 52 49 43 54 22 3b 20 20 20 20   "RESTRICT";    
5590: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 64      break;.    d
55a0: 65 66 61 75 6c 74 3a 20 20 20 20 20 20 20 20 20  efault:         
55b0: 20 7a 4e 61 6d 65 20 3d 20 22 4e 4f 20 41 43 54   zName = "NO ACT
55c0: 49 4f 4e 22 3b 20 20 0a 20 20 20 20 20 20 20 20  ION";  .        
55d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 73                as
55e0: 73 65 72 74 28 20 61 63 74 69 6f 6e 3d 3d 4f 45  sert( action==OE
55f0: 5f 4e 6f 6e 65 20 29 3b 20 62 72 65 61 6b 3b 0a  _None ); break;.
5600: 20 20 7d 0a 20 20 72 65 74 75 72 6e 20 7a 4e 61    }.  return zNa
5610: 6d 65 3b 0a 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f  me;.}.#endif.../
5620: 2a 0a 2a 2a 20 50 61 72 61 6d 65 74 65 72 20 65  *.** Parameter e
5630: 4d 6f 64 65 20 6d 75 73 74 20 62 65 20 6f 6e 65  Mode must be one
5640: 20 6f 66 20 74 68 65 20 50 41 47 45 52 5f 4a 4f   of the PAGER_JO
5650: 55 52 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 63 6f  URNALMODE_XXX co
5660: 6e 73 74 61 6e 74 73 0a 2a 2a 20 64 65 66 69 6e  nstants.** defin
5670: 65 64 20 69 6e 20 70 61 67 65 72 2e 68 2e 20 54  ed in pager.h. T
5680: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 72 65 74  his function ret
5690: 75 72 6e 73 20 74 68 65 20 61 73 73 6f 63 69 61  urns the associa
56a0: 74 65 64 20 6c 6f 77 65 72 63 61 73 65 0a 2a 2a  ted lowercase.**
56b0: 20 6a 6f 75 72 6e 61 6c 2d 6d 6f 64 65 20 6e 61   journal-mode na
56c0: 6d 65 2e 0a 2a 2f 0a 63 6f 6e 73 74 20 63 68 61  me..*/.const cha
56d0: 72 20 2a 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61  r *sqlite3Journa
56e0: 6c 4d 6f 64 65 6e 61 6d 65 28 69 6e 74 20 65 4d  lModename(int eM
56f0: 6f 64 65 29 7b 0a 20 20 73 74 61 74 69 63 20 63  ode){.  static c
5700: 68 61 72 20 2a 20 63 6f 6e 73 74 20 61 7a 4d 6f  har * const azMo
5710: 64 65 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20  deName[] = {.   
5720: 20 22 64 65 6c 65 74 65 22 2c 20 22 70 65 72 73   "delete", "pers
5730: 69 73 74 22 2c 20 22 6f 66 66 22 2c 20 22 74 72  ist", "off", "tr
5740: 75 6e 63 61 74 65 22 2c 20 22 6d 65 6d 6f 72 79  uncate", "memory
5750: 22 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ".#ifndef SQLITE
5760: 5f 4f 4d 49 54 5f 57 41 4c 0a 20 20 20 20 20 2c  _OMIT_WAL.     ,
5770: 20 22 77 61 6c 22 0a 23 65 6e 64 69 66 0a 20 20   "wal".#endif.  
5780: 7d 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47  };.  assert( PAG
5790: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44  ER_JOURNALMODE_D
57a0: 45 4c 45 54 45 3d 3d 30 20 29 3b 0a 20 20 61 73  ELETE==0 );.  as
57b0: 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52  sert( PAGER_JOUR
57c0: 4e 41 4c 4d 4f 44 45 5f 50 45 52 53 49 53 54 3d  NALMODE_PERSIST=
57d0: 3d 31 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =1 );.  assert( 
57e0: 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44  PAGER_JOURNALMOD
57f0: 45 5f 4f 46 46 3d 3d 32 20 29 3b 0a 20 20 61 73  E_OFF==2 );.  as
5800: 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52  sert( PAGER_JOUR
5810: 4e 41 4c 4d 4f 44 45 5f 54 52 55 4e 43 41 54 45  NALMODE_TRUNCATE
5820: 3d 3d 33 20 29 3b 0a 20 20 61 73 73 65 72 74 28  ==3 );.  assert(
5830: 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f   PAGER_JOURNALMO
5840: 44 45 5f 4d 45 4d 4f 52 59 3d 3d 34 20 29 3b 0a  DE_MEMORY==4 );.
5850: 20 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f    assert( PAGER_
5860: 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 57 41 4c 3d  JOURNALMODE_WAL=
5870: 3d 35 20 29 3b 0a 20 20 61 73 73 65 72 74 28 20  =5 );.  assert( 
5880: 65 4d 6f 64 65 3e 3d 30 20 26 26 20 65 4d 6f 64  eMode>=0 && eMod
5890: 65 3c 3d 41 72 72 61 79 53 69 7a 65 28 61 7a 4d  e<=ArraySize(azM
58a0: 6f 64 65 4e 61 6d 65 29 20 29 3b 0a 0a 20 20 69  odeName) );..  i
58b0: 66 28 20 65 4d 6f 64 65 3d 3d 41 72 72 61 79 53  f( eMode==ArrayS
58c0: 69 7a 65 28 61 7a 4d 6f 64 65 4e 61 6d 65 29 20  ize(azModeName) 
58d0: 29 20 72 65 74 75 72 6e 20 30 3b 0a 20 20 72 65  ) return 0;.  re
58e0: 74 75 72 6e 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b  turn azModeName[
58f0: 65 4d 6f 64 65 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a  eMode];.}../*.**
5900: 20 50 72 6f 63 65 73 73 20 61 20 70 72 61 67 6d   Process a pragm
5910: 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 20 0a 2a  a statement.  .*
5920: 2a 0a 2a 2a 20 50 72 61 67 6d 61 73 20 61 72 65  *.** Pragmas are
5930: 20 6f 66 20 74 68 69 73 20 66 6f 72 6d 3a 0a 2a   of this form:.*
5940: 2a 0a 2a 2a 20 20 20 20 20 20 50 52 41 47 4d 41  *.**      PRAGMA
5950: 20 5b 64 61 74 61 62 61 73 65 2e 5d 69 64 20 5b   [database.]id [
5960: 3d 20 76 61 6c 75 65 5d 0a 2a 2a 0a 2a 2a 20 54  = value].**.** T
5970: 68 65 20 69 64 65 6e 74 69 66 69 65 72 20 6d 69  he identifier mi
5980: 67 68 74 20 61 6c 73 6f 20 62 65 20 61 20 73 74  ght also be a st
5990: 72 69 6e 67 2e 20 20 54 68 65 20 76 61 6c 75 65  ring.  The value
59a0: 20 69 73 20 61 20 73 74 72 69 6e 67 2c 20 61 6e   is a string, an
59b0: 64 0a 2a 2a 20 69 64 65 6e 74 69 66 69 65 72 2c  d.** identifier,
59c0: 20 6f 72 20 61 20 6e 75 6d 62 65 72 2e 20 20 49   or a number.  I
59d0: 66 20 6d 69 6e 75 73 46 6c 61 67 20 69 73 20 74  f minusFlag is t
59e0: 72 75 65 2c 20 74 68 65 6e 20 74 68 65 20 76 61  rue, then the va
59f0: 6c 75 65 20 69 73 0a 2a 2a 20 61 20 6e 75 6d 62  lue is.** a numb
5a00: 65 72 20 74 68 61 74 20 77 61 73 20 70 72 65 63  er that was prec
5a10: 65 64 65 64 20 62 79 20 61 20 6d 69 6e 75 73 20  eded by a minus 
5a20: 73 69 67 6e 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74  sign..**.** If t
5a30: 68 65 20 6c 65 66 74 20 73 69 64 65 20 69 73 20  he left side is 
5a40: 22 64 61 74 61 62 61 73 65 2e 69 64 22 20 74 68  "database.id" th
5a50: 65 6e 20 70 49 64 31 20 69 73 20 74 68 65 20 64  en pId1 is the d
5a60: 61 74 61 62 61 73 65 20 6e 61 6d 65 0a 2a 2a 20  atabase name.** 
5a70: 61 6e 64 20 70 49 64 32 20 69 73 20 74 68 65 20  and pId2 is the 
5a80: 69 64 2e 20 20 49 66 20 74 68 65 20 6c 65 66 74  id.  If the left
5a90: 20 73 69 64 65 20 69 73 20 6a 75 73 74 20 22 69   side is just "i
5aa0: 64 22 20 74 68 65 6e 20 70 49 64 31 20 69 73 20  d" then pId1 is 
5ab0: 74 68 65 0a 2a 2a 20 69 64 20 61 6e 64 20 70 49  the.** id and pI
5ac0: 64 32 20 69 73 20 61 6e 79 20 65 6d 70 74 79 20  d2 is any empty 
5ad0: 73 74 72 69 6e 67 2e 0a 2a 2f 0a 76 6f 69 64 20  string..*/.void 
5ae0: 73 71 6c 69 74 65 33 50 72 61 67 6d 61 28 0a 20  sqlite3Pragma(. 
5af0: 20 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20   Parse *pParse, 
5b00: 0a 20 20 54 6f 6b 65 6e 20 2a 70 49 64 31 2c 20  .  Token *pId1, 
5b10: 20 20 20 20 20 20 20 2f 2a 20 46 69 72 73 74 20         /* First 
5b20: 70 61 72 74 20 6f 66 20 5b 64 61 74 61 62 61 73  part of [databas
5b30: 65 2e 5d 69 64 20 66 69 65 6c 64 20 2a 2f 0a 20  e.]id field */. 
5b40: 20 54 6f 6b 65 6e 20 2a 70 49 64 32 2c 20 20 20   Token *pId2,   
5b50: 20 20 20 20 20 2f 2a 20 53 65 63 6f 6e 64 20 70       /* Second p
5b60: 61 72 74 20 6f 66 20 5b 64 61 74 61 62 61 73 65  art of [database
5b70: 2e 5d 69 64 20 66 69 65 6c 64 2c 20 6f 72 20 4e  .]id field, or N
5b80: 55 4c 4c 20 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a  ULL */.  Token *
5b90: 70 56 61 6c 75 65 2c 20 20 20 20 20 20 2f 2a 20  pValue,      /* 
5ba0: 54 6f 6b 65 6e 20 66 6f 72 20 3c 76 61 6c 75 65  Token for <value
5bb0: 3e 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20  >, or NULL */.  
5bc0: 69 6e 74 20 6d 69 6e 75 73 46 6c 61 67 20 20 20  int minusFlag   
5bd0: 20 20 20 20 2f 2a 20 54 72 75 65 20 69 66 20 61      /* True if a
5be0: 20 27 2d 27 20 73 69 67 6e 20 70 72 65 63 65 64   '-' sign preced
5bf0: 65 64 20 3c 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b  ed <value> */.){
5c00: 0a 20 20 63 68 61 72 20 2a 7a 4c 65 66 74 20 3d  .  char *zLeft =
5c10: 20 30 3b 20 20 20 20 20 20 20 2f 2a 20 4e 75 6c   0;       /* Nul
5c20: 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d  -terminated UTF-
5c30: 38 20 73 74 72 69 6e 67 20 3c 69 64 3e 20 2a 2f  8 string <id> */
5c40: 0a 20 20 63 68 61 72 20 2a 7a 52 69 67 68 74 20  .  char *zRight 
5c50: 3d 20 30 3b 20 20 20 20 20 20 2f 2a 20 4e 75 6c  = 0;      /* Nul
5c60: 2d 74 65 72 6d 69 6e 61 74 65 64 20 55 54 46 2d  -terminated UTF-
5c70: 38 20 73 74 72 69 6e 67 20 3c 76 61 6c 75 65 3e  8 string <value>
5c80: 2c 20 6f 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63  , or NULL */.  c
5c90: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 44 62 20 3d  onst char *zDb =
5ca0: 20 30 3b 20 20 20 2f 2a 20 54 68 65 20 64 61 74   0;   /* The dat
5cb0: 61 62 61 73 65 20 6e 61 6d 65 20 2a 2f 0a 20 20  abase name */.  
5cc0: 54 6f 6b 65 6e 20 2a 70 49 64 3b 20 20 20 20 20  Token *pId;     
5cd0: 20 20 20 20 20 20 20 2f 2a 20 50 6f 69 6e 74 65         /* Pointe
5ce0: 72 20 74 6f 20 3c 69 64 3e 20 74 6f 6b 65 6e 20  r to <id> token 
5cf0: 2a 2f 0a 20 20 63 68 61 72 20 2a 61 46 63 6e 74  */.  char *aFcnt
5d00: 6c 5b 34 5d 3b 20 20 20 20 20 20 20 2f 2a 20 41  l[4];       /* A
5d10: 72 67 75 6d 65 6e 74 20 74 6f 20 53 51 4c 49 54  rgument to SQLIT
5d20: 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a  E_FCNTL_PRAGMA *
5d30: 2f 0a 20 20 69 6e 74 20 69 44 62 3b 20 20 20 20  /.  int iDb;    
5d40: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 44 61             /* Da
5d50: 74 61 62 61 73 65 20 69 6e 64 65 78 20 66 6f 72  tabase index for
5d60: 20 3c 64 61 74 61 62 61 73 65 3e 20 2a 2f 0a 20   <database> */. 
5d70: 20 69 6e 74 20 6c 77 72 2c 20 75 70 72 2c 20 6d   int lwr, upr, m
5d80: 69 64 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a  id;           /*
5d90: 20 42 69 6e 61 72 79 20 73 65 61 72 63 68 20 62   Binary search b
5da0: 6f 75 6e 64 73 20 2a 2f 0a 20 20 69 6e 74 20 72  ounds */.  int r
5db0: 63 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  c;              
5dc0: 20 20 20 20 20 20 20 20 2f 2a 20 72 65 74 75 72          /* retur
5dd0: 6e 20 76 61 6c 75 65 20 66 6f 72 6d 20 53 51 4c  n value form SQL
5de0: 49 54 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41  ITE_FCNTL_PRAGMA
5df0: 20 2a 2f 0a 20 20 73 71 6c 69 74 65 33 20 2a 64   */.  sqlite3 *d
5e00: 62 20 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 20  b = pParse->db; 
5e10: 20 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61     /* The databa
5e20: 73 65 20 63 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f  se connection */
5e30: 0a 20 20 44 62 20 2a 70 44 62 3b 20 20 20 20 20  .  Db *pDb;     
5e40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
5e50: 2f 2a 20 54 68 65 20 73 70 65 63 69 66 69 63 20  /* The specific 
5e60: 64 61 74 61 62 61 73 65 20 62 65 69 6e 67 20 70  database being p
5e70: 72 61 67 6d 61 65 64 20 2a 2f 0a 20 20 56 64 62  ragmaed */.  Vdb
5e80: 65 20 2a 76 20 3d 20 73 71 6c 69 74 65 33 47 65  e *v = sqlite3Ge
5e90: 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 20 20  tVdbe(pParse);  
5ea0: 2f 2a 20 50 72 65 70 61 72 65 64 20 73 74 61 74  /* Prepared stat
5eb0: 65 6d 65 6e 74 20 2a 2f 0a 0a 20 20 69 66 28 20  ement */..  if( 
5ec0: 76 3d 3d 30 20 29 20 72 65 74 75 72 6e 3b 0a 20  v==0 ) return;. 
5ed0: 20 73 71 6c 69 74 65 33 56 64 62 65 52 75 6e 4f   sqlite3VdbeRunO
5ee0: 6e 6c 79 4f 6e 63 65 28 76 29 3b 0a 20 20 70 50  nlyOnce(v);.  pP
5ef0: 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a  arse->nMem = 2;.
5f00: 0a 20 20 2f 2a 20 49 6e 74 65 72 70 72 65 74 20  .  /* Interpret 
5f10: 74 68 65 20 5b 64 61 74 61 62 61 73 65 2e 5d 20  the [database.] 
5f20: 70 61 72 74 20 6f 66 20 74 68 65 20 70 72 61 67  part of the prag
5f30: 6d 61 20 73 74 61 74 65 6d 65 6e 74 2e 20 69 44  ma statement. iD
5f40: 62 20 69 73 20 74 68 65 0a 20 20 2a 2a 20 69 6e  b is the.  ** in
5f50: 64 65 78 20 6f 66 20 74 68 65 20 64 61 74 61 62  dex of the datab
5f60: 61 73 65 20 74 68 69 73 20 70 72 61 67 6d 61 20  ase this pragma 
5f70: 69 73 20 62 65 69 6e 67 20 61 70 70 6c 69 65 64  is being applied
5f80: 20 74 6f 20 69 6e 20 64 62 2e 61 44 62 5b 5d 2e   to in db.aDb[].
5f90: 20 2a 2f 0a 20 20 69 44 62 20 3d 20 73 71 6c 69   */.  iDb = sqli
5fa0: 74 65 33 54 77 6f 50 61 72 74 4e 61 6d 65 28 70  te3TwoPartName(p
5fb0: 50 61 72 73 65 2c 20 70 49 64 31 2c 20 70 49 64  Parse, pId1, pId
5fc0: 32 2c 20 26 70 49 64 29 3b 0a 20 20 69 66 28 20  2, &pId);.  if( 
5fd0: 69 44 62 3c 30 20 29 20 72 65 74 75 72 6e 3b 0a  iDb<0 ) return;.
5fe0: 20 20 70 44 62 20 3d 20 26 64 62 2d 3e 61 44 62    pDb = &db->aDb
5ff0: 5b 69 44 62 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20  [iDb];..  /* If 
6000: 74 68 65 20 74 65 6d 70 20 64 61 74 61 62 61 73  the temp databas
6010: 65 20 68 61 73 20 62 65 65 6e 20 65 78 70 6c 69  e has been expli
6020: 63 69 74 6c 79 20 6e 61 6d 65 64 20 61 73 20 70  citly named as p
6030: 61 72 74 20 6f 66 20 74 68 65 20 0a 20 20 2a 2a  art of the .  **
6040: 20 70 72 61 67 6d 61 2c 20 6d 61 6b 65 20 73 75   pragma, make su
6050: 72 65 20 69 74 20 69 73 20 6f 70 65 6e 2e 20 0a  re it is open. .
6060: 20 20 2a 2f 0a 20 20 69 66 28 20 69 44 62 3d 3d    */.  if( iDb==
6070: 31 20 26 26 20 73 71 6c 69 74 65 33 4f 70 65 6e  1 && sqlite3Open
6080: 54 65 6d 70 44 61 74 61 62 61 73 65 28 70 50 61  TempDatabase(pPa
6090: 72 73 65 29 20 29 7b 0a 20 20 20 20 72 65 74 75  rse) ){.    retu
60a0: 72 6e 3b 0a 20 20 7d 0a 0a 20 20 7a 4c 65 66 74  rn;.  }..  zLeft
60b0: 20 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72   = sqlite3NameFr
60c0: 6f 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 49 64 29  omToken(db, pId)
60d0: 3b 0a 20 20 69 66 28 20 21 7a 4c 65 66 74 20 29  ;.  if( !zLeft )
60e0: 20 72 65 74 75 72 6e 3b 0a 20 20 69 66 28 20 6d   return;.  if( m
60f0: 69 6e 75 73 46 6c 61 67 20 29 7b 0a 20 20 20 20  inusFlag ){.    
6100: 7a 52 69 67 68 74 20 3d 20 73 71 6c 69 74 65 33  zRight = sqlite3
6110: 4d 50 72 69 6e 74 66 28 64 62 2c 20 22 2d 25 54  MPrintf(db, "-%T
6120: 22 2c 20 70 56 61 6c 75 65 29 3b 0a 20 20 7d 65  ", pValue);.  }e
6130: 6c 73 65 7b 0a 20 20 20 20 7a 52 69 67 68 74 20  lse{.    zRight 
6140: 3d 20 73 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f  = sqlite3NameFro
6150: 6d 54 6f 6b 65 6e 28 64 62 2c 20 70 56 61 6c 75  mToken(db, pValu
6160: 65 29 3b 0a 20 20 7d 0a 0a 20 20 61 73 73 65 72  e);.  }..  asser
6170: 74 28 20 70 49 64 32 20 29 3b 0a 20 20 7a 44 62  t( pId2 );.  zDb
6180: 20 3d 20 70 49 64 32 2d 3e 6e 3e 30 20 3f 20 70   = pId2->n>0 ? p
6190: 44 62 2d 3e 7a 4e 61 6d 65 20 3a 20 30 3b 0a 20  Db->zName : 0;. 
61a0: 20 69 66 28 20 73 71 6c 69 74 65 33 41 75 74 68   if( sqlite3Auth
61b0: 43 68 65 63 6b 28 70 50 61 72 73 65 2c 20 53 51  Check(pParse, SQ
61c0: 4c 49 54 45 5f 50 52 41 47 4d 41 2c 20 7a 4c 65  LITE_PRAGMA, zLe
61d0: 66 74 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29  ft, zRight, zDb)
61e0: 20 29 7b 0a 20 20 20 20 67 6f 74 6f 20 70 72 61   ){.    goto pra
61f0: 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20  gma_out;.  }..  
6200: 2f 2a 20 53 65 6e 64 20 61 6e 20 53 51 4c 49 54  /* Send an SQLIT
6210: 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 66  E_FCNTL_PRAGMA f
6220: 69 6c 65 2d 63 6f 6e 74 72 6f 6c 20 74 6f 20 74  ile-control to t
6230: 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20 56 46  he underlying VF
6240: 53 0a 20 20 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f  S.  ** connectio
6250: 6e 2e 20 20 49 66 20 69 74 20 72 65 74 75 72 6e  n.  If it return
6260: 73 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 74 68 65  s SQLITE_OK, the
6270: 6e 20 61 73 73 75 6d 65 20 74 68 61 74 20 74 68  n assume that th
6280: 65 20 56 46 53 0a 20 20 2a 2a 20 68 61 6e 64 6c  e VFS.  ** handl
6290: 65 64 20 74 68 65 20 70 72 61 67 6d 61 20 61 6e  ed the pragma an
62a0: 64 20 67 65 6e 65 72 61 74 65 20 61 20 6e 6f 2d  d generate a no-
62b0: 6f 70 20 70 72 65 70 61 72 65 64 20 73 74 61 74  op prepared stat
62c0: 65 6d 65 6e 74 2e 0a 20 20 2a 2f 0a 20 20 61 46  ement..  */.  aF
62d0: 63 6e 74 6c 5b 30 5d 20 3d 20 30 3b 0a 20 20 61  cntl[0] = 0;.  a
62e0: 46 63 6e 74 6c 5b 31 5d 20 3d 20 7a 4c 65 66 74  Fcntl[1] = zLeft
62f0: 3b 0a 20 20 61 46 63 6e 74 6c 5b 32 5d 20 3d 20  ;.  aFcntl[2] = 
6300: 7a 52 69 67 68 74 3b 0a 20 20 61 46 63 6e 74 6c  zRight;.  aFcntl
6310: 5b 33 5d 20 3d 20 30 3b 0a 20 20 64 62 2d 3e 62  [3] = 0;.  db->b
6320: 75 73 79 48 61 6e 64 6c 65 72 2e 6e 42 75 73 79  usyHandler.nBusy
6330: 20 3d 20 30 3b 0a 20 20 72 63 20 3d 20 73 71 6c   = 0;.  rc = sql
6340: 69 74 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f  ite3_file_contro
6350: 6c 28 64 62 2c 20 7a 44 62 2c 20 53 51 4c 49 54  l(db, zDb, SQLIT
6360: 45 5f 46 43 4e 54 4c 5f 50 52 41 47 4d 41 2c 20  E_FCNTL_PRAGMA, 
6370: 28 76 6f 69 64 2a 29 61 46 63 6e 74 6c 29 3b 0a  (void*)aFcntl);.
6380: 20 20 69 66 28 20 72 63 3d 3d 53 51 4c 49 54 45    if( rc==SQLITE
6390: 5f 4f 4b 20 29 7b 0a 20 20 20 20 69 66 28 20 61  _OK ){.    if( a
63a0: 46 63 6e 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20  Fcntl[0] ){.    
63b0: 20 20 69 6e 74 20 6d 65 6d 20 3d 20 2b 2b 70 50    int mem = ++pP
63c0: 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20  arse->nMem;.    
63d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
63e0: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
63f0: 38 2c 20 30 2c 20 6d 65 6d 2c 20 30 2c 20 61 46  8, 0, mem, 0, aF
6400: 63 6e 74 6c 5b 30 5d 2c 20 30 29 3b 0a 20 20 20  cntl[0], 0);.   
6410: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
6420: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
6430: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
6440: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
6450: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
6460: 22 72 65 73 75 6c 74 22 2c 20 53 51 4c 49 54 45  "result", SQLITE
6470: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
6480: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
6490: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
64a0: 77 2c 20 6d 65 6d 2c 20 31 29 3b 0a 20 20 20 20  w, mem, 1);.    
64b0: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61    sqlite3_free(a
64c0: 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d  Fcntl[0]);.    }
64d0: 0a 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61  .    goto pragma
64e0: 5f 6f 75 74 3b 0a 20 20 7d 0a 20 20 69 66 28 20  _out;.  }.  if( 
64f0: 72 63 21 3d 53 51 4c 49 54 45 5f 4e 4f 54 46 4f  rc!=SQLITE_NOTFO
6500: 55 4e 44 20 29 7b 0a 20 20 20 20 69 66 28 20 61  UND ){.    if( a
6510: 46 63 6e 74 6c 5b 30 5d 20 29 7b 0a 20 20 20 20  Fcntl[0] ){.    
6520: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73    sqlite3ErrorMs
6530: 67 28 70 50 61 72 73 65 2c 20 22 25 73 22 2c 20  g(pParse, "%s", 
6540: 61 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20  aFcntl[0]);.    
6550: 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65 28 61    sqlite3_free(a
6560: 46 63 6e 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d  Fcntl[0]);.    }
6570: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 45 72  .    pParse->nEr
6580: 72 2b 2b 3b 0a 20 20 20 20 70 50 61 72 73 65 2d  r++;.    pParse-
6590: 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20 67 6f  >rc = rc;.    go
65a0: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
65b0: 20 7d 0a 0a 20 20 2f 2a 20 4c 6f 63 61 74 65 20   }..  /* Locate 
65c0: 74 68 65 20 70 72 61 67 6d 61 20 69 6e 20 74 68  the pragma in th
65d0: 65 20 6c 6f 6f 6b 75 70 20 74 61 62 6c 65 20 2a  e lookup table *
65e0: 2f 0a 20 20 6c 77 72 20 3d 20 30 3b 0a 20 20 75  /.  lwr = 0;.  u
65f0: 70 72 20 3d 20 41 72 72 61 79 53 69 7a 65 28 61  pr = ArraySize(a
6600: 50 72 61 67 6d 61 4e 61 6d 65 73 29 2d 31 3b 0a  PragmaNames)-1;.
6610: 20 20 77 68 69 6c 65 28 20 6c 77 72 3c 3d 75 70    while( lwr<=up
6620: 72 20 29 7b 0a 20 20 20 20 6d 69 64 20 3d 20 28  r ){.    mid = (
6630: 6c 77 72 2b 75 70 72 29 2f 32 3b 0a 20 20 20 20  lwr+upr)/2;.    
6640: 72 63 20 3d 20 73 71 6c 69 74 65 33 5f 73 74 72  rc = sqlite3_str
6650: 69 63 6d 70 28 7a 4c 65 66 74 2c 20 61 50 72 61  icmp(zLeft, aPra
6660: 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 7a 4e  gmaNames[mid].zN
6670: 61 6d 65 29 3b 0a 20 20 20 20 69 66 28 20 72 63  ame);.    if( rc
6680: 3d 3d 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20  ==0 ) break;.   
6690: 20 69 66 28 20 72 63 3c 30 20 29 7b 0a 20 20 20   if( rc<0 ){.   
66a0: 20 20 20 75 70 72 20 3d 20 6d 69 64 20 2d 20 31     upr = mid - 1
66b0: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
66c0: 20 20 20 6c 77 72 20 3d 20 6d 69 64 20 2b 20 31     lwr = mid + 1
66d0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 69 66  ;.    }.  }.  if
66e0: 28 20 6c 77 72 3e 75 70 72 20 29 20 67 6f 74 6f  ( lwr>upr ) goto
66f0: 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 0a 20 20   pragma_out;..  
6700: 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 74 68 65  /* Make sure the
6710: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
6720: 20 69 73 20 6c 6f 61 64 65 64 20 69 66 20 74 68   is loaded if th
6730: 65 20 70 72 61 67 6d 61 20 72 65 71 75 69 72 65  e pragma require
6740: 73 20 74 68 61 74 20 2a 2f 0a 20 20 69 66 28 20  s that */.  if( 
6750: 28 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69  (aPragmaNames[mi
6760: 64 5d 2e 6d 50 72 61 67 46 6c 61 67 20 26 20 50  d].mPragFlag & P
6770: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
6780: 6d 61 29 21 3d 30 20 29 7b 0a 20 20 20 20 69 66  ma)!=0 ){.    if
6790: 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63 68  ( sqlite3ReadSch
67a0: 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67 6f  ema(pParse) ) go
67b0: 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20  to pragma_out;. 
67c0: 20 7d 0a 0a 20 20 2f 2a 20 4a 75 6d 70 20 74 6f   }..  /* Jump to
67d0: 20 74 68 65 20 61 70 70 72 6f 70 72 69 61 74 65   the appropriate
67e0: 20 70 72 61 67 6d 61 20 68 61 6e 64 6c 65 72 20   pragma handler 
67f0: 2a 2f 0a 20 20 73 77 69 74 63 68 28 20 61 50 72  */.  switch( aPr
6800: 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 65  agmaNames[mid].e
6810: 50 72 61 67 54 79 70 20 29 7b 0a 20 20 0a 23 69  PragTyp ){.  .#i
6820: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
6830: 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
6840: 47 4d 41 53 29 20 26 26 20 21 64 65 66 69 6e 65  GMAS) && !define
6850: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 44 45  d(SQLITE_OMIT_DE
6860: 50 52 45 43 41 54 45 44 29 0a 20 20 2f 2a 0a 20  PRECATED).  /*. 
6870: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
6880: 61 62 61 73 65 2e 5d 64 65 66 61 75 6c 74 5f 63  abase.]default_c
6890: 61 63 68 65 5f 73 69 7a 65 0a 20 20 2a 2a 20 20  ache_size.  **  
68a0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
68b0: 2e 5d 64 65 66 61 75 6c 74 5f 63 61 63 68 65 5f  .]default_cache_
68c0: 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a  size=N.  **.  **
68d0: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
68e0: 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72  reports the curr
68f0: 65 6e 74 20 70 65 72 73 69 73 74 65 6e 74 20 73  ent persistent s
6900: 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65 0a 20  etting for the. 
6910: 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65 20 73   ** page cache s
6920: 69 7a 65 2e 20 20 54 68 65 20 76 61 6c 75 65 20  ize.  The value 
6930: 72 65 74 75 72 6e 65 64 20 69 73 20 74 68 65 20  returned is the 
6940: 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f  maximum number o
6950: 66 0a 20 20 2a 2a 20 70 61 67 65 73 20 69 6e 20  f.  ** pages in 
6960: 74 68 65 20 70 61 67 65 20 63 61 63 68 65 2e 20  the page cache. 
6970: 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d   The second form
6980: 20 73 65 74 73 20 62 6f 74 68 20 74 68 65 20 63   sets both the c
6990: 75 72 72 65 6e 74 0a 20 20 2a 2a 20 70 61 67 65  urrent.  ** page
69a0: 20 63 61 63 68 65 20 73 69 7a 65 20 76 61 6c 75   cache size valu
69b0: 65 20 61 6e 64 20 74 68 65 20 70 65 72 73 69 73  e and the persis
69c0: 74 65 6e 74 20 70 61 67 65 20 63 61 63 68 65 20  tent page cache 
69d0: 73 69 7a 65 20 76 61 6c 75 65 0a 20 20 2a 2a 20  size value.  ** 
69e0: 73 74 6f 72 65 64 20 69 6e 20 74 68 65 20 64 61  stored in the da
69f0: 74 61 62 61 73 65 20 66 69 6c 65 2e 0a 20 20 2a  tabase file..  *
6a00: 2a 0a 20 20 2a 2a 20 4f 6c 64 65 72 20 76 65 72  *.  ** Older ver
6a10: 73 69 6f 6e 73 20 6f 66 20 53 51 4c 69 74 65 20  sions of SQLite 
6a20: 77 6f 75 6c 64 20 73 65 74 20 74 68 65 20 64 65  would set the de
6a30: 66 61 75 6c 74 20 63 61 63 68 65 20 73 69 7a 65  fault cache size
6a40: 20 74 6f 20 61 0a 20 20 2a 2a 20 6e 65 67 61 74   to a.  ** negat
6a50: 69 76 65 20 6e 75 6d 62 65 72 20 74 6f 20 69 6e  ive number to in
6a60: 64 69 63 61 74 65 20 73 79 6e 63 68 72 6f 6e 6f  dicate synchrono
6a70: 75 73 3d 4f 46 46 2e 20 20 54 68 65 73 65 20 64  us=OFF.  These d
6a80: 61 79 73 2c 20 73 79 6e 63 68 72 6f 6e 6f 75 73  ays, synchronous
6a90: 0a 20 20 2a 2a 20 69 73 20 61 6c 77 61 79 73 20  .  ** is always 
6aa0: 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 20 72 65  on by default re
6ab0: 67 61 72 64 6c 65 73 73 20 6f 66 20 74 68 65 20  gardless of the 
6ac0: 73 69 67 6e 20 6f 66 20 74 68 65 20 64 65 66 61  sign of the defa
6ad0: 75 6c 74 20 63 61 63 68 65 0a 20 20 2a 2a 20 73  ult cache.  ** s
6ae0: 69 7a 65 2e 20 20 42 75 74 20 63 6f 6e 74 69 6e  ize.  But contin
6af0: 75 65 20 74 6f 20 74 61 6b 65 20 74 68 65 20 61  ue to take the a
6b00: 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f 66  bsolute value of
6b10: 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 61 63   the default cac
6b20: 68 65 0a 20 20 2a 2a 20 73 69 7a 65 20 6f 66 20  he.  ** size of 
6b30: 68 69 73 74 6f 72 69 63 61 6c 20 63 6f 6d 70 61  historical compa
6b40: 74 69 62 69 6c 69 74 79 2e 0a 20 20 2a 2f 0a 20  tibility..  */. 
6b50: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 44 45   case PragTyp_DE
6b60: 46 41 55 4c 54 5f 43 41 43 48 45 5f 53 49 5a 45  FAULT_CACHE_SIZE
6b70: 3a 20 7b 0a 20 20 20 20 73 74 61 74 69 63 20 63  : {.    static c
6b80: 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20  onst VdbeOpList 
6b90: 67 65 74 43 61 63 68 65 53 69 7a 65 5b 5d 20 3d  getCacheSize[] =
6ba0: 20 7b 0a 20 20 20 20 20 20 7b 20 4f 50 5f 54 72   {.      { OP_Tr
6bb0: 61 6e 73 61 63 74 69 6f 6e 2c 20 30 2c 20 30 2c  ansaction, 0, 0,
6bc0: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 20          0},     
6bd0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6be0: 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20      /* 0 */.    
6bf0: 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69    { OP_ReadCooki
6c00: 65 2c 20 20 30 2c 20 31 2c 20 20 20 20 20 20 20  e,  0, 1,       
6c10: 20 42 54 52 45 45 5f 44 45 46 41 55 4c 54 5f 43   BTREE_DEFAULT_C
6c20: 41 43 48 45 5f 53 49 5a 45 7d 2c 20 20 2f 2a 20  ACHE_SIZE},  /* 
6c30: 31 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f  1 */.      { OP_
6c40: 49 66 50 6f 73 2c 20 20 20 20 20 20 20 31 2c 20  IfPos,       1, 
6c50: 38 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20  8,        0},.  
6c60: 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72      { OP_Integer
6c70: 2c 20 20 20 20 20 30 2c 20 32 2c 20 20 20 20 20  ,     0, 2,     
6c80: 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     0},.      { O
6c90: 50 5f 53 75 62 74 72 61 63 74 2c 20 20 20 20 31  P_Subtract,    1
6ca0: 2c 20 32 2c 20 20 20 20 20 20 20 20 31 7d 2c 0a  , 2,        1},.
6cb0: 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 50 6f 73        { OP_IfPos
6cc0: 2c 20 20 20 20 20 20 20 31 2c 20 38 2c 20 20 20  ,       1, 8,   
6cd0: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b       0},.      {
6ce0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20   OP_Integer,    
6cf0: 20 30 2c 20 31 2c 20 20 20 20 20 20 20 20 30 7d   0, 1,        0}
6d00: 2c 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,               
6d10: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 36 20 2a            /* 6 *
6d20: 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 4e 6f 6f  /.      { OP_Noo
6d30: 70 2c 20 20 20 20 20 20 20 20 30 2c 20 30 2c 20  p,        0, 0, 
6d40: 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20         0},.     
6d50: 20 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c   { OP_ResultRow,
6d60: 20 20 20 31 2c 20 31 2c 20 20 20 20 20 20 20 20     1, 1,        
6d70: 30 7d 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69  0},.    };.    i
6d80: 6e 74 20 61 64 64 72 3b 0a 20 20 20 20 73 71 6c  nt addr;.    sql
6d90: 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65  ite3VdbeUsesBtre
6da0: 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 69  e(v, iDb);.    i
6db0: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
6dc0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
6dd0: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b  etNumCols(v, 1);
6de0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
6df0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
6e00: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
6e10: 20 22 63 61 63 68 65 5f 73 69 7a 65 22 2c 20 53   "cache_size", S
6e20: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
6e30: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
6e40: 6d 20 2b 3d 20 32 3b 0a 20 20 20 20 20 20 61 64  m += 2;.      ad
6e50: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
6e60: 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72  AddOpList(v, Arr
6e70: 61 79 53 69 7a 65 28 67 65 74 43 61 63 68 65 53  aySize(getCacheS
6e80: 69 7a 65 29 2c 20 67 65 74 43 61 63 68 65 53 69  ize), getCacheSi
6e90: 7a 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ze);.      sqlit
6ea0: 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
6eb0: 2c 20 61 64 64 72 2c 20 69 44 62 29 3b 0a 20 20  , addr, iDb);.  
6ec0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
6ed0: 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b  hangeP1(v, addr+
6ee0: 31 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73  1, iDb);.      s
6ef0: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
6f00: 50 31 28 76 2c 20 61 64 64 72 2b 36 2c 20 53 51  P1(v, addr+6, SQ
6f10: 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 43 41 43  LITE_DEFAULT_CAC
6f20: 48 45 5f 53 49 5a 45 29 3b 0a 20 20 20 20 7d 65  HE_SIZE);.    }e
6f30: 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 73  lse{.      int s
6f40: 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41 62 73  ize = sqlite3Abs
6f50: 49 6e 74 33 32 28 73 71 6c 69 74 65 33 41 74 6f  Int32(sqlite3Ato
6f60: 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20  i(zRight));.    
6f70: 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e 57 72    sqlite3BeginWr
6f80: 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 70 50 61  iteOperation(pPa
6f90: 72 73 65 2c 20 30 2c 20 69 44 62 29 3b 0a 20 20  rse, 0, iDb);.  
6fa0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
6fb0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
6fc0: 67 65 72 2c 20 73 69 7a 65 2c 20 31 29 3b 0a 20  ger, size, 1);. 
6fd0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
6fe0: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 53 65 74  AddOp3(v, OP_Set
6ff0: 43 6f 6f 6b 69 65 2c 20 69 44 62 2c 20 42 54 52  Cookie, iDb, BTR
7000: 45 45 5f 44 45 46 41 55 4c 54 5f 43 41 43 48 45  EE_DEFAULT_CACHE
7010: 5f 53 49 5a 45 2c 20 31 29 3b 0a 20 20 20 20 20  _SIZE, 1);.     
7020: 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33   assert( sqlite3
7030: 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28  SchemaMutexHeld(
7040: 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20  db, iDb, 0) );. 
7050: 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d       pDb->pSchem
7060: 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20  a->cache_size = 
7070: 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  size;.      sqli
7080: 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65  te3BtreeSetCache
7090: 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70  Size(pDb->pBt, p
70a0: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63  Db->pSchema->cac
70b0: 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a  he_size);.    }.
70c0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23      break;.  }.#
70d0: 65 6e 64 69 66 20 2f 2a 20 21 53 51 4c 49 54 45  endif /* !SQLITE
70e0: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
70f0: 4d 41 53 20 26 26 20 21 53 51 4c 49 54 45 5f 4f  MAS && !SQLITE_O
7100: 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 20 2a  MIT_DEPRECATED *
7110: 2f 0a 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  /..#if !defined(
7120: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45  SQLITE_OMIT_PAGE
7130: 52 5f 50 52 41 47 4d 41 53 29 0a 20 20 2f 2a 0a  R_PRAGMAS).  /*.
7140: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
7150: 74 61 62 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a  tabase.]page_siz
7160: 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b  e.  **  PRAGMA [
7170: 64 61 74 61 62 61 73 65 2e 5d 70 61 67 65 5f 73  database.]page_s
7180: 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ize=N.  **.  ** 
7190: 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72  The first form r
71a0: 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65  eports the curre
71b0: 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74  nt setting for t
71c0: 68 65 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65  he.  ** database
71d0: 20 70 61 67 65 20 73 69 7a 65 20 69 6e 20 62 79   page size in by
71e0: 74 65 73 2e 20 20 54 68 65 20 73 65 63 6f 6e 64  tes.  The second
71f0: 20 66 6f 72 6d 20 73 65 74 73 20 74 68 65 0a 20   form sets the. 
7200: 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70 61 67   ** database pag
7210: 65 20 73 69 7a 65 20 76 61 6c 75 65 2e 20 20 54  e size value.  T
7220: 68 65 20 76 61 6c 75 65 20 63 61 6e 20 6f 6e 6c  he value can onl
7230: 79 20 62 65 20 73 65 74 20 69 66 0a 20 20 2a 2a  y be set if.  **
7240: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 61   the database ha
7250: 73 20 6e 6f 74 20 79 65 74 20 62 65 65 6e 20 63  s not yet been c
7260: 72 65 61 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63  reated..  */.  c
7270: 61 73 65 20 50 72 61 67 54 79 70 5f 50 41 47 45  ase PragTyp_PAGE
7280: 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 42 74 72  _SIZE: {.    Btr
7290: 65 65 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70  ee *pBt = pDb->p
72a0: 42 74 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  Bt;.    assert( 
72b0: 70 42 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66  pBt!=0 );.    if
72c0: 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  ( !zRight ){.   
72d0: 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 41 4c     int size = AL
72e0: 57 41 59 53 28 70 42 74 29 20 3f 20 73 71 6c 69  WAYS(pBt) ? sqli
72f0: 74 65 33 42 74 72 65 65 47 65 74 50 61 67 65 53  te3BtreeGetPageS
7300: 69 7a 65 28 70 42 74 29 20 3a 20 30 3b 0a 20 20  ize(pBt) : 0;.  
7310: 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65      returnSingle
7320: 49 6e 74 28 70 50 61 72 73 65 2c 20 22 70 61 67  Int(pParse, "pag
7330: 65 5f 73 69 7a 65 22 2c 20 73 69 7a 65 29 3b 0a  e_size", size);.
7340: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
7350: 20 2f 2a 20 4d 61 6c 6c 6f 63 20 6d 61 79 20 66   /* Malloc may f
7360: 61 69 6c 20 77 68 65 6e 20 73 65 74 74 69 6e 67  ail when setting
7370: 20 74 68 65 20 70 61 67 65 2d 73 69 7a 65 2c 20   the page-size, 
7380: 61 73 20 74 68 65 72 65 20 69 73 20 61 6e 20 69  as there is an i
7390: 6e 74 65 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a  nternal.      **
73a0: 20 62 75 66 66 65 72 20 74 68 61 74 20 74 68 65   buffer that the
73b0: 20 70 61 67 65 72 20 6d 6f 64 75 6c 65 20 72 65   pager module re
73c0: 73 69 7a 65 73 20 75 73 69 6e 67 20 73 71 6c 69  sizes using sqli
73d0: 74 65 33 5f 72 65 61 6c 6c 6f 63 28 29 2e 0a 20  te3_realloc().. 
73e0: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 64 62       */.      db
73f0: 2d 3e 6e 65 78 74 50 61 67 65 73 69 7a 65 20 3d  ->nextPagesize =
7400: 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69   sqlite3Atoi(zRi
7410: 67 68 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ght);.      if( 
7420: 53 51 4c 49 54 45 5f 4e 4f 4d 45 4d 3d 3d 73 71  SQLITE_NOMEM==sq
7430: 6c 69 74 65 33 42 74 72 65 65 53 65 74 50 61 67  lite3BtreeSetPag
7440: 65 53 69 7a 65 28 70 42 74 2c 20 64 62 2d 3e 6e  eSize(pBt, db->n
7450: 65 78 74 50 61 67 65 73 69 7a 65 2c 2d 31 2c 30  extPagesize,-1,0
7460: 29 20 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d  ) ){.        db-
7470: 3e 6d 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20  >mallocFailed = 
7480: 31 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  1;.      }.    }
7490: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
74a0: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47  .  /*.  **  PRAG
74b0: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 65  MA [database.]se
74c0: 63 75 72 65 5f 64 65 6c 65 74 65 0a 20 20 2a 2a  cure_delete.  **
74d0: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
74e0: 73 65 2e 5d 73 65 63 75 72 65 5f 64 65 6c 65 74  se.]secure_delet
74f0: 65 3d 4f 4e 2f 4f 46 46 0a 20 20 2a 2a 0a 20 20  e=ON/OFF.  **.  
7500: 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72  ** The first for
7510: 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75  m reports the cu
7520: 72 72 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f  rrent setting fo
7530: 72 20 74 68 65 0a 20 20 2a 2a 20 73 65 63 75 72  r the.  ** secur
7540: 65 5f 64 65 6c 65 74 65 20 66 6c 61 67 2e 20 20  e_delete flag.  
7550: 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  The second form 
7560: 63 68 61 6e 67 65 73 20 74 68 65 20 73 65 63 75  changes the secu
7570: 72 65 5f 64 65 6c 65 74 65 0a 20 20 2a 2a 20 66  re_delete.  ** f
7580: 6c 61 67 20 73 65 74 74 69 6e 67 20 61 6e 64 20  lag setting and 
7590: 72 65 70 6f 72 74 73 20 74 68 65 6e 65 77 20 76  reports thenew v
75a0: 61 6c 75 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  alue..  */.  cas
75b0: 65 20 50 72 61 67 54 79 70 5f 53 45 43 55 52 45  e PragTyp_SECURE
75c0: 5f 44 45 4c 45 54 45 3a 20 7b 0a 20 20 20 20 42  _DELETE: {.    B
75d0: 74 72 65 65 20 2a 70 42 74 20 3d 20 70 44 62 2d  tree *pBt = pDb-
75e0: 3e 70 42 74 3b 0a 20 20 20 20 69 6e 74 20 62 20  >pBt;.    int b 
75f0: 3d 20 2d 31 3b 0a 20 20 20 20 61 73 73 65 72 74  = -1;.    assert
7600: 28 20 70 42 74 21 3d 30 20 29 3b 0a 20 20 20 20  ( pBt!=0 );.    
7610: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
7620: 20 20 20 20 62 20 3d 20 73 71 6c 69 74 65 33 47      b = sqlite3G
7630: 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74  etBoolean(zRight
7640: 2c 20 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20  , 0);.    }.    
7650: 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 26  if( pId2->n==0 &
7660: 26 20 62 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20  & b>=0 ){.      
7670: 69 6e 74 20 69 69 3b 0a 20 20 20 20 20 20 66 6f  int ii;.      fo
7680: 72 28 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e  r(ii=0; ii<db->n
7690: 44 62 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20  Db; ii++){.     
76a0: 20 20 20 73 71 6c 69 74 65 33 42 74 72 65 65 53     sqlite3BtreeS
76b0: 65 63 75 72 65 44 65 6c 65 74 65 28 64 62 2d 3e  ecureDelete(db->
76c0: 61 44 62 5b 69 69 5d 2e 70 42 74 2c 20 62 29 3b  aDb[ii].pBt, b);
76d0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
76e0: 20 20 20 62 20 3d 20 73 71 6c 69 74 65 33 42 74     b = sqlite3Bt
76f0: 72 65 65 53 65 63 75 72 65 44 65 6c 65 74 65 28  reeSecureDelete(
7700: 70 42 74 2c 20 62 29 3b 0a 20 20 20 20 72 65 74  pBt, b);.    ret
7710: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
7720: 72 73 65 2c 20 22 73 65 63 75 72 65 5f 64 65 6c  rse, "secure_del
7730: 65 74 65 22 2c 20 62 29 3b 0a 20 20 20 20 62 72  ete", b);.    br
7740: 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20  eak;.  }..  /*. 
7750: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
7760: 61 62 61 73 65 2e 5d 6d 61 78 5f 70 61 67 65 5f  abase.]max_page_
7770: 63 6f 75 6e 74 0a 20 20 2a 2a 20 20 50 52 41 47  count.  **  PRAG
7780: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6d 61  MA [database.]ma
7790: 78 5f 70 61 67 65 5f 63 6f 75 6e 74 3d 4e 0a 20  x_page_count=N. 
77a0: 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72   **.  ** The fir
77b0: 73 74 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20  st form reports 
77c0: 74 68 65 20 63 75 72 72 65 6e 74 20 73 65 74 74  the current sett
77d0: 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  ing for the.  **
77e0: 20 6d 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20   maximum number 
77f0: 6f 66 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  of pages in the 
7800: 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20  database file.  
7810: 54 68 65 20 0a 20 20 2a 2a 20 73 65 63 6f 6e 64  The .  ** second
7820: 20 66 6f 72 6d 20 61 74 74 65 6d 70 74 73 20 74   form attempts t
7830: 6f 20 63 68 61 6e 67 65 20 74 68 69 73 20 73 65  o change this se
7840: 74 74 69 6e 67 2e 20 20 42 6f 74 68 0a 20 20 2a  tting.  Both.  *
7850: 2a 20 66 6f 72 6d 73 20 72 65 74 75 72 6e 20 74  * forms return t
7860: 68 65 20 63 75 72 72 65 6e 74 20 73 65 74 74 69  he current setti
7870: 6e 67 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  ng..  **.  ** Th
7880: 65 20 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65  e absolute value
7890: 20 6f 66 20 4e 20 69 73 20 75 73 65 64 2e 20 20   of N is used.  
78a0: 54 68 69 73 20 69 73 20 75 6e 64 6f 63 75 6d 65  This is undocume
78b0: 6e 74 65 64 20 61 6e 64 20 6d 69 67 68 74 0a 20  nted and might. 
78c0: 20 2a 2a 20 63 68 61 6e 67 65 2e 20 20 54 68 65   ** change.  The
78d0: 20 6f 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73   only purpose is
78e0: 20 74 6f 20 70 72 6f 76 69 64 65 20 61 6e 20 65   to provide an e
78f0: 61 73 79 20 77 61 79 20 74 6f 20 74 65 73 74 0a  asy way to test.
7900: 20 20 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33    ** the sqlite3
7910: 41 62 73 49 6e 74 33 32 28 29 20 66 75 6e 63 74  AbsInt32() funct
7920: 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20  ion..  **.  **  
7930: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
7940: 2e 5d 70 61 67 65 5f 63 6f 75 6e 74 0a 20 20 2a  .]page_count.  *
7950: 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 74 68  *.  ** Return th
7960: 65 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65  e number of page
7970: 73 20 69 6e 20 74 68 65 20 73 70 65 63 69 66 69  s in the specifi
7980: 65 64 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a  ed database..  *
7990: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
79a0: 5f 50 41 47 45 5f 43 4f 55 4e 54 3a 20 7b 0a 20  _PAGE_COUNT: {. 
79b0: 20 20 20 69 6e 74 20 69 52 65 67 3b 0a 20 20 20     int iReg;.   
79c0: 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
79d0: 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c  fySchema(pParse,
79e0: 20 69 44 62 29 3b 0a 20 20 20 20 69 52 65 67 20   iDb);.    iReg 
79f0: 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d  = ++pParse->nMem
7a00: 3b 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65  ;.    if( sqlite
7a10: 33 54 6f 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30  3Tolower(zLeft[0
7a20: 5d 29 3d 3d 27 70 27 20 29 7b 0a 20 20 20 20 20  ])=='p' ){.     
7a30: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
7a40: 70 32 28 76 2c 20 4f 50 5f 50 61 67 65 63 6f 75  p2(v, OP_Pagecou
7a50: 6e 74 2c 20 69 44 62 2c 20 69 52 65 67 29 3b 0a  nt, iDb, iReg);.
7a60: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
7a70: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
7a80: 70 33 28 76 2c 20 4f 50 5f 4d 61 78 50 67 63 6e  p3(v, OP_MaxPgcn
7a90: 74 2c 20 69 44 62 2c 20 69 52 65 67 2c 20 0a 20  t, iDb, iReg, . 
7aa0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
7ab0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 41 62         sqlite3Ab
7ac0: 73 49 6e 74 33 32 28 73 71 6c 69 74 65 33 41 74  sInt32(sqlite3At
7ad0: 6f 69 28 7a 52 69 67 68 74 29 29 29 3b 0a 20 20  oi(zRight)));.  
7ae0: 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56    }.    sqlite3V
7af0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
7b00: 52 65 73 75 6c 74 52 6f 77 2c 20 69 52 65 67 2c  ResultRow, iReg,
7b10: 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   1);.    sqlite3
7b20: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
7b30: 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 1);.    sqlite
7b40: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
7b50: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
7b60: 4d 45 2c 20 7a 4c 65 66 74 2c 20 53 51 4c 49 54  ME, zLeft, SQLIT
7b70: 45 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20  E_TRANSIENT);.  
7b80: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
7b90: 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  /*.  **  PRAGMA 
7ba0: 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 69  [database.]locki
7bb0: 6e 67 5f 6d 6f 64 65 0a 20 20 2a 2a 20 20 50 52  ng_mode.  **  PR
7bc0: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
7bd0: 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 20 3d 20 28  locking_mode = (
7be0: 6e 6f 72 6d 61 6c 7c 65 78 63 6c 75 73 69 76 65  normal|exclusive
7bf0: 29 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ).  */.  case Pr
7c00: 61 67 54 79 70 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f  agTyp_LOCKING_MO
7c10: 44 45 3a 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20  DE: {.    const 
7c20: 63 68 61 72 20 2a 7a 52 65 74 20 3d 20 22 6e 6f  char *zRet = "no
7c30: 72 6d 61 6c 22 3b 0a 20 20 20 20 69 6e 74 20 65  rmal";.    int e
7c40: 4d 6f 64 65 20 3d 20 67 65 74 4c 6f 63 6b 69 6e  Mode = getLockin
7c50: 67 4d 6f 64 65 28 7a 52 69 67 68 74 29 3b 0a 0a  gMode(zRight);..
7c60: 20 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d      if( pId2->n=
7c70: 3d 30 20 26 26 20 65 4d 6f 64 65 3d 3d 50 41 47  =0 && eMode==PAG
7c80: 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 51  ER_LOCKINGMODE_Q
7c90: 55 45 52 59 20 29 7b 0a 20 20 20 20 20 20 2f 2a  UERY ){.      /*
7ca0: 20 53 69 6d 70 6c 65 20 22 50 52 41 47 4d 41 20   Simple "PRAGMA 
7cb0: 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 3b 22 20 73  locking_mode;" s
7cc0: 74 61 74 65 6d 65 6e 74 2e 20 54 68 69 73 20 69  tatement. This i
7cd0: 73 20 61 20 71 75 65 72 79 20 66 6f 72 0a 20 20  s a query for.  
7ce0: 20 20 20 20 2a 2a 20 74 68 65 20 63 75 72 72 65      ** the curre
7cf0: 6e 74 20 64 65 66 61 75 6c 74 20 6c 6f 63 6b 69  nt default locki
7d00: 6e 67 20 6d 6f 64 65 20 28 77 68 69 63 68 20 6d  ng mode (which m
7d10: 61 79 20 62 65 20 64 69 66 66 65 72 65 6e 74 20  ay be different 
7d20: 74 6f 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20  to.      ** the 
7d30: 6c 6f 63 6b 69 6e 67 2d 6d 6f 64 65 20 6f 66 20  locking-mode of 
7d40: 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
7d50: 65 29 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20  e)..      */.   
7d60: 20 20 20 65 4d 6f 64 65 20 3d 20 64 62 2d 3e 64     eMode = db->d
7d70: 66 6c 74 4c 6f 63 6b 4d 6f 64 65 3b 0a 20 20 20  fltLockMode;.   
7d80: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 50 61   }else{.      Pa
7d90: 67 65 72 20 2a 70 50 61 67 65 72 3b 0a 20 20 20  ger *pPager;.   
7da0: 20 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d     if( pId2->n==
7db0: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  0 ){.        /* 
7dc0: 54 68 69 73 20 69 6e 64 69 63 61 74 65 73 20 74  This indicates t
7dd0: 68 61 74 20 6e 6f 20 64 61 74 61 62 61 73 65 20  hat no database 
7de0: 6e 61 6d 65 20 77 61 73 20 73 70 65 63 69 66 69  name was specifi
7df0: 65 64 20 61 73 20 70 61 72 74 0a 20 20 20 20 20  ed as part.     
7e00: 20 20 20 2a 2a 20 6f 66 20 74 68 65 20 50 52 41     ** of the PRA
7e10: 47 4d 41 20 63 6f 6d 6d 61 6e 64 2e 20 49 6e 20  GMA command. In 
7e20: 74 68 69 73 20 63 61 73 65 20 74 68 65 20 6c 6f  this case the lo
7e30: 63 6b 69 6e 67 2d 6d 6f 64 65 20 6d 75 73 74 20  cking-mode must 
7e40: 62 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 65  be.        ** se
7e50: 74 20 6f 6e 20 61 6c 6c 20 61 74 74 61 63 68 65  t on all attache
7e60: 64 20 64 61 74 61 62 61 73 65 73 2c 20 61 73 20  d databases, as 
7e70: 77 65 6c 6c 20 61 73 20 74 68 65 20 6d 61 69 6e  well as the main
7e80: 20 64 62 20 66 69 6c 65 2e 0a 20 20 20 20 20 20   db file..      
7e90: 20 20 2a 2a 0a 20 20 20 20 20 20 20 20 2a 2a 20    **.        ** 
7ea0: 41 6c 73 6f 2c 20 74 68 65 20 73 71 6c 69 74 65  Also, the sqlite
7eb0: 33 2e 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 20 76  3.dfltLockMode v
7ec0: 61 72 69 61 62 6c 65 20 69 73 20 73 65 74 20 73  ariable is set s
7ed0: 6f 20 74 68 61 74 0a 20 20 20 20 20 20 20 20 2a  o that.        *
7ee0: 2a 20 61 6e 79 20 73 75 62 73 65 71 75 65 6e 74  * any subsequent
7ef0: 6c 79 20 61 74 74 61 63 68 65 64 20 64 61 74 61  ly attached data
7f00: 62 61 73 65 73 20 61 6c 73 6f 20 75 73 65 20 74  bases also use t
7f10: 68 65 20 73 70 65 63 69 66 69 65 64 0a 20 20 20  he specified.   
7f20: 20 20 20 20 20 2a 2a 20 6c 6f 63 6b 69 6e 67 20       ** locking 
7f30: 6d 6f 64 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f  mode..        */
7f40: 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69 69 3b  .        int ii;
7f50: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
7f60: 70 44 62 3d 3d 26 64 62 2d 3e 61 44 62 5b 30 5d  pDb==&db->aDb[0]
7f70: 29 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69  );.        for(i
7f80: 69 3d 32 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b  i=2; ii<db->nDb;
7f90: 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20   ii++){.        
7fa0: 20 20 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74    pPager = sqlit
7fb0: 65 33 42 74 72 65 65 50 61 67 65 72 28 64 62 2d  e3BtreePager(db-
7fc0: 3e 61 44 62 5b 69 69 5d 2e 70 42 74 29 3b 0a 20  >aDb[ii].pBt);. 
7fd0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
7fe0: 50 61 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65  PagerLockingMode
7ff0: 28 70 50 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b  (pPager, eMode);
8000: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
8010: 20 20 20 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d     db->dfltLockM
8020: 6f 64 65 20 3d 20 28 75 38 29 65 4d 6f 64 65 3b  ode = (u8)eMode;
8030: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70  .      }.      p
8040: 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42  Pager = sqlite3B
8050: 74 72 65 65 50 61 67 65 72 28 70 44 62 2d 3e 70  treePager(pDb->p
8060: 42 74 29 3b 0a 20 20 20 20 20 20 65 4d 6f 64 65  Bt);.      eMode
8070: 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 4c   = sqlite3PagerL
8080: 6f 63 6b 69 6e 67 4d 6f 64 65 28 70 50 61 67 65  ockingMode(pPage
8090: 72 2c 20 65 4d 6f 64 65 29 3b 0a 20 20 20 20 7d  r, eMode);.    }
80a0: 0a 0a 20 20 20 20 61 73 73 65 72 74 28 20 65 4d  ..    assert( eM
80b0: 6f 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49  ode==PAGER_LOCKI
80c0: 4e 47 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 0a 20 20  NGMODE_NORMAL.  
80d0: 20 20 20 20 20 20 20 20 20 20 7c 7c 20 65 4d 6f            || eMo
80e0: 64 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e  de==PAGER_LOCKIN
80f0: 47 4d 4f 44 45 5f 45 58 43 4c 55 53 49 56 45 20  GMODE_EXCLUSIVE 
8100: 29 3b 0a 20 20 20 20 69 66 28 20 65 4d 6f 64 65  );.    if( eMode
8110: 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  ==PAGER_LOCKINGM
8120: 4f 44 45 5f 45 58 43 4c 55 53 49 56 45 20 29 7b  ODE_EXCLUSIVE ){
8130: 0a 20 20 20 20 20 20 7a 52 65 74 20 3d 20 22 65  .      zRet = "e
8140: 78 63 6c 75 73 69 76 65 22 3b 0a 20 20 20 20 7d  xclusive";.    }
8150: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
8160: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
8170: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
8180: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
8190: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
81a0: 22 6c 6f 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c 20  "locking_mode", 
81b0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
81c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
81d0: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
81e0: 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20 7a 52  ng8, 0, 1, 0, zR
81f0: 65 74 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69  et, 0);.    sqli
8200: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
8210: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
8220: 2c 20 31 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b  , 1);.    break;
8230: 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  .  }..  /*.  ** 
8240: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
8250: 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a  e.]journal_mode.
8260: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
8270: 74 61 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f  tabase.]journal_
8280: 6d 6f 64 65 20 3d 0a 20 20 2a 2a 20 20 20 20 20  mode =.  **     
8290: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
82a0: 20 28 64 65 6c 65 74 65 7c 70 65 72 73 69 73 74   (delete|persist
82b0: 7c 6f 66 66 7c 74 72 75 6e 63 61 74 65 7c 6d 65  |off|truncate|me
82c0: 6d 6f 72 79 7c 77 61 6c 7c 6f 66 66 29 0a 20 20  mory|wal|off).  
82d0: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
82e0: 70 5f 4a 4f 55 52 4e 41 4c 5f 4d 4f 44 45 3a 20  p_JOURNAL_MODE: 
82f0: 7b 0a 20 20 20 20 69 6e 74 20 65 4d 6f 64 65 3b  {.    int eMode;
8300: 20 20 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f          /* One o
8310: 66 20 74 68 65 20 50 41 47 45 52 5f 4a 4f 55 52  f the PAGER_JOUR
8320: 4e 41 4c 4d 4f 44 45 5f 58 58 58 20 73 79 6d 62  NALMODE_XXX symb
8330: 6f 6c 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69  ols */.    int i
8340: 69 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  i;           /* 
8350: 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a  Loop counter */.
8360: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
8370: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
8380: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
8390: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
83a0: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
83b0: 22 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 2c 20  "journal_mode", 
83c0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
83d0: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d  .    if( zRight=
83e0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49  =0 ){.      /* I
83f0: 66 20 74 68 65 72 65 20 69 73 20 6e 6f 20 22 3d  f there is no "=
8400: 4d 4f 44 45 22 20 70 61 72 74 20 6f 66 20 74 68  MODE" part of th
8410: 65 20 70 72 61 67 6d 61 2c 20 64 6f 20 61 20 71  e pragma, do a q
8420: 75 65 72 79 20 66 6f 72 20 74 68 65 0a 20 20 20  uery for the.   
8430: 20 20 20 2a 2a 20 63 75 72 72 65 6e 74 20 6d 6f     ** current mo
8440: 64 65 20 2a 2f 0a 20 20 20 20 20 20 65 4d 6f 64  de */.      eMod
8450: 65 20 3d 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  e = PAGER_JOURNA
8460: 4c 4d 4f 44 45 5f 51 55 45 52 59 3b 0a 20 20 20  LMODE_QUERY;.   
8470: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 6f   }else{.      co
8480: 6e 73 74 20 63 68 61 72 20 2a 7a 4d 6f 64 65 3b  nst char *zMode;
8490: 0a 20 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 73  .      int n = s
84a0: 71 6c 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a  qlite3Strlen30(z
84b0: 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 66 6f  Right);.      fo
84c0: 72 28 65 4d 6f 64 65 3d 30 3b 20 28 7a 4d 6f 64  r(eMode=0; (zMod
84d0: 65 20 3d 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e  e = sqlite3Journ
84e0: 61 6c 4d 6f 64 65 6e 61 6d 65 28 65 4d 6f 64 65  alModename(eMode
84f0: 29 29 21 3d 30 3b 20 65 4d 6f 64 65 2b 2b 29 7b  ))!=0; eMode++){
8500: 0a 20 20 20 20 20 20 20 20 69 66 28 20 73 71 6c  .        if( sql
8510: 69 74 65 33 53 74 72 4e 49 43 6d 70 28 7a 52 69  ite3StrNICmp(zRi
8520: 67 68 74 2c 20 7a 4d 6f 64 65 2c 20 6e 29 3d 3d  ght, zMode, n)==
8530: 30 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  0 ) break;.     
8540: 20 7d 0a 20 20 20 20 20 20 69 66 28 20 21 7a 4d   }.      if( !zM
8550: 6f 64 65 20 29 7b 0a 20 20 20 20 20 20 20 20 2f  ode ){.        /
8560: 2a 20 49 66 20 74 68 65 20 22 3d 4d 4f 44 45 22  * If the "=MODE"
8570: 20 70 61 72 74 20 64 6f 65 73 20 6e 6f 74 20 6d   part does not m
8580: 61 74 63 68 20 61 6e 79 20 6b 6e 6f 77 6e 20 6a  atch any known j
8590: 6f 75 72 6e 61 6c 20 6d 6f 64 65 2c 0a 20 20 20  ournal mode,.   
85a0: 20 20 20 20 20 2a 2a 20 74 68 65 6e 20 64 6f 20       ** then do 
85b0: 61 20 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 20  a query */.     
85c0: 20 20 20 65 4d 6f 64 65 20 3d 20 50 41 47 45 52     eMode = PAGER
85d0: 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45  _JOURNALMODE_QUE
85e0: 52 59 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  RY;.      }.    
85f0: 7d 0a 20 20 20 20 69 66 28 20 65 4d 6f 64 65 3d  }.    if( eMode=
8600: 3d 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f  =PAGER_JOURNALMO
8610: 44 45 5f 51 55 45 52 59 20 26 26 20 70 49 64 32  DE_QUERY && pId2
8620: 2d 3e 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  ->n==0 ){.      
8630: 2f 2a 20 43 6f 6e 76 65 72 74 20 22 50 52 41 47  /* Convert "PRAG
8640: 4d 41 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22  MA journal_mode"
8650: 20 69 6e 74 6f 20 22 50 52 41 47 4d 41 20 6d 61   into "PRAGMA ma
8660: 69 6e 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22  in.journal_mode"
8670: 20 2a 2f 0a 20 20 20 20 20 20 69 44 62 20 3d 20   */.      iDb = 
8680: 30 3b 0a 20 20 20 20 20 20 70 49 64 32 2d 3e 6e  0;.      pId2->n
8690: 20 3d 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20   = 1;.    }.    
86a0: 66 6f 72 28 69 69 3d 64 62 2d 3e 6e 44 62 2d 31  for(ii=db->nDb-1
86b0: 3b 20 69 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a  ; ii>=0; ii--){.
86c0: 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44        if( db->aD
86d0: 62 5b 69 69 5d 2e 70 42 74 20 26 26 20 28 69 69  b[ii].pBt && (ii
86e0: 3d 3d 69 44 62 20 7c 7c 20 70 49 64 32 2d 3e 6e  ==iDb || pId2->n
86f0: 3d 3d 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20  ==0) ){.        
8700: 73 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42  sqlite3VdbeUsesB
8710: 74 72 65 65 28 76 2c 20 69 69 29 3b 0a 20 20 20  tree(v, ii);.   
8720: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
8730: 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 4a 6f 75  AddOp3(v, OP_Jou
8740: 72 6e 61 6c 4d 6f 64 65 2c 20 69 69 2c 20 31 2c  rnalMode, ii, 1,
8750: 20 65 4d 6f 64 65 29 3b 0a 20 20 20 20 20 20 7d   eMode);.      }
8760: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
8770: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
8780: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
8790: 20 31 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a   1);.    break;.
87a0: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
87b0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
87c0: 2e 5d 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c  .]journal_size_l
87d0: 69 6d 69 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d  imit.  **  PRAGM
87e0: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6a 6f 75  A [database.]jou
87f0: 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 3d  rnal_size_limit=
8800: 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20  N.  **.  ** Get 
8810: 6f 72 20 73 65 74 20 74 68 65 20 73 69 7a 65 20  or set the size 
8820: 6c 69 6d 69 74 20 6f 6e 20 72 6f 6c 6c 62 61 63  limit on rollbac
8830: 6b 20 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 73 2e  k journal files.
8840: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
8850: 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f 53 49 5a  gTyp_JOURNAL_SIZ
8860: 45 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 50  E_LIMIT: {.    P
8870: 61 67 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73  ager *pPager = s
8880: 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
8890: 28 70 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20  (pDb->pBt);.    
88a0: 69 36 34 20 69 4c 69 6d 69 74 20 3d 20 2d 32 3b  i64 iLimit = -2;
88b0: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
88c0: 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  ){.      sqlite3
88d0: 41 74 6f 69 36 34 28 7a 52 69 67 68 74 2c 20 26  Atoi64(zRight, &
88e0: 69 4c 69 6d 69 74 2c 20 73 71 6c 69 74 65 33 53  iLimit, sqlite3S
88f0: 74 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 2c  trlen30(zRight),
8900: 20 53 51 4c 49 54 45 5f 55 54 46 38 29 3b 0a 20   SQLITE_UTF8);. 
8910: 20 20 20 20 20 69 66 28 20 69 4c 69 6d 69 74 3c       if( iLimit<
8920: 2d 31 20 29 20 69 4c 69 6d 69 74 20 3d 20 2d 31  -1 ) iLimit = -1
8930: 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 4c 69 6d  ;.    }.    iLim
8940: 69 74 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  it = sqlite3Page
8950: 72 4a 6f 75 72 6e 61 6c 53 69 7a 65 4c 69 6d 69  rJournalSizeLimi
8960: 74 28 70 50 61 67 65 72 2c 20 69 4c 69 6d 69 74  t(pPager, iLimit
8970: 29 3b 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e  );.    returnSin
8980: 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22  gleInt(pParse, "
8990: 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d  journal_size_lim
89a0: 69 74 22 2c 20 69 4c 69 6d 69 74 29 3b 0a 20 20  it", iLimit);.  
89b0: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 65    break;.  }..#e
89c0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f  ndif /* SQLITE_O
89d0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
89e0: 53 20 2a 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20  S */..  /*.  ** 
89f0: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
8a00: 65 2e 5d 61 75 74 6f 5f 76 61 63 75 75 6d 0a 20  e.]auto_vacuum. 
8a10: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
8a20: 61 62 61 73 65 2e 5d 61 75 74 6f 5f 76 61 63 75  abase.]auto_vacu
8a30: 75 6d 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47  um=N.  **.  ** G
8a40: 65 74 20 6f 72 20 73 65 74 20 74 68 65 20 76 61  et or set the va
8a50: 6c 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62  lue of the datab
8a60: 61 73 65 20 27 61 75 74 6f 2d 76 61 63 75 75 6d  ase 'auto-vacuum
8a70: 27 20 70 61 72 61 6d 65 74 65 72 2e 0a 20 20 2a  ' parameter..  *
8a80: 2a 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 6f  * The value is o
8a90: 6e 65 20 6f 66 3a 20 20 30 20 4e 4f 4e 45 20 31  ne of:  0 NONE 1
8aa0: 20 46 55 4c 4c 20 32 20 49 4e 43 52 45 4d 45 4e   FULL 2 INCREMEN
8ab0: 54 41 4c 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66  TAL.  */.#ifndef
8ac0: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54   SQLITE_OMIT_AUT
8ad0: 4f 56 41 43 55 55 4d 0a 20 20 63 61 73 65 20 50  OVACUUM.  case P
8ae0: 72 61 67 54 79 70 5f 41 55 54 4f 5f 56 41 43 55  ragTyp_AUTO_VACU
8af0: 55 4d 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20  UM: {.    Btree 
8b00: 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b  *pBt = pDb->pBt;
8b10: 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74  .    assert( pBt
8b20: 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21  !=0 );.    if( !
8b30: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
8b40: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
8b50: 70 50 61 72 73 65 2c 20 22 61 75 74 6f 5f 76 61  pParse, "auto_va
8b60: 63 75 75 6d 22 2c 20 73 71 6c 69 74 65 33 42 74  cuum", sqlite3Bt
8b70: 72 65 65 47 65 74 41 75 74 6f 56 61 63 75 75 6d  reeGetAutoVacuum
8b80: 28 70 42 74 29 29 3b 0a 20 20 20 20 7d 65 6c 73  (pBt));.    }els
8b90: 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 65 41 75  e{.      int eAu
8ba0: 74 6f 20 3d 20 67 65 74 41 75 74 6f 56 61 63 75  to = getAutoVacu
8bb0: 75 6d 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  um(zRight);.    
8bc0: 20 20 61 73 73 65 72 74 28 20 65 41 75 74 6f 3e    assert( eAuto>
8bd0: 3d 30 20 26 26 20 65 41 75 74 6f 3c 3d 32 20 29  =0 && eAuto<=2 )
8be0: 3b 0a 20 20 20 20 20 20 64 62 2d 3e 6e 65 78 74  ;.      db->next
8bf0: 41 75 74 6f 76 61 63 20 3d 20 28 75 38 29 65 41  Autovac = (u8)eA
8c00: 75 74 6f 3b 0a 20 20 20 20 20 20 2f 2a 20 43 61  uto;.      /* Ca
8c10: 6c 6c 20 53 65 74 41 75 74 6f 56 61 63 75 75 6d  ll SetAutoVacuum
8c20: 28 29 20 74 6f 20 73 65 74 20 69 6e 69 74 69 61  () to set initia
8c30: 6c 69 7a 65 20 74 68 65 20 69 6e 74 65 72 6e 61  lize the interna
8c40: 6c 20 61 75 74 6f 20 61 6e 64 0a 20 20 20 20 20  l auto and.     
8c50: 20 2a 2a 20 69 6e 63 72 2d 76 61 63 75 75 6d 20   ** incr-vacuum 
8c60: 66 6c 61 67 73 2e 20 54 68 69 73 20 69 73 20 72  flags. This is r
8c70: 65 71 75 69 72 65 64 20 69 6e 20 63 61 73 65 20  equired in case 
8c80: 74 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a  this connection.
8c90: 20 20 20 20 20 20 2a 2a 20 63 72 65 61 74 65 73        ** creates
8ca0: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69   the database fi
8cb0: 6c 65 2e 20 49 74 20 69 73 20 69 6d 70 6f 72 74  le. It is import
8cc0: 61 6e 74 20 74 68 61 74 20 69 74 20 69 73 20 63  ant that it is c
8cd0: 72 65 61 74 65 64 0a 20 20 20 20 20 20 2a 2a 20  reated.      ** 
8ce0: 61 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75  as an auto-vacuu
8cf0: 6d 20 63 61 70 61 62 6c 65 20 64 62 2e 0a 20 20  m capable db..  
8d00: 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 63 20      */.      rc 
8d10: 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65  = sqlite3BtreeSe
8d20: 74 41 75 74 6f 56 61 63 75 75 6d 28 70 42 74 2c  tAutoVacuum(pBt,
8d30: 20 65 41 75 74 6f 29 3b 0a 20 20 20 20 20 20 69   eAuto);.      i
8d40: 66 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b  f( rc==SQLITE_OK
8d50: 20 26 26 20 28 65 41 75 74 6f 3d 3d 31 20 7c 7c   && (eAuto==1 ||
8d60: 20 65 41 75 74 6f 3d 3d 32 29 20 29 7b 0a 20 20   eAuto==2) ){.  
8d70: 20 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 73 65        /* When se
8d80: 74 74 69 6e 67 20 74 68 65 20 61 75 74 6f 5f 76  tting the auto_v
8d90: 61 63 75 75 6d 20 6d 6f 64 65 20 74 6f 20 65 69  acuum mode to ei
8da0: 74 68 65 72 20 22 66 75 6c 6c 22 20 6f 72 20 0a  ther "full" or .
8db0: 20 20 20 20 20 20 20 20 2a 2a 20 22 69 6e 63 72          ** "incr
8dc0: 65 6d 65 6e 74 61 6c 22 2c 20 77 72 69 74 65 20  emental", write 
8dd0: 74 68 65 20 76 61 6c 75 65 20 6f 66 20 6d 65 74  the value of met
8de0: 61 5b 36 5d 20 69 6e 20 74 68 65 20 64 61 74 61  a[6] in the data
8df0: 62 61 73 65 0a 20 20 20 20 20 20 20 20 2a 2a 20  base.        ** 
8e00: 66 69 6c 65 2e 20 42 65 66 6f 72 65 20 77 72 69  file. Before wri
8e10: 74 69 6e 67 20 74 6f 20 6d 65 74 61 5b 36 5d 2c  ting to meta[6],
8e20: 20 63 68 65 63 6b 20 74 68 61 74 20 6d 65 74 61   check that meta
8e30: 5b 33 5d 20 69 6e 64 69 63 61 74 65 73 0a 20 20  [3] indicates.  
8e40: 20 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68        ** that th
8e50: 69 73 20 72 65 61 6c 6c 79 20 69 73 20 61 6e 20  is really is an 
8e60: 61 75 74 6f 2d 76 61 63 75 75 6d 20 63 61 70 61  auto-vacuum capa
8e70: 62 6c 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20  ble database..  
8e80: 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20        */.       
8e90: 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56 64   static const Vd
8ea0: 62 65 4f 70 4c 69 73 74 20 73 65 74 4d 65 74 61  beOpList setMeta
8eb0: 36 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 20 20  6[] = {.        
8ec0: 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69    { OP_Transacti
8ed0: 6f 6e 2c 20 20 20 20 30 2c 20 20 20 20 20 20 20  on,    0,       
8ee0: 20 20 31 2c 20 20 20 20 20 20 20 20 20 20 20 20    1,            
8ef0: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30       0},    /* 0
8f00: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20   */.          { 
8f10: 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20  OP_ReadCookie,  
8f20: 20 20 20 30 2c 20 20 20 20 20 20 20 20 20 31 2c     0,         1,
8f30: 20 20 20 20 20 20 20 20 20 42 54 52 45 45 5f 4c           BTREE_L
8f40: 41 52 47 45 53 54 5f 52 4f 4f 54 5f 50 41 47 45  ARGEST_ROOT_PAGE
8f50: 7d 2c 0a 20 20 20 20 20 20 20 20 20 20 7b 20 4f  },.          { O
8f60: 50 5f 49 66 2c 20 20 20 20 20 20 20 20 20 20 20  P_If,           
8f70: 20 20 31 2c 20 20 20 20 20 20 20 20 20 30 2c 20    1,         0, 
8f80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8f90: 30 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f 0a 20  0},    /* 2 */. 
8fa0: 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 48 61           { OP_Ha
8fb0: 6c 74 2c 20 20 20 20 20 20 20 20 20 20 20 53 51  lt,           SQ
8fc0: 4c 49 54 45 5f 4f 4b 2c 20 4f 45 5f 41 62 6f 72  LITE_OK, OE_Abor
8fd0: 74 2c 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20  t,          0}, 
8fe0: 20 20 20 2f 2a 20 33 20 2a 2f 0a 20 20 20 20 20     /* 3 */.     
8ff0: 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65       { OP_Intege
9000: 72 2c 20 20 20 20 20 20 20 20 30 2c 20 20 20 20  r,        0,    
9010: 20 20 20 20 20 31 2c 20 20 20 20 20 20 20 20 20       1,         
9020: 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f          0},    /
9030: 2a 20 34 20 2a 2f 0a 20 20 20 20 20 20 20 20 20  * 4 */.         
9040: 20 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b 69 65 2c   { OP_SetCookie,
9050: 20 20 20 20 20 20 30 2c 20 20 20 20 20 20 20 20        0,        
9060: 20 42 54 52 45 45 5f 49 4e 43 52 5f 56 41 43 55   BTREE_INCR_VACU
9070: 55 4d 2c 20 31 7d 2c 20 20 20 20 2f 2a 20 35 20  UM, 1},    /* 5 
9080: 2a 2f 0a 20 20 20 20 20 20 20 20 7d 3b 0a 20 20  */.        };.  
9090: 20 20 20 20 20 20 69 6e 74 20 69 41 64 64 72 3b        int iAddr;
90a0: 0a 20 20 20 20 20 20 20 20 69 41 64 64 72 20 3d  .        iAddr =
90b0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
90c0: 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69  pList(v, ArraySi
90d0: 7a 65 28 73 65 74 4d 65 74 61 36 29 2c 20 73 65  ze(setMeta6), se
90e0: 74 4d 65 74 61 36 29 3b 0a 20 20 20 20 20 20 20  tMeta6);.       
90f0: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
9100: 67 65 50 31 28 76 2c 20 69 41 64 64 72 2c 20 69  geP1(v, iAddr, i
9110: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  Db);.        sql
9120: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
9130: 28 76 2c 20 69 41 64 64 72 2b 31 2c 20 69 44 62  (v, iAddr+1, iDb
9140: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
9150: 65 33 56 64 62 65 43 68 61 6e 67 65 50 32 28 76  e3VdbeChangeP2(v
9160: 2c 20 69 41 64 64 72 2b 32 2c 20 69 41 64 64 72  , iAddr+2, iAddr
9170: 2b 34 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  +4);.        sql
9180: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
9190: 28 76 2c 20 69 41 64 64 72 2b 34 2c 20 65 41 75  (v, iAddr+4, eAu
91a0: 74 6f 2d 31 29 3b 0a 20 20 20 20 20 20 20 20 73  to-1);.        s
91b0: 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
91c0: 50 31 28 76 2c 20 69 41 64 64 72 2b 35 2c 20 69  P1(v, iAddr+5, i
91d0: 44 62 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  Db);.        sql
91e0: 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72 65  ite3VdbeUsesBtre
91f0: 65 28 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  e(v, iDb);.     
9200: 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62 72 65   }.    }.    bre
9210: 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66 0a 0a  ak;.  }.#endif..
9220: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
9230: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 69 6e 63  A [database.]inc
9240: 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75 6d 28  remental_vacuum(
9250: 4e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 44 6f 20  N).  **.  ** Do 
9260: 4e 20 73 74 65 70 73 20 6f 66 20 69 6e 63 72 65  N steps of incre
9270: 6d 65 6e 74 61 6c 20 76 61 63 75 75 6d 69 6e 67  mental vacuuming
9280: 20 6f 6e 20 61 20 64 61 74 61 62 61 73 65 2e 0a   on a database..
9290: 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c    */.#ifndef SQL
92a0: 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43  ITE_OMIT_AUTOVAC
92b0: 55 55 4d 0a 20 20 63 61 73 65 20 50 72 61 67 54  UUM.  case PragT
92c0: 79 70 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f 56  yp_INCREMENTAL_V
92d0: 41 43 55 55 4d 3a 20 7b 0a 20 20 20 20 69 6e 74  ACUUM: {.    int
92e0: 20 69 4c 69 6d 69 74 2c 20 61 64 64 72 3b 0a 20   iLimit, addr;. 
92f0: 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30     if( zRight==0
9300: 20 7c 7c 20 21 73 71 6c 69 74 65 33 47 65 74 49   || !sqlite3GetI
9310: 6e 74 33 32 28 7a 52 69 67 68 74 2c 20 26 69 4c  nt32(zRight, &iL
9320: 69 6d 69 74 29 20 7c 7c 20 69 4c 69 6d 69 74 3c  imit) || iLimit<
9330: 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 4c 69 6d  =0 ){.      iLim
9340: 69 74 20 3d 20 30 78 37 66 66 66 66 66 66 66 3b  it = 0x7fffffff;
9350: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
9360: 65 33 42 65 67 69 6e 57 72 69 74 65 4f 70 65 72  e3BeginWriteOper
9370: 61 74 69 6f 6e 28 70 50 61 72 73 65 2c 20 30 2c  ation(pParse, 0,
9380: 20 69 44 62 29 3b 0a 20 20 20 20 73 71 6c 69 74   iDb);.    sqlit
9390: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
93a0: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 4c 69 6d  OP_Integer, iLim
93b0: 69 74 2c 20 31 29 3b 0a 20 20 20 20 61 64 64 72  it, 1);.    addr
93c0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
93d0: 64 4f 70 31 28 76 2c 20 4f 50 5f 49 6e 63 72 56  dOp1(v, OP_IncrV
93e0: 61 63 75 75 6d 2c 20 69 44 62 29 3b 0a 20 20 20  acuum, iDb);.   
93f0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
9400: 70 31 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p1(v, OP_ResultR
9410: 6f 77 2c 20 31 29 3b 0a 20 20 20 20 73 71 6c 69  ow, 1);.    sqli
9420: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
9430: 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d   OP_AddImm, 1, -
9440: 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  1);.    sqlite3V
9450: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
9460: 49 66 50 6f 73 2c 20 31 2c 20 61 64 64 72 29 3b  IfPos, 1, addr);
9470: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
9480: 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72  JumpHere(v, addr
9490: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
94a0: 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 6e 64 65  }.#endif..#ifnde
94b0: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  f SQLITE_OMIT_PA
94c0: 47 45 52 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a  GER_PRAGMAS.  /*
94d0: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
94e0: 61 74 61 62 61 73 65 2e 5d 63 61 63 68 65 5f 73  atabase.]cache_s
94f0: 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  ize.  **  PRAGMA
9500: 20 5b 64 61 74 61 62 61 73 65 2e 5d 63 61 63 68   [database.]cach
9510: 65 5f 73 69 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20  e_size=N.  **.  
9520: 2a 2a 20 54 68 65 20 66 69 72 73 74 20 66 6f 72  ** The first for
9530: 6d 20 72 65 70 6f 72 74 73 20 74 68 65 20 63 75  m reports the cu
9540: 72 72 65 6e 74 20 6c 6f 63 61 6c 20 73 65 74 74  rrent local sett
9550: 69 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a  ing for the.  **
9560: 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65   page cache size
9570: 2e 20 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72  . The second for
9580: 6d 20 73 65 74 73 20 74 68 65 20 6c 6f 63 61 6c  m sets the local
9590: 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63 68 65  .  ** page cache
95a0: 20 73 69 7a 65 20 76 61 6c 75 65 2e 20 20 49 66   size value.  If
95b0: 20 4e 20 69 73 20 70 6f 73 69 74 69 76 65 20 74   N is positive t
95c0: 68 65 6e 20 74 68 61 74 20 69 73 20 74 68 65 0a  hen that is the.
95d0: 20 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70    ** number of p
95e0: 61 67 65 73 20 69 6e 20 74 68 65 20 63 61 63 68  ages in the cach
95f0: 65 2e 20 20 49 66 20 4e 20 69 73 20 6e 65 67 61  e.  If N is nega
9600: 74 69 76 65 2c 20 74 68 65 6e 20 74 68 65 0a 20  tive, then the. 
9610: 20 2a 2a 20 6e 75 6d 62 65 72 20 6f 66 20 70 61   ** number of pa
9620: 67 65 73 20 69 73 20 61 64 6a 75 73 74 65 64 20  ges is adjusted 
9630: 73 6f 20 74 68 61 74 20 74 68 65 20 63 61 63 68  so that the cach
9640: 65 20 75 73 65 73 20 2d 4e 20 6b 69 62 69 62 79  e uses -N kibiby
9650: 74 65 73 0a 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f  tes.  ** of memo
9660: 72 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ry..  */.  case 
9670: 50 72 61 67 54 79 70 5f 43 41 43 48 45 5f 53 49  PragTyp_CACHE_SI
9680: 5a 45 3a 20 7b 0a 20 20 20 20 61 73 73 65 72 74  ZE: {.    assert
9690: 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d 61 4d  ( sqlite3SchemaM
96a0: 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69 44 62  utexHeld(db, iDb
96b0: 2c 20 30 29 20 29 3b 0a 20 20 20 20 69 66 28 20  , 0) );.    if( 
96c0: 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20  !zRight ){.     
96d0: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
96e0: 28 70 50 61 72 73 65 2c 20 22 63 61 63 68 65 5f  (pParse, "cache_
96f0: 73 69 7a 65 22 2c 20 70 44 62 2d 3e 70 53 63 68  size", pDb->pSch
9700: 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 29  ema->cache_size)
9710: 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20  ;.    }else{.   
9720: 20 20 20 69 6e 74 20 73 69 7a 65 20 3d 20 73 71     int size = sq
9730: 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68 74  lite3Atoi(zRight
9740: 29 3b 0a 20 20 20 20 20 20 70 44 62 2d 3e 70 53  );.      pDb->pS
9750: 63 68 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a  chema->cache_siz
9760: 65 20 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20 20  e = size;.      
9770: 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74 43  sqlite3BtreeSetC
9780: 61 63 68 65 53 69 7a 65 28 70 44 62 2d 3e 70 42  acheSize(pDb->pB
9790: 74 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  t, pDb->pSchema-
97a0: 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20  >cache_size);.  
97b0: 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20    }.    break;. 
97c0: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50   }..  /*.  **  P
97d0: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
97e0: 5d 6d 6d 61 70 5f 73 69 7a 65 28 4e 29 0a 20 20  ]mmap_size(N).  
97f0: 2a 2a 0a 20 20 2a 2a 20 55 73 65 64 20 74 6f 20  **.  ** Used to 
9800: 73 65 74 20 6d 61 70 70 69 6e 67 20 73 69 7a 65  set mapping size
9810: 20 6c 69 6d 69 74 2e 20 54 68 65 20 6d 61 70 70   limit. The mapp
9820: 69 6e 67 20 73 69 7a 65 20 6c 69 6d 69 74 20 69  ing size limit i
9830: 73 0a 20 20 2a 2a 20 75 73 65 64 20 74 6f 20 6c  s.  ** used to l
9840: 69 6d 69 74 20 74 68 65 20 61 67 67 72 65 67 61  imit the aggrega
9850: 74 65 20 73 69 7a 65 20 6f 66 20 61 6c 6c 20 6d  te size of all m
9860: 65 6d 6f 72 79 20 6d 61 70 70 65 64 20 72 65 67  emory mapped reg
9870: 69 6f 6e 73 20 6f 66 20 74 68 65 0a 20 20 2a 2a  ions of the.  **
9880: 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 2e 20   database file. 
9890: 49 66 20 74 68 69 73 20 70 61 72 61 6d 65 74 65  If this paramete
98a0: 72 20 69 73 20 73 65 74 20 74 6f 20 7a 65 72 6f  r is set to zero
98b0: 2c 20 74 68 65 6e 20 6d 65 6d 6f 72 79 20 6d 61  , then memory ma
98c0: 70 70 69 6e 67 0a 20 20 2a 2a 20 69 73 20 6e 6f  pping.  ** is no
98d0: 74 20 75 73 65 64 20 61 74 20 61 6c 6c 2e 20 20  t used at all.  
98e0: 49 66 20 4e 20 69 73 20 6e 65 67 61 74 69 76 65  If N is negative
98f0: 2c 20 74 68 65 6e 20 74 68 65 20 64 65 66 61 75  , then the defau
9900: 6c 74 20 6d 65 6d 6f 72 79 20 6d 61 70 0a 20 20  lt memory map.  
9910: 2a 2a 20 6c 69 6d 69 74 20 64 65 74 65 72 6d 69  ** limit determi
9920: 6e 65 64 20 62 79 20 73 71 6c 69 74 65 33 5f 63  ned by sqlite3_c
9930: 6f 6e 66 69 67 28 53 51 4c 49 54 45 5f 43 4f 4e  onfig(SQLITE_CON
9940: 46 49 47 5f 4d 4d 41 50 5f 53 49 5a 45 29 20 69  FIG_MMAP_SIZE) i
9950: 73 20 73 65 74 2e 0a 20 20 2a 2a 20 54 68 65 20  s set..  ** The 
9960: 70 61 72 61 6d 65 74 65 72 20 4e 20 69 73 20 6d  parameter N is m
9970: 65 61 73 75 72 65 64 20 69 6e 20 62 79 74 65 73  easured in bytes
9980: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 69 73  ..  **.  ** This
9990: 20 76 61 6c 75 65 20 69 73 20 61 64 76 69 73 6f   value is adviso
99a0: 72 79 2e 20 20 54 68 65 20 75 6e 64 65 72 6c 79  ry.  The underly
99b0: 69 6e 67 20 56 46 53 20 69 73 20 66 72 65 65 20  ing VFS is free 
99c0: 74 6f 20 6d 65 6d 6f 72 79 20 6d 61 70 0a 20 20  to memory map.  
99d0: 2a 2a 20 61 73 20 6c 69 74 74 6c 65 20 6f 72 20  ** as little or 
99e0: 61 73 20 6d 75 63 68 20 61 73 20 69 74 20 77 61  as much as it wa
99f0: 6e 74 73 2e 20 20 45 78 63 65 70 74 2c 20 69 66  nts.  Except, if
9a00: 20 4e 20 69 73 20 73 65 74 20 74 6f 20 30 20 74   N is set to 0 t
9a10: 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20 75 70 70  hen the.  ** upp
9a20: 65 72 20 6c 61 79 65 72 73 20 77 69 6c 6c 20 6e  er layers will n
9a30: 65 76 65 72 20 69 6e 76 6f 6b 65 20 74 68 65 20  ever invoke the 
9a40: 78 46 65 74 63 68 20 69 6e 74 65 72 66 61 63 65  xFetch interface
9a50: 73 20 74 6f 20 74 68 65 20 56 46 53 2e 0a 20 20  s to the VFS..  
9a60: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
9a70: 70 5f 4d 4d 41 50 5f 53 49 5a 45 3a 20 7b 0a 20  p_MMAP_SIZE: {. 
9a80: 20 20 20 73 71 6c 69 74 65 33 5f 69 6e 74 36 34     sqlite3_int64
9a90: 20 73 7a 3b 0a 23 69 66 20 53 51 4c 49 54 45 5f   sz;.#if SQLITE_
9aa0: 4d 41 58 5f 4d 4d 41 50 5f 53 49 5a 45 3e 30 0a  MAX_MMAP_SIZE>0.
9ab0: 20 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69      assert( sqli
9ac0: 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65  te3SchemaMutexHe
9ad0: 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29  ld(db, iDb, 0) )
9ae0: 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  ;.    if( zRight
9af0: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 69   ){.      int ii
9b00: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 41  ;.      sqlite3A
9b10: 74 6f 69 36 34 28 7a 52 69 67 68 74 2c 20 26 73  toi64(zRight, &s
9b20: 7a 2c 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  z, sqlite3Strlen
9b30: 33 30 28 7a 52 69 67 68 74 29 2c 20 53 51 4c 49  30(zRight), SQLI
9b40: 54 45 5f 55 54 46 38 29 3b 0a 20 20 20 20 20 20  TE_UTF8);.      
9b50: 69 66 28 20 73 7a 3c 30 20 29 20 73 7a 20 3d 20  if( sz<0 ) sz = 
9b60: 73 71 6c 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e  sqlite3GlobalCon
9b70: 66 69 67 2e 73 7a 4d 6d 61 70 3b 0a 20 20 20 20  fig.szMmap;.    
9b80: 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30    if( pId2->n==0
9b90: 20 29 20 64 62 2d 3e 73 7a 4d 6d 61 70 20 3d 20   ) db->szMmap = 
9ba0: 73 7a 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 69  sz;.      for(ii
9bb0: 3d 64 62 2d 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d  =db->nDb-1; ii>=
9bc0: 30 3b 20 69 69 2d 2d 29 7b 0a 20 20 20 20 20 20  0; ii--){.      
9bd0: 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 69    if( db->aDb[ii
9be0: 5d 2e 70 42 74 20 26 26 20 28 69 69 3d 3d 69 44  ].pBt && (ii==iD
9bf0: 62 20 7c 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30 29  b || pId2->n==0)
9c00: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71   ){.          sq
9c10: 6c 69 74 65 33 42 74 72 65 65 53 65 74 4d 6d 61  lite3BtreeSetMma
9c20: 70 4c 69 6d 69 74 28 64 62 2d 3e 61 44 62 5b 69  pLimit(db->aDb[i
9c30: 69 5d 2e 70 42 74 2c 20 73 7a 29 3b 0a 20 20 20  i].pBt, sz);.   
9c40: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20       }.      }. 
9c50: 20 20 20 7d 0a 20 20 20 20 73 7a 20 3d 20 2d 31     }.    sz = -1
9c60: 3b 0a 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74  ;.    rc = sqlit
9c70: 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28  e3_file_control(
9c80: 64 62 2c 20 7a 44 62 2c 20 53 51 4c 49 54 45 5f  db, zDb, SQLITE_
9c90: 46 43 4e 54 4c 5f 4d 4d 41 50 5f 53 49 5a 45 2c  FCNTL_MMAP_SIZE,
9ca0: 20 26 73 7a 29 3b 0a 23 65 6c 73 65 0a 20 20 20   &sz);.#else.   
9cb0: 20 73 7a 20 3d 20 30 3b 0a 20 20 20 20 72 63 20   sz = 0;.    rc 
9cc0: 3d 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 23 65 6e  = SQLITE_OK;.#en
9cd0: 64 69 66 0a 20 20 20 20 69 66 28 20 72 63 3d 3d  dif.    if( rc==
9ce0: 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20  SQLITE_OK ){.   
9cf0: 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
9d00: 6e 74 28 70 50 61 72 73 65 2c 20 22 6d 6d 61 70  nt(pParse, "mmap
9d10: 5f 73 69 7a 65 22 2c 20 73 7a 29 3b 0a 20 20 20  _size", sz);.   
9d20: 20 7d 65 6c 73 65 20 69 66 28 20 72 63 21 3d 53   }else if( rc!=S
9d30: 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29  QLITE_NOTFOUND )
9d40: 7b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e  {.      pParse->
9d50: 6e 45 72 72 2b 2b 3b 0a 20 20 20 20 20 20 70 50  nErr++;.      pP
9d60: 61 72 73 65 2d 3e 72 63 20 3d 20 72 63 3b 0a 20  arse->rc = rc;. 
9d70: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
9d80: 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20    }..  /*.  **  
9d90: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
9da0: 72 65 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  re.  **   PRAGMA
9db0: 20 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20 22 64   temp_store = "d
9dc0: 65 66 61 75 6c 74 22 7c 22 6d 65 6d 6f 72 79 22  efault"|"memory"
9dd0: 7c 22 66 69 6c 65 22 0a 20 20 2a 2a 0a 20 20 2a  |"file".  **.  *
9de0: 2a 20 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20  * Return or set 
9df0: 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20  the local value 
9e00: 6f 66 20 74 68 65 20 74 65 6d 70 5f 73 74 6f 72  of the temp_stor
9e10: 65 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e  e flag.  Changin
9e20: 67 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c  g.  ** the local
9e30: 20 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20   value does not 
9e40: 6d 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20  make changes to 
9e50: 74 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61 6e  the disk file an
9e60: 64 20 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20  d the default.  
9e70: 2a 2a 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65  ** value will be
9e80: 20 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e 65   restored the ne
9e90: 78 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61  xt time the data
9ea0: 62 61 73 65 20 69 73 20 6f 70 65 6e 65 64 2e 0a  base is opened..
9eb0: 20 20 2a 2a 0a 20 20 2a 2a 20 4e 6f 74 65 20 74    **.  ** Note t
9ec0: 68 61 74 20 69 74 20 69 73 20 70 6f 73 73 69 62  hat it is possib
9ed0: 6c 65 20 66 6f 72 20 74 68 65 20 6c 69 62 72 61  le for the libra
9ee0: 72 79 20 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20  ry compile-time 
9ef0: 6f 70 74 69 6f 6e 73 20 74 6f 0a 20 20 2a 2a 20  options to.  ** 
9f00: 6f 76 65 72 72 69 64 65 20 74 68 69 73 20 73 65  override this se
9f10: 74 74 69 6e 67 0a 20 20 2a 2f 0a 20 20 63 61 73  tting.  */.  cas
9f20: 65 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f 53  e PragTyp_TEMP_S
9f30: 54 4f 52 45 3a 20 7b 0a 20 20 20 20 69 66 28 20  TORE: {.    if( 
9f40: 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20  !zRight ){.     
9f50: 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74   returnSingleInt
9f60: 28 70 50 61 72 73 65 2c 20 22 74 65 6d 70 5f 73  (pParse, "temp_s
9f70: 74 6f 72 65 22 2c 20 64 62 2d 3e 74 65 6d 70 5f  tore", db->temp_
9f80: 73 74 6f 72 65 29 3b 0a 20 20 20 20 7d 65 6c 73  store);.    }els
9f90: 65 7b 0a 20 20 20 20 20 20 63 68 61 6e 67 65 54  e{.      changeT
9fa0: 65 6d 70 53 74 6f 72 61 67 65 28 70 50 61 72 73  empStorage(pPars
9fb0: 65 2c 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20  e, zRight);.    
9fc0: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
9fd0: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  ..  /*.  **   PR
9fe0: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f  AGMA temp_store_
9ff0: 64 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20  directory.  **  
a000: 20 50 52 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f   PRAGMA temp_sto
a010: 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22  re_directory = "
a020: 22 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d  "|"directory_nam
a030: 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  e".  **.  ** Ret
a040: 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c  urn or set the l
a050: 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68  ocal value of th
a060: 65 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  e temp_store_dir
a070: 65 63 74 6f 72 79 20 66 6c 61 67 2e 20 20 43 68  ectory flag.  Ch
a080: 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20  anging.  ** the 
a090: 76 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65  value sets a spe
a0a0: 63 69 66 69 63 20 64 69 72 65 63 74 6f 72 79 20  cific directory 
a0b0: 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 74  to be used for t
a0c0: 65 6d 70 6f 72 61 72 79 20 66 69 6c 65 73 2e 0a  emporary files..
a0d0: 20 20 2a 2a 20 53 65 74 74 69 6e 67 20 74 6f 20    ** Setting to 
a0e0: 61 20 6e 75 6c 6c 20 73 74 72 69 6e 67 20 72 65  a null string re
a0f0: 76 65 72 74 73 20 74 6f 20 74 68 65 20 64 65 66  verts to the def
a100: 61 75 6c 74 20 74 65 6d 70 6f 72 61 72 79 20 64  ault temporary d
a110: 69 72 65 63 74 6f 72 79 20 73 65 61 72 63 68 2e  irectory search.
a120: 0a 20 20 2a 2a 20 49 66 20 74 65 6d 70 6f 72 61  .  ** If tempora
a130: 72 79 20 64 69 72 65 63 74 6f 72 79 20 69 73 20  ry directory is 
a140: 63 68 61 6e 67 65 64 2c 20 74 68 65 6e 20 69 6e  changed, then in
a150: 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72  validateTempStor
a160: 61 67 65 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20  age..  **.  */. 
a170: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 45   case PragTyp_TE
a180: 4d 50 5f 53 54 4f 52 45 5f 44 49 52 45 43 54 4f  MP_STORE_DIRECTO
a190: 52 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a  RY: {.    if( !z
a1a0: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 69  Right ){.      i
a1b0: 66 28 20 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f  f( sqlite3_temp_
a1c0: 64 69 72 65 63 74 6f 72 79 20 29 7b 0a 20 20 20  directory ){.   
a1d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
a1e0: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
a1f0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
a200: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
a210: 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
a220: 4d 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  ME, .           
a230: 20 22 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72   "temp_store_dir
a240: 65 63 74 6f 72 79 22 2c 20 53 51 4c 49 54 45 5f  ectory", SQLITE_
a250: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20  STATIC);.       
a260: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
a270: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
a280: 2c 20 30 2c 20 31 2c 20 30 2c 20 73 71 6c 69 74  , 0, 1, 0, sqlit
a290: 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72  e3_temp_director
a2a0: 79 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73  y, 0);.        s
a2b0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
a2c0: 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77  (v, OP_ResultRow
a2d0: 2c 20 31 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d  , 1, 1);.      }
a2e0: 0a 20 20 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e  .    }else{.#ifn
a2f0: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
a300: 57 53 44 0a 20 20 20 20 20 20 69 66 28 20 7a 52  WSD.      if( zR
a310: 69 67 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20  ight[0] ){.     
a320: 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20     int res;.    
a330: 20 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33      rc = sqlite3
a340: 4f 73 41 63 63 65 73 73 28 64 62 2d 3e 70 56 66  OsAccess(db->pVf
a350: 73 2c 20 7a 52 69 67 68 74 2c 20 53 51 4c 49 54  s, zRight, SQLIT
a360: 45 5f 41 43 43 45 53 53 5f 52 45 41 44 57 52 49  E_ACCESS_READWRI
a370: 54 45 2c 20 26 72 65 73 29 3b 0a 20 20 20 20 20  TE, &res);.     
a380: 20 20 20 69 66 28 20 72 63 21 3d 53 51 4c 49 54     if( rc!=SQLIT
a390: 45 5f 4f 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29  E_OK || res==0 )
a3a0: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
a3b0: 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72  te3ErrorMsg(pPar
a3c0: 73 65 2c 20 22 6e 6f 74 20 61 20 77 72 69 74 61  se, "not a writa
a3d0: 62 6c 65 20 64 69 72 65 63 74 6f 72 79 22 29 3b  ble directory");
a3e0: 0a 20 20 20 20 20 20 20 20 20 20 67 6f 74 6f 20  .          goto 
a3f0: 70 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20  pragma_out;.    
a400: 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20      }.      }.  
a410: 20 20 20 20 69 66 28 20 53 51 4c 49 54 45 5f 54      if( SQLITE_T
a420: 45 4d 50 5f 53 54 4f 52 45 3d 3d 30 0a 20 20 20  EMP_STORE==0.   
a430: 20 20 20 20 7c 7c 20 28 53 51 4c 49 54 45 5f 54      || (SQLITE_T
a440: 45 4d 50 5f 53 54 4f 52 45 3d 3d 31 20 26 26 20  EMP_STORE==1 && 
a450: 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 3c 3d  db->temp_store<=
a460: 31 29 0a 20 20 20 20 20 20 20 7c 7c 20 28 53 51  1).       || (SQ
a470: 4c 49 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d  LITE_TEMP_STORE=
a480: 3d 32 20 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73  =2 && db->temp_s
a490: 74 6f 72 65 3d 3d 31 29 0a 20 20 20 20 20 20 29  tore==1).      )
a4a0: 7b 0a 20 20 20 20 20 20 20 20 69 6e 76 61 6c 69  {.        invali
a4b0: 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65 28  dateTempStorage(
a4c0: 70 50 61 72 73 65 29 3b 0a 20 20 20 20 20 20 7d  pParse);.      }
a4d0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 66  .      sqlite3_f
a4e0: 72 65 65 28 73 71 6c 69 74 65 33 5f 74 65 6d 70  ree(sqlite3_temp
a4f0: 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20 20 20  _directory);.   
a500: 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d     if( zRight[0]
a510: 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   ){.        sqli
a520: 74 65 33 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f  te3_temp_directo
a530: 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72  ry = sqlite3_mpr
a540: 69 6e 74 66 28 22 25 73 22 2c 20 7a 52 69 67 68  intf("%s", zRigh
a550: 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  t);.      }else{
a560: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
a570: 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20  _temp_directory 
a580: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e  = 0;.      }.#en
a590: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
a5a0: 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a  IT_WSD */.    }.
a5b0: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
a5c0: 23 69 66 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49  #if SQLITE_OS_WI
a5d0: 4e 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  N.  /*.  **   PR
a5e0: 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f  AGMA data_store_
a5f0: 64 69 72 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20  directory.  **  
a600: 20 50 52 41 47 4d 41 20 64 61 74 61 5f 73 74 6f   PRAGMA data_sto
a610: 72 65 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 22  re_directory = "
a620: 22 7c 22 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d  "|"directory_nam
a630: 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  e".  **.  ** Ret
a640: 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c  urn or set the l
a650: 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68  ocal value of th
a660: 65 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72  e data_store_dir
a670: 65 63 74 6f 72 79 20 66 6c 61 67 2e 20 20 43 68  ectory flag.  Ch
a680: 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20  anging.  ** the 
a690: 76 61 6c 75 65 20 73 65 74 73 20 61 20 73 70 65  value sets a spe
a6a0: 63 69 66 69 63 20 64 69 72 65 63 74 6f 72 79 20  cific directory 
a6b0: 74 6f 20 62 65 20 75 73 65 64 20 66 6f 72 20 64  to be used for d
a6c0: 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 74 68  atabase files th
a6d0: 61 74 0a 20 20 2a 2a 20 77 65 72 65 20 73 70 65  at.  ** were spe
a6e0: 63 69 66 69 65 64 20 77 69 74 68 20 61 20 72 65  cified with a re
a6f0: 6c 61 74 69 76 65 20 70 61 74 68 6e 61 6d 65 2e  lative pathname.
a700: 20 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e    Setting to a n
a710: 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72  ull string rever
a720: 74 73 0a 20 20 2a 2a 20 74 6f 20 74 68 65 20 64  ts.  ** to the d
a730: 65 66 61 75 6c 74 20 64 61 74 61 62 61 73 65 20  efault database 
a740: 64 69 72 65 63 74 6f 72 79 2c 20 77 68 69 63 68  directory, which
a750: 20 66 6f 72 20 64 61 74 61 62 61 73 65 20 66 69   for database fi
a760: 6c 65 73 20 73 70 65 63 69 66 69 65 64 20 77 69  les specified wi
a770: 74 68 0a 20 20 2a 2a 20 61 20 72 65 6c 61 74 69  th.  ** a relati
a780: 76 65 20 70 61 74 68 20 77 69 6c 6c 20 70 72 6f  ve path will pro
a790: 62 61 62 6c 79 20 62 65 20 62 61 73 65 64 20 6f  bably be based o
a7a0: 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 64 69  n the current di
a7b0: 72 65 63 74 6f 72 79 20 66 6f 72 20 74 68 65 0a  rectory for the.
a7c0: 20 20 2a 2a 20 70 72 6f 63 65 73 73 2e 20 20 44    ** process.  D
a7d0: 61 74 61 62 61 73 65 20 66 69 6c 65 20 73 70 65  atabase file spe
a7e0: 63 69 66 69 65 64 20 77 69 74 68 20 61 6e 20 61  cified with an a
a7f0: 62 73 6f 6c 75 74 65 20 70 61 74 68 20 61 72 65  bsolute path are
a800: 20 6e 6f 74 20 69 6d 70 61 63 74 65 64 0a 20 20   not impacted.  
a810: 2a 2a 20 62 79 20 74 68 69 73 20 73 65 74 74 69  ** by this setti
a820: 6e 67 2c 20 72 65 67 61 72 64 6c 65 73 73 20 6f  ng, regardless o
a830: 66 20 69 74 73 20 76 61 6c 75 65 2e 0a 20 20 2a  f its value..  *
a840: 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  *.  */.  case Pr
a850: 61 67 54 79 70 5f 44 41 54 41 5f 53 54 4f 52 45  agTyp_DATA_STORE
a860: 5f 44 49 52 45 43 54 4f 52 59 3a 20 7b 0a 20 20  _DIRECTORY: {.  
a870: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
a880: 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74  .      if( sqlit
a890: 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72  e3_data_director
a8a0: 79 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  y ){.        sql
a8b0: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
a8c0: 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20  ls(v, 1);.      
a8d0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
a8e0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
a8f0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 0a 20 20 20  LNAME_NAME, .   
a900: 20 20 20 20 20 20 20 20 20 22 64 61 74 61 5f 73           "data_s
a910: 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 22 2c  tore_directory",
a920: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
a930: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
a940: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
a950: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20  _String8, 0, 1, 
a960: 30 2c 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f  0, sqlite3_data_
a970: 64 69 72 65 63 74 6f 72 79 2c 20 30 29 3b 0a 20  directory, 0);. 
a980: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
a990: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
a9a0: 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b  esultRow, 1, 1);
a9b0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c  .      }.    }el
a9c0: 73 65 7b 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  se{.#ifndef SQLI
a9d0: 54 45 5f 4f 4d 49 54 5f 57 53 44 0a 20 20 20 20  TE_OMIT_WSD.    
a9e0: 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20    if( zRight[0] 
a9f0: 29 7b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 72  ){.        int r
aa00: 65 73 3b 0a 20 20 20 20 20 20 20 20 72 63 20 3d  es;.        rc =
aa10: 20 73 71 6c 69 74 65 33 4f 73 41 63 63 65 73 73   sqlite3OsAccess
aa20: 28 64 62 2d 3e 70 56 66 73 2c 20 7a 52 69 67 68  (db->pVfs, zRigh
aa30: 74 2c 20 53 51 4c 49 54 45 5f 41 43 43 45 53 53  t, SQLITE_ACCESS
aa40: 5f 52 45 41 44 57 52 49 54 45 2c 20 26 72 65 73  _READWRITE, &res
aa50: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 72  );.        if( r
aa60: 63 21 3d 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20  c!=SQLITE_OK || 
aa70: 72 65 73 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  res==0 ){.      
aa80: 20 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72      sqlite3Error
aa90: 4d 73 67 28 70 50 61 72 73 65 2c 20 22 6e 6f 74  Msg(pParse, "not
aaa0: 20 61 20 77 72 69 74 61 62 6c 65 20 64 69 72 65   a writable dire
aab0: 63 74 6f 72 79 22 29 3b 0a 20 20 20 20 20 20 20  ctory");.       
aac0: 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f     goto pragma_o
aad0: 75 74 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20  ut;.        }.  
aae0: 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
aaf0: 74 65 33 5f 66 72 65 65 28 73 71 6c 69 74 65 33  te3_free(sqlite3
ab00: 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79 29  _data_directory)
ab10: 3b 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67  ;.      if( zRig
ab20: 68 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20  ht[0] ){.       
ab30: 20 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69   sqlite3_data_di
ab40: 72 65 63 74 6f 72 79 20 3d 20 73 71 6c 69 74 65  rectory = sqlite
ab50: 33 5f 6d 70 72 69 6e 74 66 28 22 25 73 22 2c 20  3_mprintf("%s", 
ab60: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20 7d  zRight);.      }
ab70: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
ab80: 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63  lite3_data_direc
ab90: 74 6f 72 79 20 3d 20 30 3b 0a 20 20 20 20 20 20  tory = 0;.      
aba0: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
abb0: 54 45 5f 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20  TE_OMIT_WSD */. 
abc0: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
abd0: 20 20 7d 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20    }.#endif..#if 
abe0: 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f  SQLITE_ENABLE_LO
abf0: 43 4b 49 4e 47 5f 53 54 59 4c 45 0a 20 20 2f 2a  CKING_STYLE.  /*
ac00: 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b  .  **   PRAGMA [
ac10: 64 61 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 5f 70  database.]lock_p
ac20: 72 6f 78 79 5f 66 69 6c 65 0a 20 20 2a 2a 20 20  roxy_file.  **  
ac30: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
ac40: 65 2e 5d 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69  e.]lock_proxy_fi
ac50: 6c 65 20 3d 20 22 3a 61 75 74 6f 3a 22 7c 22 6c  le = ":auto:"|"l
ac60: 6f 63 6b 5f 66 69 6c 65 5f 70 61 74 68 22 0a 20  ock_file_path". 
ac70: 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20   **.  ** Return 
ac80: 6f 72 20 73 65 74 20 74 68 65 20 76 61 6c 75 65  or set the value
ac90: 20 6f 66 20 74 68 65 20 6c 6f 63 6b 5f 70 72 6f   of the lock_pro
aca0: 78 79 5f 66 69 6c 65 20 66 6c 61 67 2e 20 20 43  xy_file flag.  C
acb0: 68 61 6e 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65  hanging.  ** the
acc0: 20 76 61 6c 75 65 20 73 65 74 73 20 61 20 73 70   value sets a sp
acd0: 65 63 69 66 69 63 20 66 69 6c 65 20 74 6f 20 62  ecific file to b
ace0: 65 20 75 73 65 64 20 66 6f 72 20 64 61 74 61 62  e used for datab
acf0: 61 73 65 20 61 63 63 65 73 73 20 6c 6f 63 6b 73  ase access locks
ad00: 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61  ..  **.  */.  ca
ad10: 73 65 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f  se PragTyp_LOCK_
ad20: 50 52 4f 58 59 5f 46 49 4c 45 3a 20 7b 0a 20 20  PROXY_FILE: {.  
ad30: 20 20 69 66 28 20 21 7a 52 69 67 68 74 20 29 7b    if( !zRight ){
ad40: 0a 20 20 20 20 20 20 50 61 67 65 72 20 2a 70 50  .      Pager *pP
ad50: 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74  ager = sqlite3Bt
ad60: 72 65 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42  reePager(pDb->pB
ad70: 74 29 3b 0a 20 20 20 20 20 20 63 68 61 72 20 2a  t);.      char *
ad80: 70 72 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 20  proxy_file_path 
ad90: 3d 20 4e 55 4c 4c 3b 0a 20 20 20 20 20 20 73 71  = NULL;.      sq
ada0: 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c  lite3_file *pFil
adb0: 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  e = sqlite3Pager
adc0: 46 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20  File(pPager);.  
add0: 20 20 20 20 73 71 6c 69 74 65 33 4f 73 46 69 6c      sqlite3OsFil
ade0: 65 43 6f 6e 74 72 6f 6c 48 69 6e 74 28 70 46 69  eControlHint(pFi
adf0: 6c 65 2c 20 53 51 4c 49 54 45 5f 47 45 54 5f 4c  le, SQLITE_GET_L
ae00: 4f 43 4b 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20  OCKPROXYFILE, . 
ae10: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ae20: 20 20 20 20 20 20 20 20 20 20 26 70 72 6f 78 79            &proxy
ae30: 5f 66 69 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20  _file_path);.   
ae40: 20 20 20 0a 20 20 20 20 20 20 69 66 28 20 70 72     .      if( pr
ae50: 6f 78 79 5f 66 69 6c 65 5f 70 61 74 68 20 29 7b  oxy_file_path ){
ae60: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
ae70: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
ae80: 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 1);.        sq
ae90: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
aea0: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
aeb0: 45 5f 4e 41 4d 45 2c 20 0a 20 20 20 20 20 20 20  E_NAME, .       
aec0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
aed0: 20 20 20 20 20 20 20 22 6c 6f 63 6b 5f 70 72 6f         "lock_pro
aee0: 78 79 5f 66 69 6c 65 22 2c 20 53 51 4c 49 54 45  xy_file", SQLITE
aef0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
af00: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
af10: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
af20: 38 2c 20 30 2c 20 31 2c 20 30 2c 20 70 72 6f 78  8, 0, 1, 0, prox
af30: 79 5f 66 69 6c 65 5f 70 61 74 68 2c 20 30 29 3b  y_file_path, 0);
af40: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
af50: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
af60: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31  _ResultRow, 1, 1
af70: 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  );.      }.    }
af80: 65 6c 73 65 7b 0a 20 20 20 20 20 20 50 61 67 65  else{.      Page
af90: 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c 69  r *pPager = sqli
afa0: 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70 44  te3BtreePager(pD
afb0: 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 20 20 73  b->pBt);.      s
afc0: 71 6c 69 74 65 33 5f 66 69 6c 65 20 2a 70 46 69  qlite3_file *pFi
afd0: 6c 65 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65  le = sqlite3Page
afe0: 72 46 69 6c 65 28 70 50 61 67 65 72 29 3b 0a 20  rFile(pPager);. 
aff0: 20 20 20 20 20 69 6e 74 20 72 65 73 3b 0a 20 20       int res;.  
b000: 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b 30      if( zRight[0
b010: 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 72 65 73  ] ){.        res
b020: 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f  =sqlite3OsFileCo
b030: 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c  ntrol(pFile, SQL
b040: 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58  ITE_SET_LOCKPROX
b050: 59 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20  YFILE, .        
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 20 20 20 7a 52 69               zRi
b080: 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c  ght);.      } el
b090: 73 65 20 7b 0a 20 20 20 20 20 20 20 20 72 65 73  se {.        res
b0a0: 3d 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f  =sqlite3OsFileCo
b0b0: 6e 74 72 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c  ntrol(pFile, SQL
b0c0: 49 54 45 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58  ITE_SET_LOCKPROX
b0d0: 59 46 49 4c 45 2c 20 0a 20 20 20 20 20 20 20 20  YFILE, .        
b0e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b0f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 4e 55 4c               NUL
b100: 4c 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  L);.      }.    
b110: 20 20 69 66 28 20 72 65 73 21 3d 53 51 4c 49 54    if( res!=SQLIT
b120: 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20 20 20  E_OK ){.        
b130: 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28  sqlite3ErrorMsg(
b140: 70 50 61 72 73 65 2c 20 22 66 61 69 6c 65 64 20  pParse, "failed 
b150: 74 6f 20 73 65 74 20 6c 6f 63 6b 20 70 72 6f 78  to set lock prox
b160: 79 20 66 69 6c 65 22 29 3b 0a 20 20 20 20 20 20  y file");.      
b170: 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75    goto pragma_ou
b180: 74 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  t;.      }.    }
b190: 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
b1a0: 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45  #endif /* SQLITE
b1b0: 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f  _ENABLE_LOCKING_
b1c0: 53 54 59 4c 45 20 2a 2f 20 20 20 20 20 20 0a 20  STYLE */      . 
b1d0: 20 20 20 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20     .  /*.  **   
b1e0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
b1f0: 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20  .]synchronous.  
b200: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74  **   PRAGMA [dat
b210: 61 62 61 73 65 2e 5d 73 79 6e 63 68 72 6f 6e 6f  abase.]synchrono
b220: 75 73 3d 4f 46 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c  us=OFF|ON|NORMAL
b230: 7c 46 55 4c 4c 0a 20 20 2a 2a 0a 20 20 2a 2a 20  |FULL.  **.  ** 
b240: 52 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68  Return or set th
b250: 65 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66  e local value of
b260: 20 74 68 65 20 73 79 6e 63 68 72 6f 6e 6f 75 73   the synchronous
b270: 20 66 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67   flag.  Changing
b280: 0a 20 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20  .  ** the local 
b290: 76 61 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d  value does not m
b2a0: 61 6b 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74  ake changes to t
b2b0: 68 65 20 64 69 73 6b 20 66 69 6c 65 20 61 6e 64  he disk file and
b2c0: 20 74 68 65 0a 20 20 2a 2a 20 64 65 66 61 75 6c   the.  ** defaul
b2d0: 74 20 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20  t value will be 
b2e0: 72 65 73 74 6f 72 65 64 20 74 68 65 20 6e 65 78  restored the nex
b2f0: 74 20 74 69 6d 65 20 74 68 65 20 64 61 74 61 62  t time the datab
b300: 61 73 65 20 69 73 0a 20 20 2a 2a 20 6f 70 65 6e  ase is.  ** open
b310: 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ed..  */.  case 
b320: 50 72 61 67 54 79 70 5f 53 59 4e 43 48 52 4f 4e  PragTyp_SYNCHRON
b330: 4f 55 53 3a 20 7b 0a 20 20 20 20 69 66 28 20 21  OUS: {.    if( !
b340: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
b350: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
b360: 70 50 61 72 73 65 2c 20 22 73 79 6e 63 68 72 6f  pParse, "synchro
b370: 6e 6f 75 73 22 2c 20 70 44 62 2d 3e 73 61 66 65  nous", pDb->safe
b380: 74 79 5f 6c 65 76 65 6c 2d 31 29 3b 0a 20 20 20  ty_level-1);.   
b390: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 66   }else{.      if
b3a0: 28 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69  ( !db->autoCommi
b3b0: 74 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  t ){.        sql
b3c0: 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61  ite3ErrorMsg(pPa
b3d0: 72 73 65 2c 20 0a 20 20 20 20 20 20 20 20 20 20  rse, .          
b3e0: 20 20 22 53 61 66 65 74 79 20 6c 65 76 65 6c 20    "Safety level 
b3f0: 6d 61 79 20 6e 6f 74 20 62 65 20 63 68 61 6e 67  may not be chang
b400: 65 64 20 69 6e 73 69 64 65 20 61 20 74 72 61 6e  ed inside a tran
b410: 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20 20 20 20  saction");.     
b420: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
b430: 70 44 62 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65  pDb->safety_leve
b440: 6c 20 3d 20 67 65 74 53 61 66 65 74 79 4c 65 76  l = getSafetyLev
b450: 65 6c 28 7a 52 69 67 68 74 2c 30 2c 31 29 2b 31  el(zRight,0,1)+1
b460: 3b 0a 20 20 20 20 20 20 20 20 73 65 74 41 6c 6c  ;.        setAll
b470: 50 61 67 65 72 46 6c 61 67 73 28 64 62 29 3b 0a  PagerFlags(db);.
b480: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
b490: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
b4a0: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
b4b0: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
b4c0: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
b4d0: 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52  ITE_OMIT_FLAG_PR
b4e0: 41 47 4d 41 53 0a 20 20 63 61 73 65 20 50 72 61  AGMAS.  case Pra
b4f0: 67 54 79 70 5f 46 4c 41 47 3a 20 7b 0a 20 20 20  gTyp_FLAG: {.   
b500: 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30 20 29   if( zRight==0 )
b510: 7b 0a 20 20 20 20 20 20 72 65 74 75 72 6e 53 69  {.      returnSi
b520: 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20  ngleInt(pParse, 
b530: 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64  aPragmaNames[mid
b540: 5d 2e 7a 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20  ].zName,.       
b550: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 64                (d
b560: 62 2d 3e 66 6c 61 67 73 20 26 20 61 50 72 61 67  b->flags & aPrag
b570: 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 69 41 72  maNames[mid].iAr
b580: 67 29 21 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c  g)!=0 );.    }el
b590: 73 65 7b 0a 20 20 20 20 20 20 69 6e 74 20 6d 61  se{.      int ma
b5a0: 73 6b 20 3d 20 61 50 72 61 67 6d 61 4e 61 6d 65  sk = aPragmaName
b5b0: 73 5b 6d 69 64 5d 2e 69 41 72 67 3b 20 20 20 20  s[mid].iArg;    
b5c0: 2f 2a 20 4d 61 73 6b 20 6f 66 20 62 69 74 73 20  /* Mask of bits 
b5d0: 74 6f 20 73 65 74 20 6f 72 20 63 6c 65 61 72 2e  to set or clear.
b5e0: 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20 64 62   */.      if( db
b5f0: 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20  ->autoCommit==0 
b600: 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 46 6f  ){.        /* Fo
b610: 72 65 69 67 6e 20 6b 65 79 20 73 75 70 70 6f 72  reign key suppor
b620: 74 20 6d 61 79 20 6e 6f 74 20 62 65 20 65 6e 61  t may not be ena
b630: 62 6c 65 64 20 6f 72 20 64 69 73 61 62 6c 65 64  bled or disabled
b640: 20 77 68 69 6c 65 20 6e 6f 74 0a 20 20 20 20 20   while not.     
b650: 20 20 20 2a 2a 20 69 6e 20 61 75 74 6f 2d 63 6f     ** in auto-co
b660: 6d 6d 69 74 20 6d 6f 64 65 2e 20 20 2a 2f 0a 20  mmit mode.  */. 
b670: 20 20 20 20 20 20 20 6d 61 73 6b 20 26 3d 20 7e         mask &= ~
b680: 28 53 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b  (SQLITE_ForeignK
b690: 65 79 73 29 3b 0a 20 20 20 20 20 20 7d 0a 0a 20  eys);.      }.. 
b6a0: 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
b6b0: 47 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68  GetBoolean(zRigh
b6c0: 74 2c 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20  t, 0) ){.       
b6d0: 20 64 62 2d 3e 66 6c 61 67 73 20 7c 3d 20 6d 61   db->flags |= ma
b6e0: 73 6b 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b  sk;.      }else{
b6f0: 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 66 6c 61  .        db->fla
b700: 67 73 20 26 3d 20 7e 6d 61 73 6b 3b 0a 20 20 20  gs &= ~mask;.   
b710: 20 20 20 20 20 69 66 28 20 6d 61 73 6b 3d 3d 53       if( mask==S
b720: 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73 20 29  QLITE_DeferFKs )
b730: 20 64 62 2d 3e 6e 44 65 66 65 72 72 65 64 49 6d   db->nDeferredIm
b740: 6d 43 6f 6e 73 20 3d 20 30 3b 0a 20 20 20 20 20  mCons = 0;.     
b750: 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d 61 6e   }..      /* Man
b760: 79 20 6f 66 20 74 68 65 20 66 6c 61 67 2d 70 72  y of the flag-pr
b770: 61 67 6d 61 73 20 6d 6f 64 69 66 79 20 74 68 65  agmas modify the
b780: 20 63 6f 64 65 20 67 65 6e 65 72 61 74 65 64 20   code generated 
b790: 62 79 20 74 68 65 20 53 51 4c 20 0a 20 20 20 20  by the SQL .    
b7a0: 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 72 20 28 65    ** compiler (e
b7b0: 67 2e 20 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73  g. count_changes
b7c0: 29 2e 20 53 6f 20 61 64 64 20 61 6e 20 6f 70 63  ). So add an opc
b7d0: 6f 64 65 20 74 6f 20 65 78 70 69 72 65 20 61 6c  ode to expire al
b7e0: 6c 0a 20 20 20 20 20 20 2a 2a 20 63 6f 6d 70 69  l.      ** compi
b7f0: 6c 65 64 20 53 51 4c 20 73 74 61 74 65 6d 65 6e  led SQL statemen
b800: 74 73 20 61 66 74 65 72 20 6d 6f 64 69 66 79 69  ts after modifyi
b810: 6e 67 20 61 20 70 72 61 67 6d 61 20 76 61 6c 75  ng a pragma valu
b820: 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  e..      */.    
b830: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
b840: 4f 70 32 28 76 2c 20 4f 50 5f 45 78 70 69 72 65  Op2(v, OP_Expire
b850: 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  , 0, 0);.      s
b860: 65 74 41 6c 6c 50 61 67 65 72 46 6c 61 67 73 28  etAllPagerFlags(
b870: 64 62 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 62  db);.    }.    b
b880: 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
b890: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
b8a0: 46 4c 41 47 5f 50 52 41 47 4d 41 53 20 2a 2f 0a  FLAG_PRAGMAS */.
b8b0: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
b8c0: 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47  OMIT_SCHEMA_PRAG
b8d0: 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20  MAS.  /*.  **   
b8e0: 50 52 41 47 4d 41 20 74 61 62 6c 65 5f 69 6e 66  PRAGMA table_inf
b8f0: 6f 28 3c 74 61 62 6c 65 3e 29 0a 20 20 2a 2a 0a  o(<table>).  **.
b900: 20 20 2a 2a 20 52 65 74 75 72 6e 20 61 20 73 69    ** Return a si
b910: 6e 67 6c 65 20 72 6f 77 20 66 6f 72 20 65 61 63  ngle row for eac
b920: 68 20 63 6f 6c 75 6d 6e 20 6f 66 20 74 68 65 20  h column of the 
b930: 6e 61 6d 65 64 20 74 61 62 6c 65 2e 20 54 68 65  named table. The
b940: 20 63 6f 6c 75 6d 6e 73 20 6f 66 0a 20 20 2a 2a   columns of.  **
b950: 20 74 68 65 20 72 65 74 75 72 6e 65 64 20 64 61   the returned da
b960: 74 61 20 73 65 74 20 61 72 65 3a 0a 20 20 2a 2a  ta set are:.  **
b970: 0a 20 20 2a 2a 20 63 69 64 3a 20 20 20 20 20 20  .  ** cid:      
b980: 20 20 43 6f 6c 75 6d 6e 20 69 64 20 28 6e 75 6d    Column id (num
b990: 62 65 72 65 64 20 66 72 6f 6d 20 6c 65 66 74 20  bered from left 
b9a0: 74 6f 20 72 69 67 68 74 2c 20 73 74 61 72 74 69  to right, starti
b9b0: 6e 67 20 61 74 20 30 29 0a 20 20 2a 2a 20 6e 61  ng at 0).  ** na
b9c0: 6d 65 3a 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e  me:       Column
b9d0: 20 6e 61 6d 65 0a 20 20 2a 2a 20 74 79 70 65 3a   name.  ** type:
b9e0: 20 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 64 65         Column de
b9f0: 63 6c 61 72 61 74 69 6f 6e 20 74 79 70 65 2e 0a  claration type..
ba00: 20 20 2a 2a 20 6e 6f 74 6e 75 6c 6c 3a 20 20 20    ** notnull:   
ba10: 20 54 72 75 65 20 69 66 20 27 4e 4f 54 20 4e 55   True if 'NOT NU
ba20: 4c 4c 27 20 69 73 20 70 61 72 74 20 6f 66 20 63  LL' is part of c
ba30: 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74 69 6f  olumn declaratio
ba40: 6e 0a 20 20 2a 2a 20 64 66 6c 74 5f 76 61 6c 75  n.  ** dflt_valu
ba50: 65 3a 20 54 68 65 20 64 65 66 61 75 6c 74 20 76  e: The default v
ba60: 61 6c 75 65 20 66 6f 72 20 74 68 65 20 63 6f 6c  alue for the col
ba70: 75 6d 6e 2c 20 69 66 20 61 6e 79 2e 0a 20 20 2a  umn, if any..  *
ba80: 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
ba90: 5f 54 41 42 4c 45 5f 49 4e 46 4f 3a 20 69 66 28  _TABLE_INFO: if(
baa0: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 54   zRight ){.    T
bab0: 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20  able *pTab;.    
bac0: 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33 46 69  pTab = sqlite3Fi
bad0: 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 52 69 67  ndTable(db, zRig
bae0: 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69 66  ht, zDb);.    if
baf0: 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20 20 20  ( pTab ){.      
bb00: 69 6e 74 20 69 2c 20 6b 3b 0a 20 20 20 20 20 20  int i, k;.      
bb10: 69 6e 74 20 6e 48 69 64 64 65 6e 20 3d 20 30 3b  int nHidden = 0;
bb20: 0a 20 20 20 20 20 20 43 6f 6c 75 6d 6e 20 2a 70  .      Column *p
bb30: 43 6f 6c 3b 0a 20 20 20 20 20 20 49 6e 64 65 78  Col;.      Index
bb40: 20 2a 70 50 6b 20 3d 20 73 71 6c 69 74 65 33 50   *pPk = sqlite3P
bb50: 72 69 6d 61 72 79 4b 65 79 49 6e 64 65 78 28 70  rimaryKeyIndex(p
bb60: 54 61 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  Tab);.      sqli
bb70: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
bb80: 73 28 76 2c 20 36 29 3b 0a 20 20 20 20 20 20 70  s(v, 6);.      p
bb90: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b  Parse->nMem = 6;
bba0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f  .      sqlite3Co
bbb0: 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70  deVerifySchema(p
bbc0: 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20  Parse, iDb);.   
bbd0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
bbe0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
bbf0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 69  OLNAME_NAME, "ci
bc00: 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  d", SQLITE_STATI
bc10: 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
bc20: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
bc30: 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 1, COLNAME_NA
bc40: 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49  ME, "name", SQLI
bc50: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
bc60: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
bc70: 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f  ColName(v, 2, CO
bc80: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 79 70  LNAME_NAME, "typ
bc90: 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  e", SQLITE_STATI
bca0: 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
bcb0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
bcc0: 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 3, COLNAME_NA
bcd0: 4d 45 2c 20 22 6e 6f 74 6e 75 6c 6c 22 2c 20 53  ME, "notnull", S
bce0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
bcf0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
bd00: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 34 2c  SetColName(v, 4,
bd10: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
bd20: 64 66 6c 74 5f 76 61 6c 75 65 22 2c 20 53 51 4c  dflt_value", SQL
bd30: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
bd40: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
bd50: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 35 2c 20 43  tColName(v, 5, C
bd60: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 70 6b  OLNAME_NAME, "pk
bd70: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
bd80: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
bd90: 56 69 65 77 47 65 74 43 6f 6c 75 6d 6e 4e 61 6d  ViewGetColumnNam
bda0: 65 73 28 70 50 61 72 73 65 2c 20 70 54 61 62 29  es(pParse, pTab)
bdb0: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 2c  ;.      for(i=0,
bdc0: 20 70 43 6f 6c 3d 70 54 61 62 2d 3e 61 43 6f 6c   pCol=pTab->aCol
bdd0: 3b 20 69 3c 70 54 61 62 2d 3e 6e 43 6f 6c 3b 20  ; i<pTab->nCol; 
bde0: 69 2b 2b 2c 20 70 43 6f 6c 2b 2b 29 7b 0a 20 20  i++, pCol++){.  
bdf0: 20 20 20 20 20 20 69 66 28 20 49 73 48 69 64 64        if( IsHidd
be00: 65 6e 43 6f 6c 75 6d 6e 28 70 43 6f 6c 29 20 29  enColumn(pCol) )
be10: 7b 0a 20 20 20 20 20 20 20 20 20 20 6e 48 69 64  {.          nHid
be20: 64 65 6e 2b 2b 3b 0a 20 20 20 20 20 20 20 20 20  den++;.         
be30: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
be40: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c     }.        sql
be50: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
be60: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2d  , OP_Integer, i-
be70: 6e 48 69 64 64 65 6e 2c 20 31 29 3b 0a 20 20 20  nHidden, 1);.   
be80: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
be90: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
bea0: 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c 20 70  ing8, 0, 2, 0, p
beb0: 43 6f 6c 2d 3e 7a 4e 61 6d 65 2c 20 30 29 3b 0a  Col->zName, 0);.
bec0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
bed0: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
bee0: 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30  String8, 0, 3, 0
bef0: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 70 43 6f  ,.           pCo
bf00: 6c 2d 3e 7a 54 79 70 65 20 3f 20 70 43 6f 6c 2d  l->zType ? pCol-
bf10: 3e 7a 54 79 70 65 20 3a 20 22 22 2c 20 30 29 3b  >zType : "", 0);
bf20: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
bf30: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
bf40: 5f 49 6e 74 65 67 65 72 2c 20 28 70 43 6f 6c 2d  _Integer, (pCol-
bf50: 3e 6e 6f 74 4e 75 6c 6c 20 3f 20 31 20 3a 20 30  >notNull ? 1 : 0
bf60: 29 2c 20 34 29 3b 0a 20 20 20 20 20 20 20 20 69  ), 4);.        i
bf70: 66 28 20 70 43 6f 6c 2d 3e 7a 44 66 6c 74 20 29  f( pCol->zDflt )
bf80: 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  {.          sqli
bf90: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
bfa0: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
bfb0: 35 2c 20 30 2c 20 28 63 68 61 72 2a 29 70 43 6f  5, 0, (char*)pCo
bfc0: 6c 2d 3e 7a 44 66 6c 74 2c 20 30 29 3b 0a 20 20  l->zDflt, 0);.  
bfd0: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
bfe0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
bff0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4e  beAddOp2(v, OP_N
c000: 75 6c 6c 2c 20 30 2c 20 35 29 3b 0a 20 20 20 20  ull, 0, 5);.    
c010: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69 66      }.        if
c020: 28 20 28 70 43 6f 6c 2d 3e 63 6f 6c 46 6c 61 67  ( (pCol->colFlag
c030: 73 20 26 20 43 4f 4c 46 4c 41 47 5f 50 52 49 4d  s & COLFLAG_PRIM
c040: 4b 45 59 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  KEY)==0 ){.     
c050: 20 20 20 20 20 6b 20 3d 20 30 3b 0a 20 20 20 20       k = 0;.    
c060: 20 20 20 20 7d 65 6c 73 65 20 69 66 28 20 70 50      }else if( pP
c070: 6b 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  k==0 ){.        
c080: 20 20 6b 20 3d 20 31 3b 0a 20 20 20 20 20 20 20    k = 1;.       
c090: 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20   }else{.        
c0a0: 20 20 66 6f 72 28 6b 3d 31 3b 20 41 4c 57 41 59    for(k=1; ALWAY
c0b0: 53 28 6b 3c 3d 70 54 61 62 2d 3e 6e 43 6f 6c 29  S(k<=pTab->nCol)
c0c0: 20 26 26 20 70 50 6b 2d 3e 61 69 43 6f 6c 75 6d   && pPk->aiColum
c0d0: 6e 5b 6b 2d 31 5d 21 3d 69 3b 20 6b 2b 2b 29 7b  n[k-1]!=i; k++){
c0e0: 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  }.        }.    
c0f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c100: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
c110: 67 65 72 2c 20 6b 2c 20 36 29 3b 0a 20 20 20 20  ger, k, 6);.    
c120: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
c130: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
c140: 6c 74 52 6f 77 2c 20 31 2c 20 36 29 3b 0a 20 20  ltRow, 1, 6);.  
c150: 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a      }.    }.  }.
c160: 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65    break;..  case
c170: 20 50 72 61 67 54 79 70 5f 53 54 41 54 53 3a 20   PragTyp_STATS: 
c180: 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64  {.    Index *pId
c190: 78 3b 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20  x;.    HashElem 
c1a0: 2a 69 3b 0a 20 20 20 20 76 20 3d 20 73 71 6c 69  *i;.    v = sqli
c1b0: 74 65 33 47 65 74 56 64 62 65 28 70 50 61 72 73  te3GetVdbe(pPars
c1c0: 65 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  e);.    sqlite3V
c1d0: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
c1e0: 20 34 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d   4);.    pParse-
c1f0: 3e 6e 4d 65 6d 20 3d 20 34 3b 0a 20 20 20 20 73  >nMem = 4;.    s
c200: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
c210: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
c220: 44 62 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  Db);.    sqlite3
c230: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
c240: 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
c250: 45 2c 20 22 74 61 62 6c 65 22 2c 20 53 51 4c 49  E, "table", SQLI
c260: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
c270: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
c280: 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e  lName(v, 1, COLN
c290: 41 4d 45 5f 4e 41 4d 45 2c 20 22 69 6e 64 65 78  AME_NAME, "index
c2a0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
c2b0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
c2c0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
c2d0: 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  2, COLNAME_NAME,
c2e0: 20 22 77 69 64 74 68 22 2c 20 53 51 4c 49 54 45   "width", SQLITE
c2f0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71  _STATIC);.    sq
c300: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
c310: 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d  ame(v, 3, COLNAM
c320: 45 5f 4e 41 4d 45 2c 20 22 68 65 69 67 68 74 22  E_NAME, "height"
c330: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
c340: 3b 0a 20 20 20 20 66 6f 72 28 69 3d 73 71 6c 69  ;.    for(i=sqli
c350: 74 65 48 61 73 68 46 69 72 73 74 28 26 70 44 62  teHashFirst(&pDb
c360: 2d 3e 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61  ->pSchema->tblHa
c370: 73 68 29 3b 20 69 3b 20 69 3d 73 71 6c 69 74 65  sh); i; i=sqlite
c380: 48 61 73 68 4e 65 78 74 28 69 29 29 7b 0a 20 20  HashNext(i)){.  
c390: 20 20 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20      Table *pTab 
c3a0: 3d 20 73 71 6c 69 74 65 48 61 73 68 44 61 74 61  = sqliteHashData
c3b0: 28 69 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  (i);.      sqlit
c3c0: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
c3d0: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31  OP_String8, 0, 1
c3e0: 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65  , 0, pTab->zName
c3f0: 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  , 0);.      sqli
c400: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
c410: 20 4f 50 5f 4e 75 6c 6c 2c 20 30 2c 20 32 29 3b   OP_Null, 0, 2);
c420: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
c430: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
c440: 6e 74 65 67 65 72 2c 0a 20 20 20 20 20 20 20 20  nteger,.        
c450: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
c460: 20 20 20 28 69 6e 74 29 73 71 6c 69 74 65 33 4c     (int)sqlite3L
c470: 6f 67 45 73 74 54 6f 49 6e 74 28 70 54 61 62 2d  ogEstToInt(pTab-
c480: 3e 73 7a 54 61 62 52 6f 77 29 2c 20 33 29 3b 0a  >szTabRow), 3);.
c490: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c4a0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
c4b0: 74 65 67 65 72 2c 20 28 69 6e 74 29 70 54 61 62  teger, (int)pTab
c4c0: 2d 3e 6e 52 6f 77 45 73 74 2c 20 34 29 3b 0a 20  ->nRowEst, 4);. 
c4d0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c4e0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
c4f0: 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29 3b 0a 20  ultRow, 1, 4);. 
c500: 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d 70 54       for(pIdx=pT
c510: 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78  ab->pIndex; pIdx
c520: 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65  ; pIdx=pIdx->pNe
c530: 78 74 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  xt){.        sql
c540: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
c550: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
c560: 20 32 2c 20 30 2c 20 70 49 64 78 2d 3e 7a 4e 61   2, 0, pIdx->zNa
c570: 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  me, 0);.        
c580: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
c590: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
c5a0: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
c5b0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69                (i
c5c0: 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  nt)sqlite3LogEst
c5d0: 54 6f 49 6e 74 28 70 49 64 78 2d 3e 73 7a 49 64  ToInt(pIdx->szId
c5e0: 78 52 6f 77 29 2c 20 33 29 3b 0a 20 20 20 20 20  xRow), 3);.     
c5f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c600: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
c610: 65 72 2c 20 28 69 6e 74 29 70 49 64 78 2d 3e 61  er, (int)pIdx->a
c620: 69 52 6f 77 45 73 74 5b 30 5d 2c 20 34 29 3b 0a  iRowEst[0], 4);.
c630: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
c640: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
c650: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29  ResultRow, 1, 4)
c660: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
c670: 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20    }.  break;..  
c680: 63 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e 44  case PragTyp_IND
c690: 45 58 5f 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69  EX_INFO: if( zRi
c6a0: 67 68 74 20 29 7b 0a 20 20 20 20 49 6e 64 65 78  ght ){.    Index
c6b0: 20 2a 70 49 64 78 3b 0a 20 20 20 20 54 61 62 6c   *pIdx;.    Tabl
c6c0: 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 70 49 64  e *pTab;.    pId
c6d0: 78 20 3d 20 73 71 6c 69 74 65 33 46 69 6e 64 49  x = sqlite3FindI
c6e0: 6e 64 65 78 28 64 62 2c 20 7a 52 69 67 68 74 2c  ndex(db, zRight,
c6f0: 20 7a 44 62 29 3b 0a 20 20 20 20 69 66 28 20 70   zDb);.    if( p
c700: 49 64 78 20 29 7b 0a 20 20 20 20 20 20 69 6e 74  Idx ){.      int
c710: 20 69 3b 0a 20 20 20 20 20 20 70 54 61 62 20 3d   i;.      pTab =
c720: 20 70 49 64 78 2d 3e 70 54 61 62 6c 65 3b 0a 20   pIdx->pTable;. 
c730: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c740: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 33 29  SetNumCols(v, 3)
c750: 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e  ;.      pParse->
c760: 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 20 20  nMem = 3;.      
c770: 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66  sqlite3CodeVerif
c780: 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20  ySchema(pParse, 
c790: 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
c7a0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
c7b0: 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 0, COLNAME_
c7c0: 4e 41 4d 45 2c 20 22 73 65 71 6e 6f 22 2c 20 53  NAME, "seqno", S
c7d0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
c7e0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
c7f0: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c  SetColName(v, 1,
c800: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
c810: 63 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  cid", SQLITE_STA
c820: 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
c830: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
c840: 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 2, COLNAME_
c850: 4e 41 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51  NAME, "name", SQ
c860: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
c870: 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 70      for(i=0; i<p
c880: 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 3b 20 69 2b  Idx->nKeyCol; i+
c890: 2b 29 7b 0a 20 20 20 20 20 20 20 20 69 31 36 20  +){.        i16 
c8a0: 63 6e 75 6d 20 3d 20 70 49 64 78 2d 3e 61 69 43  cnum = pIdx->aiC
c8b0: 6f 6c 75 6d 6e 5b 69 5d 3b 0a 20 20 20 20 20 20  olumn[i];.      
c8c0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c8d0: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
c8e0: 72 2c 20 69 2c 20 31 29 3b 0a 20 20 20 20 20 20  r, i, 1);.      
c8f0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c900: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
c910: 72 2c 20 63 6e 75 6d 2c 20 32 29 3b 0a 20 20 20  r, cnum, 2);.   
c920: 20 20 20 20 20 61 73 73 65 72 74 28 20 70 54 61       assert( pTa
c930: 62 2d 3e 6e 43 6f 6c 3e 63 6e 75 6d 20 29 3b 0a  b->nCol>cnum );.
c940: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
c950: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
c960: 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30  String8, 0, 3, 0
c970: 2c 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 63 6e 75  , pTab->aCol[cnu
c980: 6d 5d 2e 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20  m].zName, 0);.  
c990: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c9a0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
c9b0: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a  sultRow, 1, 3);.
c9c0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
c9d0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61  }.  break;..  ca
c9e0: 73 65 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58  se PragTyp_INDEX
c9f0: 5f 4c 49 53 54 3a 20 69 66 28 20 7a 52 69 67 68  _LIST: if( zRigh
ca00: 74 20 29 7b 0a 20 20 20 20 49 6e 64 65 78 20 2a  t ){.    Index *
ca10: 70 49 64 78 3b 0a 20 20 20 20 54 61 62 6c 65 20  pIdx;.    Table 
ca20: 2a 70 54 61 62 3b 0a 20 20 20 20 69 6e 74 20 69  *pTab;.    int i
ca30: 3b 0a 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c  ;.    pTab = sql
ca40: 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62  ite3FindTable(db
ca50: 2c 20 7a 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a  , zRight, zDb);.
ca60: 20 20 20 20 69 66 28 20 70 54 61 62 20 29 7b 0a      if( pTab ){.
ca70: 20 20 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65        v = sqlite
ca80: 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29  3GetVdbe(pParse)
ca90: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
caa0: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
cab0: 20 33 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73   3);.      pPars
cac0: 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20  e->nMem = 3;.   
cad0: 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65     sqlite3CodeVe
cae0: 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73  rifySchema(pPars
caf0: 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73  e, iDb);.      s
cb00: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
cb10: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
cb20: 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20  ME_NAME, "seq", 
cb30: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
cb40: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
cb50: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31  eSetColName(v, 1
cb60: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
cb70: 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53  "name", SQLITE_S
cb80: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71  TATIC);.      sq
cb90: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
cba0: 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d  ame(v, 2, COLNAM
cbb0: 45 5f 4e 41 4d 45 2c 20 22 75 6e 69 71 75 65 22  E_NAME, "unique"
cbc0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
cbd0: 3b 0a 20 20 20 20 20 20 66 6f 72 28 70 49 64 78  ;.      for(pIdx
cbe0: 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 2c 20 69  =pTab->pIndex, i
cbf0: 3d 30 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70  =0; pIdx; pIdx=p
cc00: 49 64 78 2d 3e 70 4e 65 78 74 2c 20 69 2b 2b 29  Idx->pNext, i++)
cc10: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
cc20: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
cc30: 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 31 29  P_Integer, i, 1)
cc40: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
cc50: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
cc60: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c  P_String8, 0, 2,
cc70: 20 30 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c   0, pIdx->zName,
cc80: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c   0);.        sql
cc90: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
cca0: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 49  , OP_Integer, pI
ccb0: 64 78 2d 3e 6f 6e 45 72 72 6f 72 21 3d 4f 45 5f  dx->onError!=OE_
ccc0: 4e 6f 6e 65 2c 20 33 29 3b 0a 20 20 20 20 20 20  None, 3);.      
ccd0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
cce0: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
ccf0: 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 20 20  Row, 1, 3);.    
cd00: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
cd10: 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50  break;..  case P
cd20: 72 61 67 54 79 70 5f 44 41 54 41 42 41 53 45 5f  ragTyp_DATABASE_
cd30: 4c 49 53 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20  LIST: {.    int 
cd40: 69 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  i;.    sqlite3Vd
cd50: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
cd60: 33 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e  3);.    pParse->
cd70: 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 73 71  nMem = 3;.    sq
cd80: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
cd90: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
cda0: 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20 53  E_NAME, "seq", S
cdb0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
cdc0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
cdd0: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43  tColName(v, 1, C
cde0: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61  OLNAME_NAME, "na
cdf0: 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  me", SQLITE_STAT
ce00: 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33  IC);.    sqlite3
ce10: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
ce20: 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 2, COLNAME_NAM
ce30: 45 2c 20 22 66 69 6c 65 22 2c 20 53 51 4c 49 54  E, "file", SQLIT
ce40: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 66  E_STATIC);.    f
ce50: 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44  or(i=0; i<db->nD
ce60: 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 69  b; i++){.      i
ce70: 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70 42  f( db->aDb[i].pB
ce80: 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b  t==0 ) continue;
ce90: 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20 64  .      assert( d
cea0: 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 21  b->aDb[i].zName!
ceb0: 3d 30 20 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  =0 );.      sqli
cec0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
ced0: 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20   OP_Integer, i, 
cee0: 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  1);.      sqlite
cef0: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
cf00: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c  P_String8, 0, 2,
cf10: 20 30 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a   0, db->aDb[i].z
cf20: 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  Name, 0);.      
cf30: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
cf40: 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c  4(v, OP_String8,
cf50: 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20   0, 3, 0,.      
cf60: 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
cf70: 65 47 65 74 46 69 6c 65 6e 61 6d 65 28 64 62 2d  eGetFilename(db-
cf80: 3e 61 44 62 5b 69 5d 2e 70 42 74 29 2c 20 30 29  >aDb[i].pBt), 0)
cf90: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
cfa0: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
cfb0: 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29  ResultRow, 1, 3)
cfc0: 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  ;.    }.  }.  br
cfd0: 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72 61  eak;..  case Pra
cfe0: 67 54 79 70 5f 43 4f 4c 4c 41 54 49 4f 4e 5f 4c  gTyp_COLLATION_L
cff0: 49 53 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69  IST: {.    int i
d000: 20 3d 20 30 3b 0a 20 20 20 20 48 61 73 68 45 6c   = 0;.    HashEl
d010: 65 6d 20 2a 70 3b 0a 20 20 20 20 73 71 6c 69 74  em *p;.    sqlit
d020: 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73  e3VdbeSetNumCols
d030: 28 76 2c 20 32 29 3b 0a 20 20 20 20 70 50 61 72  (v, 2);.    pPar
d040: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 20 20  se->nMem = 2;.  
d050: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
d060: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
d070: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71  LNAME_NAME, "seq
d080: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
d090: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
d0a0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
d0b0: 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  1, COLNAME_NAME,
d0c0: 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f   "name", SQLITE_
d0d0: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72  STATIC);.    for
d0e0: 28 70 3d 73 71 6c 69 74 65 48 61 73 68 46 69 72  (p=sqliteHashFir
d0f0: 73 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65 71  st(&db->aCollSeq
d100: 29 3b 20 70 3b 20 70 3d 73 71 6c 69 74 65 48 61  ); p; p=sqliteHa
d110: 73 68 4e 65 78 74 28 70 29 29 7b 0a 20 20 20 20  shNext(p)){.    
d120: 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c 6c    CollSeq *pColl
d130: 20 3d 20 28 43 6f 6c 6c 53 65 71 20 2a 29 73 71   = (CollSeq *)sq
d140: 6c 69 74 65 48 61 73 68 44 61 74 61 28 70 29 3b  liteHashData(p);
d150: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
d160: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
d170: 6e 74 65 67 65 72 2c 20 69 2b 2b 2c 20 31 29 3b  nteger, i++, 1);
d180: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
d190: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
d1a0: 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30 2c  tring8, 0, 2, 0,
d1b0: 20 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 2c 20 30   pColl->zName, 0
d1c0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
d1d0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
d1e0: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 32  _ResultRow, 1, 2
d1f0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
d200: 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20  reak;.#endif /* 
d210: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
d220: 4d 41 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23  MA_PRAGMAS */..#
d230: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
d240: 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a 20  IT_FOREIGN_KEY. 
d250: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 46 4f   case PragTyp_FO
d260: 52 45 49 47 4e 5f 4b 45 59 5f 4c 49 53 54 3a 20  REIGN_KEY_LIST: 
d270: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
d280: 20 20 46 4b 65 79 20 2a 70 46 4b 3b 0a 20 20 20    FKey *pFK;.   
d290: 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20   Table *pTab;.  
d2a0: 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65 33    pTab = sqlite3
d2b0: 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a 52  FindTable(db, zR
d2c0: 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20  ight, zDb);.    
d2d0: 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20 20  if( pTab ){.    
d2e0: 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65 74    v = sqlite3Get
d2f0: 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20 20  Vdbe(pParse);.  
d300: 20 20 20 20 70 46 4b 20 3d 20 70 54 61 62 2d 3e      pFK = pTab->
d310: 70 46 4b 65 79 3b 0a 20 20 20 20 20 20 69 66 28  pFKey;.      if(
d320: 20 70 46 4b 20 29 7b 0a 20 20 20 20 20 20 20 20   pFK ){.        
d330: 69 6e 74 20 69 20 3d 20 30 3b 20 0a 20 20 20 20  int i = 0; .    
d340: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
d350: 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 38 29 3b  etNumCols(v, 8);
d360: 0a 20 20 20 20 20 20 20 20 70 50 61 72 73 65 2d  .        pParse-
d370: 3e 6e 4d 65 6d 20 3d 20 38 3b 0a 20 20 20 20 20  >nMem = 8;.     
d380: 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65     sqlite3CodeVe
d390: 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72 73  rifySchema(pPars
d3a0: 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 20  e, iDb);.       
d3b0: 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
d3c0: 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
d3d0: 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 69 64 22 2c  NAME_NAME, "id",
d3e0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
d3f0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
d400: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
d410: 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 1, COLNAME_NAM
d420: 45 2c 20 22 73 65 71 22 2c 20 53 51 4c 49 54 45  E, "seq", SQLITE
d430: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
d440: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
d450: 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f  ColName(v, 2, CO
d460: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 61 62  LNAME_NAME, "tab
d470: 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  le", SQLITE_STAT
d480: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  IC);.        sql
d490: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
d4a0: 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45  me(v, 3, COLNAME
d4b0: 5f 4e 41 4d 45 2c 20 22 66 72 6f 6d 22 2c 20 53  _NAME, "from", S
d4c0: 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
d4d0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
d4e0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
d4f0: 34 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  4, COLNAME_NAME,
d500: 20 22 74 6f 22 2c 20 53 51 4c 49 54 45 5f 53 54   "to", SQLITE_ST
d510: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73  ATIC);.        s
d520: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
d530: 4e 61 6d 65 28 76 2c 20 35 2c 20 43 4f 4c 4e 41  Name(v, 5, COLNA
d540: 4d 45 5f 4e 41 4d 45 2c 20 22 6f 6e 5f 75 70 64  ME_NAME, "on_upd
d550: 61 74 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ate", SQLITE_STA
d560: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71  TIC);.        sq
d570: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
d580: 61 6d 65 28 76 2c 20 36 2c 20 43 4f 4c 4e 41 4d  ame(v, 6, COLNAM
d590: 45 5f 4e 41 4d 45 2c 20 22 6f 6e 5f 64 65 6c 65  E_NAME, "on_dele
d5a0: 74 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  te", SQLITE_STAT
d5b0: 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  IC);.        sql
d5c0: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
d5d0: 6d 65 28 76 2c 20 37 2c 20 43 4f 4c 4e 41 4d 45  me(v, 7, COLNAME
d5e0: 5f 4e 41 4d 45 2c 20 22 6d 61 74 63 68 22 2c 20  _NAME, "match", 
d5f0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
d600: 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 70 46          while(pF
d610: 4b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69 6e  K){.          in
d620: 74 20 6a 3b 0a 20 20 20 20 20 20 20 20 20 20 66  t j;.          f
d630: 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e  or(j=0; j<pFK->n
d640: 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20  Col; j++){.     
d650: 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 43 6f         char *zCo
d660: 6c 20 3d 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d  l = pFK->aCol[j]
d670: 2e 7a 43 6f 6c 3b 0a 20 20 20 20 20 20 20 20 20  .zCol;.         
d680: 20 20 20 63 68 61 72 20 2a 7a 4f 6e 44 65 6c 65     char *zOnDele
d690: 74 65 20 3d 20 28 63 68 61 72 20 2a 29 61 63 74  te = (char *)act
d6a0: 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41 63  ionName(pFK->aAc
d6b0: 74 69 6f 6e 5b 30 5d 29 3b 0a 20 20 20 20 20 20  tion[0]);.      
d6c0: 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4f 6e 55        char *zOnU
d6d0: 70 64 61 74 65 20 3d 20 28 63 68 61 72 20 2a 29  pdate = (char *)
d6e0: 61 63 74 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e  actionName(pFK->
d6f0: 61 41 63 74 69 6f 6e 5b 31 5d 29 3b 0a 20 20 20  aAction[1]);.   
d700: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d710: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
d720: 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 31 29 3b  _Integer, i, 1);
d730: 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
d740: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
d750: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6a 2c  , OP_Integer, j,
d760: 20 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   2);.           
d770: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d780: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
d790: 2c 20 30 2c 20 33 2c 20 30 2c 20 70 46 4b 2d 3e  , 0, 3, 0, pFK->
d7a0: 7a 54 6f 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  zTo, 0);.       
d7b0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
d7c0: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
d7d0: 69 6e 67 38 2c 20 30 2c 20 34 2c 20 30 2c 0a 20  ing8, 0, 4, 0,. 
d7e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
d7f0: 20 20 20 20 20 20 20 20 20 20 20 20 20 70 54 61               pTa
d800: 62 2d 3e 61 43 6f 6c 5b 70 46 4b 2d 3e 61 43 6f  b->aCol[pFK->aCo
d810: 6c 5b 6a 5d 2e 69 46 72 6f 6d 5d 2e 7a 4e 61 6d  l[j].iFrom].zNam
d820: 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20  e, 0);.         
d830: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d840: 64 4f 70 34 28 76 2c 20 7a 43 6f 6c 20 3f 20 4f  dOp4(v, zCol ? O
d850: 50 5f 53 74 72 69 6e 67 38 20 3a 20 4f 50 5f 4e  P_String8 : OP_N
d860: 75 6c 6c 2c 20 30 2c 20 35 2c 20 30 2c 20 7a 43  ull, 0, 5, 0, zC
d870: 6f 6c 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  ol, 0);.        
d880: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
d890: 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69  ddOp4(v, OP_Stri
d8a0: 6e 67 38 2c 20 30 2c 20 36 2c 20 30 2c 20 7a 4f  ng8, 0, 6, 0, zO
d8b0: 6e 55 70 64 61 74 65 2c 20 30 29 3b 0a 20 20 20  nUpdate, 0);.   
d8c0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
d8d0: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
d8e0: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 37 2c 20  _String8, 0, 7, 
d8f0: 30 2c 20 7a 4f 6e 44 65 6c 65 74 65 2c 20 30 29  0, zOnDelete, 0)
d900: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
d910: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
d920: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
d930: 2c 20 38 2c 20 30 2c 20 22 4e 4f 4e 45 22 2c 20  , 8, 0, "NONE", 
d940: 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  0);.            
d950: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d960: 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
d970: 77 2c 20 31 2c 20 38 29 3b 0a 20 20 20 20 20 20  w, 1, 8);.      
d980: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20      }.          
d990: 2b 2b 69 3b 0a 20 20 20 20 20 20 20 20 20 20 70  ++i;.          p
d9a0: 46 4b 20 3d 20 70 46 4b 2d 3e 70 4e 65 78 74 46  FK = pFK->pNextF
d9b0: 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  rom;.        }. 
d9c0: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d       }.    }.  }
d9d0: 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66  .  break;.#endif
d9e0: 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c   /* !defined(SQL
d9f0: 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e  ITE_OMIT_FOREIGN
da00: 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69 66 6e 64 65  _KEY) */..#ifnde
da10: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  f SQLITE_OMIT_FO
da20: 52 45 49 47 4e 5f 4b 45 59 0a 23 69 66 6e 64 65  REIGN_KEY.#ifnde
da30: 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52  f SQLITE_OMIT_TR
da40: 49 47 47 45 52 0a 20 20 63 61 73 65 20 50 72 61  IGGER.  case Pra
da50: 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  gTyp_FOREIGN_KEY
da60: 5f 43 48 45 43 4b 3a 20 7b 0a 20 20 20 20 46 4b  _CHECK: {.    FK
da70: 65 79 20 2a 70 46 4b 3b 20 20 20 20 20 20 20 20  ey *pFK;        
da80: 20 20 20 20 20 2f 2a 20 41 20 66 6f 72 65 69 67       /* A foreig
da90: 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e 74  n key constraint
daa0: 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a 70   */.    Table *p
dab0: 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20 2f  Tab;           /
dac0: 2a 20 43 68 69 6c 64 20 74 61 62 6c 65 20 63 6f  * Child table co
dad0: 6e 74 61 69 6e 20 22 52 45 46 45 52 45 4e 43 45  ntain "REFERENCE
dae0: 53 22 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 20 20  S" keyword */.  
daf0: 20 20 54 61 62 6c 65 20 2a 70 50 61 72 65 6e 74    Table *pParent
db00: 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72 65  ;        /* Pare
db10: 6e 74 20 74 61 62 6c 65 20 74 68 61 74 20 63 68  nt table that ch
db20: 69 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 2a 2f  ild points to */
db30: 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78  .    Index *pIdx
db40: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 49  ;           /* I
db50: 6e 64 65 78 20 69 6e 20 74 68 65 20 70 61 72 65  ndex in the pare
db60: 6e 74 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20 20  nt table */.    
db70: 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20 20  int i;          
db80: 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63         /* Loop c
db90: 6f 75 6e 74 65 72 3a 20 20 46 6f 72 65 69 67 6e  ounter:  Foreign
dba0: 20 6b 65 79 20 6e 75 6d 62 65 72 20 66 6f 72 20   key number for 
dbb0: 70 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20  pTab */.    int 
dbc0: 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  j;              
dbd0: 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e 74     /* Loop count
dbe0: 65 72 3a 20 20 46 69 65 6c 64 20 6f 66 20 74 68  er:  Field of th
dbf0: 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 2a 2f  e foreign key */
dc00: 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 6b  .    HashElem *k
dc10: 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c  ;           /* L
dc20: 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 4e 65  oop counter:  Ne
dc30: 78 74 20 74 61 62 6c 65 20 69 6e 20 73 63 68 65  xt table in sche
dc40: 6d 61 20 2a 2f 0a 20 20 20 20 69 6e 74 20 78 3b  ma */.    int x;
dc50: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
dc60: 20 2f 2a 20 72 65 73 75 6c 74 20 76 61 72 69 61   /* result varia
dc70: 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72  ble */.    int r
dc80: 65 67 52 65 73 75 6c 74 3b 20 20 20 20 20 20 20  egResult;       
dc90: 20 20 2f 2a 20 33 20 72 65 67 69 73 74 65 72 73    /* 3 registers
dca0: 20 74 6f 20 68 6f 6c 64 20 61 20 72 65 73 75 6c   to hold a resul
dcb0: 74 20 72 6f 77 20 2a 2f 0a 20 20 20 20 69 6e 74  t row */.    int
dcc0: 20 72 65 67 4b 65 79 3b 20 20 20 20 20 20 20 20   regKey;        
dcd0: 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72 20      /* Register 
dce0: 74 6f 20 68 6f 6c 64 20 6b 65 79 20 66 6f 72 20  to hold key for 
dcf0: 63 68 65 63 6b 69 6e 67 20 74 68 65 20 46 4b 20  checking the FK 
dd00: 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52 6f  */.    int regRo
dd10: 77 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a  w;            /*
dd20: 20 52 65 67 69 73 74 65 72 73 20 74 6f 20 68 6f   Registers to ho
dd30: 6c 64 20 61 20 72 6f 77 20 66 72 6f 6d 20 70 54  ld a row from pT
dd40: 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61 64  ab */.    int ad
dd50: 64 72 54 6f 70 3b 20 20 20 20 20 20 20 20 20 20  drTop;          
dd60: 20 2f 2a 20 54 6f 70 20 6f 66 20 61 20 6c 6f 6f   /* Top of a loo
dd70: 70 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 65 69  p checking forei
dd80: 67 6e 20 6b 65 79 73 20 2a 2f 0a 20 20 20 20 69  gn keys */.    i
dd90: 6e 74 20 61 64 64 72 4f 6b 3b 20 20 20 20 20 20  nt addrOk;      
dda0: 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68 65        /* Jump he
ddb0: 72 65 20 69 66 20 74 68 65 20 6b 65 79 20 69 73  re if the key is
ddc0: 20 4f 4b 20 2a 2f 0a 20 20 20 20 69 6e 74 20 2a   OK */.    int *
ddd0: 61 69 43 6f 6c 73 3b 20 20 20 20 20 20 20 20 20  aiCols;         
dde0: 20 20 2f 2a 20 63 68 69 6c 64 20 74 6f 20 70 61    /* child to pa
ddf0: 72 65 6e 74 20 63 6f 6c 75 6d 6e 20 6d 61 70 70  rent column mapp
de00: 69 6e 67 20 2a 2f 0a 0a 20 20 20 20 72 65 67 52  ing */..    regR
de10: 65 73 75 6c 74 20 3d 20 70 50 61 72 73 65 2d 3e  esult = pParse->
de20: 6e 4d 65 6d 2b 31 3b 0a 20 20 20 20 70 50 61 72  nMem+1;.    pPar
de30: 73 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 34 3b 0a 20  se->nMem += 4;. 
de40: 20 20 20 72 65 67 4b 65 79 20 3d 20 2b 2b 70 50     regKey = ++pP
de50: 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20  arse->nMem;.    
de60: 72 65 67 52 6f 77 20 3d 20 2b 2b 70 50 61 72 73  regRow = ++pPars
de70: 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 76 20 3d  e->nMem;.    v =
de80: 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28   sqlite3GetVdbe(
de90: 70 50 61 72 73 65 29 3b 0a 20 20 20 20 73 71 6c  pParse);.    sql
dea0: 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f  ite3VdbeSetNumCo
deb0: 6c 73 28 76 2c 20 34 29 3b 0a 20 20 20 20 73 71  ls(v, 4);.    sq
dec0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
ded0: 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d  ame(v, 0, COLNAM
dee0: 45 5f 4e 41 4d 45 2c 20 22 74 61 62 6c 65 22 2c  E_NAME, "table",
def0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
df00: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
df10: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c  SetColName(v, 1,
df20: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
df30: 72 6f 77 69 64 22 2c 20 53 51 4c 49 54 45 5f 53  rowid", SQLITE_S
df40: 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69  TATIC);.    sqli
df50: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
df60: 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 2, COLNAME_
df70: 4e 41 4d 45 2c 20 22 70 61 72 65 6e 74 22 2c 20  NAME, "parent", 
df80: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
df90: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
dfa0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20  etColName(v, 3, 
dfb0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 66  COLNAME_NAME, "f
dfc0: 6b 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  kid", SQLITE_STA
dfd0: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
dfe0: 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65 6d  3CodeVerifySchem
dff0: 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b 0a  a(pParse, iDb);.
e000: 20 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48 61      k = sqliteHa
e010: 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61 44 62  shFirst(&db->aDb
e020: 5b 69 44 62 5d 2e 70 53 63 68 65 6d 61 2d 3e 74  [iDb].pSchema->t
e030: 62 6c 48 61 73 68 29 3b 0a 20 20 20 20 77 68 69  blHash);.    whi
e040: 6c 65 28 20 6b 20 29 7b 0a 20 20 20 20 20 20 69  le( k ){.      i
e050: 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
e060: 20 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69       pTab = sqli
e070: 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28 70  te3LocateTable(p
e080: 50 61 72 73 65 2c 20 30 2c 20 7a 52 69 67 68 74  Parse, 0, zRight
e090: 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20 20  , zDb);.        
e0a0: 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65 6c  k = 0;.      }el
e0b0: 73 65 7b 0a 20 20 20 20 20 20 20 20 70 54 61 62  se{.        pTab
e0c0: 20 3d 20 28 54 61 62 6c 65 2a 29 73 71 6c 69 74   = (Table*)sqlit
e0d0: 65 48 61 73 68 44 61 74 61 28 6b 29 3b 0a 20 20  eHashData(k);.  
e0e0: 20 20 20 20 20 20 6b 20 3d 20 73 71 6c 69 74 65        k = sqlite
e0f0: 48 61 73 68 4e 65 78 74 28 6b 29 3b 0a 20 20 20  HashNext(k);.   
e100: 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20 70     }.      if( p
e110: 54 61 62 3d 3d 30 20 7c 7c 20 70 54 61 62 2d 3e  Tab==0 || pTab->
e120: 70 46 4b 65 79 3d 3d 30 20 29 20 63 6f 6e 74 69  pFKey==0 ) conti
e130: 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  nue;.      sqlit
e140: 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61 72  e3TableLock(pPar
e150: 73 65 2c 20 69 44 62 2c 20 70 54 61 62 2d 3e 74  se, iDb, pTab->t
e160: 6e 75 6d 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e  num, 0, pTab->zN
e170: 61 6d 65 29 3b 0a 20 20 20 20 20 20 69 66 28 20  ame);.      if( 
e180: 70 54 61 62 2d 3e 6e 43 6f 6c 2b 72 65 67 52 6f  pTab->nCol+regRo
e190: 77 3e 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 29  w>pParse->nMem )
e1a0: 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
e1b0: 70 54 61 62 2d 3e 6e 43 6f 6c 20 2b 20 72 65 67  pTab->nCol + reg
e1c0: 52 6f 77 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  Row;.      sqlit
e1d0: 65 33 4f 70 65 6e 54 61 62 6c 65 28 70 50 61 72  e3OpenTable(pPar
e1e0: 73 65 2c 20 30 2c 20 69 44 62 2c 20 70 54 61 62  se, 0, iDb, pTab
e1f0: 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b 0a  , OP_OpenRead);.
e200: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
e210: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
e220: 72 69 6e 67 38 2c 20 30 2c 20 72 65 67 52 65 73  ring8, 0, regRes
e230: 75 6c 74 2c 20 30 2c 20 70 54 61 62 2d 3e 7a 4e  ult, 0, pTab->zN
e240: 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20 20  ame,.           
e250: 20 20 20 20 20 20 20 20 20 20 20 20 20 50 34 5f               P4_
e260: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20  TRANSIENT);.    
e270: 20 20 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70    for(i=1, pFK=p
e280: 54 61 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b  Tab->pFKey; pFK;
e290: 20 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70   i++, pFK=pFK->p
e2a0: 4e 65 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20  NextFrom){.     
e2b0: 20 20 20 70 50 61 72 65 6e 74 20 3d 20 73 71 6c     pParent = sql
e2c0: 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62  ite3FindTable(db
e2d0: 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29  , pFK->zTo, zDb)
e2e0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 50  ;.        if( pP
e2f0: 61 72 65 6e 74 3d 3d 30 20 29 20 63 6f 6e 74 69  arent==0 ) conti
e300: 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 70 49 64  nue;.        pId
e310: 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 73  x = 0;.        s
e320: 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28  qlite3TableLock(
e330: 70 50 61 72 73 65 2c 20 69 44 62 2c 20 70 50 61  pParse, iDb, pPa
e340: 72 65 6e 74 2d 3e 74 6e 75 6d 2c 20 30 2c 20 70  rent->tnum, 0, p
e350: 50 61 72 65 6e 74 2d 3e 7a 4e 61 6d 65 29 3b 0a  Parent->zName);.
e360: 20 20 20 20 20 20 20 20 78 20 3d 20 73 71 6c 69          x = sqli
e370: 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
e380: 28 70 50 61 72 73 65 2c 20 70 50 61 72 65 6e 74  (pParse, pParent
e390: 2c 20 70 46 4b 2c 20 26 70 49 64 78 2c 20 30 29  , pFK, &pIdx, 0)
e3a0: 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 78 3d  ;.        if( x=
e3b0: 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  =0 ){.          
e3c0: 69 66 28 20 70 49 64 78 3d 3d 30 20 29 7b 0a 20  if( pIdx==0 ){. 
e3d0: 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
e3e0: 65 33 4f 70 65 6e 54 61 62 6c 65 28 70 50 61 72  e3OpenTable(pPar
e3f0: 73 65 2c 20 69 2c 20 69 44 62 2c 20 70 50 61 72  se, i, iDb, pPar
e400: 65 6e 74 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64  ent, OP_OpenRead
e410: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c  );.          }el
e420: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  se{.            
e430: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e440: 33 28 76 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64  3(v, OP_OpenRead
e450: 2c 20 69 2c 20 70 49 64 78 2d 3e 74 6e 75 6d 2c  , i, pIdx->tnum,
e460: 20 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20 20   iDb);.         
e470: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
e480: 74 50 34 4b 65 79 49 6e 66 6f 28 70 50 61 72 73  tP4KeyInfo(pPars
e490: 65 2c 20 70 49 64 78 29 3b 0a 20 20 20 20 20 20  e, pIdx);.      
e4a0: 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d 65      }.        }e
e4b0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 6b  lse{.          k
e4c0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20 20   = 0;.          
e4d0: 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 7d  break;.        }
e4e0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 61  .      }.      a
e4f0: 73 73 65 72 74 28 20 70 50 61 72 73 65 2d 3e 6e  ssert( pParse->n
e500: 45 72 72 3e 30 20 7c 7c 20 70 46 4b 3d 3d 30 20  Err>0 || pFK==0 
e510: 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 46 4b  );.      if( pFK
e520: 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20   ) break;.      
e530: 69 66 28 20 70 50 61 72 73 65 2d 3e 6e 54 61 62  if( pParse->nTab
e540: 3c 69 20 29 20 70 50 61 72 73 65 2d 3e 6e 54 61  <i ) pParse->nTa
e550: 62 20 3d 20 69 3b 0a 20 20 20 20 20 20 61 64 64  b = i;.      add
e560: 72 54 6f 70 20 3d 20 73 71 6c 69 74 65 33 56 64  rTop = sqlite3Vd
e570: 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 52  beAddOp1(v, OP_R
e580: 65 77 69 6e 64 2c 20 30 29 3b 0a 20 20 20 20 20  ewind, 0);.     
e590: 20 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d 70 54   for(i=1, pFK=pT
e5a0: 61 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b 3b 20  ab->pFKey; pFK; 
e5b0: 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e 70 4e  i++, pFK=pFK->pN
e5c0: 65 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20 20 20  extFrom){.      
e5d0: 20 20 70 50 61 72 65 6e 74 20 3d 20 73 71 6c 69    pParent = sqli
e5e0: 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c  te3FindTable(db,
e5f0: 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62 29 3b   pFK->zTo, zDb);
e600: 0a 20 20 20 20 20 20 20 20 70 49 64 78 20 3d 20  .        pIdx = 
e610: 30 3b 0a 20 20 20 20 20 20 20 20 61 69 43 6f 6c  0;.        aiCol
e620: 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69  s = 0;.        i
e630: 66 28 20 70 50 61 72 65 6e 74 20 29 7b 0a 20 20  f( pParent ){.  
e640: 20 20 20 20 20 20 20 20 78 20 3d 20 73 71 6c 69          x = sqli
e650: 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65 78  te3FkLocateIndex
e660: 28 70 50 61 72 73 65 2c 20 70 50 61 72 65 6e 74  (pParse, pParent
e670: 2c 20 70 46 4b 2c 20 26 70 49 64 78 2c 20 26 61  , pFK, &pIdx, &a
e680: 69 43 6f 6c 73 29 3b 0a 20 20 20 20 20 20 20 20  iCols);.        
e690: 20 20 61 73 73 65 72 74 28 20 78 3d 3d 30 20 29    assert( x==0 )
e6a0: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
e6b0: 20 20 20 20 61 64 64 72 4f 6b 20 3d 20 73 71 6c      addrOk = sql
e6c0: 69 74 65 33 56 64 62 65 4d 61 6b 65 4c 61 62 65  ite3VdbeMakeLabe
e6d0: 6c 28 76 29 3b 0a 20 20 20 20 20 20 20 20 69 66  l(v);.        if
e6e0: 28 20 70 50 61 72 65 6e 74 20 26 26 20 70 49 64  ( pParent && pId
e6f0: 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20  x==0 ){.        
e700: 20 20 69 6e 74 20 69 4b 65 79 20 3d 20 70 46 4b    int iKey = pFK
e710: 2d 3e 61 43 6f 6c 5b 30 5d 2e 69 46 72 6f 6d 3b  ->aCol[0].iFrom;
e720: 0a 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72  .          asser
e730: 74 28 20 69 4b 65 79 3e 3d 30 20 26 26 20 69 4b  t( iKey>=0 && iK
e740: 65 79 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20 29 3b  ey<pTab->nCol );
e750: 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20 69  .          if( i
e760: 4b 65 79 21 3d 70 54 61 62 2d 3e 69 50 4b 65 79  Key!=pTab->iPKey
e770: 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
e780: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
e790: 33 28 76 2c 20 4f 50 5f 43 6f 6c 75 6d 6e 2c 20  3(v, OP_Column, 
e7a0: 30 2c 20 69 4b 65 79 2c 20 72 65 67 52 6f 77 29  0, iKey, regRow)
e7b0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
e7c0: 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66 61 75  lite3ColumnDefau
e7d0: 6c 74 28 76 2c 20 70 54 61 62 2c 20 69 4b 65 79  lt(v, pTab, iKey
e7e0: 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20  , regRow);.     
e7f0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
e800: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
e810: 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2c 20 61  sNull, regRow, a
e820: 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20  ddrOk);.        
e830: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
e840: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4d 75 73 74  ddOp2(v, OP_Must
e850: 42 65 49 6e 74 2c 20 72 65 67 52 6f 77 2c 0a 20  BeInt, regRow,. 
e860: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73 71                sq
e870: 6c 69 74 65 33 56 64 62 65 43 75 72 72 65 6e 74  lite3VdbeCurrent
e880: 41 64 64 72 28 76 29 2b 33 29 3b 0a 20 20 20 20  Addr(v)+3);.    
e890: 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20        }else{.   
e8a0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
e8b0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
e8c0: 5f 52 6f 77 69 64 2c 20 30 2c 20 72 65 67 52 6f  _Rowid, 0, regRo
e8d0: 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a  w);.          }.
e8e0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
e8f0: 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f  3VdbeAddOp3(v, O
e900: 50 5f 4e 6f 74 45 78 69 73 74 73 2c 20 69 2c 20  P_NotExists, i, 
e910: 30 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20 20  0, regRow);.    
e920: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
e930: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 47 6f  eAddOp2(v, OP_Go
e940: 74 6f 2c 20 30 2c 20 61 64 64 72 4f 6b 29 3b 0a  to, 0, addrOk);.
e950: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
e960: 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c  3VdbeJumpHere(v,
e970: 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72 72   sqlite3VdbeCurr
e980: 65 6e 74 41 64 64 72 28 76 29 2d 32 29 3b 0a 20  entAddr(v)-2);. 
e990: 20 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20         }else{.  
e9a0: 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 3b          for(j=0;
e9b0: 20 6a 3c 70 46 4b 2d 3e 6e 43 6f 6c 3b 20 6a 2b   j<pFK->nCol; j+
e9c0: 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20  +){.            
e9d0: 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64 65 47  sqlite3ExprCodeG
e9e0: 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c 65 28  etColumnOfTable(
e9f0: 76 2c 20 70 54 61 62 2c 20 30 2c 0a 20 20 20 20  v, pTab, 0,.    
ea00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ea10: 20 20 20 20 20 20 20 20 61 69 43 6f 6c 73 20 3f          aiCols ?
ea20: 20 61 69 43 6f 6c 73 5b 6a 5d 20 3a 20 70 46 4b   aiCols[j] : pFK
ea30: 2d 3e 61 43 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 2c  ->aCol[j].iFrom,
ea40: 20 72 65 67 52 6f 77 2b 6a 29 3b 0a 20 20 20 20   regRow+j);.    
ea50: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
ea60: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
ea70: 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2b 6a  IsNull, regRow+j
ea80: 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20  , addrOk);.     
ea90: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
eaa0: 20 69 66 28 20 70 50 61 72 65 6e 74 20 29 7b 0a   if( pParent ){.
eab0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
eac0: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
ead0: 20 4f 50 5f 4d 61 6b 65 52 65 63 6f 72 64 2c 20   OP_MakeRecord, 
eae0: 72 65 67 52 6f 77 2c 20 70 46 4b 2d 3e 6e 43 6f  regRow, pFK->nCo
eaf0: 6c 2c 20 72 65 67 4b 65 79 2c 0a 20 20 20 20 20  l, regKey,.     
eb00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
eb10: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
eb20: 49 6e 64 65 78 41 66 66 69 6e 69 74 79 53 74 72  IndexAffinityStr
eb30: 28 76 2c 70 49 64 78 29 2c 20 70 46 4b 2d 3e 6e  (v,pIdx), pFK->n
eb40: 43 6f 6c 29 3b 0a 20 20 20 20 20 20 20 20 20 20  Col);.          
eb50: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
eb60: 4f 70 34 49 6e 74 28 76 2c 20 4f 50 5f 46 6f 75  Op4Int(v, OP_Fou
eb70: 6e 64 2c 20 69 2c 20 61 64 64 72 4f 6b 2c 20 72  nd, i, addrOk, r
eb80: 65 67 4b 65 79 2c 20 30 29 3b 0a 20 20 20 20 20  egKey, 0);.     
eb90: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
eba0: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
ebb0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
ebc0: 5f 52 6f 77 69 64 2c 20 30 2c 20 72 65 67 52 65  _Rowid, 0, regRe
ebd0: 73 75 6c 74 2b 31 29 3b 0a 20 20 20 20 20 20 20  sult+1);.       
ebe0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ebf0: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
ec00: 2c 20 30 2c 20 72 65 67 52 65 73 75 6c 74 2b 32  , 0, regResult+2
ec10: 2c 20 30 2c 20 0a 20 20 20 20 20 20 20 20 20 20  , 0, .          
ec20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ec30: 70 46 4b 2d 3e 7a 54 6f 2c 20 50 34 5f 54 52 41  pFK->zTo, P4_TRA
ec40: 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 20  NSIENT);.       
ec50: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ec60: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
ec70: 2c 20 69 2d 31 2c 20 72 65 67 52 65 73 75 6c 74  , i-1, regResult
ec80: 2b 33 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  +3);.        sql
ec90: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
eca0: 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
ecb0: 72 65 67 52 65 73 75 6c 74 2c 20 34 29 3b 0a 20  regResult, 4);. 
ecc0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
ecd0: 62 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76  beResolveLabel(v
ece0: 2c 20 61 64 64 72 4f 6b 29 3b 0a 20 20 20 20 20  , addrOk);.     
ecf0: 20 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65     sqlite3DbFree
ed00: 28 64 62 2c 20 61 69 43 6f 6c 73 29 3b 0a 20 20  (db, aiCols);.  
ed10: 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c 69      }.      sqli
ed20: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
ed30: 20 4f 50 5f 4e 65 78 74 2c 20 30 2c 20 61 64 64   OP_Next, 0, add
ed40: 72 54 6f 70 2b 31 29 3b 0a 20 20 20 20 20 20 73  rTop+1);.      s
ed50: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
ed60: 72 65 28 76 2c 20 61 64 64 72 54 6f 70 29 3b 0a  re(v, addrTop);.
ed70: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
ed80: 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65  k;.#endif /* !de
ed90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
eda0: 54 5f 54 52 49 47 47 45 52 29 20 2a 2f 0a 23 65  T_TRIGGER) */.#e
edb0: 6e 64 69 66 20 2f 2a 20 21 64 65 66 69 6e 65 64  ndif /* !defined
edc0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52  (SQLITE_OMIT_FOR
edd0: 45 49 47 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69  EIGN_KEY) */..#i
ede0: 66 6e 64 65 66 20 4e 44 45 42 55 47 0a 20 20 63  fndef NDEBUG.  c
edf0: 61 73 65 20 50 72 61 67 54 79 70 5f 50 41 52 53  ase PragTyp_PARS
ee00: 45 52 5f 54 52 41 43 45 3a 20 7b 0a 20 20 20 20  ER_TRACE: {.    
ee10: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
ee20: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 47      if( sqlite3G
ee30: 65 74 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74  etBoolean(zRight
ee40: 2c 20 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20  , 0) ){.        
ee50: 73 71 6c 69 74 65 33 50 61 72 73 65 72 54 72 61  sqlite3ParserTra
ee60: 63 65 28 73 74 64 65 72 72 2c 20 22 70 61 72 73  ce(stderr, "pars
ee70: 65 72 3a 20 22 29 3b 0a 20 20 20 20 20 20 7d 65  er: ");.      }e
ee80: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  lse{.        sql
ee90: 69 74 65 33 50 61 72 73 65 72 54 72 61 63 65 28  ite3ParserTrace(
eea0: 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 7d 0a 20  0, 0);.      }. 
eeb0: 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b     }.  }.  break
eec0: 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 20 52  ;.#endif..  /* R
eed0: 65 69 6e 73 74 61 6c 6c 20 74 68 65 20 4c 49 4b  einstall the LIK
eee0: 45 20 61 6e 64 20 47 4c 4f 42 20 66 75 6e 63 74  E and GLOB funct
eef0: 69 6f 6e 73 2e 20 20 54 68 65 20 76 61 72 69 61  ions.  The varia
ef00: 6e 74 20 6f 66 20 4c 49 4b 45 0a 20 20 2a 2a 20  nt of LIKE.  ** 
ef10: 75 73 65 64 20 77 69 6c 6c 20 62 65 20 63 61 73  used will be cas
ef20: 65 20 73 65 6e 73 69 74 69 76 65 20 6f 72 20 6e  e sensitive or n
ef30: 6f 74 20 64 65 70 65 6e 64 69 6e 67 20 6f 6e 20  ot depending on 
ef40: 74 68 65 20 52 48 53 2e 0a 20 20 2a 2f 0a 20 20  the RHS..  */.  
ef50: 63 61 73 65 20 50 72 61 67 54 79 70 5f 43 41 53  case PragTyp_CAS
ef60: 45 5f 53 45 4e 53 49 54 49 56 45 5f 4c 49 4b 45  E_SENSITIVE_LIKE
ef70: 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  : {.    if( zRig
ef80: 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  ht ){.      sqli
ef90: 74 65 33 52 65 67 69 73 74 65 72 4c 69 6b 65 46  te3RegisterLikeF
efa0: 75 6e 63 74 69 6f 6e 73 28 64 62 2c 20 73 71 6c  unctions(db, sql
efb0: 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a  ite3GetBoolean(z
efc0: 52 69 67 68 74 2c 20 30 29 29 3b 0a 20 20 20 20  Right, 0));.    
efd0: 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a  }.  }.  break;..
efe0: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 49  #ifndef SQLITE_I
eff0: 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45  NTEGRITY_CHECK_E
f000: 52 52 4f 52 5f 4d 41 58 0a 23 20 64 65 66 69 6e  RROR_MAX.# defin
f010: 65 20 53 51 4c 49 54 45 5f 49 4e 54 45 47 52 49  e SQLITE_INTEGRI
f020: 54 59 5f 43 48 45 43 4b 5f 45 52 52 4f 52 5f 4d  TY_CHECK_ERROR_M
f030: 41 58 20 31 30 30 0a 23 65 6e 64 69 66 0a 0a 23  AX 100.#endif..#
f040: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
f050: 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
f060: 43 4b 0a 20 20 2f 2a 20 50 72 61 67 6d 61 20 22  CK.  /* Pragma "
f070: 71 75 69 63 6b 5f 63 68 65 63 6b 22 20 69 73 20  quick_check" is 
f080: 72 65 64 75 63 65 64 20 76 65 72 73 69 6f 6e 20  reduced version 
f090: 6f 66 20 0a 20 20 2a 2a 20 69 6e 74 65 67 72 69  of .  ** integri
f0a0: 74 79 5f 63 68 65 63 6b 20 64 65 73 69 67 6e 65  ty_check designe
f0b0: 64 20 74 6f 20 64 65 74 65 63 74 20 6d 6f 73 74  d to detect most
f0c0: 20 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70   database corrup
f0d0: 74 69 6f 6e 0a 20 20 2a 2a 20 77 69 74 68 6f 75  tion.  ** withou
f0e0: 74 20 6d 6f 73 74 20 6f 66 20 74 68 65 20 6f 76  t most of the ov
f0f0: 65 72 68 65 61 64 20 6f 66 20 61 20 66 75 6c 6c  erhead of a full
f100: 20 69 6e 74 65 67 72 69 74 79 2d 63 68 65 63 6b   integrity-check
f110: 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
f120: 61 67 54 79 70 5f 49 4e 54 45 47 52 49 54 59 5f  agTyp_INTEGRITY_
f130: 43 48 45 43 4b 3a 20 7b 0a 20 20 20 20 69 6e 74  CHECK: {.    int
f140: 20 69 2c 20 6a 2c 20 61 64 64 72 2c 20 6d 78 45   i, j, addr, mxE
f150: 72 72 3b 0a 0a 20 20 20 20 2f 2a 20 43 6f 64 65  rr;..    /* Code
f160: 20 74 68 61 74 20 61 70 70 65 61 72 73 20 61 74   that appears at
f170: 20 74 68 65 20 65 6e 64 20 6f 66 20 74 68 65 20   the end of the 
f180: 69 6e 74 65 67 72 69 74 79 20 63 68 65 63 6b 2e  integrity check.
f190: 20 20 49 66 20 6e 6f 20 65 72 72 6f 72 0a 20 20    If no error.  
f1a0: 20 20 2a 2a 20 6d 65 73 73 61 67 65 73 20 68 61    ** messages ha
f1b0: 76 65 20 62 65 65 6e 20 67 65 6e 65 72 61 74 65  ve been generate
f1c0: 64 2c 20 6f 75 74 70 75 74 20 4f 4b 2e 20 20 4f  d, output OK.  O
f1d0: 74 68 65 72 77 69 73 65 20 6f 75 74 70 75 74 20  therwise output 
f1e0: 74 68 65 0a 20 20 20 20 2a 2a 20 65 72 72 6f 72  the.    ** error
f1f0: 20 6d 65 73 73 61 67 65 0a 20 20 20 20 2a 2f 0a   message.    */.
f200: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
f210: 20 56 64 62 65 4f 70 4c 69 73 74 20 65 6e 64 43   VdbeOpList endC
f220: 6f 64 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  ode[] = {.      
f230: 7b 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 20 20 20  { OP_AddImm,    
f240: 20 20 31 2c 20 30 2c 20 20 20 20 20 20 20 20 30    1, 0,        0
f250: 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20  },    /* 0 */.  
f260: 20 20 20 20 7b 20 4f 50 5f 49 66 4e 65 67 2c 20      { OP_IfNeg, 
f270: 20 20 20 20 20 20 31 2c 20 30 2c 20 20 20 20 20        1, 0,     
f280: 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a     0},    /* 1 *
f290: 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 53 74 72  /.      { OP_Str
f2a0: 69 6e 67 38 2c 20 20 20 20 20 30 2c 20 33 2c 20  ing8,     0, 3, 
f2b0: 20 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a         0},    /*
f2c0: 20 32 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50   2 */.      { OP
f2d0: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20 20 33 2c  _ResultRow,   3,
f2e0: 20 31 2c 20 20 20 20 20 20 20 20 30 7d 2c 0a 20   1,        0},. 
f2f0: 20 20 20 7d 3b 0a 0a 20 20 20 20 69 6e 74 20 69     };..    int i
f300: 73 51 75 69 63 6b 20 3d 20 28 73 71 6c 69 74 65  sQuick = (sqlite
f310: 33 54 6f 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30  3Tolower(zLeft[0
f320: 5d 29 3d 3d 27 71 27 29 3b 0a 0a 20 20 20 20 2f  ])=='q');..    /
f330: 2a 20 49 66 20 74 68 65 20 50 52 41 47 4d 41 20  * If the PRAGMA 
f340: 63 6f 6d 6d 61 6e 64 20 77 61 73 20 6f 66 20 74  command was of t
f350: 68 65 20 66 6f 72 6d 20 22 50 52 41 47 4d 41 20  he form "PRAGMA 
f360: 3c 64 62 3e 2e 69 6e 74 65 67 72 69 74 79 5f 63  <db>.integrity_c
f370: 68 65 63 6b 22 2c 0a 20 20 20 20 2a 2a 20 74 68  heck",.    ** th
f380: 65 6e 20 69 44 62 20 69 73 20 73 65 74 20 74 6f  en iDb is set to
f390: 20 74 68 65 20 69 6e 64 65 78 20 6f 66 20 74 68   the index of th
f3a0: 65 20 64 61 74 61 62 61 73 65 20 69 64 65 6e 74  e database ident
f3b0: 69 66 69 65 64 20 62 79 20 3c 64 62 3e 2e 0a 20  ified by <db>.. 
f3c0: 20 20 20 2a 2a 20 49 6e 20 74 68 69 73 20 63 61     ** In this ca
f3d0: 73 65 2c 20 74 68 65 20 69 6e 74 65 67 72 69 74  se, the integrit
f3e0: 79 20 6f 66 20 64 61 74 61 62 61 73 65 20 69 44  y of database iD
f3f0: 62 20 6f 6e 6c 79 20 69 73 20 76 65 72 69 66 69  b only is verifi
f400: 65 64 20 62 79 0a 20 20 20 20 2a 2a 20 74 68 65  ed by.    ** the
f410: 20 56 44 42 45 20 63 72 65 61 74 65 64 20 62 65   VDBE created be
f420: 6c 6f 77 2e 0a 20 20 20 20 2a 2a 0a 20 20 20 20  low..    **.    
f430: 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c 20 69 66  ** Otherwise, if
f440: 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20 77 61 73   the command was
f450: 20 73 69 6d 70 6c 79 20 22 50 52 41 47 4d 41 20   simply "PRAGMA 
f460: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22  integrity_check"
f470: 20 28 6f 72 0a 20 20 20 20 2a 2a 20 22 50 52 41   (or.    ** "PRA
f480: 47 4d 41 20 71 75 69 63 6b 5f 63 68 65 63 6b 22  GMA quick_check"
f490: 29 2c 20 74 68 65 6e 20 69 44 62 20 69 73 20 73  ), then iDb is s
f4a0: 65 74 20 74 6f 20 30 2e 20 49 6e 20 74 68 69 73  et to 0. In this
f4b0: 20 63 61 73 65 2c 20 73 65 74 20 69 44 62 0a 20   case, set iDb. 
f4c0: 20 20 20 2a 2a 20 74 6f 20 2d 31 20 68 65 72 65     ** to -1 here
f4d0: 2c 20 74 6f 20 69 6e 64 69 63 61 74 65 20 74 68  , to indicate th
f4e0: 61 74 20 74 68 65 20 56 44 42 45 20 73 68 6f 75  at the VDBE shou
f4f0: 6c 64 20 76 65 72 69 66 79 20 74 68 65 20 69 6e  ld verify the in
f500: 74 65 67 72 69 74 79 0a 20 20 20 20 2a 2a 20 6f  tegrity.    ** o
f510: 66 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20 64  f all attached d
f520: 61 74 61 62 61 73 65 73 2e 20 20 2a 2f 0a 20 20  atabases.  */.  
f530: 20 20 61 73 73 65 72 74 28 20 69 44 62 3e 3d 30    assert( iDb>=0
f540: 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20   );.    assert( 
f550: 69 44 62 3d 3d 30 20 7c 7c 20 70 49 64 32 2d 3e  iDb==0 || pId2->
f560: 7a 20 29 3b 0a 20 20 20 20 69 66 28 20 70 49 64  z );.    if( pId
f570: 32 2d 3e 7a 3d 3d 30 20 29 20 69 44 62 20 3d 20  2->z==0 ) iDb = 
f580: 2d 31 3b 0a 0a 20 20 20 20 2f 2a 20 49 6e 69 74  -1;..    /* Init
f590: 69 61 6c 69 7a 65 20 74 68 65 20 56 44 42 45 20  ialize the VDBE 
f5a0: 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20 20 20 70  program */.    p
f5b0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 36 3b  Parse->nMem = 6;
f5c0: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
f5d0: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29  SetNumCols(v, 1)
f5e0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
f5f0: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
f600: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
f610: 22 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b  "integrity_check
f620: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
f630: 29 3b 0a 0a 20 20 20 20 2f 2a 20 53 65 74 20 74  );..    /* Set t
f640: 68 65 20 6d 61 78 69 6d 75 6d 20 65 72 72 6f 72  he maximum error
f650: 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 6d 78   count */.    mx
f660: 45 72 72 20 3d 20 53 51 4c 49 54 45 5f 49 4e 54  Err = SQLITE_INT
f670: 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52 52  EGRITY_CHECK_ERR
f680: 4f 52 5f 4d 41 58 3b 0a 20 20 20 20 69 66 28 20  OR_MAX;.    if( 
f690: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
f6a0: 73 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28  sqlite3GetInt32(
f6b0: 7a 52 69 67 68 74 2c 20 26 6d 78 45 72 72 29 3b  zRight, &mxErr);
f6c0: 0a 20 20 20 20 20 20 69 66 28 20 6d 78 45 72 72  .      if( mxErr
f6d0: 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 6d  <=0 ){.        m
f6e0: 78 45 72 72 20 3d 20 53 51 4c 49 54 45 5f 49 4e  xErr = SQLITE_IN
f6f0: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52  TEGRITY_CHECK_ER
f700: 52 4f 52 5f 4d 41 58 3b 0a 20 20 20 20 20 20 7d  ROR_MAX;.      }
f710: 0a 20 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74  .    }.    sqlit
f720: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
f730: 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6d 78 45 72  OP_Integer, mxEr
f740: 72 2c 20 31 29 3b 20 20 2f 2a 20 72 65 67 5b 31  r, 1);  /* reg[1
f750: 5d 20 68 6f 6c 64 73 20 65 72 72 6f 72 73 20 6c  ] holds errors l
f760: 65 66 74 20 2a 2f 0a 0a 20 20 20 20 2f 2a 20 44  eft */..    /* D
f770: 6f 20 61 6e 20 69 6e 74 65 67 72 69 74 79 20 63  o an integrity c
f780: 68 65 63 6b 20 6f 6e 20 65 61 63 68 20 64 61 74  heck on each dat
f790: 61 62 61 73 65 20 66 69 6c 65 20 2a 2f 0a 20 20  abase file */.  
f7a0: 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d    for(i=0; i<db-
f7b0: 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20  >nDb; i++){.    
f7c0: 20 20 48 61 73 68 45 6c 65 6d 20 2a 78 3b 0a 20    HashElem *x;. 
f7d0: 20 20 20 20 20 48 61 73 68 20 2a 70 54 62 6c 73       Hash *pTbls
f7e0: 3b 0a 20 20 20 20 20 20 69 6e 74 20 63 6e 74 20  ;.      int cnt 
f7f0: 3d 20 30 3b 0a 0a 20 20 20 20 20 20 69 66 28 20  = 0;..      if( 
f800: 4f 4d 49 54 5f 54 45 4d 50 44 42 20 26 26 20 69  OMIT_TEMPDB && i
f810: 3d 3d 31 20 29 20 63 6f 6e 74 69 6e 75 65 3b 0a  ==1 ) continue;.
f820: 20 20 20 20 20 20 69 66 28 20 69 44 62 3e 3d 30        if( iDb>=0
f830: 20 26 26 20 69 21 3d 69 44 62 20 29 20 63 6f 6e   && i!=iDb ) con
f840: 74 69 6e 75 65 3b 0a 0a 20 20 20 20 20 20 73 71  tinue;..      sq
f850: 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53  lite3CodeVerifyS
f860: 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 29  chema(pParse, i)
f870: 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20 73  ;.      addr = s
f880: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
f890: 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29  (v, OP_IfPos, 1)
f8a0: 3b 20 2f 2a 20 48 61 6c 74 20 69 66 20 6f 75 74  ; /* Halt if out
f8b0: 20 6f 66 20 65 72 72 6f 72 73 20 2a 2f 0a 20 20   of errors */.  
f8c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
f8d0: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74  ddOp2(v, OP_Halt
f8e0: 2c 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  , 0, 0);.      s
f8f0: 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
f900: 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 0a 20 20  re(v, addr);..  
f910: 20 20 20 20 2f 2a 20 44 6f 20 61 6e 20 69 6e 74      /* Do an int
f920: 65 67 72 69 74 79 20 63 68 65 63 6b 20 6f 66 20  egrity check of 
f930: 74 68 65 20 42 2d 54 72 65 65 0a 20 20 20 20 20  the B-Tree.     
f940: 20 2a 2a 0a 20 20 20 20 20 20 2a 2a 20 42 65 67   **.      ** Beg
f950: 69 6e 20 62 79 20 66 69 6c 6c 69 6e 67 20 72 65  in by filling re
f960: 67 69 73 74 65 72 73 20 32 2c 20 33 2c 20 2e 2e  gisters 2, 3, ..
f970: 2e 20 77 69 74 68 20 74 68 65 20 72 6f 6f 74 20  . with the root 
f980: 70 61 67 65 73 20 6e 75 6d 62 65 72 73 0a 20 20  pages numbers.  
f990: 20 20 20 20 2a 2a 20 66 6f 72 20 61 6c 6c 20 74      ** for all t
f9a0: 61 62 6c 65 73 20 61 6e 64 20 69 6e 64 69 63 65  ables and indice
f9b0: 73 20 69 6e 20 74 68 65 20 64 61 74 61 62 61 73  s in the databas
f9c0: 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  e..      */.    
f9d0: 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74 65    assert( sqlite
f9e0: 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64  3SchemaMutexHeld
f9f0: 28 64 62 2c 20 69 2c 20 30 29 20 29 3b 0a 20 20  (db, i, 0) );.  
fa00: 20 20 20 20 70 54 62 6c 73 20 3d 20 26 64 62 2d      pTbls = &db-
fa10: 3e 61 44 62 5b 69 5d 2e 70 53 63 68 65 6d 61 2d  >aDb[i].pSchema-
fa20: 3e 74 62 6c 48 61 73 68 3b 0a 20 20 20 20 20 20  >tblHash;.      
fa30: 66 6f 72 28 78 3d 73 71 6c 69 74 65 48 61 73 68  for(x=sqliteHash
fa40: 46 69 72 73 74 28 70 54 62 6c 73 29 3b 20 78 3b  First(pTbls); x;
fa50: 20 78 3d 73 71 6c 69 74 65 48 61 73 68 4e 65 78   x=sqliteHashNex
fa60: 74 28 78 29 29 7b 0a 20 20 20 20 20 20 20 20 54  t(x)){.        T
fa70: 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71 6c  able *pTab = sql
fa80: 69 74 65 48 61 73 68 44 61 74 61 28 78 29 3b 0a  iteHashData(x);.
fa90: 20 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70          Index *p
faa0: 49 64 78 3b 0a 20 20 20 20 20 20 20 20 69 66 28  Idx;.        if(
fab0: 20 48 61 73 52 6f 77 69 64 28 70 54 61 62 29 20   HasRowid(pTab) 
fac0: 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
fad0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
fae0: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70 54  , OP_Integer, pT
faf0: 61 62 2d 3e 74 6e 75 6d 2c 20 32 2b 63 6e 74 29  ab->tnum, 2+cnt)
fb00: 3b 0a 20 20 20 20 20 20 20 20 20 20 56 64 62 65  ;.          Vdbe
fb10: 43 6f 6d 6d 65 6e 74 28 28 76 2c 20 22 25 73 22  Comment((v, "%s"
fb20: 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 29 29 3b  , pTab->zName));
fb30: 0a 20 20 20 20 20 20 20 20 20 20 63 6e 74 2b 2b  .          cnt++
fb40: 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20  ;.        }.    
fb50: 20 20 20 20 66 6f 72 28 70 49 64 78 3d 70 54 61      for(pIdx=pTa
fb60: 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78 3b  b->pIndex; pIdx;
fb70: 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78   pIdx=pIdx->pNex
fb80: 74 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71  t){.          sq
fb90: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
fba0: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 70  v, OP_Integer, p
fbb0: 49 64 78 2d 3e 74 6e 75 6d 2c 20 32 2b 63 6e 74  Idx->tnum, 2+cnt
fbc0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 56 64 62  );.          Vdb
fbd0: 65 43 6f 6d 6d 65 6e 74 28 28 76 2c 20 22 25 73  eComment((v, "%s
fbe0: 22 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d 65 29 29  ", pIdx->zName))
fbf0: 3b 0a 20 20 20 20 20 20 20 20 20 20 63 6e 74 2b  ;.          cnt+
fc00: 2b 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20  +;.        }.   
fc10: 20 20 20 7d 0a 0a 20 20 20 20 20 20 2f 2a 20 4d     }..      /* M
fc20: 61 6b 65 20 73 75 72 65 20 73 75 66 66 69 63 69  ake sure suffici
fc30: 65 6e 74 20 6e 75 6d 62 65 72 20 6f 66 20 72 65  ent number of re
fc40: 67 69 73 74 65 72 73 20 68 61 76 65 20 62 65 65  gisters have bee
fc50: 6e 20 61 6c 6c 6f 63 61 74 65 64 20 2a 2f 0a 20  n allocated */. 
fc60: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65       pParse->nMe
fc70: 6d 20 3d 20 4d 41 58 28 20 70 50 61 72 73 65 2d  m = MAX( pParse-
fc80: 3e 6e 4d 65 6d 2c 20 63 6e 74 2b 38 20 29 3b 0a  >nMem, cnt+8 );.
fc90: 0a 20 20 20 20 20 20 2f 2a 20 44 6f 20 74 68 65  .      /* Do the
fca0: 20 62 2d 74 72 65 65 20 69 6e 74 65 67 72 69 74   b-tree integrit
fcb0: 79 20 63 68 65 63 6b 73 20 2a 2f 0a 20 20 20 20  y checks */.    
fcc0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
fcd0: 4f 70 33 28 76 2c 20 4f 50 5f 49 6e 74 65 67 72  Op3(v, OP_Integr
fce0: 69 74 79 43 6b 2c 20 32 2c 20 63 6e 74 2c 20 31  ityCk, 2, cnt, 1
fcf0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
fd00: 56 64 62 65 43 68 61 6e 67 65 50 35 28 76 2c 20  VdbeChangeP5(v, 
fd10: 28 75 38 29 69 29 3b 0a 20 20 20 20 20 20 61 64  (u8)i);.      ad
fd20: 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
fd30: 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 73 4e  AddOp1(v, OP_IsN
fd40: 75 6c 6c 2c 20 32 29 3b 0a 20 20 20 20 20 20 73  ull, 2);.      s
fd50: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
fd60: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
fd70: 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20  0, 3, 0,.       
fd80: 20 20 73 71 6c 69 74 65 33 4d 50 72 69 6e 74 66    sqlite3MPrintf
fd90: 28 64 62 2c 20 22 2a 2a 2a 20 69 6e 20 64 61 74  (db, "*** in dat
fda0: 61 62 61 73 65 20 25 73 20 2a 2a 2a 5c 6e 22 2c  abase %s ***\n",
fdb0: 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d   db->aDb[i].zNam
fdc0: 65 29 2c 0a 20 20 20 20 20 20 20 20 20 50 34 5f  e),.         P4_
fdd0: 44 59 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20 20  DYNAMIC);.      
fde0: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
fdf0: 32 28 76 2c 20 4f 50 5f 4d 6f 76 65 2c 20 32 2c  2(v, OP_Move, 2,
fe00: 20 34 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   4);.      sqlit
fe10: 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
fe20: 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c  OP_Concat, 4, 3,
fe30: 20 32 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   2);.      sqlit
fe40: 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
fe50: 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 32 2c  OP_ResultRow, 2,
fe60: 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   1);.      sqlit
fe70: 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76  e3VdbeJumpHere(v
fe80: 2c 20 61 64 64 72 29 3b 0a 0a 20 20 20 20 20 20  , addr);..      
fe90: 2f 2a 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c  /* Make sure all
fea0: 20 74 68 65 20 69 6e 64 69 63 65 73 20 61 72 65   the indices are
feb0: 20 63 6f 6e 73 74 72 75 63 74 65 64 20 63 6f 72   constructed cor
fec0: 72 65 63 74 6c 79 2e 0a 20 20 20 20 20 20 2a 2f  rectly..      */
fed0: 0a 20 20 20 20 20 20 66 6f 72 28 78 3d 73 71 6c  .      for(x=sql
fee0: 69 74 65 48 61 73 68 46 69 72 73 74 28 70 54 62  iteHashFirst(pTb
fef0: 6c 73 29 3b 20 78 20 26 26 20 21 69 73 51 75 69  ls); x && !isQui
ff00: 63 6b 3b 20 78 3d 73 71 6c 69 74 65 48 61 73 68  ck; x=sqliteHash
ff10: 4e 65 78 74 28 78 29 29 7b 0a 20 20 20 20 20 20  Next(x)){.      
ff20: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20    Table *pTab = 
ff30: 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 78  sqliteHashData(x
ff40: 29 3b 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78  );.        Index
ff50: 20 2a 70 49 64 78 2c 20 2a 70 50 6b 3b 0a 20 20   *pIdx, *pPk;.  
ff60: 20 20 20 20 20 20 49 6e 64 65 78 20 2a 70 50 72        Index *pPr
ff70: 69 6f 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  ior = 0;.       
ff80: 20 69 6e 74 20 6c 6f 6f 70 54 6f 70 3b 0a 20 20   int loopTop;.  
ff90: 20 20 20 20 20 20 69 6e 74 20 69 44 61 74 61 43        int iDataC
ffa0: 75 72 2c 20 69 49 64 78 43 75 72 3b 0a 20 20 20  ur, iIdxCur;.   
ffb0: 20 20 20 20 20 69 6e 74 20 72 31 20 3d 20 2d 31       int r1 = -1
ffc0: 3b 0a 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  ;..        if( p
ffd0: 54 61 62 2d 3e 70 49 6e 64 65 78 3d 3d 30 20 29  Tab->pIndex==0 )
ffe0: 20 63 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20   continue;.     
fff0: 20 20 20 70 50 6b 20 3d 20 48 61 73 52 6f 77 69     pPk = HasRowi
10000 64 28 70 54 61 62 29 20 3f 20 30 20 3a 20 73 71  d(pTab) ? 0 : sq
10010 6c 69 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49  lite3PrimaryKeyI
10020 6e 64 65 78 28 70 54 61 62 29 3b 0a 20 20 20 20  ndex(pTab);.    
10030 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74      addr = sqlit
10040 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20  e3VdbeAddOp1(v, 
10050 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20 20 2f  OP_IfPos, 1);  /
10060 2a 20 53 74 6f 70 20 69 66 20 6f 75 74 20 6f 66  * Stop if out of
10070 20 65 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20 20   errors */.     
10080 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
10090 64 4f 70 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c  dOp2(v, OP_Halt,
100a0 20 30 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20   0, 0);.        
100b0 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
100c0 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20 20  ere(v, addr);.  
100d0 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70        sqlite3Exp
100e0 72 43 61 63 68 65 43 6c 65 61 72 28 70 50 61 72  rCacheClear(pPar
100f0 73 65 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  se);.        sql
10100 69 74 65 33 4f 70 65 6e 54 61 62 6c 65 41 6e 64  ite3OpenTableAnd
10110 49 6e 64 69 63 65 73 28 70 50 61 72 73 65 2c 20  Indices(pParse, 
10120 70 54 61 62 2c 20 4f 50 5f 4f 70 65 6e 52 65 61  pTab, OP_OpenRea
10130 64 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  d,.             
10140 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10150 20 20 20 20 20 20 31 2c 20 30 2c 20 26 69 44 61        1, 0, &iDa
10160 74 61 43 75 72 2c 20 26 69 49 64 78 43 75 72 29  taCur, &iIdxCur)
10170 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
10180 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
10190 50 5f 49 6e 74 65 67 65 72 2c 20 30 2c 20 37 29  P_Integer, 0, 7)
101a0 3b 0a 20 20 20 20 20 20 20 20 66 6f 72 28 6a 3d  ;.        for(j=
101b0 30 2c 20 70 49 64 78 3d 70 54 61 62 2d 3e 70 49  0, pIdx=pTab->pI
101c0 6e 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78  ndex; pIdx; pIdx
101d0 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b  =pIdx->pNext, j+
101e0 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71  +){.          sq
101f0 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
10200 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 30  v, OP_Integer, 0
10210 2c 20 38 2b 6a 29 3b 20 2f 2a 20 69 6e 64 65 78  , 8+j); /* index
10220 20 65 6e 74 72 69 65 73 20 63 6f 75 6e 74 65 72   entries counter
10230 20 2a 2f 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   */.        }.  
10240 20 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d        pParse->nM
10250 65 6d 20 3d 20 4d 41 58 28 70 50 61 72 73 65 2d  em = MAX(pParse-
10260 3e 6e 4d 65 6d 2c 20 38 2b 6a 29 3b 0a 20 20 20  >nMem, 8+j);.   
10270 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10280 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 77  AddOp2(v, OP_Rew
10290 69 6e 64 2c 20 69 44 61 74 61 43 75 72 2c 20 30  ind, iDataCur, 0
102a0 29 3b 0a 20 20 20 20 20 20 20 20 6c 6f 6f 70 54  );.        loopT
102b0 6f 70 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  op = sqlite3Vdbe
102c0 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64  AddOp2(v, OP_Add
102d0 49 6d 6d 2c 20 37 2c 20 31 29 3b 0a 20 20 20 20  Imm, 7, 1);.    
102e0 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64      for(j=0, pId
102f0 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20  x=pTab->pIndex; 
10300 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d  pIdx; pIdx=pIdx-
10310 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20  >pNext, j++){.  
10320 20 20 20 20 20 20 20 20 69 6e 74 20 6a 6d 70 32          int jmp2
10330 2c 20 6a 6d 70 33 2c 20 6a 6d 70 34 3b 0a 20 20  , jmp3, jmp4;.  
10340 20 20 20 20 20 20 20 20 69 66 28 20 70 50 6b 3d          if( pPk=
10350 3d 70 49 64 78 20 29 20 63 6f 6e 74 69 6e 75 65  =pIdx ) continue
10360 3b 0a 20 20 20 20 20 20 20 20 20 20 72 31 20 3d  ;.          r1 =
10370 20 73 71 6c 69 74 65 33 47 65 6e 65 72 61 74 65   sqlite3Generate
10380 49 6e 64 65 78 4b 65 79 28 70 50 61 72 73 65 2c  IndexKey(pParse,
10390 20 70 49 64 78 2c 20 69 44 61 74 61 43 75 72 2c   pIdx, iDataCur,
103a0 20 30 2c 20 30 2c 20 26 6a 6d 70 33 2c 0a 20 20   0, 0, &jmp3,.  
103b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103c0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
103d0 20 20 20 20 20 70 50 72 69 6f 72 2c 20 72 31 29       pPrior, r1)
103e0 3b 0a 20 20 20 20 20 20 20 20 20 20 70 50 72 69  ;.          pPri
103f0 6f 72 20 3d 20 70 49 64 78 3b 0a 20 20 20 20 20  or = pIdx;.     
10400 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10410 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41 64 64  AddOp2(v, OP_Add
10420 49 6d 6d 2c 20 38 2b 6a 2c 20 31 29 3b 20 20 2f  Imm, 8+j, 1);  /
10430 2a 20 69 6e 63 72 65 6d 65 6e 74 20 65 6e 74 72  * increment entr
10440 79 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20 20 20  y count */.     
10450 20 20 20 20 20 6a 6d 70 32 20 3d 20 73 71 6c 69       jmp2 = sqli
10460 74 65 33 56 64 62 65 41 64 64 4f 70 34 49 6e 74  te3VdbeAddOp4Int
10470 28 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c 20 69 49  (v, OP_Found, iI
10480 64 78 43 75 72 2b 6a 2c 20 30 2c 20 72 31 2c 0a  dxCur+j, 0, r1,.
10490 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104a0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
104b0 20 20 20 20 20 20 70 49 64 78 2d 3e 6e 43 6f 6c        pIdx->nCol
104c0 75 6d 6e 29 3b 0a 20 20 20 20 20 20 20 20 20 20  umn);.          
104d0 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
104e0 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20  2(v, OP_AddImm, 
104f0 31 2c 20 2d 31 29 3b 20 2f 2a 20 44 65 63 72 65  1, -1); /* Decre
10500 6d 65 6e 74 20 65 72 72 6f 72 20 6c 69 6d 69 74  ment error limit
10510 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 73 71   */.          sq
10520 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
10530 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
10540 2c 20 33 2c 20 30 2c 20 22 72 6f 77 20 22 2c 20  , 3, 0, "row ", 
10550 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  P4_STATIC);.    
10560 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10570 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f  eAddOp3(v, OP_Co
10580 6e 63 61 74 2c 20 37 2c 20 33 2c 20 33 29 3b 0a  ncat, 7, 3, 3);.
10590 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
105a0 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
105b0 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 34 2c  P_String8, 0, 4,
105c0 20 30 2c 20 22 20 6d 69 73 73 69 6e 67 20 66 72   0, " missing fr
105d0 6f 6d 20 69 6e 64 65 78 20 22 2c 0a 20 20 20 20  om index ",.    
105e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
105f0 20 20 20 20 20 20 20 20 50 34 5f 53 54 41 54 49          P4_STATI
10600 43 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  C);.          sq
10610 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33 28  lite3VdbeAddOp3(
10620 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 34 2c  v, OP_Concat, 4,
10630 20 33 2c 20 33 29 3b 0a 20 20 20 20 20 20 20 20   3, 3);.        
10640 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
10650 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
10660 38 2c 20 30 2c 20 34 2c 20 30 2c 20 70 49 64 78  8, 0, 4, 0, pIdx
10670 2d 3e 7a 4e 61 6d 65 2c 20 50 34 5f 54 52 41 4e  ->zName, P4_TRAN
10680 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 20 20  SIENT);.        
10690 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
106a0 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74  Op3(v, OP_Concat
106b0 2c 20 34 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20  , 4, 3, 3);.    
106c0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
106d0 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
106e0 73 75 6c 74 52 6f 77 2c 20 33 2c 20 31 29 3b 0a  sultRow, 3, 1);.
106f0 20 20 20 20 20 20 20 20 20 20 6a 6d 70 34 20 3d            jmp4 =
10700 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
10710 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c 20  p1(v, OP_IfPos, 
10720 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71  1);.          sq
10730 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 30 28  lite3VdbeAddOp0(
10740 76 2c 20 4f 50 5f 48 61 6c 74 29 3b 0a 20 20 20  v, OP_Halt);.   
10750 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
10760 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d  beJumpHere(v, jm
10770 70 34 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  p4);.          s
10780 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48 65  qlite3VdbeJumpHe
10790 72 65 28 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20  re(v, jmp2);.   
107a0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
107b0 62 65 52 65 73 6f 6c 76 65 4c 61 62 65 6c 28 76  beResolveLabel(v
107c0 2c 20 6a 6d 70 33 29 3b 0a 20 20 20 20 20 20 20  , jmp3);.       
107d0 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74   }.        sqlit
107e0 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
107f0 4f 50 5f 4e 65 78 74 2c 20 69 44 61 74 61 43 75  OP_Next, iDataCu
10800 72 2c 20 6c 6f 6f 70 54 6f 70 29 3b 0a 20 20 20  r, loopTop);.   
10810 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10820 4a 75 6d 70 48 65 72 65 28 76 2c 20 6c 6f 6f 70  JumpHere(v, loop
10830 54 6f 70 2d 31 29 3b 0a 23 69 66 6e 64 65 66 20  Top-1);.#ifndef 
10840 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45  SQLITE_OMIT_BTRE
10850 45 43 4f 55 4e 54 0a 20 20 20 20 20 20 20 20 73  ECOUNT.        s
10860 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
10870 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
10880 30 2c 20 32 2c 20 30 2c 20 0a 20 20 20 20 20 20  0, 2, 0, .      
10890 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 22                 "
108a0 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e 74 72 69  wrong # of entri
108b0 65 73 20 69 6e 20 69 6e 64 65 78 20 22 2c 20 50  es in index ", P
108c0 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  4_STATIC);.     
108d0 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78     for(j=0, pIdx
108e0 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70  =pTab->pIndex; p
108f0 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e  Idx; pIdx=pIdx->
10900 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20  pNext, j++){.   
10910 20 20 20 20 20 20 20 69 66 28 20 70 50 6b 3d 3d         if( pPk==
10920 70 49 64 78 20 29 20 63 6f 6e 74 69 6e 75 65 3b  pIdx ) continue;
10930 0a 20 20 20 20 20 20 20 20 20 20 61 64 64 72 20  .          addr 
10940 3d 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72  = sqlite3VdbeCur
10950 72 65 6e 74 41 64 64 72 28 76 29 3b 0a 20 20 20  rentAddr(v);.   
10960 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
10970 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
10980 66 50 6f 73 2c 20 31 2c 20 61 64 64 72 2b 32 29  fPos, 1, addr+2)
10990 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
109a0 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
109b0 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b   OP_Halt, 0, 0);
109c0 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
109d0 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
109e0 4f 50 5f 43 6f 75 6e 74 2c 20 69 49 64 78 43 75  OP_Count, iIdxCu
109f0 72 2b 6a 2c 20 33 29 3b 0a 20 20 20 20 20 20 20  r+j, 3);.       
10a00 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
10a10 64 4f 70 33 28 76 2c 20 4f 50 5f 45 71 2c 20 38  dOp3(v, OP_Eq, 8
10a20 2b 6a 2c 20 61 64 64 72 2b 38 2c 20 33 29 3b 0a  +j, addr+8, 3);.
10a30 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
10a40 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
10a50 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29  P_AddImm, 1, -1)
10a60 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
10a70 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
10a80 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
10a90 33 2c 20 30 2c 20 70 49 64 78 2d 3e 7a 4e 61 6d  3, 0, pIdx->zNam
10aa0 65 2c 20 50 34 5f 54 52 41 4e 53 49 45 4e 54 29  e, P4_TRANSIENT)
10ab0 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
10ac0 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
10ad0 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 33 2c 20 32   OP_Concat, 3, 2
10ae0 2c 20 37 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 7);.          
10af0 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
10b00 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f  2(v, OP_ResultRo
10b10 77 2c 20 37 2c 20 31 29 3b 0a 20 20 20 20 20 20  w, 7, 1);.      
10b20 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
10b30 4c 49 54 45 5f 4f 4d 49 54 5f 42 54 52 45 45 43  LITE_OMIT_BTREEC
10b40 4f 55 4e 54 20 2a 2f 0a 20 20 20 20 20 20 7d 20  OUNT */.      } 
10b50 0a 20 20 20 20 7d 0a 20 20 20 20 61 64 64 72 20  .    }.    addr 
10b60 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
10b70 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53  OpList(v, ArrayS
10b80 69 7a 65 28 65 6e 64 43 6f 64 65 29 2c 20 65 6e  ize(endCode), en
10b90 64 43 6f 64 65 29 3b 0a 20 20 20 20 73 71 6c 69  dCode);.    sqli
10ba0 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 32 28  te3VdbeChangeP2(
10bb0 76 2c 20 61 64 64 72 2c 20 2d 6d 78 45 72 72 29  v, addr, -mxErr)
10bc0 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
10bd0 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64  eJumpHere(v, add
10be0 72 2b 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  r+1);.    sqlite
10bf0 33 56 64 62 65 43 68 61 6e 67 65 50 34 28 76 2c  3VdbeChangeP4(v,
10c00 20 61 64 64 72 2b 32 2c 20 22 6f 6b 22 2c 20 50   addr+2, "ok", P
10c10 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 7d 0a 20  4_STATIC);.  }. 
10c20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f   break;.#endif /
10c30 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 49 4e  * SQLITE_OMIT_IN
10c40 54 45 47 52 49 54 59 5f 43 48 45 43 4b 20 2a 2f  TEGRITY_CHECK */
10c50 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
10c60 5f 4f 4d 49 54 5f 55 54 46 31 36 0a 20 20 2f 2a  _OMIT_UTF16.  /*
10c70 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 65  .  **   PRAGMA e
10c80 6e 63 6f 64 69 6e 67 0a 20 20 2a 2a 20 20 20 50  ncoding.  **   P
10c90 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e 67 20 3d  RAGMA encoding =
10ca0 20 22 75 74 66 2d 38 22 7c 22 75 74 66 2d 31 36   "utf-8"|"utf-16
10cb0 22 7c 22 75 74 66 2d 31 36 6c 65 22 7c 22 75 74  "|"utf-16le"|"ut
10cc0 66 2d 31 36 62 65 22 0a 20 20 2a 2a 0a 20 20 2a  f-16be".  **.  *
10cd0 2a 20 49 6e 20 69 74 73 20 66 69 72 73 74 20 66  * In its first f
10ce0 6f 72 6d 2c 20 74 68 69 73 20 70 72 61 67 6d 61  orm, this pragma
10cf0 20 72 65 74 75 72 6e 73 20 74 68 65 20 65 6e 63   returns the enc
10d00 6f 64 69 6e 67 20 6f 66 20 74 68 65 20 6d 61 69  oding of the mai
10d10 6e 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 2e  n.  ** database.
10d20 20 49 66 20 74 68 65 20 64 61 74 61 62 61 73 65   If the database
10d30 20 69 73 20 6e 6f 74 20 69 6e 69 74 69 61 6c 69   is not initiali
10d40 7a 65 64 2c 20 69 74 20 69 73 20 69 6e 69 74 69  zed, it is initi
10d50 61 6c 69 7a 65 64 20 6e 6f 77 2e 0a 20 20 2a 2a  alized now..  **
10d60 0a 20 20 2a 2a 20 54 68 65 20 73 65 63 6f 6e 64  .  ** The second
10d70 20 66 6f 72 6d 20 6f 66 20 74 68 69 73 20 70 72   form of this pr
10d80 61 67 6d 61 20 69 73 20 61 20 6e 6f 2d 6f 70 20  agma is a no-op 
10d90 69 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  if the main data
10da0 62 61 73 65 20 66 69 6c 65 0a 20 20 2a 2a 20 68  base file.  ** h
10db0 61 73 20 6e 6f 74 20 61 6c 72 65 61 64 79 20 62  as not already b
10dc0 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e  een initialized.
10dd0 20 49 6e 20 74 68 69 73 20 63 61 73 65 20 69 74   In this case it
10de0 20 73 65 74 73 20 74 68 65 20 64 65 66 61 75 6c   sets the defaul
10df0 74 0a 20 20 2a 2a 20 65 6e 63 6f 64 69 6e 67 20  t.  ** encoding 
10e00 74 68 61 74 20 77 69 6c 6c 20 62 65 20 75 73 65  that will be use
10e10 64 20 66 6f 72 20 74 68 65 20 6d 61 69 6e 20 64  d for the main d
10e20 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 66 20  atabase file if 
10e30 61 20 6e 65 77 20 66 69 6c 65 0a 20 20 2a 2a 20  a new file.  ** 
10e40 69 73 20 63 72 65 61 74 65 64 2e 20 49 66 20 61  is created. If a
10e50 6e 20 65 78 69 73 74 69 6e 67 20 6d 61 69 6e 20  n existing main 
10e60 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 69 73  database file is
10e70 20 6f 70 65 6e 65 64 2c 20 74 68 65 6e 20 74 68   opened, then th
10e80 65 0a 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 74  e.  ** default t
10e90 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 66 6f 72  ext encoding for
10ea0 20 74 68 65 20 65 78 69 73 74 69 6e 67 20 64 61   the existing da
10eb0 74 61 62 61 73 65 20 69 73 20 75 73 65 64 2e 0a  tabase is used..
10ec0 20 20 2a 2a 20 0a 20 20 2a 2a 20 49 6e 20 61 6c    ** .  ** In al
10ed0 6c 20 63 61 73 65 73 20 6e 65 77 20 64 61 74 61  l cases new data
10ee0 62 61 73 65 73 20 63 72 65 61 74 65 64 20 75 73  bases created us
10ef0 69 6e 67 20 74 68 65 20 41 54 54 41 43 48 20 63  ing the ATTACH c
10f00 6f 6d 6d 61 6e 64 20 61 72 65 0a 20 20 2a 2a 20  ommand are.  ** 
10f10 63 72 65 61 74 65 64 20 74 6f 20 75 73 65 20 74  created to use t
10f20 68 65 20 73 61 6d 65 20 64 65 66 61 75 6c 74 20  he same default 
10f30 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 61 73  text encoding as
10f40 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61   the main databa
10f50 73 65 2e 20 49 66 0a 20 20 2a 2a 20 74 68 65 20  se. If.  ** the 
10f60 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 68 61  main database ha
10f70 73 20 6e 6f 74 20 62 65 65 6e 20 69 6e 69 74 69  s not been initi
10f80 61 6c 69 7a 65 64 20 61 6e 64 2f 6f 72 20 63 72  alized and/or cr
10f90 65 61 74 65 64 20 77 68 65 6e 20 41 54 54 41 43  eated when ATTAC
10fa0 48 0a 20 20 2a 2a 20 69 73 20 65 78 65 63 75 74  H.  ** is execut
10fb0 65 64 2c 20 74 68 69 73 20 69 73 20 64 6f 6e 65  ed, this is done
10fc0 20 62 65 66 6f 72 65 20 74 68 65 20 41 54 54 41   before the ATTA
10fd0 43 48 20 6f 70 65 72 61 74 69 6f 6e 2e 0a 20 20  CH operation..  
10fe0 2a 2a 0a 20 20 2a 2a 20 49 6e 20 74 68 65 20 73  **.  ** In the s
10ff0 65 63 6f 6e 64 20 66 6f 72 6d 20 74 68 69 73 20  econd form this 
11000 70 72 61 67 6d 61 20 73 65 74 73 20 74 68 65 20  pragma sets the 
11010 74 65 78 74 20 65 6e 63 6f 64 69 6e 67 20 74 6f  text encoding to
11020 20 62 65 20 75 73 65 64 20 69 6e 0a 20 20 2a 2a   be used in.  **
11030 20 6e 65 77 20 64 61 74 61 62 61 73 65 20 66 69   new database fi
11040 6c 65 73 20 63 72 65 61 74 65 64 20 75 73 69 6e  les created usin
11050 67 20 74 68 69 73 20 64 61 74 61 62 61 73 65 20  g this database 
11060 68 61 6e 64 6c 65 2e 20 49 74 20 69 73 20 6f 6e  handle. It is on
11070 6c 79 0a 20 20 2a 2a 20 75 73 65 66 75 6c 20 69  ly.  ** useful i
11080 66 20 69 6e 76 6f 6b 65 64 20 69 6d 6d 65 64 69  f invoked immedi
11090 61 74 65 6c 79 20 61 66 74 65 72 20 74 68 65 20  ately after the 
110a0 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 69 0a  main database i.
110b0 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
110c0 54 79 70 5f 45 4e 43 4f 44 49 4e 47 3a 20 7b 0a  Typ_ENCODING: {.
110d0 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
110e0 20 73 74 72 75 63 74 20 45 6e 63 4e 61 6d 65 20   struct EncName 
110f0 7b 0a 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4e  {.      char *zN
11100 61 6d 65 3b 0a 20 20 20 20 20 20 75 38 20 65 6e  ame;.      u8 en
11110 63 3b 0a 20 20 20 20 7d 20 65 6e 63 6e 61 6d 65  c;.    } encname
11120 73 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20 7b 20  s[] = {.      { 
11130 22 55 54 46 38 22 2c 20 20 20 20 20 53 51 4c 49  "UTF8",     SQLI
11140 54 45 5f 55 54 46 38 20 20 20 20 20 20 20 20 7d  TE_UTF8        }
11150 2c 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 38  ,.      { "UTF-8
11160 22 2c 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46  ",    SQLITE_UTF
11170 38 20 20 20 20 20 20 20 20 7d 2c 20 20 2f 2a 20  8        },  /* 
11180 4d 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20  Must be element 
11190 5b 31 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22  [1] */.      { "
111a0 55 54 46 2d 31 36 6c 65 22 2c 20 53 51 4c 49 54  UTF-16le", SQLIT
111b0 45 5f 55 54 46 31 36 4c 45 20 20 20 20 20 7d 2c  E_UTF16LE     },
111c0 20 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65    /* Must be ele
111d0 6d 65 6e 74 20 5b 32 5d 20 2a 2f 0a 20 20 20 20  ment [2] */.    
111e0 20 20 7b 20 22 55 54 46 2d 31 36 62 65 22 2c 20    { "UTF-16be", 
111f0 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 20  SQLITE_UTF16BE  
11200 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62     },  /* Must b
11210 65 20 65 6c 65 6d 65 6e 74 20 5b 33 5d 20 2a 2f  e element [3] */
11220 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31 36 6c  .      { "UTF16l
11230 65 22 2c 20 20 53 51 4c 49 54 45 5f 55 54 46 31  e",  SQLITE_UTF1
11240 36 4c 45 20 20 20 20 20 7d 2c 0a 20 20 20 20 20  6LE     },.     
11250 20 7b 20 22 55 54 46 31 36 62 65 22 2c 20 20 53   { "UTF16be",  S
11260 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 20 20  QLITE_UTF16BE   
11270 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54    },.      { "UT
11280 46 2d 31 36 22 2c 20 20 20 30 20 20 20 20 20 20  F-16",   0      
11290 20 20 20 20 20 20 20 20 20 20 20 20 7d 2c 20 2f              }, /
112a0 2a 20 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41  * SQLITE_UTF16NA
112b0 54 49 56 45 20 2a 2f 0a 20 20 20 20 20 20 7b 20  TIVE */.      { 
112c0 22 55 54 46 31 36 22 2c 20 20 20 20 30 20 20 20  "UTF16",    0   
112d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 7d                 }
112e0 2c 20 2f 2a 20 53 51 4c 49 54 45 5f 55 54 46 31  , /* SQLITE_UTF1
112f0 36 4e 41 54 49 56 45 20 2a 2f 0a 20 20 20 20 20  6NATIVE */.     
11300 20 7b 20 30 2c 20 30 20 7d 0a 20 20 20 20 7d 3b   { 0, 0 }.    };
11310 0a 20 20 20 20 63 6f 6e 73 74 20 73 74 72 75 63  .    const struc
11320 74 20 45 6e 63 4e 61 6d 65 20 2a 70 45 6e 63 3b  t EncName *pEnc;
11330 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67 68 74  .    if( !zRight
11340 20 29 7b 20 20 20 20 2f 2a 20 22 50 52 41 47 4d   ){    /* "PRAGM
11350 41 20 65 6e 63 6f 64 69 6e 67 22 20 2a 2f 0a 20  A encoding" */. 
11360 20 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33       if( sqlite3
11370 52 65 61 64 53 63 68 65 6d 61 28 70 50 61 72 73  ReadSchema(pPars
11380 65 29 20 29 20 67 6f 74 6f 20 70 72 61 67 6d 61  e) ) goto pragma
11390 5f 6f 75 74 3b 0a 20 20 20 20 20 20 73 71 6c 69  _out;.      sqli
113a0 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
113b0 73 28 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 73  s(v, 1);.      s
113c0 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
113d0 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
113e0 4d 45 5f 4e 41 4d 45 2c 20 22 65 6e 63 6f 64 69  ME_NAME, "encodi
113f0 6e 67 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54  ng", SQLITE_STAT
11400 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
11410 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
11420 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31  OP_String8, 0, 1
11430 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
11440 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45   encnames[SQLITE
11450 5f 55 54 46 38 5d 2e 65 6e 63 3d 3d 53 51 4c 49  _UTF8].enc==SQLI
11460 54 45 5f 55 54 46 38 20 29 3b 0a 20 20 20 20 20  TE_UTF8 );.     
11470 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65   assert( encname
11480 73 5b 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45  s[SQLITE_UTF16LE
11490 5d 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54  ].enc==SQLITE_UT
114a0 46 31 36 4c 45 20 29 3b 0a 20 20 20 20 20 20 61  F16LE );.      a
114b0 73 73 65 72 74 28 20 65 6e 63 6e 61 6d 65 73 5b  ssert( encnames[
114c0 53 51 4c 49 54 45 5f 55 54 46 31 36 42 45 5d 2e  SQLITE_UTF16BE].
114d0 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46 31  enc==SQLITE_UTF1
114e0 36 42 45 20 29 3b 0a 20 20 20 20 20 20 73 71 6c  6BE );.      sql
114f0 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 34  ite3VdbeChangeP4
11500 28 76 2c 20 2d 31 2c 20 65 6e 63 6e 61 6d 65 73  (v, -1, encnames
11510 5b 45 4e 43 28 70 50 61 72 73 65 2d 3e 64 62 29  [ENC(pParse->db)
11520 5d 2e 7a 4e 61 6d 65 2c 20 50 34 5f 53 54 41 54  ].zName, P4_STAT
11530 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
11540 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
11550 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c  OP_ResultRow, 1,
11560 20 31 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 20   1);.    }else{ 
11570 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11580 20 20 20 20 20 20 20 2f 2a 20 22 50 52 41 47 4d         /* "PRAGM
11590 41 20 65 6e 63 6f 64 69 6e 67 20 3d 20 58 58 58  A encoding = XXX
115a0 22 20 2a 2f 0a 20 20 20 20 20 20 2f 2a 20 4f 6e  " */.      /* On
115b0 6c 79 20 63 68 61 6e 67 65 20 74 68 65 20 76 61  ly change the va
115c0 6c 75 65 20 6f 66 20 73 71 6c 69 74 65 2e 65 6e  lue of sqlite.en
115d0 63 20 69 66 20 74 68 65 20 64 61 74 61 62 61 73  c if the databas
115e0 65 20 68 61 6e 64 6c 65 20 69 73 20 6e 6f 74 0a  e handle is not.
115f0 20 20 20 20 20 20 2a 2a 20 69 6e 69 74 69 61 6c        ** initial
11600 69 7a 65 64 2e 20 49 66 20 74 68 65 20 6d 61 69  ized. If the mai
11610 6e 20 64 61 74 61 62 61 73 65 20 65 78 69 73 74  n database exist
11620 73 2c 20 74 68 65 20 6e 65 77 20 73 71 6c 69 74  s, the new sqlit
11630 65 2e 65 6e 63 20 76 61 6c 75 65 0a 20 20 20 20  e.enc value.    
11640 20 20 2a 2a 20 77 69 6c 6c 20 62 65 20 6f 76 65    ** will be ove
11650 72 77 72 69 74 74 65 6e 20 77 68 65 6e 20 74 68  rwritten when th
11660 65 20 73 63 68 65 6d 61 20 69 73 20 6e 65 78 74  e schema is next
11670 20 6c 6f 61 64 65 64 2e 20 49 66 20 69 74 20 64   loaded. If it d
11680 6f 65 73 20 6e 6f 74 0a 20 20 20 20 20 20 2a 2a  oes not.      **
11690 20 61 6c 72 65 61 64 79 20 65 78 69 73 74 73 2c   already exists,
116a0 20 69 74 20 77 69 6c 6c 20 62 65 20 63 72 65 61   it will be crea
116b0 74 65 64 20 74 6f 20 75 73 65 20 74 68 65 20 6e  ted to use the n
116c0 65 77 20 65 6e 63 6f 64 69 6e 67 20 76 61 6c 75  ew encoding valu
116d0 65 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20  e..      */.    
116e0 20 20 69 66 28 20 0a 20 20 20 20 20 20 20 20 21    if( .        !
116f0 28 44 62 48 61 73 50 72 6f 70 65 72 74 79 28 64  (DbHasProperty(d
11700 62 2c 20 30 2c 20 44 42 5f 53 63 68 65 6d 61 4c  b, 0, DB_SchemaL
11710 6f 61 64 65 64 29 29 20 7c 7c 20 0a 20 20 20 20  oaded)) || .    
11720 20 20 20 20 44 62 48 61 73 50 72 6f 70 65 72 74      DbHasPropert
11730 79 28 64 62 2c 20 30 2c 20 44 42 5f 45 6d 70 74  y(db, 0, DB_Empt
11740 79 29 20 0a 20 20 20 20 20 20 29 7b 0a 20 20 20  y) .      ){.   
11750 20 20 20 20 20 66 6f 72 28 70 45 6e 63 3d 26 65       for(pEnc=&e
11760 6e 63 6e 61 6d 65 73 5b 30 5d 3b 20 70 45 6e 63  ncnames[0]; pEnc
11770 2d 3e 7a 4e 61 6d 65 3b 20 70 45 6e 63 2b 2b 29  ->zName; pEnc++)
11780 7b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28 20  {.          if( 
11790 30 3d 3d 73 71 6c 69 74 65 33 53 74 72 49 43 6d  0==sqlite3StrICm
117a0 70 28 7a 52 69 67 68 74 2c 20 70 45 6e 63 2d 3e  p(zRight, pEnc->
117b0 7a 4e 61 6d 65 29 20 29 7b 0a 20 20 20 20 20 20  zName) ){.      
117c0 20 20 20 20 20 20 45 4e 43 28 70 50 61 72 73 65        ENC(pParse
117d0 2d 3e 64 62 29 20 3d 20 70 45 6e 63 2d 3e 65 6e  ->db) = pEnc->en
117e0 63 20 3f 20 70 45 6e 63 2d 3e 65 6e 63 20 3a 20  c ? pEnc->enc : 
117f0 53 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49  SQLITE_UTF16NATI
11800 56 45 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  VE;.            
11810 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20 20  break;.         
11820 20 7d 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20   }.        }.   
11830 20 20 20 20 20 69 66 28 20 21 70 45 6e 63 2d 3e       if( !pEnc->
11840 7a 4e 61 6d 65 20 29 7b 0a 20 20 20 20 20 20 20  zName ){.       
11850 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d     sqlite3ErrorM
11860 73 67 28 70 50 61 72 73 65 2c 20 22 75 6e 73 75  sg(pParse, "unsu
11870 70 70 6f 72 74 65 64 20 65 6e 63 6f 64 69 6e 67  pported encoding
11880 3a 20 25 73 22 2c 20 7a 52 69 67 68 74 29 3b 0a  : %s", zRight);.
11890 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
118a0 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72  }.    }.  }.  br
118b0 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53  eak;.#endif /* S
118c0 51 4c 49 54 45 5f 4f 4d 49 54 5f 55 54 46 31 36  QLITE_OMIT_UTF16
118d0 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
118e0 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
118f0 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 0a  VERSION_PRAGMAS.
11900 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
11910 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 63  MA [database.]sc
11920 68 65 6d 61 5f 76 65 72 73 69 6f 6e 0a 20 20 2a  hema_version.  *
11930 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  *   PRAGMA [data
11940 62 61 73 65 2e 5d 73 63 68 65 6d 61 5f 76 65 72  base.]schema_ver
11950 73 69 6f 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e  sion = <integer>
11960 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  **.  **   PRA
11970 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 75  GMA [database.]u
11980 73 65 72 5f 76 65 72 73 69 6f 6e 0a 20 20 2a 2a  ser_version.  **
11990 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
119a0 61 73 65 2e 5d 75 73 65 72 5f 76 65 72 73 69 6f  ase.]user_versio
119b0 6e 20 3d 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20  n = <integer>.  
119c0 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  **.  **   PRAGMA
119d0 20 5b 64 61 74 61 62 61 73 65 2e 5d 66 72 65 65   [database.]free
119e0 6c 69 73 74 5f 63 6f 75 6e 74 20 3d 20 3c 69 6e  list_count = <in
119f0 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a 2a  teger>.  **.  **
11a00 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62     PRAGMA [datab
11a10 61 73 65 2e 5d 61 70 70 6c 69 63 61 74 69 6f 6e  ase.]application
11a20 5f 69 64 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d  _id.  **   PRAGM
11a30 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 61 70 70  A [database.]app
11a40 6c 69 63 61 74 69 6f 6e 5f 69 64 20 3d 20 3c 69  lication_id = <i
11a50 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a  nteger>.  **.  *
11a60 2a 20 54 68 65 20 70 72 61 67 6d 61 27 73 20 73  * The pragma's s
11a70 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 61 6e  chema_version an
11a80 64 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 20 61  d user_version a
11a90 72 65 20 75 73 65 64 20 74 6f 20 73 65 74 20 6f  re used to set o
11aa0 72 20 67 65 74 0a 20 20 2a 2a 20 74 68 65 20 76  r get.  ** the v
11ab0 61 6c 75 65 20 6f 66 20 74 68 65 20 73 63 68 65  alue of the sche
11ac0 6d 61 2d 76 65 72 73 69 6f 6e 20 61 6e 64 20 75  ma-version and u
11ad0 73 65 72 2d 76 65 72 73 69 6f 6e 2c 20 72 65 73  ser-version, res
11ae0 70 65 63 74 69 76 65 6c 79 2e 20 42 6f 74 68 0a  pectively. Both.
11af0 20 20 2a 2a 20 74 68 65 20 73 63 68 65 6d 61 2d    ** the schema-
11b00 76 65 72 73 69 6f 6e 20 61 6e 64 20 74 68 65 20  version and the 
11b10 75 73 65 72 2d 76 65 72 73 69 6f 6e 20 61 72 65  user-version are
11b20 20 33 32 2d 62 69 74 20 73 69 67 6e 65 64 20 69   32-bit signed i
11b30 6e 74 65 67 65 72 73 0a 20 20 2a 2a 20 73 74 6f  ntegers.  ** sto
11b40 72 65 64 20 69 6e 20 74 68 65 20 64 61 74 61 62  red in the datab
11b50 61 73 65 20 68 65 61 64 65 72 2e 0a 20 20 2a 2a  ase header..  **
11b60 0a 20 20 2a 2a 20 54 68 65 20 73 63 68 65 6d 61  .  ** The schema
11b70 2d 63 6f 6f 6b 69 65 20 69 73 20 75 73 75 61 6c  -cookie is usual
11b80 6c 79 20 6f 6e 6c 79 20 6d 61 6e 69 70 75 6c 61  ly only manipula
11b90 74 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62  ted internally b
11ba0 79 20 53 51 4c 69 74 65 2e 20 49 74 0a 20 20 2a  y SQLite. It.  *
11bb0 2a 20 69 73 20 69 6e 63 72 65 6d 65 6e 74 65 64  * is incremented
11bc0 20 62 79 20 53 51 4c 69 74 65 20 77 68 65 6e 65   by SQLite whene
11bd0 76 65 72 20 74 68 65 20 64 61 74 61 62 61 73 65  ver the database
11be0 20 73 63 68 65 6d 61 20 69 73 20 6d 6f 64 69 66   schema is modif
11bf0 69 65 64 20 28 62 79 0a 20 20 2a 2a 20 63 72 65  ied (by.  ** cre
11c00 61 74 69 6e 67 20 6f 72 20 64 72 6f 70 70 69 6e  ating or droppin
11c10 67 20 61 20 74 61 62 6c 65 20 6f 72 20 69 6e 64  g a table or ind
11c20 65 78 29 2e 20 54 68 65 20 73 63 68 65 6d 61 20  ex). The schema 
11c30 76 65 72 73 69 6f 6e 20 69 73 20 75 73 65 64 20  version is used 
11c40 62 79 0a 20 20 2a 2a 20 53 51 4c 69 74 65 20 65  by.  ** SQLite e
11c50 61 63 68 20 74 69 6d 65 20 61 20 71 75 65 72 79  ach time a query
11c60 20 69 73 20 65 78 65 63 75 74 65 64 20 74 6f 20   is executed to 
11c70 65 6e 73 75 72 65 20 74 68 61 74 20 74 68 65 20  ensure that the 
11c80 69 6e 74 65 72 6e 61 6c 20 63 61 63 68 65 0a 20  internal cache. 
11c90 20 2a 2a 20 6f 66 20 74 68 65 20 73 63 68 65 6d   ** of the schem
11ca0 61 20 75 73 65 64 20 77 68 65 6e 20 63 6f 6d 70  a used when comp
11cb0 69 6c 69 6e 67 20 74 68 65 20 53 51 4c 20 71 75  iling the SQL qu
11cc0 65 72 79 20 6d 61 74 63 68 65 73 20 74 68 65 20  ery matches the 
11cd0 73 63 68 65 6d 61 20 6f 66 0a 20 20 2a 2a 20 74  schema of.  ** t
11ce0 68 65 20 64 61 74 61 62 61 73 65 20 61 67 61 69  he database agai
11cf0 6e 73 74 20 77 68 69 63 68 20 74 68 65 20 63 6f  nst which the co
11d00 6d 70 69 6c 65 64 20 71 75 65 72 79 20 69 73 20  mpiled query is 
11d10 61 63 74 75 61 6c 6c 79 20 65 78 65 63 75 74 65  actually execute
11d20 64 2e 0a 20 20 2a 2a 20 53 75 62 76 65 72 74 69  d..  ** Subverti
11d30 6e 67 20 74 68 69 73 20 6d 65 63 68 61 6e 69 73  ng this mechanis
11d40 6d 20 62 79 20 75 73 69 6e 67 20 22 50 52 41 47  m by using "PRAG
11d50 4d 41 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  MA schema_versio
11d60 6e 22 20 74 6f 20 6d 6f 64 69 66 79 0a 20 20 2a  n" to modify.  *
11d70 2a 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72  * the schema-ver
11d80 73 69 6f 6e 20 69 73 20 70 6f 74 65 6e 74 69 61  sion is potentia
11d90 6c 6c 79 20 64 61 6e 67 65 72 6f 75 73 20 61 6e  lly dangerous an
11da0 64 20 6d 61 79 20 6c 65 61 64 20 74 6f 20 70 72  d may lead to pr
11db0 6f 67 72 61 6d 0a 20 20 2a 2a 20 63 72 61 73 68  ogram.  ** crash
11dc0 65 73 20 6f 72 20 64 61 74 61 62 61 73 65 20 63  es or database c
11dd0 6f 72 72 75 70 74 69 6f 6e 2e 20 55 73 65 20 77  orruption. Use w
11de0 69 74 68 20 63 61 75 74 69 6f 6e 21 0a 20 20 2a  ith caution!.  *
11df0 2a 0a 20 20 2a 2a 20 54 68 65 20 75 73 65 72 2d  *.  ** The user-
11e00 76 65 72 73 69 6f 6e 20 69 73 20 6e 6f 74 20 75  version is not u
11e10 73 65 64 20 69 6e 74 65 72 6e 61 6c 6c 79 20 62  sed internally b
11e20 79 20 53 51 4c 69 74 65 2e 20 49 74 20 6d 61 79  y SQLite. It may
11e30 20 62 65 20 75 73 65 64 20 62 79 0a 20 20 2a 2a   be used by.  **
11e40 20 61 70 70 6c 69 63 61 74 69 6f 6e 73 20 66 6f   applications fo
11e50 72 20 61 6e 79 20 70 75 72 70 6f 73 65 2e 0a 20  r any purpose.. 
11e60 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
11e70 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55 45 3a  yp_HEADER_VALUE:
11e80 20 7b 0a 20 20 20 20 69 6e 74 20 69 43 6f 6f 6b   {.    int iCook
11e90 69 65 3b 20 20 20 2f 2a 20 43 6f 6f 6b 69 65 20  ie;   /* Cookie 
11ea0 69 6e 64 65 78 2e 20 31 20 66 6f 72 20 73 63 68  index. 1 for sch
11eb0 65 6d 61 2d 63 6f 6f 6b 69 65 2c 20 36 20 66 6f  ema-cookie, 6 fo
11ec0 72 20 75 73 65 72 2d 63 6f 6f 6b 69 65 2e 20 2a  r user-cookie. *
11ed0 2f 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  /.    sqlite3Vdb
11ee0 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69 44  eUsesBtree(v, iD
11ef0 62 29 3b 0a 20 20 20 20 73 77 69 74 63 68 28 20  b);.    switch( 
11f00 7a 4c 65 66 74 5b 30 5d 20 29 7b 0a 20 20 20 20  zLeft[0] ){.    
11f10 20 20 63 61 73 65 20 27 61 27 3a 20 63 61 73 65    case 'a': case
11f20 20 27 41 27 3a 0a 20 20 20 20 20 20 20 20 69 43   'A':.        iC
11f30 6f 6f 6b 69 65 20 3d 20 42 54 52 45 45 5f 41 50  ookie = BTREE_AP
11f40 50 4c 49 43 41 54 49 4f 4e 5f 49 44 3b 0a 20 20  PLICATION_ID;.  
11f50 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 20        break;.   
11f60 20 20 20 63 61 73 65 20 27 66 27 3a 20 63 61 73     case 'f': cas
11f70 65 20 27 46 27 3a 0a 20 20 20 20 20 20 20 20 69  e 'F':.        i
11f80 43 6f 6f 6b 69 65 20 3d 20 42 54 52 45 45 5f 46  Cookie = BTREE_F
11f90 52 45 45 5f 50 41 47 45 5f 43 4f 55 4e 54 3b 0a  REE_PAGE_COUNT;.
11fa0 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
11fb0 20 20 20 20 20 63 61 73 65 20 27 73 27 3a 20 63       case 's': c
11fc0 61 73 65 20 27 53 27 3a 0a 20 20 20 20 20 20 20  ase 'S':.       
11fd0 20 69 43 6f 6f 6b 69 65 20 3d 20 42 54 52 45 45   iCookie = BTREE
11fe0 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 3b  _SCHEMA_VERSION;
11ff0 0a 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a  .        break;.
12000 20 20 20 20 20 20 64 65 66 61 75 6c 74 3a 0a 20        default:. 
12010 20 20 20 20 20 20 20 69 43 6f 6f 6b 69 65 20 3d         iCookie =
12020 20 42 54 52 45 45 5f 55 53 45 52 5f 56 45 52 53   BTREE_USER_VERS
12030 49 4f 4e 3b 0a 20 20 20 20 20 20 20 20 62 72 65  ION;.        bre
12040 61 6b 3b 0a 20 20 20 20 7d 0a 0a 20 20 20 20 69  ak;.    }..    i
12050 66 28 20 7a 52 69 67 68 74 20 26 26 20 69 43 6f  f( zRight && iCo
12060 6f 6b 69 65 21 3d 42 54 52 45 45 5f 46 52 45 45  okie!=BTREE_FREE
12070 5f 50 41 47 45 5f 43 4f 55 4e 54 20 29 7b 0a 20  _PAGE_COUNT ){. 
12080 20 20 20 20 20 2f 2a 20 57 72 69 74 65 20 74 68       /* Write th
12090 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6f 6b  e specified cook
120a0 69 65 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20  ie value */.    
120b0 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56    static const V
120c0 64 62 65 4f 70 4c 69 73 74 20 73 65 74 43 6f 6f  dbeOpList setCoo
120d0 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  kie[] = {.      
120e0 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74 69    { OP_Transacti
120f0 6f 6e 2c 20 20 20 20 30 2c 20 20 31 2c 20 20 30  on,    0,  1,  0
12100 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a 20 20  },    /* 0 */.  
12110 20 20 20 20 20 20 7b 20 4f 50 5f 49 6e 74 65 67        { OP_Integ
12120 65 72 2c 20 20 20 20 20 20 20 20 30 2c 20 20 31  er,        0,  1
12130 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 31 20 2a  ,  0},    /* 1 *
12140 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 53  /.        { OP_S
12150 65 74 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30  etCookie,      0
12160 2c 20 20 30 2c 20 20 31 7d 2c 20 20 20 20 2f 2a  ,  0,  1},    /*
12170 20 32 20 2a 2f 0a 20 20 20 20 20 20 7d 3b 0a 20   2 */.      };. 
12180 20 20 20 20 20 69 6e 74 20 61 64 64 72 20 3d 20       int addr = 
12190 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
121a0 4c 69 73 74 28 76 2c 20 41 72 72 61 79 53 69 7a  List(v, ArraySiz
121b0 65 28 73 65 74 43 6f 6f 6b 69 65 29 2c 20 73 65  e(setCookie), se
121c0 74 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 20 20  tCookie);.      
121d0 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67  sqlite3VdbeChang
121e0 65 50 31 28 76 2c 20 61 64 64 72 2c 20 69 44 62  eP1(v, addr, iDb
121f0 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
12200 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
12210 61 64 64 72 2b 31 2c 20 73 71 6c 69 74 65 33 41  addr+1, sqlite3A
12220 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20  toi(zRight));.  
12230 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
12240 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64 72 2b  hangeP1(v, addr+
12250 32 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73  2, iDb);.      s
12260 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
12270 50 32 28 76 2c 20 61 64 64 72 2b 32 2c 20 69 43  P2(v, addr+2, iC
12280 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 7d 65 6c 73  ookie);.    }els
12290 65 7b 0a 20 20 20 20 20 20 2f 2a 20 52 65 61 64  e{.      /* Read
122a0 20 74 68 65 20 73 70 65 63 69 66 69 65 64 20 63   the specified c
122b0 6f 6f 6b 69 65 20 76 61 6c 75 65 20 2a 2f 0a 20  ookie value */. 
122c0 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73       static cons
122d0 74 20 56 64 62 65 4f 70 4c 69 73 74 20 72 65 61  t VdbeOpList rea
122e0 64 43 6f 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20  dCookie[] = {.  
122f0 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73        { OP_Trans
12300 61 63 74 69 6f 6e 2c 20 20 20 20 20 30 2c 20 20  action,     0,  
12310 30 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20  0,  0},    /* 0 
12320 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f 50 5f  */.        { OP_
12330 52 65 61 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20  ReadCookie,     
12340 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20   0,  1,  0},    
12350 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 1 */.        
12360 7b 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  { OP_ResultRow, 
12370 20 20 20 20 20 20 31 2c 20 20 31 2c 20 20 30 7d        1,  1,  0}
12380 0a 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20  .      };.      
12390 69 6e 74 20 61 64 64 72 20 3d 20 73 71 6c 69 74  int addr = sqlit
123a0 65 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28  e3VdbeAddOpList(
123b0 76 2c 20 41 72 72 61 79 53 69 7a 65 28 72 65 61  v, ArraySize(rea
123c0 64 43 6f 6f 6b 69 65 29 2c 20 72 65 61 64 43 6f  dCookie), readCo
123d0 6f 6b 69 65 29 3b 0a 20 20 20 20 20 20 73 71 6c  okie);.      sql
123e0 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
123f0 28 76 2c 20 61 64 64 72 2c 20 69 44 62 29 3b 0a  (v, addr, iDb);.
12400 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
12410 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64  eChangeP1(v, add
12420 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  r+1, iDb);.     
12430 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
12440 67 65 50 33 28 76 2c 20 61 64 64 72 2b 31 2c 20  geP3(v, addr+1, 
12450 69 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 20 20  iCookie);.      
12460 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
12470 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20  mCols(v, 1);.   
12480 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
12490 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
124a0 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65  OLNAME_NAME, zLe
124b0 66 74 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  ft, SQLITE_TRANS
124c0 49 45 4e 54 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  IENT);.    }.  }
124d0 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66  .  break;.#endif
124e0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
124f0 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50  SCHEMA_VERSION_P
12500 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64  RAGMAS */..#ifnd
12510 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
12520 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41  OMPILEOPTION_DIA
12530 47 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  GS.  /*.  **   P
12540 52 41 47 4d 41 20 63 6f 6d 70 69 6c 65 5f 6f 70  RAGMA compile_op
12550 74 69 6f 6e 73 0a 20 20 2a 2a 0a 20 20 2a 2a 20  tions.  **.  ** 
12560 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 73  Return the names
12570 20 6f 66 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 2d   of all compile-
12580 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 75 73 65  time options use
12590 64 20 69 6e 20 74 68 69 73 20 62 75 69 6c 64 2c  d in this build,
125a0 0a 20 20 2a 2a 20 6f 6e 65 20 6f 70 74 69 6f 6e  .  ** one option
125b0 20 70 65 72 20 72 6f 77 2e 0a 20 20 2a 2f 0a 20   per row..  */. 
125c0 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 43 4f   case PragTyp_CO
125d0 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 53 3a 20 7b  MPILE_OPTIONS: {
125e0 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a  .    int i = 0;.
125f0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
12600 7a 4f 70 74 3b 0a 20 20 20 20 73 71 6c 69 74 65  zOpt;.    sqlite
12610 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
12620 76 2c 20 31 29 3b 0a 20 20 20 20 70 50 61 72 73  v, 1);.    pPars
12630 65 2d 3e 6e 4d 65 6d 20 3d 20 31 3b 0a 20 20 20  e->nMem = 1;.   
12640 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
12650 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
12660 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 6f 6d 70  NAME_NAME, "comp
12670 69 6c 65 5f 6f 70 74 69 6f 6e 22 2c 20 53 51 4c  ile_option", SQL
12680 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
12690 20 77 68 69 6c 65 28 20 28 7a 4f 70 74 20 3d 20   while( (zOpt = 
126a0 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f  sqlite3_compileo
126b0 70 74 69 6f 6e 5f 67 65 74 28 69 2b 2b 29 29 21  ption_get(i++))!
126c0 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
126d0 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
126e0 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
126f0 31 2c 20 30 2c 20 7a 4f 70 74 2c 20 30 29 3b 0a  1, 0, zOpt, 0);.
12700 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
12710 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
12720 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a  sultRow, 1, 1);.
12730 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
12740 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  k;.#endif /* SQL
12750 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45  ITE_OMIT_COMPILE
12760 4f 50 54 49 4f 4e 5f 44 49 41 47 53 20 2a 2f 0a  OPTION_DIAGS */.
12770 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
12780 4f 4d 49 54 5f 57 41 4c 0a 20 20 2f 2a 0a 20 20  OMIT_WAL.  /*.  
12790 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74  **   PRAGMA [dat
127a0 61 62 61 73 65 2e 5d 77 61 6c 5f 63 68 65 63 6b  abase.]wal_check
127b0 70 6f 69 6e 74 20 3d 20 70 61 73 73 69 76 65 7c  point = passive|
127c0 66 75 6c 6c 7c 72 65 73 74 61 72 74 0a 20 20 2a  full|restart.  *
127d0 2a 0a 20 20 2a 2a 20 43 68 65 63 6b 70 6f 69 6e  *.  ** Checkpoin
127e0 74 20 74 68 65 20 64 61 74 61 62 61 73 65 2e 0a  t the database..
127f0 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
12800 54 79 70 5f 57 41 4c 5f 43 48 45 43 4b 50 4f 49  Typ_WAL_CHECKPOI
12810 4e 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20 69 42  NT: {.    int iB
12820 74 20 3d 20 28 70 49 64 32 2d 3e 7a 3f 69 44 62  t = (pId2->z?iDb
12830 3a 53 51 4c 49 54 45 5f 4d 41 58 5f 41 54 54 41  :SQLITE_MAX_ATTA
12840 43 48 45 44 29 3b 0a 20 20 20 20 69 6e 74 20 65  CHED);.    int e
12850 4d 6f 64 65 20 3d 20 53 51 4c 49 54 45 5f 43 48  Mode = SQLITE_CH
12860 45 43 4b 50 4f 49 4e 54 5f 50 41 53 53 49 56 45  ECKPOINT_PASSIVE
12870 3b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  ;.    if( zRight
12880 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71   ){.      if( sq
12890 6c 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69  lite3StrICmp(zRi
128a0 67 68 74 2c 20 22 66 75 6c 6c 22 29 3d 3d 30 20  ght, "full")==0 
128b0 29 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65  ){.        eMode
128c0 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50   = SQLITE_CHECKP
128d0 4f 49 4e 54 5f 46 55 4c 4c 3b 0a 20 20 20 20 20  OINT_FULL;.     
128e0 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74   }else if( sqlit
128f0 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67 68 74  e3StrICmp(zRight
12900 2c 20 22 72 65 73 74 61 72 74 22 29 3d 3d 30 20  , "restart")==0 
12910 29 7b 0a 20 20 20 20 20 20 20 20 65 4d 6f 64 65  ){.        eMode
12920 20 3d 20 53 51 4c 49 54 45 5f 43 48 45 43 4b 50   = SQLITE_CHECKP
12930 4f 49 4e 54 5f 52 45 53 54 41 52 54 3b 0a 20 20  OINT_RESTART;.  
12940 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20      }.    }.    
12950 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
12960 6d 43 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20  mCols(v, 3);.   
12970 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20   pParse->nMem = 
12980 33 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  3;.    sqlite3Vd
12990 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
129a0 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
129b0 20 22 62 75 73 79 22 2c 20 53 51 4c 49 54 45 5f   "busy", SQLITE_
129c0 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
129d0 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
129e0 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45  me(v, 1, COLNAME
129f0 5f 4e 41 4d 45 2c 20 22 6c 6f 67 22 2c 20 53 51  _NAME, "log", SQ
12a00 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
12a10 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
12a20 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f  ColName(v, 2, CO
12a30 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 68 65  LNAME_NAME, "che
12a40 63 6b 70 6f 69 6e 74 65 64 22 2c 20 53 51 4c 49  ckpointed", SQLI
12a50 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20 20  TE_STATIC);..   
12a60 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
12a70 70 33 28 76 2c 20 4f 50 5f 43 68 65 63 6b 70 6f  p3(v, OP_Checkpo
12a80 69 6e 74 2c 20 69 42 74 2c 20 65 4d 6f 64 65 2c  int, iBt, eMode,
12a90 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   1);.    sqlite3
12aa0 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
12ab0 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33  _ResultRow, 1, 3
12ac0 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a  );.  }.  break;.
12ad0 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
12ae0 47 4d 41 20 77 61 6c 5f 61 75 74 6f 63 68 65 63  GMA wal_autochec
12af0 6b 70 6f 69 6e 74 0a 20 20 2a 2a 20 20 20 50 52  kpoint.  **   PR
12b00 41 47 4d 41 20 77 61 6c 5f 61 75 74 6f 63 68 65  AGMA wal_autoche
12b10 63 6b 70 6f 69 6e 74 20 3d 20 4e 0a 20 20 2a 2a  ckpoint = N.  **
12b20 0a 20 20 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20  .  ** Configure 
12b30 61 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65  a database conne
12b40 63 74 69 6f 6e 20 74 6f 20 61 75 74 6f 6d 61 74  ction to automat
12b50 69 63 61 6c 6c 79 20 63 68 65 63 6b 70 6f 69 6e  ically checkpoin
12b60 74 20 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a  t a database.  *
12b70 2a 20 61 66 74 65 72 20 61 63 63 75 6d 75 6c 61  * after accumula
12b80 74 69 6e 67 20 4e 20 66 72 61 6d 65 73 20 69 6e  ting N frames in
12b90 20 74 68 65 20 6c 6f 67 2e 20 4f 72 20 71 75 65   the log. Or que
12ba0 72 79 20 66 6f 72 20 74 68 65 20 63 75 72 72 65  ry for the curre
12bb0 6e 74 20 76 61 6c 75 65 0a 20 20 2a 2a 20 6f 66  nt value.  ** of
12bc0 20 4e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20   N..  */.  case 
12bd0 50 72 61 67 54 79 70 5f 57 41 4c 5f 41 55 54 4f  PragTyp_WAL_AUTO
12be0 43 48 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20  CHECKPOINT: {.  
12bf0 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
12c00 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 77 61        sqlite3_wa
12c10 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74  l_autocheckpoint
12c20 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74 6f 69  (db, sqlite3Atoi
12c30 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 7d  (zRight));.    }
12c40 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c  .    returnSingl
12c50 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 77 61  eInt(pParse, "wa
12c60 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74  l_autocheckpoint
12c70 22 2c 20 0a 20 20 20 20 20 20 20 64 62 2d 3e 78  ", .       db->x
12c80 57 61 6c 43 61 6c 6c 62 61 63 6b 3d 3d 73 71 6c  WalCallback==sql
12c90 69 74 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f  ite3WalDefaultHo
12ca0 6f 6b 20 3f 20 0a 20 20 20 20 20 20 20 20 20 20  ok ? .          
12cb0 20 53 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49   SQLITE_PTR_TO_I
12cc0 4e 54 28 64 62 2d 3e 70 57 61 6c 41 72 67 29 20  NT(db->pWalArg) 
12cd0 3a 20 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61  : 0);.  }.  brea
12ce0 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a  k;.#endif..  /*.
12cf0 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 73 68 72    **  PRAGMA shr
12d00 69 6e 6b 5f 6d 65 6d 6f 72 79 0a 20 20 2a 2a 0a  ink_memory.  **.
12d10 20 20 2a 2a 20 54 68 69 73 20 70 72 61 67 6d 61    ** This pragma
12d20 20 61 74 74 65 6d 70 74 73 20 74 6f 20 66 72 65   attempts to fre
12d30 65 20 61 73 20 6d 75 63 68 20 6d 65 6d 6f 72 79  e as much memory
12d40 20 61 73 20 70 6f 73 73 69 62 6c 65 20 66 72 6f   as possible fro
12d50 6d 20 74 68 65 0a 20 20 2a 2a 20 63 75 72 72 65  m the.  ** curre
12d60 6e 74 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e  nt database conn
12d70 65 63 74 69 6f 6e 2e 0a 20 20 2a 2f 0a 20 20 63  ection..  */.  c
12d80 61 73 65 20 50 72 61 67 54 79 70 5f 53 48 52 49  ase PragTyp_SHRI
12d90 4e 4b 5f 4d 45 4d 4f 52 59 3a 20 7b 0a 20 20 20  NK_MEMORY: {.   
12da0 20 73 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65   sqlite3_db_rele
12db0 61 73 65 5f 6d 65 6d 6f 72 79 28 64 62 29 3b 0a  ase_memory(db);.
12dc0 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
12dd0 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47    /*.  **   PRAG
12de0 4d 41 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 0a  MA busy_timeout.
12df0 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 62 75    **   PRAGMA bu
12e00 73 79 5f 74 69 6d 65 6f 75 74 20 3d 20 4e 0a 20  sy_timeout = N. 
12e10 20 2a 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20 73 71   **.  ** Call sq
12e20 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f  lite3_busy_timeo
12e30 75 74 28 64 62 2c 20 4e 29 2e 20 20 52 65 74 75  ut(db, N).  Retu
12e40 72 6e 20 74 68 65 20 63 75 72 72 65 6e 74 20 74  rn the current t
12e50 69 6d 65 6f 75 74 20 76 61 6c 75 65 0a 20 20 2a  imeout value.  *
12e60 2a 20 69 66 20 6f 6e 65 20 69 73 20 73 65 74 2e  * if one is set.
12e70 20 20 49 66 20 6e 6f 20 62 75 73 79 20 68 61 6e    If no busy han
12e80 64 6c 65 72 20 6f 72 20 61 20 64 69 66 66 65 72  dler or a differ
12e90 65 6e 74 20 62 75 73 79 20 68 61 6e 64 6c 65 72  ent busy handler
12ea0 20 69 73 20 73 65 74 0a 20 20 2a 2a 20 74 68 65   is set.  ** the
12eb0 6e 20 30 20 69 73 20 72 65 74 75 72 6e 65 64 2e  n 0 is returned.
12ec0 20 20 53 65 74 74 69 6e 67 20 74 68 65 20 62 75    Setting the bu
12ed0 73 79 5f 74 69 6d 65 6f 75 74 20 74 6f 20 30 20  sy_timeout to 0 
12ee0 6f 72 20 6e 65 67 61 74 69 76 65 0a 20 20 2a 2a  or negative.  **
12ef0 20 64 69 73 61 62 6c 65 73 20 74 68 65 20 74 69   disables the ti
12f00 6d 65 6f 75 74 2e 0a 20 20 2a 2f 0a 20 20 2f 2a  meout..  */.  /*
12f10 63 61 73 65 20 50 72 61 67 54 79 70 5f 42 55 53  case PragTyp_BUS
12f20 59 5f 54 49 4d 45 4f 55 54 2a 2f 20 64 65 66 61  Y_TIMEOUT*/ defa
12f30 75 6c 74 3a 20 7b 0a 20 20 20 20 61 73 73 65 72  ult: {.    asser
12f40 74 28 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b  t( aPragmaNames[
12f50 6d 69 64 5d 2e 65 50 72 61 67 54 79 70 3d 3d 50  mid].ePragTyp==P
12f60 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45  ragTyp_BUSY_TIME
12f70 4f 55 54 20 29 3b 0a 20 20 20 20 69 66 28 20 7a  OUT );.    if( z
12f80 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73  Right ){.      s
12f90 71 6c 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65  qlite3_busy_time
12fa0 6f 75 74 28 64 62 2c 20 73 71 6c 69 74 65 33 41  out(db, sqlite3A
12fb0 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20  toi(zRight));.  
12fc0 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69    }.    returnSi
12fd0 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20  ngleInt(pParse, 
12fe0 22 74 69 6d 65 6f 75 74 22 2c 20 20 64 62 2d 3e  "timeout",  db->
12ff0 62 75 73 79 54 69 6d 65 6f 75 74 29 3b 0a 20 20  busyTimeout);.  
13000 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
13010 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
13020 20 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74   soft_heap_limit
13030 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 73  .  **   PRAGMA s
13040 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20 3d  oft_heap_limit =
13050 20 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 61 6c   N.  **.  ** Cal
13060 6c 20 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68  l sqlite3_soft_h
13070 65 61 70 5f 6c 69 6d 69 74 36 34 28 4e 29 2e 20  eap_limit64(N). 
13080 20 52 65 74 75 72 6e 20 74 68 65 20 72 65 73 75   Return the resu
13090 6c 74 2e 20 20 49 66 20 4e 20 69 73 20 6f 6d 69  lt.  If N is omi
130a0 74 74 65 64 2c 0a 20 20 2a 2a 20 75 73 65 20 2d  tted,.  ** use -
130b0 31 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  1..  */.  case P
130c0 72 61 67 54 79 70 5f 53 4f 46 54 5f 48 45 41 50  ragTyp_SOFT_HEAP
130d0 5f 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 73 71  _LIMIT: {.    sq
130e0 6c 69 74 65 33 5f 69 6e 74 36 34 20 4e 3b 0a 20  lite3_int64 N;. 
130f0 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 26 26     if( zRight &&
13100 20 73 71 6c 69 74 65 33 41 74 6f 69 36 34 28 7a   sqlite3Atoi64(z
13110 52 69 67 68 74 2c 20 26 4e 2c 20 31 30 30 30 30  Right, &N, 10000
13120 30 30 2c 20 53 51 4c 49 54 45 5f 55 54 46 38 29  00, SQLITE_UTF8)
13130 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20  ==SQLITE_OK ){. 
13140 20 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6f 66       sqlite3_sof
13150 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 4e  t_heap_limit64(N
13160 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74  );.    }.    ret
13170 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
13180 72 73 65 2c 20 22 73 6f 66 74 5f 68 65 61 70 5f  rse, "soft_heap_
13190 6c 69 6d 69 74 22 2c 20 20 73 71 6c 69 74 65 33  limit",  sqlite3
131a0 5f 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74  _soft_heap_limit
131b0 36 34 28 2d 31 29 29 3b 0a 20 20 20 20 62 72 65  64(-1));.    bre
131c0 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66 20 64 65 66  ak;.  }..#if def
131d0 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
131e0 47 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51  G) || defined(SQ
131f0 4c 49 54 45 5f 54 45 53 54 29 0a 20 20 2f 2a 0a  LITE_TEST).  /*.
13200 20 20 2a 2a 20 52 65 70 6f 72 74 20 74 68 65 20    ** Report the 
13210 63 75 72 72 65 6e 74 20 73 74 61 74 65 20 6f 66  current state of
13220 20 66 69 6c 65 20 6c 6f 67 73 20 66 6f 72 20 61   file logs for a
13230 6c 6c 20 64 61 74 61 62 61 73 65 73 0a 20 20 2a  ll databases.  *
13240 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  /.  case PragTyp
13250 5f 4c 4f 43 4b 5f 53 54 41 54 55 53 3a 20 7b 0a  _LOCK_STATUS: {.
13260 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
13270 20 63 68 61 72 20 2a 63 6f 6e 73 74 20 61 7a 4c   char *const azL
13280 6f 63 6b 4e 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20  ockName[] = {.  
13290 20 20 20 20 22 75 6e 6c 6f 63 6b 65 64 22 2c 20      "unlocked", 
132a0 22 73 68 61 72 65 64 22 2c 20 22 72 65 73 65 72  "shared", "reser
132b0 76 65 64 22 2c 20 22 70 65 6e 64 69 6e 67 22 2c  ved", "pending",
132c0 20 22 65 78 63 6c 75 73 69 76 65 22 0a 20 20 20   "exclusive".   
132d0 20 7d 3b 0a 20 20 20 20 69 6e 74 20 69 3b 0a 20   };.    int i;. 
132e0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
132f0 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 32 29 3b 0a  tNumCols(v, 2);.
13300 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d      pParse->nMem
13310 20 3d 20 32 3b 0a 20 20 20 20 73 71 6c 69 74 65   = 2;.    sqlite
13320 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
13330 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 0, COLNAME_NA
13340 4d 45 2c 20 22 64 61 74 61 62 61 73 65 22 2c 20  ME, "database", 
13350 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
13360 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
13370 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20  etColName(v, 1, 
13380 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73  COLNAME_NAME, "s
13390 74 61 74 75 73 22 2c 20 53 51 4c 49 54 45 5f 53  tatus", SQLITE_S
133a0 54 41 54 49 43 29 3b 0a 20 20 20 20 66 6f 72 28  TATIC);.    for(
133b0 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e 44 62 3b 20  i=0; i<db->nDb; 
133c0 69 2b 2b 29 7b 0a 20 20 20 20 20 20 42 74 72 65  i++){.      Btre
133d0 65 20 2a 70 42 74 3b 0a 20 20 20 20 20 20 63 6f  e *pBt;.      co
133e0 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 61 74 65  nst char *zState
133f0 20 3d 20 22 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20   = "unknown";.  
13400 20 20 20 20 69 6e 74 20 6a 3b 0a 20 20 20 20 20      int j;.     
13410 20 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e   if( db->aDb[i].
13420 7a 4e 61 6d 65 3d 3d 30 20 29 20 63 6f 6e 74 69  zName==0 ) conti
13430 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  nue;.      sqlit
13440 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
13450 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31  OP_String8, 0, 1
13460 2c 20 30 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  , 0, db->aDb[i].
13470 7a 4e 61 6d 65 2c 20 50 34 5f 53 54 41 54 49 43  zName, P4_STATIC
13480 29 3b 0a 20 20 20 20 20 20 70 42 74 20 3d 20 64  );.      pBt = d
13490 62 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 3b 0a 20  b->aDb[i].pBt;. 
134a0 20 20 20 20 20 69 66 28 20 70 42 74 3d 3d 30 20       if( pBt==0 
134b0 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65 50  || sqlite3BtreeP
134c0 61 67 65 72 28 70 42 74 29 3d 3d 30 20 29 7b 0a  ager(pBt)==0 ){.
134d0 20 20 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d          zState =
134e0 20 22 63 6c 6f 73 65 64 22 3b 0a 20 20 20 20 20   "closed";.     
134f0 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69 74   }else if( sqlit
13500 65 33 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28  e3_file_control(
13510 64 62 2c 20 69 20 3f 20 64 62 2d 3e 61 44 62 5b  db, i ? db->aDb[
13520 69 5d 2e 7a 4e 61 6d 65 20 3a 20 30 2c 20 0a 20  i].zName : 0, . 
13530 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13540 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
13550 20 20 20 20 53 51 4c 49 54 45 5f 46 43 4e 54 4c      SQLITE_FCNTL
13560 5f 4c 4f 43 4b 53 54 41 54 45 2c 20 26 6a 29 3d  _LOCKSTATE, &j)=
13570 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
13580 20 20 20 20 20 20 20 7a 53 74 61 74 65 20 3d 20         zState = 
13590 61 7a 4c 6f 63 6b 4e 61 6d 65 5b 6a 5d 3b 0a 20  azLockName[j];. 
135a0 20 20 20 20 20 7d 0a 20 20 20 20 20 20 73 71 6c       }.      sql
135b0 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
135c0 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
135d0 20 32 2c 20 30 2c 20 7a 53 74 61 74 65 2c 20 50   2, 0, zState, P
135e0 34 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  4_STATIC);.     
135f0 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
13600 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
13610 6f 77 2c 20 31 2c 20 32 29 3b 0a 20 20 20 20 7d  ow, 1, 2);.    }
13620 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
13630 23 65 6e 64 69 66 0a 0a 23 69 66 64 65 66 20 53  #endif..#ifdef S
13640 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a  QLITE_HAS_CODEC.
13650 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4b    case PragTyp_K
13660 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52  EY: {.    if( zR
13670 69 67 68 74 20 29 20 73 71 6c 69 74 65 33 5f 6b  ight ) sqlite3_k
13680 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a  ey_v2(db, zDb, z
13690 52 69 67 68 74 2c 20 73 71 6c 69 74 65 33 53 74  Right, sqlite3St
136a0 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 29 3b  rlen30(zRight));
136b0 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
136c0 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 52    case PragTyp_R
136d0 45 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66 28 20  EKEY: {.    if( 
136e0 7a 52 69 67 68 74 20 29 20 73 71 6c 69 74 65 33  zRight ) sqlite3
136f0 5f 72 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a 44  _rekey_v2(db, zD
13700 62 2c 20 7a 52 69 67 68 74 2c 20 73 71 6c 69 74  b, zRight, sqlit
13710 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69 67 68  e3Strlen30(zRigh
13720 74 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  t));.    break;.
13730 20 20 7d 0a 20 20 63 61 73 65 20 50 72 61 67 54    }.  case PragT
13740 79 70 5f 48 45 58 4b 45 59 3a 20 7b 0a 20 20 20  yp_HEXKEY: {.   
13750 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
13760 20 20 20 20 20 75 38 20 69 42 79 74 65 3b 0a 20       u8 iByte;. 
13770 20 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20       int i;.    
13780 20 20 63 68 61 72 20 7a 4b 65 79 5b 34 30 5d 3b    char zKey[40];
13790 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 2c 20  .      for(i=0, 
137a0 69 42 79 74 65 3d 30 3b 20 69 3c 73 69 7a 65 6f  iByte=0; i<sizeo
137b0 66 28 7a 4b 65 79 29 2a 32 20 26 26 20 73 71 6c  f(zKey)*2 && sql
137c0 69 74 65 33 49 73 78 64 69 67 69 74 28 7a 52 69  ite3Isxdigit(zRi
137d0 67 68 74 5b 69 5d 29 3b 20 69 2b 2b 29 7b 0a 20  ght[i]); i++){. 
137e0 20 20 20 20 20 20 20 69 42 79 74 65 20 3d 20 28         iByte = (
137f0 69 42 79 74 65 3c 3c 34 29 20 2b 20 73 71 6c 69  iByte<<4) + sqli
13800 74 65 33 48 65 78 54 6f 49 6e 74 28 7a 52 69 67  te3HexToInt(zRig
13810 68 74 5b 69 5d 29 3b 0a 20 20 20 20 20 20 20 20  ht[i]);.        
13820 69 66 28 20 28 69 26 31 29 21 3d 30 20 29 20 7a  if( (i&1)!=0 ) z
13830 4b 65 79 5b 69 2f 32 5d 20 3d 20 69 42 79 74 65  Key[i/2] = iByte
13840 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
13850 69 66 28 20 28 7a 4c 65 66 74 5b 33 5d 20 26 20  if( (zLeft[3] & 
13860 30 78 66 29 3d 3d 30 78 62 20 29 7b 0a 20 20 20  0xf)==0xb ){.   
13870 20 20 20 20 20 73 71 6c 69 74 65 33 5f 6b 65 79       sqlite3_key
13880 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a 4b 65  _v2(db, zDb, zKe
13890 79 2c 20 69 2f 32 29 3b 0a 20 20 20 20 20 20 7d  y, i/2);.      }
138a0 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 73 71  else{.        sq
138b0 6c 69 74 65 33 5f 72 65 6b 65 79 5f 76 32 28 64  lite3_rekey_v2(d
138c0 62 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69 2f  b, zDb, zKey, i/
138d0 32 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  2);.      }.    
138e0 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
138f0 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
13900 6e 65 64 28 53 51 4c 49 54 45 5f 48 41 53 5f 43  ned(SQLITE_HAS_C
13910 4f 44 45 43 29 20 7c 7c 20 64 65 66 69 6e 65 64  ODEC) || defined
13920 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 43  (SQLITE_ENABLE_C
13930 45 52 4f 44 29 0a 20 20 63 61 73 65 20 50 72 61  EROD).  case Pra
13940 67 54 79 70 5f 41 43 54 49 56 41 54 45 5f 45 58  gTyp_ACTIVATE_EX
13950 54 45 4e 53 49 4f 4e 53 3a 20 69 66 28 20 7a 52  TENSIONS: if( zR
13960 69 67 68 74 20 29 7b 0a 23 69 66 64 65 66 20 53  ight ){.#ifdef S
13970 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 0a  QLITE_HAS_CODEC.
13980 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53      if( sqlite3S
13990 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c 20  trNICmp(zRight, 
139a0 22 73 65 65 2d 22 2c 20 34 29 3d 3d 30 20 29 7b  "see-", 4)==0 ){
139b0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 61  .      sqlite3_a
139c0 63 74 69 76 61 74 65 5f 73 65 65 28 26 7a 52 69  ctivate_see(&zRi
139d0 67 68 74 5b 34 5d 29 3b 0a 20 20 20 20 7d 0a 23  ght[4]);.    }.#
139e0 65 6e 64 69 66 0a 23 69 66 64 65 66 20 53 51 4c  endif.#ifdef SQL
139f0 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44  ITE_ENABLE_CEROD
13a00 0a 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33  .    if( sqlite3
13a10 53 74 72 4e 49 43 6d 70 28 7a 52 69 67 68 74 2c  StrNICmp(zRight,
13a20 20 22 63 65 72 6f 64 2d 22 2c 20 36 29 3d 3d 30   "cerod-", 6)==0
13a30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
13a40 33 5f 61 63 74 69 76 61 74 65 5f 63 65 72 6f 64  3_activate_cerod
13a50 28 26 7a 52 69 67 68 74 5b 36 5d 29 3b 0a 20 20  (&zRight[6]);.  
13a60 20 20 7d 0a 23 65 6e 64 69 66 0a 20 20 7d 0a 20    }.#endif.  }. 
13a70 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a   break;.#endif..
13a80 20 20 7d 20 2f 2a 20 45 6e 64 20 6f 66 20 74 68    } /* End of th
13a90 65 20 50 52 41 47 4d 41 20 73 77 69 74 63 68 20  e PRAGMA switch 
13aa0 2a 2f 0a 0a 70 72 61 67 6d 61 5f 6f 75 74 3a 0a  */..pragma_out:.
13ab0 20 20 73 71 6c 69 74 65 33 44 62 46 72 65 65 28    sqlite3DbFree(
13ac0 64 62 2c 20 7a 4c 65 66 74 29 3b 0a 20 20 73 71  db, zLeft);.  sq
13ad0 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
13ae0 7a 52 69 67 68 74 29 3b 0a 7d 0a 0a 23 65 6e 64  zRight);.}..#end
13af0 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49  if /* SQLITE_OMI
13b00 54 5f 50 52 41 47 4d 41 20 2a 2f 0a              T_PRAGMA */.