/ Hex Artifact Content
Login

Artifact 294c31d79dfcb6f9cea49528b19e5f8b25e3d5ec:


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 50  define PragTyp_P
08d0: 41 47 45 52 5f 4f 54 41 5f 4d 4f 44 45 20 20 20  AGER_OTA_MODE   
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 45 43 55 52 45 5f 44 45 4c 45 54 45 20 20 20  SECURE_DELETE   
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 48 52 49 4e 4b 5f 4d 45 4d 4f 52 59 20 20  _SHRINK_MEMORY  
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 4f 46 54 5f 48 45 41 50 5f 4c 49 4d 49  p_SOFT_HEAP_LIMI
0970: 54 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  T               
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 54 41 54 53 20 20 20 20 20 20 20 20  yp_STATS        
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 53 59 4e 43 48 52 4f 4e 4f 55 53 20  Typ_SYNCHRONOUS 
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 41 42 4c 45 5f 49 4e 46 4f 20  gTyp_TABLE_INFO 
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: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0a40: 20 20 20 20 33 32 0a 23 64 65 66 69 6e 65 20 50      32.#define P
0a50: 72 61 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52  ragTyp_TEMP_STOR
0a60: 45 5f 44 49 52 45 43 54 4f 52 59 20 20 20 20 20  E_DIRECTORY     
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 54 48 52 45 41 44 53 20  PragTyp_THREADS 
0a90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
0aa0: 20 20 20 20 20 20 33 34 0a 23 64 65 66 69 6e 65        34.#define
0ab0: 20 50 72 61 67 54 79 70 5f 57 41 4c 5f 41 55 54   PragTyp_WAL_AUT
0ac0: 4f 43 48 45 43 4b 50 4f 49 4e 54 20 20 20 20 20  OCHECKPOINT     
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 57 41 4c 5f 43 48  e PragTyp_WAL_CH
0af0: 45 43 4b 50 4f 49 4e 54 20 20 20 20 20 20 20 20  ECKPOINT        
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 41 43 54 49 56  ne PragTyp_ACTIV
0b20: 41 54 45 5f 45 58 54 45 4e 53 49 4f 4e 53 20 20  ATE_EXTENSIONS  
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 48 45 58 4b  ine PragTyp_HEXK
0b50: 45 59 20 20 20 20 20 20 20 20 20 20 20 20 20 20  EY              
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 4b 45 59  fine PragTyp_KEY
0b80: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
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 52 45  efine PragTyp_RE
0bb0: 4b 45 59 20 20 20 20 20 20 20 20 20 20 20 20 20  KEY             
0bc0: 20 20 20 20 20 20 20 20 20 20 20 20 34 30 0a 23              40.#
0bd0: 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f 4c  define PragTyp_L
0be0: 4f 43 4b 5f 53 54 41 54 55 53 20 20 20 20 20 20  OCK_STATUS      
0bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 34 31 0a               41.
0c00: 23 64 65 66 69 6e 65 20 50 72 61 67 54 79 70 5f  #define PragTyp_
0c10: 50 41 52 53 45 52 5f 54 52 41 43 45 20 20 20 20  PARSER_TRACE    
0c20: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 34 32                42
0c30: 0a 23 64 65 66 69 6e 65 20 50 72 61 67 46 6c 61  .#define PragFla
0c40: 67 5f 4e 65 65 64 53 63 68 65 6d 61 20 20 20 20  g_NeedSchema    
0c50: 20 20 20 20 20 20 20 30 78 30 31 0a 73 74 61 74         0x01.stat
0c60: 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63 74 20  ic const struct 
0c70: 73 50 72 61 67 6d 61 4e 61 6d 65 73 20 7b 0a 20  sPragmaNames {. 
0c80: 20 63 6f 6e 73 74 20 63 68 61 72 20 2a 63 6f 6e   const char *con
0c90: 73 74 20 7a 4e 61 6d 65 3b 20 20 2f 2a 20 4e 61  st zName;  /* Na
0ca0: 6d 65 20 6f 66 20 70 72 61 67 6d 61 20 2a 2f 0a  me of pragma */.
0cb0: 20 20 75 38 20 65 50 72 61 67 54 79 70 3b 20 20    u8 ePragTyp;  
0cc0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 50              /* P
0cd0: 72 61 67 54 79 70 5f 58 58 58 20 76 61 6c 75 65  ragTyp_XXX value
0ce0: 20 2a 2f 0a 20 20 75 38 20 6d 50 72 61 67 46 6c   */.  u8 mPragFl
0cf0: 61 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20  ag;             
0d00: 2f 2a 20 5a 65 72 6f 20 6f 72 20 6d 6f 72 65 20  /* Zero or more 
0d10: 50 72 61 67 46 6c 61 67 5f 58 58 58 20 76 61 6c  PragFlag_XXX val
0d20: 75 65 73 20 2a 2f 0a 20 20 75 33 32 20 69 41 72  ues */.  u32 iAr
0d30: 67 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20  g;              
0d40: 20 20 20 2f 2a 20 45 78 74 72 61 20 61 72 67 75     /* Extra argu
0d50: 6d 65 6e 74 20 2a 2f 0a 7d 20 61 50 72 61 67 6d  ment */.} aPragm
0d60: 61 4e 61 6d 65 73 5b 5d 20 3d 20 7b 0a 23 69 66  aNames[] = {.#if
0d70: 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f   defined(SQLITE_
0d80: 48 41 53 5f 43 4f 44 45 43 29 20 7c 7c 20 64 65  HAS_CODEC) || de
0d90: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 45 4e 41  fined(SQLITE_ENA
0da0: 42 4c 45 5f 43 45 52 4f 44 29 0a 20 20 7b 20 2f  BLE_CEROD).  { /
0db0: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
0dc0: 22 61 63 74 69 76 61 74 65 5f 65 78 74 65 6e 73  "activate_extens
0dd0: 69 6f 6e 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50  ions",.    /* eP
0de0: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
0df0: 54 79 70 5f 41 43 54 49 56 41 54 45 5f 45 58 54  Typ_ACTIVATE_EXT
0e00: 45 4e 53 49 4f 4e 53 2c 0a 20 20 20 20 2f 2a 20  ENSIONS,.    /* 
0e10: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
0e20: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
0e30: 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69     */ 0 },.#endi
0e40: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
0e50: 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
0e60: 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41  A_VERSION_PRAGMA
0e70: 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  S).  { /* zName:
0e80: 20 20 20 20 20 2a 2f 20 22 61 70 70 6c 69 63 61       */ "applica
0e90: 74 69 6f 6e 5f 69 64 22 2c 0a 20 20 20 20 2f 2a  tion_id",.    /*
0ea0: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
0eb0: 72 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56 41  ragTyp_HEADER_VA
0ec0: 4c 55 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  LUE,.    /* ePra
0ed0: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
0ee0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
0ef0: 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69  / 0 },.#endif.#i
0f00: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
0f10: 45 5f 4f 4d 49 54 5f 41 55 54 4f 56 41 43 55 55  E_OMIT_AUTOVACUU
0f20: 4d 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  M).  { /* zName:
0f30: 20 20 20 20 20 2a 2f 20 22 61 75 74 6f 5f 76 61       */ "auto_va
0f40: 63 75 75 6d 22 2c 0a 20 20 20 20 2f 2a 20 65 50  cuum",.    /* eP
0f50: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
0f60: 54 79 70 5f 41 55 54 4f 5f 56 41 43 55 55 4d 2c  Typ_AUTO_VACUUM,
0f70: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
0f80: 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e  g: */ PragFlag_N
0f90: 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f  eedSchema,.    /
0fa0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
0fb0: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
0fc0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
0fd0: 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41  OMIT_FLAG_PRAGMA
0fe0: 53 29 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  S).#if !defined(
0ff0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
1000: 4d 41 54 49 43 5f 49 4e 44 45 58 29 0a 20 20 7b  MATIC_INDEX).  {
1010: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
1020: 2f 20 22 61 75 74 6f 6d 61 74 69 63 5f 69 6e 64  / "automatic_ind
1030: 65 78 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ex",.    /* ePra
1040: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
1050: 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65  p_FLAG,.    /* e
1060: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
1070: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
1080: 20 20 2a 2f 20 53 51 4c 49 54 45 5f 41 75 74 6f    */ SQLITE_Auto
1090: 49 6e 64 65 78 20 7d 2c 0a 23 65 6e 64 69 66 0a  Index },.#endif.
10a0: 23 65 6e 64 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e  #endif.  { /* zN
10b0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 62 75 73  ame:     */ "bus
10c0: 79 5f 74 69 6d 65 6f 75 74 22 2c 0a 20 20 20 20  y_timeout",.    
10d0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
10e0: 20 50 72 61 67 54 79 70 5f 42 55 53 59 5f 54 49   PragTyp_BUSY_TI
10f0: 4d 45 4f 55 54 2c 0a 20 20 20 20 2f 2a 20 65 50  MEOUT,.    /* eP
1100: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
1110: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
1120: 20 2a 2f 20 30 20 7d 2c 0a 23 69 66 20 21 64 65   */ 0 },.#if !de
1130: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
1140: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29  T_PAGER_PRAGMAS)
1150: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
1160: 20 20 20 2a 2f 20 22 63 61 63 68 65 5f 73 69 7a     */ "cache_siz
1170: 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  e",.    /* ePrag
1180: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
1190: 5f 43 41 43 48 45 5f 53 49 5a 45 2c 0a 20 20 20  _CACHE_SIZE,.   
11a0: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
11b0: 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53  / PragFlag_NeedS
11c0: 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41  chema,.    /* iA
11d0: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
11e0: 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66  .#endif.#if !def
11f0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1200: 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 20  _FLAG_PRAGMAS). 
1210: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
1220: 20 2a 2f 20 22 63 61 63 68 65 5f 73 70 69 6c 6c   */ "cache_spill
1230: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
1240: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
1250: 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72  FLAG,.    /* ePr
1260: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
1270: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
1280: 2a 2f 20 53 51 4c 49 54 45 5f 43 61 63 68 65 53  */ SQLITE_CacheS
1290: 70 69 6c 6c 20 7d 2c 0a 23 65 6e 64 69 66 0a 20  pill },.#endif. 
12a0: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
12b0: 20 2a 2f 20 22 63 61 73 65 5f 73 65 6e 73 69 74   */ "case_sensit
12c0: 69 76 65 5f 6c 69 6b 65 22 2c 0a 20 20 20 20 2f  ive_like",.    /
12d0: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
12e0: 50 72 61 67 54 79 70 5f 43 41 53 45 5f 53 45 4e  PragTyp_CASE_SEN
12f0: 53 49 54 49 56 45 5f 4c 49 4b 45 2c 0a 20 20 20  SITIVE_LIKE,.   
1300: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
1310: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
1320: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
1330: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
1340: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
1350: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
1360: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 63 68 65 63  me:     */ "chec
1370: 6b 70 6f 69 6e 74 5f 66 75 6c 6c 66 73 79 6e 63  kpoint_fullfsync
1380: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
1390: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
13a0: 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72  FLAG,.    /* ePr
13b0: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
13c0: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
13d0: 2a 2f 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75  */ SQLITE_CkptFu
13e0: 6c 6c 46 53 79 6e 63 20 7d 2c 0a 23 65 6e 64 69  llFSync },.#endi
13f0: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
1400: 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
1410: 41 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f  A_PRAGMAS).  { /
1420: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
1430: 22 63 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 22  "collation_list"
1440: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
1450: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 43  p:  */ PragTyp_C
1460: 4f 4c 4c 41 54 49 4f 4e 5f 4c 49 53 54 2c 0a 20  OLLATION_LIST,. 
1470: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
1480: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
1490: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
14a0: 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66  .#endif.#if !def
14b0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
14c0: 5f 43 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44  _COMPILEOPTION_D
14d0: 49 41 47 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  IAGS).  { /* zNa
14e0: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 63 6f 6d 70  me:     */ "comp
14f0: 69 6c 65 5f 6f 70 74 69 6f 6e 73 22 2c 0a 20 20  ile_options",.  
1500: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
1510: 2a 2f 20 50 72 61 67 54 79 70 5f 43 4f 4d 50 49  */ PragTyp_COMPI
1520: 4c 45 5f 4f 50 54 49 4f 4e 53 2c 0a 20 20 20 20  LE_OPTIONS,.    
1530: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
1540: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
1550: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
1560: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
1570: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  d(SQLITE_OMIT_FL
1580: 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20  AG_PRAGMAS).  { 
1590: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
15a0: 20 22 63 6f 75 6e 74 5f 63 68 61 6e 67 65 73 22   "count_changes"
15b0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
15c0: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46  p:  */ PragTyp_F
15d0: 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  LAG,.    /* ePra
15e0: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
15f0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
1600: 2f 20 53 51 4c 49 54 45 5f 43 6f 75 6e 74 52 6f  / SQLITE_CountRo
1610: 77 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66  ws },.#endif.#if
1620: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1630: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
1640: 4d 41 53 29 20 26 26 20 53 51 4c 49 54 45 5f 4f  MAS) && SQLITE_O
1650: 53 5f 57 49 4e 0a 20 20 7b 20 2f 2a 20 7a 4e 61  S_WIN.  { /* zNa
1660: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 64 61 74 61  me:     */ "data
1670: 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79  _store_directory
1680: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
1690: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
16a0: 44 41 54 41 5f 53 54 4f 52 45 5f 44 49 52 45 43  DATA_STORE_DIREC
16b0: 54 4f 52 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72  TORY,.    /* ePr
16c0: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
16d0: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
16e0: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
16f0: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
1700: 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50  TE_OMIT_SCHEMA_P
1710: 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a  RAGMAS).  { /* z
1720: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 64 61  Name:     */ "da
1730: 74 61 62 61 73 65 5f 6c 69 73 74 22 2c 0a 20 20  tabase_list",.  
1740: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
1750: 2a 2f 20 50 72 61 67 54 79 70 5f 44 41 54 41 42  */ PragTyp_DATAB
1760: 41 53 45 5f 4c 49 53 54 2c 0a 20 20 20 20 2f 2a  ASE_LIST,.    /*
1770: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50   ePragFlag: */ P
1780: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
1790: 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a  ma,.    /* iArg:
17a0: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
17b0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
17c0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41  d(SQLITE_OMIT_PA
17d0: 47 45 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20  GER_PRAGMAS) && 
17e0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
17f0: 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44 29  OMIT_DEPRECATED)
1800: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
1810: 20 20 20 2a 2f 20 22 64 65 66 61 75 6c 74 5f 63     */ "default_c
1820: 61 63 68 65 5f 73 69 7a 65 22 2c 0a 20 20 20 20  ache_size",.    
1830: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
1840: 20 50 72 61 67 54 79 70 5f 44 45 46 41 55 4c 54   PragTyp_DEFAULT
1850: 5f 43 41 43 48 45 5f 53 49 5a 45 2c 0a 20 20 20  _CACHE_SIZE,.   
1860: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
1870: 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53  / PragFlag_NeedS
1880: 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41  chema,.    /* iA
1890: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
18a0: 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66  .#endif.#if !def
18b0: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
18c0: 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 23  _FLAG_PRAGMAS).#
18d0: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
18e0: 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
18f0: 4b 45 59 29 20 26 26 20 21 64 65 66 69 6e 65 64  KEY) && !defined
1900: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49  (SQLITE_OMIT_TRI
1910: 47 47 45 52 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GGER).  { /* zNa
1920: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 64 65 66 65  me:     */ "defe
1930: 72 5f 66 6f 72 65 69 67 6e 5f 6b 65 79 73 22 2c  r_foreign_keys",
1940: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
1950: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
1960: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
1970: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
1980: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
1990: 20 53 51 4c 49 54 45 5f 44 65 66 65 72 46 4b 73   SQLITE_DeferFKs
19a0: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64 69   },.#endif.#endi
19b0: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
19c0: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f  QLITE_OMIT_FLAG_
19d0: 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20  PRAGMAS).  { /* 
19e0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 65  zName:     */ "e
19f0: 6d 70 74 79 5f 72 65 73 75 6c 74 5f 63 61 6c 6c  mpty_result_call
1a00: 62 61 63 6b 73 22 2c 0a 20 20 20 20 2f 2a 20 65  backs",.    /* e
1a10: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
1a20: 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f  gTyp_FLAG,.    /
1a30: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
1a40: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
1a50: 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 4e       */ SQLITE_N
1a60: 75 6c 6c 43 61 6c 6c 62 61 63 6b 20 7d 2c 0a 23  ullCallback },.#
1a70: 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e  endif.#if !defin
1a80: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 55  ed(SQLITE_OMIT_U
1a90: 54 46 31 36 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  TF16).  { /* zNa
1aa0: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 65 6e 63 6f  me:     */ "enco
1ab0: 64 69 6e 67 22 2c 0a 20 20 20 20 2f 2a 20 65 50  ding",.    /* eP
1ac0: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
1ad0: 54 79 70 5f 45 4e 43 4f 44 49 4e 47 2c 0a 20 20  Typ_ENCODING,.  
1ae0: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
1af0: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
1b00: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
1b10: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
1b20: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
1b30: 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20  FOREIGN_KEY) && 
1b40: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1b50: 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 0a 20 20  OMIT_TRIGGER).  
1b60: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
1b70: 2a 2f 20 22 66 6f 72 65 69 67 6e 5f 6b 65 79 5f  */ "foreign_key_
1b80: 63 68 65 63 6b 22 2c 0a 20 20 20 20 2f 2a 20 65  check",.    /* e
1b90: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
1ba0: 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  gTyp_FOREIGN_KEY
1bb0: 5f 43 48 45 43 4b 2c 0a 20 20 20 20 2f 2a 20 65  _CHECK,.    /* e
1bc0: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61  PragFlag: */ Pra
1bd0: 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61  gFlag_NeedSchema
1be0: 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20  ,.    /* iArg:  
1bf0: 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64      */ 0 },.#end
1c00: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
1c10: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
1c20: 49 47 4e 5f 4b 45 59 29 0a 20 20 7b 20 2f 2a 20  IGN_KEY).  { /* 
1c30: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66  zName:     */ "f
1c40: 6f 72 65 69 67 6e 5f 6b 65 79 5f 6c 69 73 74 22  oreign_key_list"
1c50: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
1c60: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46  p:  */ PragTyp_F
1c70: 4f 52 45 49 47 4e 5f 4b 45 59 5f 4c 49 53 54 2c  OREIGN_KEY_LIST,
1c80: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  .    /* ePragFla
1c90: 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e  g: */ PragFlag_N
1ca0: 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f  eedSchema,.    /
1cb0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
1cc0: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
1cd0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
1ce0: 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41  OMIT_FLAG_PRAGMA
1cf0: 53 29 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  S).#if !defined(
1d00: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45  SQLITE_OMIT_FORE
1d10: 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65 66  IGN_KEY) && !def
1d20: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1d30: 5f 54 52 49 47 47 45 52 29 0a 20 20 7b 20 2f 2a  _TRIGGER).  { /*
1d40: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
1d50: 66 6f 72 65 69 67 6e 5f 6b 65 79 73 22 2c 0a 20  foreign_keys",. 
1d60: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
1d70: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
1d80: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
1d90: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
1da0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
1db0: 51 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79  QLITE_ForeignKey
1dc0: 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64  s },.#endif.#end
1dd0: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
1de0: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
1df0: 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d  MA_VERSION_PRAGM
1e00: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
1e10: 3a 20 20 20 20 20 2a 2f 20 22 66 72 65 65 6c 69  :     */ "freeli
1e20: 73 74 5f 63 6f 75 6e 74 22 2c 0a 20 20 20 20 2f  st_count",.    /
1e30: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
1e40: 50 72 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56  PragTyp_HEADER_V
1e50: 41 4c 55 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ALUE,.    /* ePr
1e60: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
1e70: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
1e80: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
1e90: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
1ea0: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
1eb0: 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61  GMAS).  { /* zNa
1ec0: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66 75 6c 6c  me:     */ "full
1ed0: 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 22 2c 0a  _column_names",.
1ee0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
1ef0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
1f00: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
1f10: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
1f20: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
1f30: 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c 4e 61  SQLITE_FullColNa
1f40: 6d 65 73 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e  mes },.  { /* zN
1f50: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 66 75 6c  ame:     */ "ful
1f60: 6c 66 73 79 6e 63 22 2c 0a 20 20 20 20 2f 2a 20  lfsync",.    /* 
1f70: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
1f80: 61 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20  agTyp_FLAG,.    
1f90: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
1fa0: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
1fb0: 20 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f        */ SQLITE_
1fc0: 46 75 6c 6c 46 53 79 6e 63 20 7d 2c 0a 23 65 6e  FullFSync },.#en
1fd0: 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
1fe0: 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43  SQLITE_HAS_CODEC
1ff0: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
2000: 20 20 20 20 2a 2f 20 22 68 65 78 6b 65 79 22 2c      */ "hexkey",
2010: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
2020: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 48 45  :  */ PragTyp_HE
2030: 58 4b 45 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72  XKEY,.    /* ePr
2040: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
2050: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2060: 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a  */ 0 },.  { /* z
2070: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 68 65  Name:     */ "he
2080: 78 72 65 6b 65 79 22 2c 0a 20 20 20 20 2f 2a 20  xrekey",.    /* 
2090: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
20a0: 61 67 54 79 70 5f 48 45 58 4b 45 59 2c 0a 20 20  agTyp_HEXKEY,.  
20b0: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
20c0: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
20d0: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
20e0: 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69  #endif.#if !defi
20f0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
2100: 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 23 69  FLAG_PRAGMAS).#i
2110: 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  f !defined(SQLIT
2120: 45 5f 4f 4d 49 54 5f 43 48 45 43 4b 29 0a 20 20  E_OMIT_CHECK).  
2130: 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20  { /* zName:     
2140: 2a 2f 20 22 69 67 6e 6f 72 65 5f 63 68 65 63 6b  */ "ignore_check
2150: 5f 63 6f 6e 73 74 72 61 69 6e 74 73 22 2c 0a 20  _constraints",. 
2160: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2170: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
2180: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
2190: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
21a0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
21b0: 51 4c 49 54 45 5f 49 67 6e 6f 72 65 43 68 65 63  QLITE_IgnoreChec
21c0: 6b 73 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e  ks },.#endif.#en
21d0: 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64  dif.#if !defined
21e0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54  (SQLITE_OMIT_AUT
21f0: 4f 56 41 43 55 55 4d 29 0a 20 20 7b 20 2f 2a 20  OVACUUM).  { /* 
2200: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69  zName:     */ "i
2210: 6e 63 72 65 6d 65 6e 74 61 6c 5f 76 61 63 75 75  ncremental_vacuu
2220: 6d 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  m",.    /* ePrag
2230: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
2240: 5f 49 4e 43 52 45 4d 45 4e 54 41 4c 5f 56 41 43  _INCREMENTAL_VAC
2250: 55 55 4d 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  UUM,.    /* ePra
2260: 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c  gFlag: */ PragFl
2270: 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20  ag_NeedSchema,. 
2280: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2290: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
22a0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
22b0: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
22c0: 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20  PRAGMAS).  { /* 
22d0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69  zName:     */ "i
22e0: 6e 64 65 78 5f 69 6e 66 6f 22 2c 0a 20 20 20 20  ndex_info",.    
22f0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2300: 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 49   PragTyp_INDEX_I
2310: 4e 46 4f 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  NFO,.    /* ePra
2320: 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c  gFlag: */ PragFl
2330: 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20  ag_NeedSchema,. 
2340: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
2350: 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20   */ 0 },.  { /* 
2360: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 69  zName:     */ "i
2370: 6e 64 65 78 5f 6c 69 73 74 22 2c 0a 20 20 20 20  ndex_list",.    
2380: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2390: 20 50 72 61 67 54 79 70 5f 49 4e 44 45 58 5f 4c   PragTyp_INDEX_L
23a0: 49 53 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  IST,.    /* ePra
23b0: 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c  gFlag: */ PragFl
23c0: 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20  ag_NeedSchema,. 
23d0: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
23e0: 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a   */ 0 },.#endif.
23f0: 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c  #if !defined(SQL
2400: 49 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49  ITE_OMIT_INTEGRI
2410: 54 59 5f 43 48 45 43 4b 29 0a 20 20 7b 20 2f 2a  TY_CHECK).  { /*
2420: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
2430: 69 6e 74 65 67 72 69 74 79 5f 63 68 65 63 6b 22  integrity_check"
2440: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
2450: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 49  p:  */ PragTyp_I
2460: 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 2c 0a  NTEGRITY_CHECK,.
2470: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
2480: 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65  : */ PragFlag_Ne
2490: 65 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a  edSchema,.    /*
24a0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
24b0: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
24c0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
24d0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
24e0: 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  S).  { /* zName:
24f0: 20 20 20 20 20 2a 2f 20 22 6a 6f 75 72 6e 61 6c       */ "journal
2500: 5f 6d 6f 64 65 22 2c 0a 20 20 20 20 2f 2a 20 65  _mode",.    /* e
2510: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
2520: 67 54 79 70 5f 4a 4f 55 52 4e 41 4c 5f 4d 4f 44  gTyp_JOURNAL_MOD
2530: 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  E,.    /* ePragF
2540: 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46 6c 61 67  lag: */ PragFlag
2550: 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a 20 20 20  _NeedSchema,.   
2560: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
2570: 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e  / 0 },.  { /* zN
2580: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6a 6f 75  ame:     */ "jou
2590: 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 22  rnal_size_limit"
25a0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
25b0: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 4a  p:  */ PragTyp_J
25c0: 4f 55 52 4e 41 4c 5f 53 49 5a 45 5f 4c 49 4d 49  OURNAL_SIZE_LIMI
25d0: 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  T,.    /* ePragF
25e0: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
25f0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
2600: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
2610: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 48  defined(SQLITE_H
2620: 41 53 5f 43 4f 44 45 43 29 0a 20 20 7b 20 2f 2a  AS_CODEC).  { /*
2630: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
2640: 6b 65 79 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  key",.    /* ePr
2650: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
2660: 79 70 5f 4b 45 59 2c 0a 20 20 20 20 2f 2a 20 65  yp_KEY,.    /* e
2670: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
2680: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
2690: 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66    */ 0 },.#endif
26a0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
26b0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50  LITE_OMIT_FLAG_P
26c0: 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a  RAGMAS).  { /* z
26d0: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c 65  Name:     */ "le
26e0: 67 61 63 79 5f 66 69 6c 65 5f 66 6f 72 6d 61 74  gacy_file_format
26f0: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
2700: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
2710: 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72  FLAG,.    /* ePr
2720: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
2730: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
2740: 2a 2f 20 53 51 4c 49 54 45 5f 4c 65 67 61 63 79  */ SQLITE_Legacy
2750: 46 69 6c 65 46 6d 74 20 7d 2c 0a 23 65 6e 64 69  FileFmt },.#endi
2760: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
2770: 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52  QLITE_OMIT_PAGER
2780: 5f 50 52 41 47 4d 41 53 29 20 26 26 20 53 51 4c  _PRAGMAS) && SQL
2790: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
27a0: 4e 47 5f 53 54 59 4c 45 0a 20 20 7b 20 2f 2a 20  NG_STYLE.  { /* 
27b0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c  zName:     */ "l
27c0: 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 22 2c  ock_proxy_file",
27d0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
27e0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 4c 4f  :  */ PragTyp_LO
27f0: 43 4b 5f 50 52 4f 58 59 5f 46 49 4c 45 2c 0a 20  CK_PROXY_FILE,. 
2800: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
2810: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
2820: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
2830: 0a 23 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69  .#endif.#if defi
2840: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
2850: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
2860: 49 54 45 5f 54 45 53 54 29 0a 20 20 7b 20 2f 2a  ITE_TEST).  { /*
2870: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
2880: 6c 6f 63 6b 5f 73 74 61 74 75 73 22 2c 0a 20 20  lock_status",.  
2890: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
28a0: 2a 2f 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f  */ PragTyp_LOCK_
28b0: 53 54 41 54 55 53 2c 0a 20 20 20 20 2f 2a 20 65  STATUS,.    /* e
28c0: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
28d0: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
28e0: 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66    */ 0 },.#endif
28f0: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
2900: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
2910: 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20  PRAGMAS).  { /* 
2920: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 6c  zName:     */ "l
2930: 6f 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c 0a 20 20  ocking_mode",.  
2940: 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20    /* ePragTyp:  
2950: 2a 2f 20 50 72 61 67 54 79 70 5f 4c 4f 43 4b 49  */ PragTyp_LOCKI
2960: 4e 47 5f 4d 4f 44 45 2c 0a 20 20 20 20 2f 2a 20  NG_MODE,.    /* 
2970: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
2980: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
2990: 20 20 20 2a 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f     */ 0 },.  { /
29a0: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
29b0: 22 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 22  "max_page_count"
29c0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
29d0: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 50  p:  */ PragTyp_P
29e0: 41 47 45 5f 43 4f 55 4e 54 2c 0a 20 20 20 20 2f  AGE_COUNT,.    /
29f0: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
2a00: 50 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68  PragFlag_NeedSch
2a10: 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  ema,.    /* iArg
2a20: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 20  :      */ 0 },. 
2a30: 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20   { /* zName:    
2a40: 20 2a 2f 20 22 6d 6d 61 70 5f 73 69 7a 65 22 2c   */ "mmap_size",
2a50: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
2a60: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 4d 4d  :  */ PragTyp_MM
2a70: 41 50 5f 53 49 5a 45 2c 0a 20 20 20 20 2f 2a 20  AP_SIZE,.    /* 
2a80: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
2a90: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
2aa0: 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69     */ 0 },.#endi
2ab0: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
2ac0: 4c 49 54 45 5f 45 4e 41 42 4c 45 5f 4f 54 41 29  LITE_ENABLE_OTA)
2ad0: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
2ae0: 20 20 20 2a 2f 20 22 6f 74 61 5f 6d 6f 64 65 22     */ "ota_mode"
2af0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
2b00: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46  p:  */ PragTyp_F
2b10: 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  LAG,.    /* ePra
2b20: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
2b30: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
2b40: 2f 20 53 51 4c 49 54 45 5f 4f 74 61 4d 6f 64 65  / SQLITE_OtaMode
2b50: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
2b60: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
2b70: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
2b80: 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  S).  { /* zName:
2b90: 20 20 20 20 20 2a 2f 20 22 70 61 67 65 5f 63 6f       */ "page_co
2ba0: 75 6e 74 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  unt",.    /* ePr
2bb0: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
2bc0: 79 70 5f 50 41 47 45 5f 43 4f 55 4e 54 2c 0a 20  yp_PAGE_COUNT,. 
2bd0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
2be0: 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65   */ PragFlag_Nee
2bf0: 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20  dSchema,.    /* 
2c00: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
2c10: 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  },.  { /* zName:
2c20: 20 20 20 20 20 2a 2f 20 22 70 61 67 65 5f 73 69       */ "page_si
2c30: 7a 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ze",.    /* ePra
2c40: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
2c50: 70 5f 50 41 47 45 5f 53 49 5a 45 2c 0a 20 20 20  p_PAGE_SIZE,.   
2c60: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
2c70: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
2c80: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
2c90: 65 6e 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65  endif.#if define
2ca0: 64 28 53 51 4c 49 54 45 5f 45 4e 41 42 4c 45 5f  d(SQLITE_ENABLE_
2cb0: 4f 54 41 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  OTA).  { /* zNam
2cc0: 65 3a 20 20 20 20 20 2a 2f 20 22 70 61 67 65 72  e:     */ "pager
2cd0: 5f 6f 74 61 5f 6d 6f 64 65 22 2c 0a 20 20 20 20  _ota_mode",.    
2ce0: 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f  /* ePragTyp:  */
2cf0: 20 50 72 61 67 54 79 70 5f 50 41 47 45 52 5f 4f   PragTyp_PAGER_O
2d00: 54 41 5f 4d 4f 44 45 2c 0a 20 20 20 20 2f 2a 20  TA_MODE,.    /* 
2d10: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
2d20: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
2d30: 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69     */ 0 },.#endi
2d40: 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  f.#if defined(SQ
2d50: 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20 7b 20  LITE_DEBUG).  { 
2d60: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
2d70: 20 22 70 61 72 73 65 72 5f 74 72 61 63 65 22 2c   "parser_trace",
2d80: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
2d90: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 50 41  :  */ PragTyp_PA
2da0: 52 53 45 52 5f 54 52 41 43 45 2c 0a 20 20 20 20  RSER_TRACE,.    
2db0: 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f  /* ePragFlag: */
2dc0: 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a   0,.    /* iArg:
2dd0: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
2de0: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
2df0: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  d(SQLITE_OMIT_FL
2e00: 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20  AG_PRAGMAS).  { 
2e10: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
2e20: 20 22 71 75 65 72 79 5f 6f 6e 6c 79 22 2c 0a 20   "query_only",. 
2e30: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
2e40: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
2e50: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
2e60: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
2e70: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
2e80: 51 4c 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 20  QLITE_QueryOnly 
2e90: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
2ea0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
2eb0: 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
2ec0: 43 4b 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  CK).  { /* zName
2ed0: 3a 20 20 20 20 20 2a 2f 20 22 71 75 69 63 6b 5f  :     */ "quick_
2ee0: 63 68 65 63 6b 22 2c 0a 20 20 20 20 2f 2a 20 65  check",.    /* e
2ef0: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
2f00: 67 54 79 70 5f 49 4e 54 45 47 52 49 54 59 5f 43  gTyp_INTEGRITY_C
2f10: 48 45 43 4b 2c 0a 20 20 20 20 2f 2a 20 65 50 72  HECK,.    /* ePr
2f20: 61 67 46 6c 61 67 3a 20 2a 2f 20 50 72 61 67 46  agFlag: */ PragF
2f30: 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 2c 0a  lag_NeedSchema,.
2f40: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
2f50: 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66    */ 0 },.#endif
2f60: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
2f70: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50  LITE_OMIT_FLAG_P
2f80: 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a  RAGMAS).  { /* z
2f90: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 72 65  Name:     */ "re
2fa0: 61 64 5f 75 6e 63 6f 6d 6d 69 74 74 65 64 22 2c  ad_uncommitted",
2fb0: 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70  .    /* ePragTyp
2fc0: 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c  :  */ PragTyp_FL
2fd0: 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  AG,.    /* ePrag
2fe0: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
2ff0: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
3000: 20 53 51 4c 49 54 45 5f 52 65 61 64 55 6e 63 6f   SQLITE_ReadUnco
3010: 6d 6d 69 74 74 65 64 20 7d 2c 0a 20 20 7b 20 2f  mmitted },.  { /
3020: 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20  * zName:     */ 
3030: 22 72 65 63 75 72 73 69 76 65 5f 74 72 69 67 67  "recursive_trigg
3040: 65 72 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ers",.    /* ePr
3050: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
3060: 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20  yp_FLAG,.    /* 
3070: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
3080: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
3090: 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 52 65 63     */ SQLITE_Rec
30a0: 54 72 69 67 67 65 72 73 20 7d 2c 0a 23 65 6e 64  Triggers },.#end
30b0: 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53  if.#if defined(S
30c0: 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29  QLITE_HAS_CODEC)
30d0: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
30e0: 20 20 20 2a 2f 20 22 72 65 6b 65 79 22 2c 0a 20     */ "rekey",. 
30f0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
3100: 20 2a 2f 20 50 72 61 67 54 79 70 5f 52 45 4b 45   */ PragTyp_REKE
3110: 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  Y,.    /* ePragF
3120: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
3130: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
3140: 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20  0 },.#endif.#if 
3150: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
3160: 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41  OMIT_FLAG_PRAGMA
3170: 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  S).  { /* zName:
3180: 20 20 20 20 20 2a 2f 20 22 72 65 76 65 72 73 65       */ "reverse
3190: 5f 75 6e 6f 72 64 65 72 65 64 5f 73 65 6c 65 63  _unordered_selec
31a0: 74 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ts",.    /* ePra
31b0: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
31c0: 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65  p_FLAG,.    /* e
31d0: 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a  PragFlag: */ 0,.
31e0: 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20      /* iArg:    
31f0: 20 20 2a 2f 20 53 51 4c 49 54 45 5f 52 65 76 65    */ SQLITE_Reve
3200: 72 73 65 4f 72 64 65 72 20 7d 2c 0a 23 65 6e 64  rseOrder },.#end
3210: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
3220: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
3230: 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d  MA_VERSION_PRAGM
3240: 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65  AS).  { /* zName
3250: 3a 20 20 20 20 20 2a 2f 20 22 73 63 68 65 6d 61  :     */ "schema
3260: 5f 76 65 72 73 69 6f 6e 22 2c 0a 20 20 20 20 2f  _version",.    /
3270: 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20  * ePragTyp:  */ 
3280: 50 72 61 67 54 79 70 5f 48 45 41 44 45 52 5f 56  PragTyp_HEADER_V
3290: 41 4c 55 45 2c 0a 20 20 20 20 2f 2a 20 65 50 72  ALUE,.    /* ePr
32a0: 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20  agFlag: */ 0,.  
32b0: 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20    /* iArg:      
32c0: 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69 66 0a 23  */ 0 },.#endif.#
32d0: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
32e0: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
32f0: 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e  AGMAS).  { /* zN
3300: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 73 65 63  ame:     */ "sec
3310: 75 72 65 5f 64 65 6c 65 74 65 22 2c 0a 20 20 20  ure_delete",.   
3320: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
3330: 2f 20 50 72 61 67 54 79 70 5f 53 45 43 55 52 45  / PragTyp_SECURE
3340: 5f 44 45 4c 45 54 45 2c 0a 20 20 20 20 2f 2a 20  _DELETE,.    /* 
3350: 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c  ePragFlag: */ 0,
3360: 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20  .    /* iArg:   
3370: 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65 6e 64 69     */ 0 },.#endi
3380: 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53  f.#if !defined(S
3390: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f  QLITE_OMIT_FLAG_
33a0: 50 52 41 47 4d 41 53 29 0a 20 20 7b 20 2f 2a 20  PRAGMAS).  { /* 
33b0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 73  zName:     */ "s
33c0: 68 6f 72 74 5f 63 6f 6c 75 6d 6e 5f 6e 61 6d 65  hort_column_name
33d0: 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  s",.    /* ePrag
33e0: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
33f0: 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50  _FLAG,.    /* eP
3400: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
3410: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
3420: 20 2a 2f 20 53 51 4c 49 54 45 5f 53 68 6f 72 74   */ SQLITE_Short
3430: 43 6f 6c 4e 61 6d 65 73 20 7d 2c 0a 23 65 6e 64  ColNames },.#end
3440: 69 66 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  if.  { /* zName:
3450: 20 20 20 20 20 2a 2f 20 22 73 68 72 69 6e 6b 5f       */ "shrink_
3460: 6d 65 6d 6f 72 79 22 2c 0a 20 20 20 20 2f 2a 20  memory",.    /* 
3470: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
3480: 61 67 54 79 70 5f 53 48 52 49 4e 4b 5f 4d 45 4d  agTyp_SHRINK_MEM
3490: 4f 52 59 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  ORY,.    /* ePra
34a0: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
34b0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
34c0: 2f 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e  / 0 },.  { /* zN
34d0: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 73 6f 66  ame:     */ "sof
34e0: 74 5f 68 65 61 70 5f 6c 69 6d 69 74 22 2c 0a 20  t_heap_limit",. 
34f0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
3500: 20 2a 2f 20 50 72 61 67 54 79 70 5f 53 4f 46 54   */ PragTyp_SOFT
3510: 5f 48 45 41 50 5f 4c 49 4d 49 54 2c 0a 20 20 20  _HEAP_LIMIT,.   
3520: 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a   /* ePragFlag: *
3530: 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67  / 0,.    /* iArg
3540: 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23  :      */ 0 },.#
3550: 69 66 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49  if !defined(SQLI
3560: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
3570: 47 4d 41 53 29 0a 23 69 66 20 64 65 66 69 6e 65  GMAS).#if define
3580: 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a  d(SQLITE_DEBUG).
3590: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
35a0: 20 20 2a 2f 20 22 73 71 6c 5f 74 72 61 63 65 22    */ "sql_trace"
35b0: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79  ,.    /* ePragTy
35c0: 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46  p:  */ PragTyp_F
35d0: 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  LAG,.    /* ePra
35e0: 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20  gFlag: */ 0,.   
35f0: 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a   /* iArg:      *
3600: 2f 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63  / SQLITE_SqlTrac
3610: 65 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 65 6e 64  e },.#endif.#end
3620: 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28  if.#if !defined(
3630: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
3640: 4d 41 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20  MA_PRAGMAS).  { 
3650: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
3660: 20 22 73 74 61 74 73 22 2c 0a 20 20 20 20 2f 2a   "stats",.    /*
3670: 20 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50   ePragTyp:  */ P
3680: 72 61 67 54 79 70 5f 53 54 41 54 53 2c 0a 20 20  ragTyp_STATS,.  
3690: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
36a0: 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65 64  */ PragFlag_Need
36b0: 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20 69  Schema,.    /* i
36c0: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
36d0: 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64 65  ,.#endif.#if !de
36e0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
36f0: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29  T_PAGER_PRAGMAS)
3700: 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20  .  { /* zName:  
3710: 20 20 20 2a 2f 20 22 73 79 6e 63 68 72 6f 6e 6f     */ "synchrono
3720: 75 73 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  us",.    /* ePra
3730: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
3740: 70 5f 53 59 4e 43 48 52 4f 4e 4f 55 53 2c 0a 20  p_SYNCHRONOUS,. 
3750: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
3760: 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65   */ PragFlag_Nee
3770: 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20  dSchema,.    /* 
3780: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
3790: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
37a0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
37b0: 49 54 5f 53 43 48 45 4d 41 5f 50 52 41 47 4d 41  IT_SCHEMA_PRAGMA
37c0: 53 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a  S).  { /* zName:
37d0: 20 20 20 20 20 2a 2f 20 22 74 61 62 6c 65 5f 69       */ "table_i
37e0: 6e 66 6f 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72  nfo",.    /* ePr
37f0: 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54  agTyp:  */ PragT
3800: 79 70 5f 54 41 42 4c 45 5f 49 4e 46 4f 2c 0a 20  yp_TABLE_INFO,. 
3810: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
3820: 20 2a 2f 20 50 72 61 67 46 6c 61 67 5f 4e 65 65   */ PragFlag_Nee
3830: 64 53 63 68 65 6d 61 2c 0a 20 20 20 20 2f 2a 20  dSchema,.    /* 
3840: 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20  iArg:      */ 0 
3850: 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  },.#endif.#if !d
3860: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
3870: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
3880: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
3890: 20 20 20 20 2a 2f 20 22 74 65 6d 70 5f 73 74 6f      */ "temp_sto
38a0: 72 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61  re",.    /* ePra
38b0: 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79  gTyp:  */ PragTy
38c0: 70 5f 54 45 4d 50 5f 53 54 4f 52 45 2c 0a 20 20  p_TEMP_STORE,.  
38d0: 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a 20    /* ePragFlag: 
38e0: 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72  */ 0,.    /* iAr
38f0: 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a  g:      */ 0 },.
3900: 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20    { /* zName:   
3910: 20 20 2a 2f 20 22 74 65 6d 70 5f 73 74 6f 72 65    */ "temp_store
3920: 5f 64 69 72 65 63 74 6f 72 79 22 2c 0a 20 20 20  _directory",.   
3930: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
3940: 2f 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f 53  / PragTyp_TEMP_S
3950: 54 4f 52 45 5f 44 49 52 45 43 54 4f 52 59 2c 0a  TORE_DIRECTORY,.
3960: 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67      /* ePragFlag
3970: 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69  : */ 0,.    /* i
3980: 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d  Arg:      */ 0 }
3990: 2c 0a 23 65 6e 64 69 66 0a 20 20 7b 20 2f 2a 20  ,.#endif.  { /* 
39a0: 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 74  zName:     */ "t
39b0: 68 72 65 61 64 73 22 2c 0a 20 20 20 20 2f 2a 20  hreads",.    /* 
39c0: 65 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72  ePragTyp:  */ Pr
39d0: 61 67 54 79 70 5f 54 48 52 45 41 44 53 2c 0a 20  agTyp_THREADS,. 
39e0: 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61 67 3a     /* ePragFlag:
39f0: 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a 20 69 41   */ 0,.    /* iA
3a00: 72 67 3a 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c  rg:      */ 0 },
3a10: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
3a20: 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41  LITE_OMIT_SCHEMA
3a30: 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53  _VERSION_PRAGMAS
3a40: 29 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d 65 3a 20  ).  { /* zName: 
3a50: 20 20 20 20 2a 2f 20 22 75 73 65 72 5f 76 65 72      */ "user_ver
3a60: 73 69 6f 6e 22 2c 0a 20 20 20 20 2f 2a 20 65 50  sion",.    /* eP
3a70: 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61 67  ragTyp:  */ Prag
3a80: 54 79 70 5f 48 45 41 44 45 52 5f 56 41 4c 55 45  Typ_HEADER_VALUE
3a90: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
3aa0: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
3ab0: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 30   iArg:      */ 0
3ac0: 20 7d 2c 0a 23 65 6e 64 69 66 0a 23 69 66 20 21   },.#endif.#if !
3ad0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
3ae0: 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53  MIT_FLAG_PRAGMAS
3af0: 29 0a 23 69 66 20 64 65 66 69 6e 65 64 28 53 51  ).#if defined(SQ
3b00: 4c 49 54 45 5f 44 45 42 55 47 29 0a 20 20 7b 20  LITE_DEBUG).  { 
3b10: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
3b20: 20 22 76 64 62 65 5f 61 64 64 6f 70 74 72 61 63   "vdbe_addoptrac
3b30: 65 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  e",.    /* ePrag
3b40: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
3b50: 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50  _FLAG,.    /* eP
3b60: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
3b70: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
3b80: 20 2a 2f 20 53 51 4c 49 54 45 5f 56 64 62 65 41   */ SQLITE_VdbeA
3b90: 64 64 6f 70 54 72 61 63 65 20 7d 2c 0a 20 20 7b  ddopTrace },.  {
3ba0: 20 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a   /* zName:     *
3bb0: 2f 20 22 76 64 62 65 5f 64 65 62 75 67 22 2c 0a  / "vdbe_debug",.
3bc0: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
3bd0: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41    */ PragTyp_FLA
3be0: 47 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46  G,.    /* ePragF
3bf0: 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f  lag: */ 0,.    /
3c00: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
3c10: 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63 65 7c  SQLITE_SqlTrace|
3c20: 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69  SQLITE_VdbeListi
3c30: 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62 65 54 72  ng|SQLITE_VdbeTr
3c40: 61 63 65 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e  ace },.  { /* zN
3c50: 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 76 64 62  ame:     */ "vdb
3c60: 65 5f 65 71 70 22 2c 0a 20 20 20 20 2f 2a 20 65  e_eqp",.    /* e
3c70: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
3c80: 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f  gTyp_FLAG,.    /
3c90: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
3ca0: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
3cb0: 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 56       */ SQLITE_V
3cc0: 64 62 65 45 51 50 20 7d 2c 0a 20 20 7b 20 2f 2a  dbeEQP },.  { /*
3cd0: 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22   zName:     */ "
3ce0: 76 64 62 65 5f 6c 69 73 74 69 6e 67 22 2c 0a 20  vdbe_listing",. 
3cf0: 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20     /* ePragTyp: 
3d00: 20 2a 2f 20 50 72 61 67 54 79 70 5f 46 4c 41 47   */ PragTyp_FLAG
3d10: 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c  ,.    /* ePragFl
3d20: 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20 2f 2a  ag: */ 0,.    /*
3d30: 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20 53   iArg:      */ S
3d40: 51 4c 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e  QLITE_VdbeListin
3d50: 67 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61 6d  g },.  { /* zNam
3d60: 65 3a 20 20 20 20 20 2a 2f 20 22 76 64 62 65 5f  e:     */ "vdbe_
3d70: 74 72 61 63 65 22 2c 0a 20 20 20 20 2f 2a 20 65  trace",.    /* e
3d80: 50 72 61 67 54 79 70 3a 20 20 2a 2f 20 50 72 61  PragTyp:  */ Pra
3d90: 67 54 79 70 5f 46 4c 41 47 2c 0a 20 20 20 20 2f  gTyp_FLAG,.    /
3da0: 2a 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20  * ePragFlag: */ 
3db0: 30 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a 20  0,.    /* iArg: 
3dc0: 20 20 20 20 20 2a 2f 20 53 51 4c 49 54 45 5f 56       */ SQLITE_V
3dd0: 64 62 65 54 72 61 63 65 20 7d 2c 0a 23 65 6e 64  dbeTrace },.#end
3de0: 69 66 0a 23 65 6e 64 69 66 0a 23 69 66 20 21 64  if.#endif.#if !d
3df0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
3e00: 49 54 5f 57 41 4c 29 0a 20 20 7b 20 2f 2a 20 7a  IT_WAL).  { /* z
3e10: 4e 61 6d 65 3a 20 20 20 20 20 2a 2f 20 22 77 61  Name:     */ "wa
3e20: 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74  l_autocheckpoint
3e30: 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67 54  ",.    /* ePragT
3e40: 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70 5f  yp:  */ PragTyp_
3e50: 57 41 4c 5f 41 55 54 4f 43 48 45 43 4b 50 4f 49  WAL_AUTOCHECKPOI
3e60: 4e 54 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  NT,.    /* ePrag
3e70: 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20 20 20 20  Flag: */ 0,.    
3e80: 2f 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f  /* iArg:      */
3e90: 20 30 20 7d 2c 0a 20 20 7b 20 2f 2a 20 7a 4e 61   0 },.  { /* zNa
3ea0: 6d 65 3a 20 20 20 20 20 2a 2f 20 22 77 61 6c 5f  me:     */ "wal_
3eb0: 63 68 65 63 6b 70 6f 69 6e 74 22 2c 0a 20 20 20  checkpoint",.   
3ec0: 20 2f 2a 20 65 50 72 61 67 54 79 70 3a 20 20 2a   /* ePragTyp:  *
3ed0: 2f 20 50 72 61 67 54 79 70 5f 57 41 4c 5f 43 48  / PragTyp_WAL_CH
3ee0: 45 43 4b 50 4f 49 4e 54 2c 0a 20 20 20 20 2f 2a  ECKPOINT,.    /*
3ef0: 20 65 50 72 61 67 46 6c 61 67 3a 20 2a 2f 20 50   ePragFlag: */ P
3f00: 72 61 67 46 6c 61 67 5f 4e 65 65 64 53 63 68 65  ragFlag_NeedSche
3f10: 6d 61 2c 0a 20 20 20 20 2f 2a 20 69 41 72 67 3a  ma,.    /* iArg:
3f20: 20 20 20 20 20 20 2a 2f 20 30 20 7d 2c 0a 23 65        */ 0 },.#e
3f30: 6e 64 69 66 0a 23 69 66 20 21 64 65 66 69 6e 65  ndif.#if !define
3f40: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c  d(SQLITE_OMIT_FL
3f50: 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 7b 20  AG_PRAGMAS).  { 
3f60: 2f 2a 20 7a 4e 61 6d 65 3a 20 20 20 20 20 2a 2f  /* zName:     */
3f70: 20 22 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d   "writable_schem
3f80: 61 22 2c 0a 20 20 20 20 2f 2a 20 65 50 72 61 67  a",.    /* ePrag
3f90: 54 79 70 3a 20 20 2a 2f 20 50 72 61 67 54 79 70  Typ:  */ PragTyp
3fa0: 5f 46 4c 41 47 2c 0a 20 20 20 20 2f 2a 20 65 50  _FLAG,.    /* eP
3fb0: 72 61 67 46 6c 61 67 3a 20 2a 2f 20 30 2c 0a 20  ragFlag: */ 0,. 
3fc0: 20 20 20 2f 2a 20 69 41 72 67 3a 20 20 20 20 20     /* iArg:     
3fd0: 20 2a 2f 20 53 51 4c 49 54 45 5f 57 72 69 74 65   */ SQLITE_Write
3fe0: 53 63 68 65 6d 61 7c 53 51 4c 49 54 45 5f 52 65  Schema|SQLITE_Re
3ff0: 63 6f 76 65 72 79 4d 6f 64 65 20 7d 2c 0a 23 65  coveryMode },.#e
4000: 6e 64 69 66 0a 7d 3b 0a 2f 2a 20 4e 75 6d 62 65  ndif.};./* Numbe
4010: 72 20 6f 66 20 70 72 61 67 6d 61 73 3a 20 35 37  r of pragmas: 57
4020: 20 6f 6e 20 62 79 20 64 65 66 61 75 6c 74 2c 20   on by default, 
4030: 37 32 20 74 6f 74 61 6c 2e 20 2a 2f 0a 2f 2a 20  72 total. */./* 
4040: 45 6e 64 20 6f 66 20 74 68 65 20 61 75 74 6f 6d  End of the autom
4050: 61 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74  atically generat
4060: 65 64 20 70 72 61 67 6d 61 20 74 61 62 6c 65 2e  ed pragma table.
4070: 0a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  .***************
4080: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
4090: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
40a0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a  ****************
40b0: 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2a 2f 0a 0a 2f  ************/../
40c0: 2a 0a 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74  *.** Interpret t
40d0: 68 65 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20  he given string 
40e0: 61 73 20 61 20 73 61 66 65 74 79 20 6c 65 76 65  as a safety leve
40f0: 6c 2e 20 20 52 65 74 75 72 6e 20 30 20 66 6f 72  l.  Return 0 for
4100: 20 4f 46 46 2c 0a 2a 2a 20 31 20 66 6f 72 20 4f   OFF,.** 1 for O
4110: 4e 20 6f 72 20 4e 4f 52 4d 41 4c 20 61 6e 64 20  N or NORMAL and 
4120: 32 20 66 6f 72 20 46 55 4c 4c 2e 20 20 52 65 74  2 for FULL.  Ret
4130: 75 72 6e 20 31 20 66 6f 72 20 61 6e 20 65 6d 70  urn 1 for an emp
4140: 74 79 20 6f 72 20 0a 2a 2a 20 75 6e 72 65 63 6f  ty or .** unreco
4150: 67 6e 69 7a 65 64 20 73 74 72 69 6e 67 20 61 72  gnized string ar
4160: 67 75 6d 65 6e 74 2e 20 20 54 68 65 20 46 55 4c  gument.  The FUL
4170: 4c 20 6f 70 74 69 6f 6e 20 69 73 20 64 69 73 61  L option is disa
4180: 6c 6c 6f 77 65 64 0a 2a 2a 20 69 66 20 74 68 65  llowed.** if the
4190: 20 6f 6d 69 74 46 75 6c 6c 20 70 61 72 61 6d 65   omitFull parame
41a0: 74 65 72 20 69 74 20 31 2e 0a 2a 2a 0a 2a 2a 20  ter it 1..**.** 
41b0: 4e 6f 74 65 20 74 68 61 74 20 74 68 65 20 76 61  Note that the va
41c0: 6c 75 65 73 20 72 65 74 75 72 6e 65 64 20 61 72  lues returned ar
41d0: 65 20 6f 6e 65 20 6c 65 73 73 20 74 68 61 74 20  e one less that 
41e0: 74 68 65 20 76 61 6c 75 65 73 20 74 68 61 74 0a  the values that.
41f0: 2a 2a 20 73 68 6f 75 6c 64 20 62 65 20 70 61 73  ** should be pas
4200: 73 65 64 20 69 6e 74 6f 20 73 71 6c 69 74 65 33  sed into sqlite3
4210: 42 74 72 65 65 53 65 74 53 61 66 65 74 79 4c 65  BtreeSetSafetyLe
4220: 76 65 6c 28 29 2e 20 20 54 68 65 20 69 73 20 64  vel().  The is d
4230: 6f 6e 65 0a 2a 2a 20 74 6f 20 73 75 70 70 6f 72  one.** to suppor
4240: 74 20 6c 65 67 61 63 79 20 53 51 4c 20 63 6f 64  t legacy SQL cod
4250: 65 2e 20 20 54 68 65 20 73 61 66 65 74 79 20 6c  e.  The safety l
4260: 65 76 65 6c 20 75 73 65 64 20 74 6f 20 62 65 20  evel used to be 
4270: 62 6f 6f 6c 65 61 6e 0a 2a 2a 20 61 6e 64 20 6f  boolean.** and o
4280: 6c 64 65 72 20 73 63 72 69 70 74 73 20 6d 61 79  lder scripts may
4290: 20 68 61 76 65 20 75 73 65 64 20 6e 75 6d 62 65   have used numbe
42a0: 72 73 20 30 20 66 6f 72 20 4f 46 46 20 61 6e 64  rs 0 for OFF and
42b0: 20 31 20 66 6f 72 20 4f 4e 2e 0a 2a 2f 0a 73 74   1 for ON..*/.st
42c0: 61 74 69 63 20 75 38 20 67 65 74 53 61 66 65 74  atic u8 getSafet
42d0: 79 4c 65 76 65 6c 28 63 6f 6e 73 74 20 63 68 61  yLevel(const cha
42e0: 72 20 2a 7a 2c 20 69 6e 74 20 6f 6d 69 74 46 75  r *z, int omitFu
42f0: 6c 6c 2c 20 75 38 20 64 66 6c 74 29 7b 0a 20 20  ll, u8 dflt){.  
4300: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
4310: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 31 32             /* 12
4320: 33 34 35 36 37 38 39 20 31 32 33 34 35 36 37 38  3456789 12345678
4330: 39 20 2a 2f 0a 20 20 73 74 61 74 69 63 20 63 6f  9 */.  static co
4340: 6e 73 74 20 63 68 61 72 20 7a 54 65 78 74 5b 5d  nst char zText[]
4350: 20 3d 20 22 6f 6e 6f 66 66 61 6c 73 65 79 65 73   = "onoffalseyes
4360: 74 72 75 65 66 75 6c 6c 22 3b 0a 20 20 73 74 61  truefull";.  sta
4370: 74 69 63 20 63 6f 6e 73 74 20 75 38 20 69 4f 66  tic const u8 iOf
4380: 66 73 65 74 5b 5d 20 3d 20 7b 30 2c 20 31 2c 20  fset[] = {0, 1, 
4390: 32 2c 20 34 2c 20 39 2c 20 31 32 2c 20 31 36 7d  2, 4, 9, 12, 16}
43a0: 3b 0a 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74  ;.  static const
43b0: 20 75 38 20 69 4c 65 6e 67 74 68 5b 5d 20 3d 20   u8 iLength[] = 
43c0: 7b 32 2c 20 32 2c 20 33 2c 20 35 2c 20 33 2c 20  {2, 2, 3, 5, 3, 
43d0: 34 2c 20 34 7d 3b 0a 20 20 73 74 61 74 69 63 20  4, 4};.  static 
43e0: 63 6f 6e 73 74 20 75 38 20 69 56 61 6c 75 65 5b  const u8 iValue[
43f0: 5d 20 3d 20 20 7b 31 2c 20 30 2c 20 30 2c 20 30  ] =  {1, 0, 0, 0
4400: 2c 20 31 2c 20 31 2c 20 32 7d 3b 0a 20 20 69 6e  , 1, 1, 2};.  in
4410: 74 20 69 2c 20 6e 3b 0a 20 20 69 66 28 20 73 71  t i, n;.  if( sq
4420: 6c 69 74 65 33 49 73 64 69 67 69 74 28 2a 7a 29  lite3Isdigit(*z)
4430: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 28   ){.    return (
4440: 75 38 29 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  u8)sqlite3Atoi(z
4450: 29 3b 0a 20 20 7d 0a 20 20 6e 20 3d 20 73 71 6c  );.  }.  n = sql
4460: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 29 3b  ite3Strlen30(z);
4470: 0a 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c 41 72  .  for(i=0; i<Ar
4480: 72 61 79 53 69 7a 65 28 69 4c 65 6e 67 74 68 29  raySize(iLength)
4490: 2d 6f 6d 69 74 46 75 6c 6c 3b 20 69 2b 2b 29 7b  -omitFull; i++){
44a0: 0a 20 20 20 20 69 66 28 20 69 4c 65 6e 67 74 68  .    if( iLength
44b0: 5b 69 5d 3d 3d 6e 20 26 26 20 73 71 6c 69 74 65  [i]==n && sqlite
44c0: 33 53 74 72 4e 49 43 6d 70 28 26 7a 54 65 78 74  3StrNICmp(&zText
44d0: 5b 69 4f 66 66 73 65 74 5b 69 5d 5d 2c 7a 2c 6e  [iOffset[i]],z,n
44e0: 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 72 65  )==0 ){.      re
44f0: 74 75 72 6e 20 69 56 61 6c 75 65 5b 69 5d 3b 0a  turn iValue[i];.
4500: 20 20 20 20 7d 0a 20 20 7d 0a 20 20 72 65 74 75      }.  }.  retu
4510: 72 6e 20 64 66 6c 74 3b 0a 7d 0a 0a 2f 2a 0a 2a  rn dflt;.}../*.*
4520: 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
4530: 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73 20  given string as 
4540: 61 20 62 6f 6f 6c 65 61 6e 20 76 61 6c 75 65 2e  a boolean value.
4550: 0a 2a 2f 0a 75 38 20 73 71 6c 69 74 65 33 47 65  .*/.u8 sqlite3Ge
4560: 74 42 6f 6f 6c 65 61 6e 28 63 6f 6e 73 74 20 63  tBoolean(const c
4570: 68 61 72 20 2a 7a 2c 20 75 38 20 64 66 6c 74 29  har *z, u8 dflt)
4580: 7b 0a 20 20 72 65 74 75 72 6e 20 67 65 74 53 61  {.  return getSa
4590: 66 65 74 79 4c 65 76 65 6c 28 7a 2c 31 2c 64 66  fetyLevel(z,1,df
45a0: 6c 74 29 21 3d 30 3b 0a 7d 0a 0a 2f 2a 20 54 68  lt)!=0;.}../* Th
45b0: 65 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  e sqlite3GetBool
45c0: 65 61 6e 28 29 20 66 75 6e 63 74 69 6f 6e 20 69  ean() function i
45d0: 73 20 75 73 65 64 20 62 79 20 6f 74 68 65 72 20  s used by other 
45e0: 6d 6f 64 75 6c 65 73 20 62 75 74 20 74 68 65 0a  modules but the.
45f0: 2a 2a 20 72 65 6d 61 69 6e 64 65 72 20 6f 66 20  ** remainder of 
4600: 74 68 69 73 20 66 69 6c 65 20 69 73 20 73 70 65  this file is spe
4610: 63 69 66 69 63 20 74 6f 20 50 52 41 47 4d 41 20  cific to PRAGMA 
4620: 70 72 6f 63 65 73 73 69 6e 67 2e 20 20 53 6f 20  processing.  So 
4630: 6f 6d 69 74 0a 2a 2a 20 74 68 65 20 72 65 73 74  omit.** the rest
4640: 20 6f 66 20 74 68 65 20 66 69 6c 65 20 69 66 20   of the file if 
4650: 50 52 41 47 4d 41 73 20 61 72 65 20 6f 6d 69 74  PRAGMAs are omit
4660: 74 65 64 20 66 72 6f 6d 20 74 68 65 20 62 75 69  ted from the bui
4670: 6c 64 2e 0a 2a 2f 0a 23 69 66 20 21 64 65 66 69  ld..*/.#if !defi
4680: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
4690: 50 52 41 47 4d 41 29 0a 0a 2f 2a 0a 2a 2a 20 49  PRAGMA)../*.** I
46a0: 6e 74 65 72 70 72 65 74 20 74 68 65 20 67 69 76  nterpret the giv
46b0: 65 6e 20 73 74 72 69 6e 67 20 61 73 20 61 20 6c  en string as a l
46c0: 6f 63 6b 69 6e 67 20 6d 6f 64 65 20 76 61 6c 75  ocking mode valu
46d0: 65 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74  e..*/.static int
46e0: 20 67 65 74 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28   getLockingMode(
46f0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a  const char *z){.
4700: 20 20 69 66 28 20 7a 20 29 7b 0a 20 20 20 20 69    if( z ){.    i
4710: 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74 72  f( 0==sqlite3Str
4720: 49 43 6d 70 28 7a 2c 20 22 65 78 63 6c 75 73 69  ICmp(z, "exclusi
4730: 76 65 22 29 20 29 20 72 65 74 75 72 6e 20 50 41  ve") ) return PA
4740: 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f  GER_LOCKINGMODE_
4750: 45 58 43 4c 55 53 49 56 45 3b 0a 20 20 20 20 69  EXCLUSIVE;.    i
4760: 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74 72  f( 0==sqlite3Str
4770: 49 43 6d 70 28 7a 2c 20 22 6e 6f 72 6d 61 6c 22  ICmp(z, "normal"
4780: 29 20 29 20 72 65 74 75 72 6e 20 50 41 47 45 52  ) ) return PAGER
4790: 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 4e 4f 52  _LOCKINGMODE_NOR
47a0: 4d 41 4c 3b 0a 20 20 7d 0a 20 20 72 65 74 75 72  MAL;.  }.  retur
47b0: 6e 20 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  n PAGER_LOCKINGM
47c0: 4f 44 45 5f 51 55 45 52 59 3b 0a 7d 0a 0a 23 69  ODE_QUERY;.}..#i
47d0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
47e0: 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 2f 2a 0a  T_AUTOVACUUM./*.
47f0: 2a 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65  ** Interpret the
4800: 20 67 69 76 65 6e 20 73 74 72 69 6e 67 20 61 73   given string as
4810: 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d 20   an auto-vacuum 
4820: 6d 6f 64 65 20 76 61 6c 75 65 2e 0a 2a 2a 0a 2a  mode value..**.*
4830: 2a 20 54 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20  * The following 
4840: 73 74 72 69 6e 67 73 2c 20 22 6e 6f 6e 65 22 2c  strings, "none",
4850: 20 22 66 75 6c 6c 22 20 61 6e 64 20 22 69 6e 63   "full" and "inc
4860: 72 65 6d 65 6e 74 61 6c 22 20 61 72 65 20 0a 2a  remental" are .*
4870: 2a 20 61 63 63 65 70 74 61 62 6c 65 2c 20 61 73  * acceptable, as
4880: 20 61 72 65 20 74 68 65 69 72 20 6e 75 6d 65 72   are their numer
4890: 69 63 20 65 71 75 69 76 61 6c 65 6e 74 73 3a 20  ic equivalents: 
48a0: 30 2c 20 31 20 61 6e 64 20 32 20 72 65 73 70 65  0, 1 and 2 respe
48b0: 63 74 69 76 65 6c 79 2e 0a 2a 2f 0a 73 74 61 74  ctively..*/.stat
48c0: 69 63 20 69 6e 74 20 67 65 74 41 75 74 6f 56 61  ic int getAutoVa
48d0: 63 75 75 6d 28 63 6f 6e 73 74 20 63 68 61 72 20  cuum(const char 
48e0: 2a 7a 29 7b 0a 20 20 69 6e 74 20 69 3b 0a 20 20  *z){.  int i;.  
48f0: 69 66 28 20 30 3d 3d 73 71 6c 69 74 65 33 53 74  if( 0==sqlite3St
4900: 72 49 43 6d 70 28 7a 2c 20 22 6e 6f 6e 65 22 29  rICmp(z, "none")
4910: 20 29 20 72 65 74 75 72 6e 20 42 54 52 45 45 5f   ) return BTREE_
4920: 41 55 54 4f 56 41 43 55 55 4d 5f 4e 4f 4e 45 3b  AUTOVACUUM_NONE;
4930: 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c 69 74 65  .  if( 0==sqlite
4940: 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 66 75 6c  3StrICmp(z, "ful
4950: 6c 22 29 20 29 20 72 65 74 75 72 6e 20 42 54 52  l") ) return BTR
4960: 45 45 5f 41 55 54 4f 56 41 43 55 55 4d 5f 46 55  EE_AUTOVACUUM_FU
4970: 4c 4c 3b 0a 20 20 69 66 28 20 30 3d 3d 73 71 6c  LL;.  if( 0==sql
4980: 69 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22  ite3StrICmp(z, "
4990: 69 6e 63 72 65 6d 65 6e 74 61 6c 22 29 20 29 20  incremental") ) 
49a0: 72 65 74 75 72 6e 20 42 54 52 45 45 5f 41 55 54  return BTREE_AUT
49b0: 4f 56 41 43 55 55 4d 5f 49 4e 43 52 3b 0a 20 20  OVACUUM_INCR;.  
49c0: 69 20 3d 20 73 71 6c 69 74 65 33 41 74 6f 69 28  i = sqlite3Atoi(
49d0: 7a 29 3b 0a 20 20 72 65 74 75 72 6e 20 28 75 38  z);.  return (u8
49e0: 29 28 28 69 3e 3d 30 26 26 69 3c 3d 32 29 3f 69  )((i>=0&&i<=2)?i
49f0: 3a 30 29 3b 0a 7d 0a 23 65 6e 64 69 66 20 2f 2a  :0);.}.#endif /*
4a00: 20 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f   ifndef SQLITE_O
4a10: 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 20 2a  MIT_AUTOVACUUM *
4a20: 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54  /..#ifndef SQLIT
4a30: 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41  E_OMIT_PAGER_PRA
4a40: 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 6e 74 65 72  GMAS./*.** Inter
4a50: 70 72 65 74 20 74 68 65 20 67 69 76 65 6e 20 73  pret the given s
4a60: 74 72 69 6e 67 20 61 73 20 61 20 74 65 6d 70 20  tring as a temp 
4a70: 64 62 20 6c 6f 63 61 74 69 6f 6e 2e 20 52 65 74  db location. Ret
4a80: 75 72 6e 20 31 20 66 6f 72 20 66 69 6c 65 0a 2a  urn 1 for file.*
4a90: 2a 20 62 61 63 6b 65 64 20 74 65 6d 70 6f 72 61  * backed tempora
4aa0: 72 79 20 64 61 74 61 62 61 73 65 73 2c 20 32 20  ry databases, 2 
4ab0: 66 6f 72 20 74 68 65 20 52 65 64 2d 42 6c 61 63  for the Red-Blac
4ac0: 6b 20 74 72 65 65 20 69 6e 20 6d 65 6d 6f 72 79  k tree in memory
4ad0: 20 64 61 74 61 62 61 73 65 0a 2a 2a 20 61 6e 64   database.** and
4ae0: 20 30 20 74 6f 20 75 73 65 20 74 68 65 20 63 6f   0 to use the co
4af0: 6d 70 69 6c 65 2d 74 69 6d 65 20 64 65 66 61 75  mpile-time defau
4b00: 6c 74 2e 0a 2a 2f 0a 73 74 61 74 69 63 20 69 6e  lt..*/.static in
4b10: 74 20 67 65 74 54 65 6d 70 53 74 6f 72 65 28 63  t getTempStore(c
4b20: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 29 7b 0a 20  onst char *z){. 
4b30: 20 69 66 28 20 7a 5b 30 5d 3e 3d 27 30 27 20 26   if( z[0]>='0' &
4b40: 26 20 7a 5b 30 5d 3c 3d 27 32 27 20 29 7b 0a 20  & z[0]<='2' ){. 
4b50: 20 20 20 72 65 74 75 72 6e 20 7a 5b 30 5d 20 2d     return z[0] -
4b60: 20 27 30 27 3b 0a 20 20 7d 65 6c 73 65 20 69 66   '0';.  }else if
4b70: 28 20 73 71 6c 69 74 65 33 53 74 72 49 43 6d 70  ( sqlite3StrICmp
4b80: 28 7a 2c 20 22 66 69 6c 65 22 29 3d 3d 30 20 29  (z, "file")==0 )
4b90: 7b 0a 20 20 20 20 72 65 74 75 72 6e 20 31 3b 0a  {.    return 1;.
4ba0: 20 20 7d 65 6c 73 65 20 69 66 28 20 73 71 6c 69    }else if( sqli
4bb0: 74 65 33 53 74 72 49 43 6d 70 28 7a 2c 20 22 6d  te3StrICmp(z, "m
4bc0: 65 6d 6f 72 79 22 29 3d 3d 30 20 29 7b 0a 20 20  emory")==0 ){.  
4bd0: 20 20 72 65 74 75 72 6e 20 32 3b 0a 20 20 7d 65    return 2;.  }e
4be0: 6c 73 65 7b 0a 20 20 20 20 72 65 74 75 72 6e 20  lse{.    return 
4bf0: 30 3b 0a 20 20 7d 0a 7d 0a 23 65 6e 64 69 66 20  0;.  }.}.#endif 
4c00: 2f 2a 20 53 51 4c 49 54 45 5f 50 41 47 45 52 5f  /* SQLITE_PAGER_
4c10: 50 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e  PRAGMAS */..#ifn
4c20: 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
4c30: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 0a 2f 2a  PAGER_PRAGMAS./*
4c40: 0a 2a 2a 20 49 6e 76 61 6c 69 64 61 74 65 20 74  .** Invalidate t
4c50: 65 6d 70 20 73 74 6f 72 61 67 65 2c 20 65 69 74  emp storage, eit
4c60: 68 65 72 20 77 68 65 6e 20 74 68 65 20 74 65 6d  her when the tem
4c70: 70 20 73 74 6f 72 61 67 65 20 69 73 20 63 68 61  p storage is cha
4c80: 6e 67 65 64 0a 2a 2a 20 66 72 6f 6d 20 64 65 66  nged.** from def
4c90: 61 75 6c 74 2c 20 6f 72 20 77 68 65 6e 20 27 66  ault, or when 'f
4ca0: 69 6c 65 27 20 61 6e 64 20 74 68 65 20 74 65 6d  ile' and the tem
4cb0: 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72  p_store_director
4cc0: 79 20 68 61 73 20 63 68 61 6e 67 65 64 0a 2a 2f  y has changed.*/
4cd0: 0a 73 74 61 74 69 63 20 69 6e 74 20 69 6e 76 61  .static int inva
4ce0: 6c 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67  lidateTempStorag
4cf0: 65 28 50 61 72 73 65 20 2a 70 50 61 72 73 65 29  e(Parse *pParse)
4d00: 7b 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20  {.  sqlite3 *db 
4d10: 3d 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20 20  = pParse->db;.  
4d20: 69 66 28 20 64 62 2d 3e 61 44 62 5b 31 5d 2e 70  if( db->aDb[1].p
4d30: 42 74 21 3d 30 20 29 7b 0a 20 20 20 20 69 66 28  Bt!=0 ){.    if(
4d40: 20 21 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74   !db->autoCommit
4d50: 20 7c 7c 20 73 71 6c 69 74 65 33 42 74 72 65 65   || sqlite3Btree
4d60: 49 73 49 6e 52 65 61 64 54 72 61 6e 73 28 64 62  IsInReadTrans(db
4d70: 2d 3e 61 44 62 5b 31 5d 2e 70 42 74 29 20 29 7b  ->aDb[1].pBt) ){
4d80: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 72  .      sqlite3Er
4d90: 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c 20 22  rorMsg(pParse, "
4da0: 74 65 6d 70 6f 72 61 72 79 20 73 74 6f 72 61 67  temporary storag
4db0: 65 20 63 61 6e 6e 6f 74 20 62 65 20 63 68 61 6e  e cannot be chan
4dc0: 67 65 64 20 22 0a 20 20 20 20 20 20 20 20 22 66  ged ".        "f
4dd0: 72 6f 6d 20 77 69 74 68 69 6e 20 61 20 74 72 61  rom within a tra
4de0: 6e 73 61 63 74 69 6f 6e 22 29 3b 0a 20 20 20 20  nsaction");.    
4df0: 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54 45 5f    return SQLITE_
4e00: 45 52 52 4f 52 3b 0a 20 20 20 20 7d 0a 20 20 20  ERROR;.    }.   
4e10: 20 73 71 6c 69 74 65 33 42 74 72 65 65 43 6c 6f   sqlite3BtreeClo
4e20: 73 65 28 64 62 2d 3e 61 44 62 5b 31 5d 2e 70 42  se(db->aDb[1].pB
4e30: 74 29 3b 0a 20 20 20 20 64 62 2d 3e 61 44 62 5b  t);.    db->aDb[
4e40: 31 5d 2e 70 42 74 20 3d 20 30 3b 0a 20 20 20 20  1].pBt = 0;.    
4e50: 73 71 6c 69 74 65 33 52 65 73 65 74 41 6c 6c 53  sqlite3ResetAllS
4e60: 63 68 65 6d 61 73 4f 66 43 6f 6e 6e 65 63 74 69  chemasOfConnecti
4e70: 6f 6e 28 64 62 29 3b 0a 20 20 7d 0a 20 20 72 65  on(db);.  }.  re
4e80: 74 75 72 6e 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a  turn SQLITE_OK;.
4e90: 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  }.#endif /* SQLI
4ea0: 54 45 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  TE_PAGER_PRAGMAS
4eb0: 20 2a 2f 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c   */..#ifndef SQL
4ec0: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
4ed0: 52 41 47 4d 41 53 0a 2f 2a 0a 2a 2a 20 49 66 20  RAGMAS./*.** If 
4ee0: 74 68 65 20 54 45 4d 50 20 64 61 74 61 62 61 73  the TEMP databas
4ef0: 65 20 69 73 20 6f 70 65 6e 2c 20 63 6c 6f 73 65  e is open, close
4f00: 20 69 74 20 61 6e 64 20 6d 61 72 6b 20 74 68 65   it and mark the
4f10: 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d 61   database schema
4f20: 0a 2a 2a 20 61 73 20 6e 65 65 64 69 6e 67 20 72  .** as needing r
4f30: 65 6c 6f 61 64 69 6e 67 2e 20 20 54 68 69 73 20  eloading.  This 
4f40: 6d 75 73 74 20 62 65 20 64 6f 6e 65 20 77 68 65  must be done whe
4f50: 6e 20 75 73 69 6e 67 20 74 68 65 20 53 51 4c 49  n using the SQLI
4f60: 54 45 5f 54 45 4d 50 5f 53 54 4f 52 45 0a 2a 2a  TE_TEMP_STORE.**
4f70: 20 6f 72 20 44 45 46 41 55 4c 54 5f 54 45 4d 50   or DEFAULT_TEMP
4f80: 5f 53 54 4f 52 45 20 70 72 61 67 6d 61 73 2e 0a  _STORE pragmas..
4f90: 2a 2f 0a 73 74 61 74 69 63 20 69 6e 74 20 63 68  */.static int ch
4fa0: 61 6e 67 65 54 65 6d 70 53 74 6f 72 61 67 65 28  angeTempStorage(
4fb0: 50 61 72 73 65 20 2a 70 50 61 72 73 65 2c 20 63  Parse *pParse, c
4fc0: 6f 6e 73 74 20 63 68 61 72 20 2a 7a 53 74 6f 72  onst char *zStor
4fd0: 61 67 65 54 79 70 65 29 7b 0a 20 20 69 6e 74 20  ageType){.  int 
4fe0: 74 73 20 3d 20 67 65 74 54 65 6d 70 53 74 6f 72  ts = getTempStor
4ff0: 65 28 7a 53 74 6f 72 61 67 65 54 79 70 65 29 3b  e(zStorageType);
5000: 0a 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d  .  sqlite3 *db =
5010: 20 70 50 61 72 73 65 2d 3e 64 62 3b 0a 20 20 69   pParse->db;.  i
5020: 66 28 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  f( db->temp_stor
5030: 65 3d 3d 74 73 20 29 20 72 65 74 75 72 6e 20 53  e==ts ) return S
5040: 51 4c 49 54 45 5f 4f 4b 3b 0a 20 20 69 66 28 20  QLITE_OK;.  if( 
5050: 69 6e 76 61 6c 69 64 61 74 65 54 65 6d 70 53 74  invalidateTempSt
5060: 6f 72 61 67 65 28 20 70 50 61 72 73 65 20 29 20  orage( pParse ) 
5070: 21 3d 20 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a  != SQLITE_OK ){.
5080: 20 20 20 20 72 65 74 75 72 6e 20 53 51 4c 49 54      return SQLIT
5090: 45 5f 45 52 52 4f 52 3b 0a 20 20 7d 0a 20 20 64  E_ERROR;.  }.  d
50a0: 62 2d 3e 74 65 6d 70 5f 73 74 6f 72 65 20 3d 20  b->temp_store = 
50b0: 28 75 38 29 74 73 3b 0a 20 20 72 65 74 75 72 6e  (u8)ts;.  return
50c0: 20 53 51 4c 49 54 45 5f 4f 4b 3b 0a 7d 0a 23 65   SQLITE_OK;.}.#e
50d0: 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 50  ndif /* SQLITE_P
50e0: 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f 0a  AGER_PRAGMAS */.
50f0: 0a 2f 2a 0a 2a 2a 20 47 65 6e 65 72 61 74 65 20  ./*.** Generate 
5100: 63 6f 64 65 20 74 6f 20 72 65 74 75 72 6e 20 61  code to return a
5110: 20 73 69 6e 67 6c 65 20 69 6e 74 65 67 65 72 20   single integer 
5120: 76 61 6c 75 65 2e 0a 2a 2f 0a 73 74 61 74 69 63  value..*/.static
5130: 20 76 6f 69 64 20 72 65 74 75 72 6e 53 69 6e 67   void returnSing
5140: 6c 65 49 6e 74 28 50 61 72 73 65 20 2a 70 50 61  leInt(Parse *pPa
5150: 72 73 65 2c 20 63 6f 6e 73 74 20 63 68 61 72 20  rse, const char 
5160: 2a 7a 4c 61 62 65 6c 2c 20 69 36 34 20 76 61 6c  *zLabel, i64 val
5170: 75 65 29 7b 0a 20 20 56 64 62 65 20 2a 76 20 3d  ue){.  Vdbe *v =
5180: 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65 28   sqlite3GetVdbe(
5190: 70 50 61 72 73 65 29 3b 0a 20 20 69 6e 74 20 6d  pParse);.  int m
51a0: 65 6d 20 3d 20 2b 2b 70 50 61 72 73 65 2d 3e 6e  em = ++pParse->n
51b0: 4d 65 6d 3b 0a 20 20 69 36 34 20 2a 70 49 36 34  Mem;.  i64 *pI64
51c0: 20 3d 20 73 71 6c 69 74 65 33 44 62 4d 61 6c 6c   = sqlite3DbMall
51d0: 6f 63 52 61 77 28 70 50 61 72 73 65 2d 3e 64 62  ocRaw(pParse->db
51e0: 2c 20 73 69 7a 65 6f 66 28 76 61 6c 75 65 29 29  , sizeof(value))
51f0: 3b 0a 20 20 69 66 28 20 70 49 36 34 20 29 7b 0a  ;.  if( pI64 ){.
5200: 20 20 20 20 6d 65 6d 63 70 79 28 70 49 36 34 2c      memcpy(pI64,
5210: 20 26 76 61 6c 75 65 2c 20 73 69 7a 65 6f 66 28   &value, sizeof(
5220: 76 61 6c 75 65 29 29 3b 0a 20 20 7d 0a 20 20 73  value));.  }.  s
5230: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
5240: 28 76 2c 20 4f 50 5f 49 6e 74 36 34 2c 20 30 2c  (v, OP_Int64, 0,
5250: 20 6d 65 6d 2c 20 30 2c 20 28 63 68 61 72 2a 29   mem, 0, (char*)
5260: 70 49 36 34 2c 20 50 34 5f 49 4e 54 36 34 29 3b  pI64, P4_INT64);
5270: 0a 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65  .  sqlite3VdbeSe
5280: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
5290: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
52a0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
52b0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 61 62  LNAME_NAME, zLab
52c0: 65 6c 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  el, SQLITE_STATI
52d0: 43 29 3b 0a 20 20 73 71 6c 69 74 65 33 56 64 62  C);.  sqlite3Vdb
52e0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
52f0: 73 75 6c 74 52 6f 77 2c 20 6d 65 6d 2c 20 31 29  sultRow, mem, 1)
5300: 3b 0a 7d 0a 0a 0a 2f 2a 0a 2a 2a 20 53 65 74 20  ;.}.../*.** Set 
5310: 74 68 65 20 73 61 66 65 74 79 5f 6c 65 76 65 6c  the safety_level
5320: 20 61 6e 64 20 70 61 67 65 72 20 66 6c 61 67 73   and pager flags
5330: 20 66 6f 72 20 70 61 67 65 72 20 69 44 62 2e 20   for pager iDb. 
5340: 20 4f 72 20 69 66 20 69 44 62 3c 30 0a 2a 2a 20   Or if iDb<0.** 
5350: 73 65 74 20 74 68 65 73 65 20 76 61 6c 75 65 73  set these values
5360: 20 66 6f 72 20 61 6c 6c 20 70 61 67 65 72 73 2e   for all pagers.
5370: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
5380: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
5390: 41 47 4d 41 53 0a 73 74 61 74 69 63 20 76 6f 69  AGMAS.static voi
53a0: 64 20 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61  d setAllPagerFla
53b0: 67 73 28 73 71 6c 69 74 65 33 20 2a 64 62 29 7b  gs(sqlite3 *db){
53c0: 0a 20 20 69 66 28 20 64 62 2d 3e 61 75 74 6f 43  .  if( db->autoC
53d0: 6f 6d 6d 69 74 20 29 7b 0a 20 20 20 20 44 62 20  ommit ){.    Db 
53e0: 2a 70 44 62 20 3d 20 64 62 2d 3e 61 44 62 3b 0a  *pDb = db->aDb;.
53f0: 20 20 20 20 69 6e 74 20 6e 20 3d 20 64 62 2d 3e      int n = db->
5400: 6e 44 62 3b 0a 20 20 20 20 61 73 73 65 72 74 28  nDb;.    assert(
5410: 20 53 51 4c 49 54 45 5f 46 75 6c 6c 46 53 79 6e   SQLITE_FullFSyn
5420: 63 3d 3d 50 41 47 45 52 5f 46 55 4c 4c 46 53 59  c==PAGER_FULLFSY
5430: 4e 43 20 29 3b 0a 20 20 20 20 61 73 73 65 72 74  NC );.    assert
5440: 28 20 53 51 4c 49 54 45 5f 43 6b 70 74 46 75 6c  ( SQLITE_CkptFul
5450: 6c 46 53 79 6e 63 3d 3d 50 41 47 45 52 5f 43 4b  lFSync==PAGER_CK
5460: 50 54 5f 46 55 4c 4c 46 53 59 4e 43 20 29 3b 0a  PT_FULLFSYNC );.
5470: 20 20 20 20 61 73 73 65 72 74 28 20 53 51 4c 49      assert( SQLI
5480: 54 45 5f 43 61 63 68 65 53 70 69 6c 6c 3d 3d 50  TE_CacheSpill==P
5490: 41 47 45 52 5f 43 41 43 48 45 53 50 49 4c 4c 20  AGER_CACHESPILL 
54a0: 29 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 28  );.    assert( (
54b0: 50 41 47 45 52 5f 46 55 4c 4c 46 53 59 4e 43 20  PAGER_FULLFSYNC 
54c0: 7c 20 50 41 47 45 52 5f 43 4b 50 54 5f 46 55 4c  | PAGER_CKPT_FUL
54d0: 4c 46 53 59 4e 43 20 7c 20 50 41 47 45 52 5f 43  LFSYNC | PAGER_C
54e0: 41 43 48 45 53 50 49 4c 4c 29 0a 20 20 20 20 20  ACHESPILL).     
54f0: 20 20 20 20 20 20 20 20 3d 3d 20 20 50 41 47 45          ==  PAGE
5500: 52 5f 46 4c 41 47 53 5f 4d 41 53 4b 20 29 3b 0a  R_FLAGS_MASK );.
5510: 20 20 20 20 61 73 73 65 72 74 28 20 28 70 44 62      assert( (pDb
5520: 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 26  ->safety_level &
5530: 20 50 41 47 45 52 5f 53 59 4e 43 48 52 4f 4e 4f   PAGER_SYNCHRONO
5540: 55 53 5f 4d 41 53 4b 29 3d 3d 70 44 62 2d 3e 73  US_MASK)==pDb->s
5550: 61 66 65 74 79 5f 6c 65 76 65 6c 20 29 3b 0a 20  afety_level );. 
5560: 20 20 20 77 68 69 6c 65 28 20 28 6e 2d 2d 29 20     while( (n--) 
5570: 3e 20 30 20 29 7b 0a 20 20 20 20 20 20 69 66 28  > 0 ){.      if(
5580: 20 70 44 62 2d 3e 70 42 74 20 29 7b 0a 20 20 20   pDb->pBt ){.   
5590: 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72 65       sqlite3Btre
55a0: 65 53 65 74 50 61 67 65 72 46 6c 61 67 73 28 70  eSetPagerFlags(p
55b0: 44 62 2d 3e 70 42 74 2c 0a 20 20 20 20 20 20 20  Db->pBt,.       
55c0: 20 20 20 20 20 20 20 20 20 20 70 44 62 2d 3e 73            pDb->s
55d0: 61 66 65 74 79 5f 6c 65 76 65 6c 20 7c 20 28 64  afety_level | (d
55e0: 62 2d 3e 66 6c 61 67 73 20 26 20 50 41 47 45 52  b->flags & PAGER
55f0: 5f 46 4c 41 47 53 5f 4d 41 53 4b 29 20 29 3b 0a  _FLAGS_MASK) );.
5600: 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 44        }.      pD
5610: 62 2b 2b 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 7d  b++;.    }.  }.}
5620: 0a 23 65 6c 73 65 0a 23 20 64 65 66 69 6e 65 20  .#else.# define 
5630: 73 65 74 41 6c 6c 50 61 67 65 72 46 6c 61 67 73  setAllPagerFlags
5640: 28 58 29 20 20 2f 2a 20 6e 6f 2d 6f 70 20 2a 2f  (X)  /* no-op */
5650: 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a 20  .#endif.../*.** 
5660: 52 65 74 75 72 6e 20 61 20 68 75 6d 61 6e 2d 72  Return a human-r
5670: 65 61 64 61 62 6c 65 20 6e 61 6d 65 20 66 6f 72  eadable name for
5680: 20 61 20 63 6f 6e 73 74 72 61 69 6e 74 20 72 65   a constraint re
5690: 73 6f 6c 75 74 69 6f 6e 20 61 63 74 69 6f 6e 2e  solution action.
56a0: 0a 2a 2f 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  .*/.#ifndef SQLI
56b0: 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f  TE_OMIT_FOREIGN_
56c0: 4b 45 59 0a 73 74 61 74 69 63 20 63 6f 6e 73 74  KEY.static const
56d0: 20 63 68 61 72 20 2a 61 63 74 69 6f 6e 4e 61 6d   char *actionNam
56e0: 65 28 75 38 20 61 63 74 69 6f 6e 29 7b 0a 20 20  e(u8 action){.  
56f0: 63 6f 6e 73 74 20 63 68 61 72 20 2a 7a 4e 61 6d  const char *zNam
5700: 65 3b 0a 20 20 73 77 69 74 63 68 28 20 61 63 74  e;.  switch( act
5710: 69 6f 6e 20 29 7b 0a 20 20 20 20 63 61 73 65 20  ion ){.    case 
5720: 4f 45 5f 53 65 74 4e 75 6c 6c 3a 20 20 7a 4e 61  OE_SetNull:  zNa
5730: 6d 65 20 3d 20 22 53 45 54 20 4e 55 4c 4c 22 3b  me = "SET NULL";
5740: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
5750: 20 20 20 63 61 73 65 20 4f 45 5f 53 65 74 44 66     case OE_SetDf
5760: 6c 74 3a 20 20 7a 4e 61 6d 65 20 3d 20 22 53 45  lt:  zName = "SE
5770: 54 20 44 45 46 41 55 4c 54 22 3b 20 20 20 20 20  T DEFAULT";     
5780: 62 72 65 61 6b 3b 0a 20 20 20 20 63 61 73 65 20  break;.    case 
5790: 4f 45 5f 43 61 73 63 61 64 65 3a 20 20 7a 4e 61  OE_Cascade:  zNa
57a0: 6d 65 20 3d 20 22 43 41 53 43 41 44 45 22 3b 20  me = "CASCADE"; 
57b0: 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20          break;. 
57c0: 20 20 20 63 61 73 65 20 4f 45 5f 52 65 73 74 72     case OE_Restr
57d0: 69 63 74 3a 20 7a 4e 61 6d 65 20 3d 20 22 52 45  ict: zName = "RE
57e0: 53 54 52 49 43 54 22 3b 20 20 20 20 20 20 20 20  STRICT";        
57f0: 62 72 65 61 6b 3b 0a 20 20 20 20 64 65 66 61 75  break;.    defau
5800: 6c 74 3a 20 20 20 20 20 20 20 20 20 20 7a 4e 61  lt:          zNa
5810: 6d 65 20 3d 20 22 4e 4f 20 41 43 54 49 4f 4e 22  me = "NO ACTION"
5820: 3b 20 20 0a 20 20 20 20 20 20 20 20 20 20 20 20  ;  .            
5830: 20 20 20 20 20 20 20 20 20 20 61 73 73 65 72 74            assert
5840: 28 20 61 63 74 69 6f 6e 3d 3d 4f 45 5f 4e 6f 6e  ( action==OE_Non
5850: 65 20 29 3b 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  e ); break;.  }.
5860: 20 20 72 65 74 75 72 6e 20 7a 4e 61 6d 65 3b 0a    return zName;.
5870: 7d 0a 23 65 6e 64 69 66 0a 0a 0a 2f 2a 0a 2a 2a  }.#endif.../*.**
5880: 20 50 61 72 61 6d 65 74 65 72 20 65 4d 6f 64 65   Parameter eMode
5890: 20 6d 75 73 74 20 62 65 20 6f 6e 65 20 6f 66 20   must be one of 
58a0: 74 68 65 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  the PAGER_JOURNA
58b0: 4c 4d 4f 44 45 5f 58 58 58 20 63 6f 6e 73 74 61  LMODE_XXX consta
58c0: 6e 74 73 0a 2a 2a 20 64 65 66 69 6e 65 64 20 69  nts.** defined i
58d0: 6e 20 70 61 67 65 72 2e 68 2e 20 54 68 69 73 20  n pager.h. This 
58e0: 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e 73  function returns
58f0: 20 74 68 65 20 61 73 73 6f 63 69 61 74 65 64 20   the associated 
5900: 6c 6f 77 65 72 63 61 73 65 0a 2a 2a 20 6a 6f 75  lowercase.** jou
5910: 72 6e 61 6c 2d 6d 6f 64 65 20 6e 61 6d 65 2e 0a  rnal-mode name..
5920: 2a 2f 0a 63 6f 6e 73 74 20 63 68 61 72 20 2a 73  */.const char *s
5930: 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c 4d 6f 64  qlite3JournalMod
5940: 65 6e 61 6d 65 28 69 6e 74 20 65 4d 6f 64 65 29  ename(int eMode)
5950: 7b 0a 20 20 73 74 61 74 69 63 20 63 68 61 72 20  {.  static char 
5960: 2a 20 63 6f 6e 73 74 20 61 7a 4d 6f 64 65 4e 61  * const azModeNa
5970: 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 22 64 65  me[] = {.    "de
5980: 6c 65 74 65 22 2c 20 22 70 65 72 73 69 73 74 22  lete", "persist"
5990: 2c 20 22 6f 66 66 22 2c 20 22 74 72 75 6e 63 61  , "off", "trunca
59a0: 74 65 22 2c 20 22 6d 65 6d 6f 72 79 22 0a 23 69  te", "memory".#i
59b0: 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49  fndef SQLITE_OMI
59c0: 54 5f 57 41 4c 0a 20 20 20 20 20 2c 20 22 77 61  T_WAL.     , "wa
59d0: 6c 22 0a 23 65 6e 64 69 66 0a 20 20 7d 3b 0a 20  l".#endif.  };. 
59e0: 20 61 73 73 65 72 74 28 20 50 41 47 45 52 5f 4a   assert( PAGER_J
59f0: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 44 45 4c 45 54  OURNALMODE_DELET
5a00: 45 3d 3d 30 20 29 3b 0a 20 20 61 73 73 65 72 74  E==0 );.  assert
5a10: 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ( PAGER_JOURNALM
5a20: 4f 44 45 5f 50 45 52 53 49 53 54 3d 3d 31 20 29  ODE_PERSIST==1 )
5a30: 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47 45  ;.  assert( PAGE
5a40: 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4f 46  R_JOURNALMODE_OF
5a50: 46 3d 3d 32 20 29 3b 0a 20 20 61 73 73 65 72 74  F==2 );.  assert
5a60: 28 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  ( PAGER_JOURNALM
5a70: 4f 44 45 5f 54 52 55 4e 43 41 54 45 3d 3d 33 20  ODE_TRUNCATE==3 
5a80: 29 3b 0a 20 20 61 73 73 65 72 74 28 20 50 41 47  );.  assert( PAG
5a90: 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45 5f 4d  ER_JOURNALMODE_M
5aa0: 45 4d 4f 52 59 3d 3d 34 20 29 3b 0a 20 20 61 73  EMORY==4 );.  as
5ab0: 73 65 72 74 28 20 50 41 47 45 52 5f 4a 4f 55 52  sert( PAGER_JOUR
5ac0: 4e 41 4c 4d 4f 44 45 5f 57 41 4c 3d 3d 35 20 29  NALMODE_WAL==5 )
5ad0: 3b 0a 20 20 61 73 73 65 72 74 28 20 65 4d 6f 64  ;.  assert( eMod
5ae0: 65 3e 3d 30 20 26 26 20 65 4d 6f 64 65 3c 3d 41  e>=0 && eMode<=A
5af0: 72 72 61 79 53 69 7a 65 28 61 7a 4d 6f 64 65 4e  rraySize(azModeN
5b00: 61 6d 65 29 20 29 3b 0a 0a 20 20 69 66 28 20 65  ame) );..  if( e
5b10: 4d 6f 64 65 3d 3d 41 72 72 61 79 53 69 7a 65 28  Mode==ArraySize(
5b20: 61 7a 4d 6f 64 65 4e 61 6d 65 29 20 29 20 72 65  azModeName) ) re
5b30: 74 75 72 6e 20 30 3b 0a 20 20 72 65 74 75 72 6e  turn 0;.  return
5b40: 20 61 7a 4d 6f 64 65 4e 61 6d 65 5b 65 4d 6f 64   azModeName[eMod
5b50: 65 5d 3b 0a 7d 0a 0a 2f 2a 0a 2a 2a 20 50 72 6f  e];.}../*.** Pro
5b60: 63 65 73 73 20 61 20 70 72 61 67 6d 61 20 73 74  cess a pragma st
5b70: 61 74 65 6d 65 6e 74 2e 20 20 0a 2a 2a 0a 2a 2a  atement.  .**.**
5b80: 20 50 72 61 67 6d 61 73 20 61 72 65 20 6f 66 20   Pragmas are of 
5b90: 74 68 69 73 20 66 6f 72 6d 3a 0a 2a 2a 0a 2a 2a  this form:.**.**
5ba0: 20 20 20 20 20 20 50 52 41 47 4d 41 20 5b 64 61        PRAGMA [da
5bb0: 74 61 62 61 73 65 2e 5d 69 64 20 5b 3d 20 76 61  tabase.]id [= va
5bc0: 6c 75 65 5d 0a 2a 2a 0a 2a 2a 20 54 68 65 20 69  lue].**.** The i
5bd0: 64 65 6e 74 69 66 69 65 72 20 6d 69 67 68 74 20  dentifier might 
5be0: 61 6c 73 6f 20 62 65 20 61 20 73 74 72 69 6e 67  also be a string
5bf0: 2e 20 20 54 68 65 20 76 61 6c 75 65 20 69 73 20  .  The value is 
5c00: 61 20 73 74 72 69 6e 67 2c 20 61 6e 64 0a 2a 2a  a string, and.**
5c10: 20 69 64 65 6e 74 69 66 69 65 72 2c 20 6f 72 20   identifier, or 
5c20: 61 20 6e 75 6d 62 65 72 2e 20 20 49 66 20 6d 69  a number.  If mi
5c30: 6e 75 73 46 6c 61 67 20 69 73 20 74 72 75 65 2c  nusFlag is true,
5c40: 20 74 68 65 6e 20 74 68 65 20 76 61 6c 75 65 20   then the value 
5c50: 69 73 0a 2a 2a 20 61 20 6e 75 6d 62 65 72 20 74  is.** a number t
5c60: 68 61 74 20 77 61 73 20 70 72 65 63 65 64 65 64  hat was preceded
5c70: 20 62 79 20 61 20 6d 69 6e 75 73 20 73 69 67 6e   by a minus sign
5c80: 2e 0a 2a 2a 0a 2a 2a 20 49 66 20 74 68 65 20 6c  ..**.** If the l
5c90: 65 66 74 20 73 69 64 65 20 69 73 20 22 64 61 74  eft side is "dat
5ca0: 61 62 61 73 65 2e 69 64 22 20 74 68 65 6e 20 70  abase.id" then p
5cb0: 49 64 31 20 69 73 20 74 68 65 20 64 61 74 61 62  Id1 is the datab
5cc0: 61 73 65 20 6e 61 6d 65 0a 2a 2a 20 61 6e 64 20  ase name.** and 
5cd0: 70 49 64 32 20 69 73 20 74 68 65 20 69 64 2e 20  pId2 is the id. 
5ce0: 20 49 66 20 74 68 65 20 6c 65 66 74 20 73 69 64   If the left sid
5cf0: 65 20 69 73 20 6a 75 73 74 20 22 69 64 22 20 74  e is just "id" t
5d00: 68 65 6e 20 70 49 64 31 20 69 73 20 74 68 65 0a  hen pId1 is the.
5d10: 2a 2a 20 69 64 20 61 6e 64 20 70 49 64 32 20 69  ** id and pId2 i
5d20: 73 20 61 6e 79 20 65 6d 70 74 79 20 73 74 72 69  s any empty stri
5d30: 6e 67 2e 0a 2a 2f 0a 76 6f 69 64 20 73 71 6c 69  ng..*/.void sqli
5d40: 74 65 33 50 72 61 67 6d 61 28 0a 20 20 50 61 72  te3Pragma(.  Par
5d50: 73 65 20 2a 70 50 61 72 73 65 2c 20 0a 20 20 54  se *pParse, .  T
5d60: 6f 6b 65 6e 20 2a 70 49 64 31 2c 20 20 20 20 20  oken *pId1,     
5d70: 20 20 20 2f 2a 20 46 69 72 73 74 20 70 61 72 74     /* First part
5d80: 20 6f 66 20 5b 64 61 74 61 62 61 73 65 2e 5d 69   of [database.]i
5d90: 64 20 66 69 65 6c 64 20 2a 2f 0a 20 20 54 6f 6b  d field */.  Tok
5da0: 65 6e 20 2a 70 49 64 32 2c 20 20 20 20 20 20 20  en *pId2,       
5db0: 20 2f 2a 20 53 65 63 6f 6e 64 20 70 61 72 74 20   /* Second part 
5dc0: 6f 66 20 5b 64 61 74 61 62 61 73 65 2e 5d 69 64  of [database.]id
5dd0: 20 66 69 65 6c 64 2c 20 6f 72 20 4e 55 4c 4c 20   field, or NULL 
5de0: 2a 2f 0a 20 20 54 6f 6b 65 6e 20 2a 70 56 61 6c  */.  Token *pVal
5df0: 75 65 2c 20 20 20 20 20 20 2f 2a 20 54 6f 6b 65  ue,      /* Toke
5e00: 6e 20 66 6f 72 20 3c 76 61 6c 75 65 3e 2c 20 6f  n for <value>, o
5e10: 72 20 4e 55 4c 4c 20 2a 2f 0a 20 20 69 6e 74 20  r NULL */.  int 
5e20: 6d 69 6e 75 73 46 6c 61 67 20 20 20 20 20 20 20  minusFlag       
5e30: 2f 2a 20 54 72 75 65 20 69 66 20 61 20 27 2d 27  /* True if a '-'
5e40: 20 73 69 67 6e 20 70 72 65 63 65 64 65 64 20 3c   sign preceded <
5e50: 76 61 6c 75 65 3e 20 2a 2f 0a 29 7b 0a 20 20 63  value> */.){.  c
5e60: 68 61 72 20 2a 7a 4c 65 66 74 20 3d 20 30 3b 20  har *zLeft = 0; 
5e70: 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d 74 65 72        /* Nul-ter
5e80: 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74  minated UTF-8 st
5e90: 72 69 6e 67 20 3c 69 64 3e 20 2a 2f 0a 20 20 63  ring <id> */.  c
5ea0: 68 61 72 20 2a 7a 52 69 67 68 74 20 3d 20 30 3b  har *zRight = 0;
5eb0: 20 20 20 20 20 20 2f 2a 20 4e 75 6c 2d 74 65 72        /* Nul-ter
5ec0: 6d 69 6e 61 74 65 64 20 55 54 46 2d 38 20 73 74  minated UTF-8 st
5ed0: 72 69 6e 67 20 3c 76 61 6c 75 65 3e 2c 20 6f 72  ring <value>, or
5ee0: 20 4e 55 4c 4c 20 2a 2f 0a 20 20 63 6f 6e 73 74   NULL */.  const
5ef0: 20 63 68 61 72 20 2a 7a 44 62 20 3d 20 30 3b 20   char *zDb = 0; 
5f00: 20 20 2f 2a 20 54 68 65 20 64 61 74 61 62 61 73    /* The databas
5f10: 65 20 6e 61 6d 65 20 2a 2f 0a 20 20 54 6f 6b 65  e name */.  Toke
5f20: 6e 20 2a 70 49 64 3b 20 20 20 20 20 20 20 20 20  n *pId;         
5f30: 20 20 20 2f 2a 20 50 6f 69 6e 74 65 72 20 74 6f     /* Pointer to
5f40: 20 3c 69 64 3e 20 74 6f 6b 65 6e 20 2a 2f 0a 20   <id> token */. 
5f50: 20 63 68 61 72 20 2a 61 46 63 6e 74 6c 5b 34 5d   char *aFcntl[4]
5f60: 3b 20 20 20 20 20 20 20 2f 2a 20 41 72 67 75 6d  ;       /* Argum
5f70: 65 6e 74 20 74 6f 20 53 51 4c 49 54 45 5f 46 43  ent to SQLITE_FC
5f80: 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f 0a 20 20  NTL_PRAGMA */.  
5f90: 69 6e 74 20 69 44 62 3b 20 20 20 20 20 20 20 20  int iDb;        
5fa0: 20 20 20 20 20 20 20 2f 2a 20 44 61 74 61 62 61         /* Databa
5fb0: 73 65 20 69 6e 64 65 78 20 66 6f 72 20 3c 64 61  se index for <da
5fc0: 74 61 62 61 73 65 3e 20 2a 2f 0a 20 20 69 6e 74  tabase> */.  int
5fd0: 20 6c 77 72 2c 20 75 70 72 2c 20 6d 69 64 3b 20   lwr, upr, mid; 
5fe0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 42 69 6e            /* Bin
5ff0: 61 72 79 20 73 65 61 72 63 68 20 62 6f 75 6e 64  ary search bound
6000: 73 20 2a 2f 0a 20 20 69 6e 74 20 72 63 3b 20 20  s */.  int rc;  
6010: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6020: 20 20 20 20 2f 2a 20 72 65 74 75 72 6e 20 76 61      /* return va
6030: 6c 75 65 20 66 6f 72 6d 20 53 51 4c 49 54 45 5f  lue form SQLITE_
6040: 46 43 4e 54 4c 5f 50 52 41 47 4d 41 20 2a 2f 0a  FCNTL_PRAGMA */.
6050: 20 20 73 71 6c 69 74 65 33 20 2a 64 62 20 3d 20    sqlite3 *db = 
6060: 70 50 61 72 73 65 2d 3e 64 62 3b 20 20 20 20 2f  pParse->db;    /
6070: 2a 20 54 68 65 20 64 61 74 61 62 61 73 65 20 63  * The database c
6080: 6f 6e 6e 65 63 74 69 6f 6e 20 2a 2f 0a 20 20 44  onnection */.  D
6090: 62 20 2a 70 44 62 3b 20 20 20 20 20 20 20 20 20  b *pDb;         
60a0: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 54              /* T
60b0: 68 65 20 73 70 65 63 69 66 69 63 20 64 61 74 61  he specific data
60c0: 62 61 73 65 20 62 65 69 6e 67 20 70 72 61 67 6d  base being pragm
60d0: 61 65 64 20 2a 2f 0a 20 20 56 64 62 65 20 2a 76  aed */.  Vdbe *v
60e0: 20 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62   = sqlite3GetVdb
60f0: 65 28 70 50 61 72 73 65 29 3b 20 20 2f 2a 20 50  e(pParse);  /* P
6100: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
6110: 74 20 2a 2f 0a 0a 20 20 69 66 28 20 76 3d 3d 30  t */..  if( v==0
6120: 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 73 71 6c   ) return;.  sql
6130: 69 74 65 33 56 64 62 65 52 75 6e 4f 6e 6c 79 4f  ite3VdbeRunOnlyO
6140: 6e 63 65 28 76 29 3b 0a 20 20 70 50 61 72 73 65  nce(v);.  pParse
6150: 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 0a 20 20 2f  ->nMem = 2;..  /
6160: 2a 20 49 6e 74 65 72 70 72 65 74 20 74 68 65 20  * Interpret the 
6170: 5b 64 61 74 61 62 61 73 65 2e 5d 20 70 61 72 74  [database.] part
6180: 20 6f 66 20 74 68 65 20 70 72 61 67 6d 61 20 73   of the pragma s
6190: 74 61 74 65 6d 65 6e 74 2e 20 69 44 62 20 69 73  tatement. iDb is
61a0: 20 74 68 65 0a 20 20 2a 2a 20 69 6e 64 65 78 20   the.  ** index 
61b0: 6f 66 20 74 68 65 20 64 61 74 61 62 61 73 65 20  of the database 
61c0: 74 68 69 73 20 70 72 61 67 6d 61 20 69 73 20 62  this pragma is b
61d0: 65 69 6e 67 20 61 70 70 6c 69 65 64 20 74 6f 20  eing applied to 
61e0: 69 6e 20 64 62 2e 61 44 62 5b 5d 2e 20 2a 2f 0a  in db.aDb[]. */.
61f0: 20 20 69 44 62 20 3d 20 73 71 6c 69 74 65 33 54    iDb = sqlite3T
6200: 77 6f 50 61 72 74 4e 61 6d 65 28 70 50 61 72 73  woPartName(pPars
6210: 65 2c 20 70 49 64 31 2c 20 70 49 64 32 2c 20 26  e, pId1, pId2, &
6220: 70 49 64 29 3b 0a 20 20 69 66 28 20 69 44 62 3c  pId);.  if( iDb<
6230: 30 20 29 20 72 65 74 75 72 6e 3b 0a 20 20 70 44  0 ) return;.  pD
6240: 62 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69 44 62  b = &db->aDb[iDb
6250: 5d 3b 0a 0a 20 20 2f 2a 20 49 66 20 74 68 65 20  ];..  /* If the 
6260: 74 65 6d 70 20 64 61 74 61 62 61 73 65 20 68 61  temp database ha
6270: 73 20 62 65 65 6e 20 65 78 70 6c 69 63 69 74 6c  s been explicitl
6280: 79 20 6e 61 6d 65 64 20 61 73 20 70 61 72 74 20  y named as part 
6290: 6f 66 20 74 68 65 20 0a 20 20 2a 2a 20 70 72 61  of the .  ** pra
62a0: 67 6d 61 2c 20 6d 61 6b 65 20 73 75 72 65 20 69  gma, make sure i
62b0: 74 20 69 73 20 6f 70 65 6e 2e 20 0a 20 20 2a 2f  t is open. .  */
62c0: 0a 20 20 69 66 28 20 69 44 62 3d 3d 31 20 26 26  .  if( iDb==1 &&
62d0: 20 73 71 6c 69 74 65 33 4f 70 65 6e 54 65 6d 70   sqlite3OpenTemp
62e0: 44 61 74 61 62 61 73 65 28 70 50 61 72 73 65 29  Database(pParse)
62f0: 20 29 7b 0a 20 20 20 20 72 65 74 75 72 6e 3b 0a   ){.    return;.
6300: 20 20 7d 0a 0a 20 20 7a 4c 65 66 74 20 3d 20 73    }..  zLeft = s
6310: 71 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f  qlite3NameFromTo
6320: 6b 65 6e 28 64 62 2c 20 70 49 64 29 3b 0a 20 20  ken(db, pId);.  
6330: 69 66 28 20 21 7a 4c 65 66 74 20 29 20 72 65 74  if( !zLeft ) ret
6340: 75 72 6e 3b 0a 20 20 69 66 28 20 6d 69 6e 75 73  urn;.  if( minus
6350: 46 6c 61 67 20 29 7b 0a 20 20 20 20 7a 52 69 67  Flag ){.    zRig
6360: 68 74 20 3d 20 73 71 6c 69 74 65 33 4d 50 72 69  ht = sqlite3MPri
6370: 6e 74 66 28 64 62 2c 20 22 2d 25 54 22 2c 20 70  ntf(db, "-%T", p
6380: 56 61 6c 75 65 29 3b 0a 20 20 7d 65 6c 73 65 7b  Value);.  }else{
6390: 0a 20 20 20 20 7a 52 69 67 68 74 20 3d 20 73 71  .    zRight = sq
63a0: 6c 69 74 65 33 4e 61 6d 65 46 72 6f 6d 54 6f 6b  lite3NameFromTok
63b0: 65 6e 28 64 62 2c 20 70 56 61 6c 75 65 29 3b 0a  en(db, pValue);.
63c0: 20 20 7d 0a 0a 20 20 61 73 73 65 72 74 28 20 70    }..  assert( p
63d0: 49 64 32 20 29 3b 0a 20 20 7a 44 62 20 3d 20 70  Id2 );.  zDb = p
63e0: 49 64 32 2d 3e 6e 3e 30 20 3f 20 70 44 62 2d 3e  Id2->n>0 ? pDb->
63f0: 7a 4e 61 6d 65 20 3a 20 30 3b 0a 20 20 69 66 28  zName : 0;.  if(
6400: 20 73 71 6c 69 74 65 33 41 75 74 68 43 68 65 63   sqlite3AuthChec
6410: 6b 28 70 50 61 72 73 65 2c 20 53 51 4c 49 54 45  k(pParse, SQLITE
6420: 5f 50 52 41 47 4d 41 2c 20 7a 4c 65 66 74 2c 20  _PRAGMA, zLeft, 
6430: 7a 52 69 67 68 74 2c 20 7a 44 62 29 20 29 7b 0a  zRight, zDb) ){.
6440: 20 20 20 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f      goto pragma_
6450: 6f 75 74 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 20 53  out;.  }..  /* S
6460: 65 6e 64 20 61 6e 20 53 51 4c 49 54 45 5f 46 43  end an SQLITE_FC
6470: 4e 54 4c 5f 50 52 41 47 4d 41 20 66 69 6c 65 2d  NTL_PRAGMA file-
6480: 63 6f 6e 74 72 6f 6c 20 74 6f 20 74 68 65 20 75  control to the u
6490: 6e 64 65 72 6c 79 69 6e 67 20 56 46 53 0a 20 20  nderlying VFS.  
64a0: 2a 2a 20 63 6f 6e 6e 65 63 74 69 6f 6e 2e 20 20  ** connection.  
64b0: 49 66 20 69 74 20 72 65 74 75 72 6e 73 20 53 51  If it returns SQ
64c0: 4c 49 54 45 5f 4f 4b 2c 20 74 68 65 6e 20 61 73  LITE_OK, then as
64d0: 73 75 6d 65 20 74 68 61 74 20 74 68 65 20 56 46  sume that the VF
64e0: 53 0a 20 20 2a 2a 20 68 61 6e 64 6c 65 64 20 74  S.  ** handled t
64f0: 68 65 20 70 72 61 67 6d 61 20 61 6e 64 20 67 65  he pragma and ge
6500: 6e 65 72 61 74 65 20 61 20 6e 6f 2d 6f 70 20 70  nerate a no-op p
6510: 72 65 70 61 72 65 64 20 73 74 61 74 65 6d 65 6e  repared statemen
6520: 74 2e 0a 20 20 2a 2f 0a 20 20 61 46 63 6e 74 6c  t..  */.  aFcntl
6530: 5b 30 5d 20 3d 20 30 3b 0a 20 20 61 46 63 6e 74  [0] = 0;.  aFcnt
6540: 6c 5b 31 5d 20 3d 20 7a 4c 65 66 74 3b 0a 20 20  l[1] = zLeft;.  
6550: 61 46 63 6e 74 6c 5b 32 5d 20 3d 20 7a 52 69 67  aFcntl[2] = zRig
6560: 68 74 3b 0a 20 20 61 46 63 6e 74 6c 5b 33 5d 20  ht;.  aFcntl[3] 
6570: 3d 20 30 3b 0a 20 20 64 62 2d 3e 62 75 73 79 48  = 0;.  db->busyH
6580: 61 6e 64 6c 65 72 2e 6e 42 75 73 79 20 3d 20 30  andler.nBusy = 0
6590: 3b 0a 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33  ;.  rc = sqlite3
65a0: 5f 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62  _file_control(db
65b0: 2c 20 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46 43  , zDb, SQLITE_FC
65c0: 4e 54 4c 5f 50 52 41 47 4d 41 2c 20 28 76 6f 69  NTL_PRAGMA, (voi
65d0: 64 2a 29 61 46 63 6e 74 6c 29 3b 0a 20 20 69 66  d*)aFcntl);.  if
65e0: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
65f0: 29 7b 0a 20 20 20 20 69 66 28 20 61 46 63 6e 74  ){.    if( aFcnt
6600: 6c 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 69 6e  l[0] ){.      in
6610: 74 20 6d 65 6d 20 3d 20 2b 2b 70 50 61 72 73 65  t mem = ++pParse
6620: 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 20 20 73 71  ->nMem;.      sq
6630: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
6640: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
6650: 2c 20 6d 65 6d 2c 20 30 2c 20 61 46 63 6e 74 6c  , mem, 0, aFcntl
6660: 5b 30 5d 2c 20 30 29 3b 0a 20 20 20 20 20 20 73  [0], 0);.      s
6670: 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
6680: 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20 20  Cols(v, 1);.    
6690: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
66a0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
66b0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 72 65 73  LNAME_NAME, "res
66c0: 75 6c 74 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ult", SQLITE_STA
66d0: 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
66e0: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
66f0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 6d   OP_ResultRow, m
6700: 65 6d 2c 20 31 29 3b 0a 20 20 20 20 20 20 73 71  em, 1);.      sq
6710: 6c 69 74 65 33 5f 66 72 65 65 28 61 46 63 6e 74  lite3_free(aFcnt
6720: 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20  l[0]);.    }.   
6730: 20 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74   goto pragma_out
6740: 3b 0a 20 20 7d 0a 20 20 69 66 28 20 72 63 21 3d  ;.  }.  if( rc!=
6750: 53 51 4c 49 54 45 5f 4e 4f 54 46 4f 55 4e 44 20  SQLITE_NOTFOUND 
6760: 29 7b 0a 20 20 20 20 69 66 28 20 61 46 63 6e 74  ){.    if( aFcnt
6770: 6c 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 73 71  l[0] ){.      sq
6780: 6c 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50  lite3ErrorMsg(pP
6790: 61 72 73 65 2c 20 22 25 73 22 2c 20 61 46 63 6e  arse, "%s", aFcn
67a0: 74 6c 5b 30 5d 29 3b 0a 20 20 20 20 20 20 73 71  tl[0]);.      sq
67b0: 6c 69 74 65 33 5f 66 72 65 65 28 61 46 63 6e 74  lite3_free(aFcnt
67c0: 6c 5b 30 5d 29 3b 0a 20 20 20 20 7d 0a 20 20 20  l[0]);.    }.   
67d0: 20 70 50 61 72 73 65 2d 3e 6e 45 72 72 2b 2b 3b   pParse->nErr++;
67e0: 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 72 63 20  .    pParse->rc 
67f0: 3d 20 72 63 3b 0a 20 20 20 20 67 6f 74 6f 20 70  = rc;.    goto p
6800: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a  ragma_out;.  }..
6810: 20 20 2f 2a 20 4c 6f 63 61 74 65 20 74 68 65 20    /* Locate the 
6820: 70 72 61 67 6d 61 20 69 6e 20 74 68 65 20 6c 6f  pragma in the lo
6830: 6f 6b 75 70 20 74 61 62 6c 65 20 2a 2f 0a 20 20  okup table */.  
6840: 6c 77 72 20 3d 20 30 3b 0a 20 20 75 70 72 20 3d  lwr = 0;.  upr =
6850: 20 41 72 72 61 79 53 69 7a 65 28 61 50 72 61 67   ArraySize(aPrag
6860: 6d 61 4e 61 6d 65 73 29 2d 31 3b 0a 20 20 77 68  maNames)-1;.  wh
6870: 69 6c 65 28 20 6c 77 72 3c 3d 75 70 72 20 29 7b  ile( lwr<=upr ){
6880: 0a 20 20 20 20 6d 69 64 20 3d 20 28 6c 77 72 2b  .    mid = (lwr+
6890: 75 70 72 29 2f 32 3b 0a 20 20 20 20 72 63 20 3d  upr)/2;.    rc =
68a0: 20 73 71 6c 69 74 65 33 5f 73 74 72 69 63 6d 70   sqlite3_stricmp
68b0: 28 7a 4c 65 66 74 2c 20 61 50 72 61 67 6d 61 4e  (zLeft, aPragmaN
68c0: 61 6d 65 73 5b 6d 69 64 5d 2e 7a 4e 61 6d 65 29  ames[mid].zName)
68d0: 3b 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 30 20  ;.    if( rc==0 
68e0: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 69 66 28  ) break;.    if(
68f0: 20 72 63 3c 30 20 29 7b 0a 20 20 20 20 20 20 75   rc<0 ){.      u
6900: 70 72 20 3d 20 6d 69 64 20 2d 20 31 3b 0a 20 20  pr = mid - 1;.  
6910: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 6c    }else{.      l
6920: 77 72 20 3d 20 6d 69 64 20 2b 20 31 3b 0a 20 20  wr = mid + 1;.  
6930: 20 20 7d 0a 20 20 7d 0a 20 20 69 66 28 20 6c 77    }.  }.  if( lw
6940: 72 3e 75 70 72 20 29 20 67 6f 74 6f 20 70 72 61  r>upr ) goto pra
6950: 67 6d 61 5f 6f 75 74 3b 0a 0a 20 20 2f 2a 20 4d  gma_out;..  /* M
6960: 61 6b 65 20 73 75 72 65 20 74 68 65 20 64 61 74  ake sure the dat
6970: 61 62 61 73 65 20 73 63 68 65 6d 61 20 69 73 20  abase schema is 
6980: 6c 6f 61 64 65 64 20 69 66 20 74 68 65 20 70 72  loaded if the pr
6990: 61 67 6d 61 20 72 65 71 75 69 72 65 73 20 74 68  agma requires th
69a0: 61 74 20 2a 2f 0a 20 20 69 66 28 20 28 61 50 72  at */.  if( (aPr
69b0: 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 6d  agmaNames[mid].m
69c0: 50 72 61 67 46 6c 61 67 20 26 20 50 72 61 67 46  PragFlag & PragF
69d0: 6c 61 67 5f 4e 65 65 64 53 63 68 65 6d 61 29 21  lag_NeedSchema)!
69e0: 3d 30 20 29 7b 0a 20 20 20 20 69 66 28 20 73 71  =0 ){.    if( sq
69f0: 6c 69 74 65 33 52 65 61 64 53 63 68 65 6d 61 28  lite3ReadSchema(
6a00: 70 50 61 72 73 65 29 20 29 20 67 6f 74 6f 20 70  pParse) ) goto p
6a10: 72 61 67 6d 61 5f 6f 75 74 3b 0a 20 20 7d 0a 0a  ragma_out;.  }..
6a20: 20 20 2f 2a 20 4a 75 6d 70 20 74 6f 20 74 68 65    /* Jump to the
6a30: 20 61 70 70 72 6f 70 72 69 61 74 65 20 70 72 61   appropriate pra
6a40: 67 6d 61 20 68 61 6e 64 6c 65 72 20 2a 2f 0a 20  gma handler */. 
6a50: 20 73 77 69 74 63 68 28 20 61 50 72 61 67 6d 61   switch( aPragma
6a60: 4e 61 6d 65 73 5b 6d 69 64 5d 2e 65 50 72 61 67  Names[mid].ePrag
6a70: 54 79 70 20 29 7b 0a 20 20 0a 23 69 66 20 21 64  Typ ){.  .#if !d
6a80: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
6a90: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
6aa0: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
6ab0: 4c 49 54 45 5f 4f 4d 49 54 5f 44 45 50 52 45 43  LITE_OMIT_DEPREC
6ac0: 41 54 45 44 29 0a 20 20 2f 2a 0a 20 20 2a 2a 20  ATED).  /*.  ** 
6ad0: 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73   PRAGMA [databas
6ae0: 65 2e 5d 64 65 66 61 75 6c 74 5f 63 61 63 68 65  e.]default_cache
6af0: 5f 73 69 7a 65 0a 20 20 2a 2a 20 20 50 52 41 47  _size.  **  PRAG
6b00: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 64 65  MA [database.]de
6b10: 66 61 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65  fault_cache_size
6b20: 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65  =N.  **.  ** The
6b30: 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70 6f   first form repo
6b40: 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74 20  rts the current 
6b50: 70 65 72 73 69 73 74 65 6e 74 20 73 65 74 74 69  persistent setti
6b60: 6e 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20  ng for the.  ** 
6b70: 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65 2e  page cache size.
6b80: 20 20 54 68 65 20 76 61 6c 75 65 20 72 65 74 75    The value retu
6b90: 72 6e 65 64 20 69 73 20 74 68 65 20 6d 61 78 69  rned is the maxi
6ba0: 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66 0a 20 20  mum number of.  
6bb0: 2a 2a 20 70 61 67 65 73 20 69 6e 20 74 68 65 20  ** pages in the 
6bc0: 70 61 67 65 20 63 61 63 68 65 2e 20 20 54 68 65  page cache.  The
6bd0: 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65 74   second form set
6be0: 73 20 62 6f 74 68 20 74 68 65 20 63 75 72 72 65  s both the curre
6bf0: 6e 74 0a 20 20 2a 2a 20 70 61 67 65 20 63 61 63  nt.  ** page cac
6c00: 68 65 20 73 69 7a 65 20 76 61 6c 75 65 20 61 6e  he size value an
6c10: 64 20 74 68 65 20 70 65 72 73 69 73 74 65 6e 74  d the persistent
6c20: 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a 65   page cache size
6c30: 20 76 61 6c 75 65 0a 20 20 2a 2a 20 73 74 6f 72   value.  ** stor
6c40: 65 64 20 69 6e 20 74 68 65 20 64 61 74 61 62 61  ed in the databa
6c50: 73 65 20 66 69 6c 65 2e 0a 20 20 2a 2a 0a 20 20  se file..  **.  
6c60: 2a 2a 20 4f 6c 64 65 72 20 76 65 72 73 69 6f 6e  ** Older version
6c70: 73 20 6f 66 20 53 51 4c 69 74 65 20 77 6f 75 6c  s of SQLite woul
6c80: 64 20 73 65 74 20 74 68 65 20 64 65 66 61 75 6c  d set the defaul
6c90: 74 20 63 61 63 68 65 20 73 69 7a 65 20 74 6f 20  t cache size to 
6ca0: 61 0a 20 20 2a 2a 20 6e 65 67 61 74 69 76 65 20  a.  ** negative 
6cb0: 6e 75 6d 62 65 72 20 74 6f 20 69 6e 64 69 63 61  number to indica
6cc0: 74 65 20 73 79 6e 63 68 72 6f 6e 6f 75 73 3d 4f  te synchronous=O
6cd0: 46 46 2e 20 20 54 68 65 73 65 20 64 61 79 73 2c  FF.  These days,
6ce0: 20 73 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20 2a   synchronous.  *
6cf0: 2a 20 69 73 20 61 6c 77 61 79 73 20 6f 6e 20 62  * is always on b
6d00: 79 20 64 65 66 61 75 6c 74 20 72 65 67 61 72 64  y default regard
6d10: 6c 65 73 73 20 6f 66 20 74 68 65 20 73 69 67 6e  less of the sign
6d20: 20 6f 66 20 74 68 65 20 64 65 66 61 75 6c 74 20   of the default 
6d30: 63 61 63 68 65 0a 20 20 2a 2a 20 73 69 7a 65 2e  cache.  ** size.
6d40: 20 20 42 75 74 20 63 6f 6e 74 69 6e 75 65 20 74    But continue t
6d50: 6f 20 74 61 6b 65 20 74 68 65 20 61 62 73 6f 6c  o take the absol
6d60: 75 74 65 20 76 61 6c 75 65 20 6f 66 20 74 68 65  ute value of the
6d70: 20 64 65 66 61 75 6c 74 20 63 61 63 68 65 0a 20   default cache. 
6d80: 20 2a 2a 20 73 69 7a 65 20 6f 66 20 68 69 73 74   ** size of hist
6d90: 6f 72 69 63 61 6c 20 63 6f 6d 70 61 74 69 62 69  orical compatibi
6da0: 6c 69 74 79 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  lity..  */.  cas
6db0: 65 20 50 72 61 67 54 79 70 5f 44 45 46 41 55 4c  e PragTyp_DEFAUL
6dc0: 54 5f 43 41 43 48 45 5f 53 49 5a 45 3a 20 7b 0a  T_CACHE_SIZE: {.
6dd0: 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74      static const
6de0: 20 69 6e 74 20 69 4c 6e 20 3d 20 56 44 42 45 5f   int iLn = VDBE_
6df0: 4f 46 46 53 45 54 5f 4c 49 4e 45 4e 4f 28 32 29  OFFSET_LINENO(2)
6e00: 3b 0a 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e  ;.    static con
6e10: 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 67 65  st VdbeOpList ge
6e20: 74 43 61 63 68 65 53 69 7a 65 5b 5d 20 3d 20 7b  tCacheSize[] = {
6e30: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e  .      { OP_Tran
6e40: 73 61 63 74 69 6f 6e 2c 20 30 2c 20 30 2c 20 20  saction, 0, 0,  
6e50: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 20 20 20        0},       
6e60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6e70: 20 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20    /* 0 */.      
6e80: 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b 69 65 2c  { OP_ReadCookie,
6e90: 20 20 30 2c 20 31 2c 20 20 20 20 20 20 20 20 42    0, 1,        B
6ea0: 54 52 45 45 5f 44 45 46 41 55 4c 54 5f 43 41 43  TREE_DEFAULT_CAC
6eb0: 48 45 5f 53 49 5a 45 7d 2c 20 20 2f 2a 20 31 20  HE_SIZE},  /* 1 
6ec0: 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 66  */.      { OP_If
6ed0: 50 6f 73 2c 20 20 20 20 20 20 20 31 2c 20 38 2c  Pos,       1, 8,
6ee0: 20 20 20 20 20 20 20 20 30 7d 2c 0a 20 20 20 20          0},.    
6ef0: 20 20 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20    { OP_Integer, 
6f00: 20 20 20 20 30 2c 20 32 2c 20 20 20 20 20 20 20      0, 2,       
6f10: 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f 50 5f   0},.      { OP_
6f20: 53 75 62 74 72 61 63 74 2c 20 20 20 20 31 2c 20  Subtract,    1, 
6f30: 32 2c 20 20 20 20 20 20 20 20 31 7d 2c 0a 20 20  2,        1},.  
6f40: 20 20 20 20 7b 20 4f 50 5f 49 66 50 6f 73 2c 20      { OP_IfPos, 
6f50: 20 20 20 20 20 20 31 2c 20 38 2c 20 20 20 20 20        1, 8,     
6f60: 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b 20 4f     0},.      { O
6f70: 50 5f 49 6e 74 65 67 65 72 2c 20 20 20 20 20 30  P_Integer,     0
6f80: 2c 20 31 2c 20 20 20 20 20 20 20 20 30 7d 2c 20  , 1,        0}, 
6f90: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
6fa0: 20 20 20 20 20 20 20 20 2f 2a 20 36 20 2a 2f 0a          /* 6 */.
6fb0: 20 20 20 20 20 20 7b 20 4f 50 5f 4e 6f 6f 70 2c        { OP_Noop,
6fc0: 20 20 20 20 20 20 20 20 30 2c 20 30 2c 20 20 20          0, 0,   
6fd0: 20 20 20 20 20 30 7d 2c 0a 20 20 20 20 20 20 7b       0},.      {
6fe0: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20   OP_ResultRow,  
6ff0: 20 31 2c 20 31 2c 20 20 20 20 20 20 20 20 30 7d   1, 1,        0}
7000: 2c 0a 20 20 20 20 7d 3b 0a 20 20 20 20 69 6e 74  ,.    };.    int
7010: 20 61 64 64 72 3b 0a 20 20 20 20 73 71 6c 69 74   addr;.    sqlit
7020: 65 33 56 64 62 65 55 73 65 73 42 74 72 65 65 28  e3VdbeUsesBtree(
7030: 76 2c 20 69 44 62 29 3b 0a 20 20 20 20 69 66 28  v, iDb);.    if(
7040: 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20   !zRight ){.    
7050: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
7060: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
7070: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
7080: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
7090: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
70a0: 63 61 63 68 65 5f 73 69 7a 65 22 2c 20 53 51 4c  cache_size", SQL
70b0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
70c0: 20 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20     pParse->nMem 
70d0: 2b 3d 20 32 3b 0a 20 20 20 20 20 20 61 64 64 72  += 2;.      addr
70e0: 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
70f0: 64 4f 70 4c 69 73 74 28 76 2c 20 41 72 72 61 79  dOpList(v, Array
7100: 53 69 7a 65 28 67 65 74 43 61 63 68 65 53 69 7a  Size(getCacheSiz
7110: 65 29 2c 20 67 65 74 43 61 63 68 65 53 69 7a 65  e), getCacheSize
7120: 2c 69 4c 6e 29 3b 0a 20 20 20 20 20 20 73 71 6c  ,iLn);.      sql
7130: 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
7140: 28 76 2c 20 61 64 64 72 2c 20 69 44 62 29 3b 0a  (v, addr, iDb);.
7150: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
7160: 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64  eChangeP1(v, add
7170: 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  r+1, iDb);.     
7180: 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
7190: 67 65 50 31 28 76 2c 20 61 64 64 72 2b 36 2c 20  geP1(v, addr+6, 
71a0: 53 51 4c 49 54 45 5f 44 45 46 41 55 4c 54 5f 43  SQLITE_DEFAULT_C
71b0: 41 43 48 45 5f 53 49 5a 45 29 3b 0a 20 20 20 20  ACHE_SIZE);.    
71c0: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69 6e 74  }else{.      int
71d0: 20 73 69 7a 65 20 3d 20 73 71 6c 69 74 65 33 41   size = sqlite3A
71e0: 62 73 49 6e 74 33 32 28 73 71 6c 69 74 65 33 41  bsInt32(sqlite3A
71f0: 74 6f 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20  toi(zRight));.  
7200: 20 20 20 20 73 71 6c 69 74 65 33 42 65 67 69 6e      sqlite3Begin
7210: 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28 70  WriteOperation(p
7220: 50 61 72 73 65 2c 20 30 2c 20 69 44 62 29 3b 0a  Parse, 0, iDb);.
7230: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
7240: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
7250: 74 65 67 65 72 2c 20 73 69 7a 65 2c 20 31 29 3b  teger, size, 1);
7260: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
7270: 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 53  beAddOp3(v, OP_S
7280: 65 74 43 6f 6f 6b 69 65 2c 20 69 44 62 2c 20 42  etCookie, iDb, B
7290: 54 52 45 45 5f 44 45 46 41 55 4c 54 5f 43 41 43  TREE_DEFAULT_CAC
72a0: 48 45 5f 53 49 5a 45 2c 20 31 29 3b 0a 20 20 20  HE_SIZE, 1);.   
72b0: 20 20 20 61 73 73 65 72 74 28 20 73 71 6c 69 74     assert( sqlit
72c0: 65 33 53 63 68 65 6d 61 4d 75 74 65 78 48 65 6c  e3SchemaMutexHel
72d0: 64 28 64 62 2c 20 69 44 62 2c 20 30 29 20 29 3b  d(db, iDb, 0) );
72e0: 0a 20 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68  .      pDb->pSch
72f0: 65 6d 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20  ema->cache_size 
7300: 3d 20 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71  = size;.      sq
7310: 6c 69 74 65 33 42 74 72 65 65 53 65 74 43 61 63  lite3BtreeSetCac
7320: 68 65 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c  heSize(pDb->pBt,
7330: 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63   pDb->pSchema->c
7340: 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20  ache_size);.    
7350: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
7360: 0a 23 65 6e 64 69 66 20 2f 2a 20 21 53 51 4c 49  .#endif /* !SQLI
7370: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
7380: 41 47 4d 41 53 20 26 26 20 21 53 51 4c 49 54 45  AGMAS && !SQLITE
7390: 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
73a0: 20 2a 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20   */..  /*.  **  
73b0: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
73c0: 2e 5d 70 61 67 65 72 5f 6f 74 61 5f 6d 6f 64 65  .]pager_ota_mode
73d0: 3d 5b 30 31 5d 0a 20 20 2a 2a 0a 20 20 2a 2a 20  =[01].  **.  ** 
73e0: 54 68 69 73 20 70 72 61 67 6d 61 20 73 65 74 73  This pragma sets
73f0: 20 61 20 66 6c 61 67 20 6f 6e 20 74 68 65 20 70   a flag on the p
7400: 61 67 65 72 20 61 73 73 6f 63 69 61 74 65 64 20  ager associated 
7410: 77 69 74 68 20 74 68 65 20 6d 61 69 6e 20 64 61  with the main da
7420: 74 61 62 61 73 65 0a 20 20 2a 2a 20 6f 6e 6c 79  tabase.  ** only
7430: 2e 20 54 68 65 20 66 6c 61 67 20 63 61 6e 20 6f  . The flag can o
7440: 6e 6c 79 20 62 65 20 73 65 74 20 77 68 65 6e 20  nly be set when 
7450: 74 68 65 72 65 20 69 73 20 6e 6f 20 6f 70 65 6e  there is no open
7460: 20 74 72 61 6e 73 61 63 74 69 6f 6e 20 61 6e 64   transaction and
7470: 20 0a 20 20 2a 2a 20 74 68 65 20 70 61 67 65 72   .  ** the pager
7480: 20 64 6f 65 73 20 6e 6f 74 20 61 6c 72 65 61 64   does not alread
7490: 79 20 68 61 76 65 20 61 6e 20 6f 70 65 6e 20 57  y have an open W
74a0: 41 4c 20 66 69 6c 65 2e 0a 20 20 2a 2a 0a 20 20  AL file..  **.  
74b0: 2a 2a 20 4f 6e 63 65 20 74 68 65 20 66 6c 61 67  ** Once the flag
74c0: 20 68 61 73 20 62 65 65 6e 20 73 65 74 2c 20 69   has been set, i
74d0: 74 20 69 73 20 6e 6f 74 20 70 6f 73 73 69 62 6c  t is not possibl
74e0: 65 20 74 6f 20 6f 70 65 6e 20 61 20 72 65 67 75  e to open a regu
74f0: 6c 61 72 20 57 41 4c 0a 20 20 2a 2a 20 66 69 6c  lar WAL.  ** fil
7500: 65 2e 20 49 66 2c 20 77 68 65 6e 20 74 68 65 20  e. If, when the 
7510: 6e 65 78 74 20 72 65 61 64 2d 74 72 61 6e 73 61  next read-transa
7520: 63 74 69 6f 6e 20 69 73 20 6f 70 65 6e 65 64 2c  ction is opened,
7530: 20 61 20 2a 2d 77 61 6c 20 66 69 6c 65 20 69 73   a *-wal file is
7540: 20 0a 20 20 2a 2a 20 66 6f 75 6e 64 20 6f 72 20   .  ** found or 
7550: 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65 61  the database hea
7560: 64 65 72 20 66 6c 61 67 73 20 69 6e 64 69 63 61  der flags indica
7570: 74 65 20 74 68 61 74 20 69 74 20 69 73 20 61 20  te that it is a 
7580: 77 61 6c 2d 6d 6f 64 65 20 0a 20 20 2a 2a 20 64  wal-mode .  ** d
7590: 61 74 61 62 61 73 65 2c 20 53 51 4c 49 54 45 5f  atabase, SQLITE_
75a0: 43 41 4e 54 4f 50 45 4e 20 69 73 20 72 65 74 75  CANTOPEN is retu
75b0: 72 6e 65 64 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  rned..  **.  ** 
75c0: 4f 74 68 65 72 77 69 73 65 2c 20 69 66 20 6e 6f  Otherwise, if no
75d0: 20 57 41 4c 20 66 69 6c 65 20 6f 72 20 66 6c 61   WAL file or fla
75e0: 67 73 20 61 72 65 20 66 6f 75 6e 64 2c 20 74 68  gs are found, th
75f0: 65 20 70 61 67 65 72 20 6f 70 65 6e 73 20 74 68  e pager opens th
7600: 65 20 2a 2d 6f 61 6c 0a 20 20 2a 2a 20 66 69 6c  e *-oal.  ** fil
7610: 65 20 61 6e 64 20 75 73 65 73 20 69 74 20 61 73  e and uses it as
7620: 20 61 20 77 72 69 74 65 2d 61 68 65 61 64 2d 6c   a write-ahead-l
7630: 6f 67 20 77 69 74 68 20 74 68 65 20 2a 2d 73 68  og with the *-sh
7640: 6d 20 64 61 74 61 20 73 74 6f 72 65 64 20 69 6e  m data stored in
7650: 0a 20 20 2a 2a 20 68 65 61 70 2d 6d 65 6d 6f 72  .  ** heap-memor
7660: 79 2e 20 49 66 20 74 68 65 20 2a 2d 6f 61 6c 20  y. If the *-oal 
7670: 66 69 6c 65 20 61 6c 72 65 61 64 79 20 65 78 69  file already exi
7680: 73 74 73 20 62 75 74 20 74 68 65 20 64 61 74 61  sts but the data
7690: 62 61 73 65 20 66 69 6c 65 20 68 61 73 0a 20 20  base file has.  
76a0: 2a 2a 20 62 65 65 6e 20 6d 6f 64 69 66 69 65 64  ** been modified
76b0: 20 73 69 6e 63 65 20 69 74 20 77 61 73 20 63 72   since it was cr
76c0: 65 61 74 65 64 2c 20 61 6e 20 53 51 4c 49 54 45  eated, an SQLITE
76d0: 5f 42 55 53 59 5f 53 4e 41 50 53 48 4f 54 20 65  _BUSY_SNAPSHOT e
76e0: 72 72 6f 72 20 69 73 0a 20 20 2a 2a 20 72 65 74  rror is.  ** ret
76f0: 75 72 6e 65 64 20 61 6e 64 20 74 68 65 20 72 65  urned and the re
7700: 61 64 2d 74 72 61 6e 73 61 63 74 69 6f 6e 20 63  ad-transaction c
7710: 61 6e 6e 6f 74 20 62 65 20 6f 70 65 6e 65 64 2e  annot be opened.
7720: 0a 20 20 2a 2a 0a 20 20 2a 2a 20 4f 74 68 65 72  .  **.  ** Other
7730: 20 63 6c 69 65 6e 74 73 20 73 65 65 20 61 20 72   clients see a r
7740: 6f 6c 6c 62 61 63 6b 2d 6d 6f 64 65 20 64 61 74  ollback-mode dat
7750: 61 62 61 73 65 20 6f 6e 20 77 68 69 63 68 20 74  abase on which t
7760: 68 65 20 70 61 67 65 72 5f 6f 74 61 5f 6d 6f 64  he pager_ota_mod
7770: 65 0a 20 20 2a 2a 20 63 6c 69 65 6e 74 20 69 73  e.  ** client is
7780: 20 68 6f 6c 64 69 6e 67 20 61 20 53 48 41 52 45   holding a SHARE
7790: 44 20 6c 6f 63 6b 2e 0a 20 20 2a 2f 0a 23 69 66  D lock..  */.#if
77a0: 64 65 66 20 53 51 4c 49 54 45 5f 45 4e 41 42 4c  def SQLITE_ENABL
77b0: 45 5f 4f 54 41 0a 20 20 63 61 73 65 20 50 72 61  E_OTA.  case Pra
77c0: 67 54 79 70 5f 50 41 47 45 52 5f 4f 54 41 5f 4d  gTyp_PAGER_OTA_M
77d0: 4f 44 45 3a 20 7b 0a 20 20 20 20 42 74 72 65 65  ODE: {.    Btree
77e0: 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74   *pBt = pDb->pBt
77f0: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 42  ;.    assert( pB
7800: 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20  t!=0 );.    if( 
7810: 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20  zRight ){.      
7820: 69 6e 74 20 69 41 72 67 20 3d 20 73 71 6c 69 74  int iArg = sqlit
7830: 65 33 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a  e3Atoi(zRight);.
7840: 20 20 20 20 20 20 50 61 67 65 72 20 2a 70 50 61        Pager *pPa
7850: 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ger = sqlite3Btr
7860: 65 65 50 61 67 65 72 28 70 42 74 29 3b 0a 20 20  eePager(pBt);.  
7870: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 42      if( sqlite3B
7880: 74 72 65 65 49 73 49 6e 52 65 61 64 54 72 61 6e  treeIsInReadTran
7890: 73 28 70 42 74 29 20 29 7b 0a 20 20 20 20 20 20  s(pBt) ){.      
78a0: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73    sqlite3ErrorMs
78b0: 67 28 70 50 61 72 73 65 2c 20 0a 20 20 20 20 20  g(pParse, .     
78c0: 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 73         "cannot s
78d0: 65 74 20 70 61 67 65 72 5f 6f 74 61 5f 6d 6f 64  et pager_ota_mod
78e0: 65 20 77 69 74 68 20 6f 70 65 6e 20 74 72 61 6e  e with open tran
78f0: 73 61 63 74 69 6f 6e 22 0a 20 20 20 20 20 20 20  saction".       
7900: 20 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20   );.      }else 
7910: 69 66 28 20 73 71 6c 69 74 65 33 50 61 67 65 72  if( sqlite3Pager
7920: 57 61 6c 53 75 70 70 6f 72 74 65 64 28 70 50 61  WalSupported(pPa
7930: 67 65 72 29 3d 3d 30 20 29 7b 0a 20 20 20 20 20  ger)==0 ){.     
7940: 20 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d     sqlite3ErrorM
7950: 73 67 28 70 50 61 72 73 65 2c 0a 20 20 20 20 20  sg(pParse,.     
7960: 20 20 20 20 20 20 20 22 63 61 6e 6e 6f 74 20 73         "cannot s
7970: 65 74 20 70 61 67 65 72 5f 6f 74 61 5f 6d 6f 64  et pager_ota_mod
7980: 65 20 77 69 74 68 6f 75 74 20 77 61 6c 20 73 75  e without wal su
7990: 70 70 6f 72 74 22 0a 20 20 20 20 20 20 20 20 29  pport".        )
79a0: 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20 69 66  ;.      }else if
79b0: 28 20 73 71 6c 69 74 65 33 50 61 67 65 72 53 65  ( sqlite3PagerSe
79c0: 74 4f 74 61 4d 6f 64 65 28 73 71 6c 69 74 65 33  tOtaMode(sqlite3
79d0: 42 74 72 65 65 50 61 67 65 72 28 70 42 74 29 2c  BtreePager(pBt),
79e0: 20 69 41 72 67 29 20 29 7b 0a 20 20 20 20 20 20   iArg) ){.      
79f0: 20 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73    sqlite3ErrorMs
7a00: 67 28 70 50 61 72 73 65 2c 20 22 63 61 6e 6e 6f  g(pParse, "canno
7a10: 74 20 73 65 74 20 70 61 67 65 72 5f 6f 74 61 5f  t set pager_ota_
7a20: 6d 6f 64 65 20 69 6e 20 77 61 6c 20 6d 6f 64 65  mode in wal mode
7a30: 22 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  ");.      }.    
7a40: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
7a50: 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54  .#endif /* SQLIT
7a60: 45 5f 45 4e 41 42 4c 45 5f 4f 54 41 20 2a 2f 0a  E_ENABLE_OTA */.
7a70: 0a 23 69 66 20 21 64 65 66 69 6e 65 64 28 53 51  .#if !defined(SQ
7a80: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
7a90: 50 52 41 47 4d 41 53 29 0a 20 20 2f 2a 0a 20 20  PRAGMAS).  /*.  
7aa0: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
7ab0: 62 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a 65 0a  base.]page_size.
7ac0: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
7ad0: 74 61 62 61 73 65 2e 5d 70 61 67 65 5f 73 69 7a  tabase.]page_siz
7ae0: 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68  e=N.  **.  ** Th
7af0: 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65 70  e first form rep
7b00: 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e 74  orts the current
7b10: 20 73 65 74 74 69 6e 67 20 66 6f 72 20 74 68 65   setting for the
7b20: 0a 20 20 2a 2a 20 64 61 74 61 62 61 73 65 20 70  .  ** database p
7b30: 61 67 65 20 73 69 7a 65 20 69 6e 20 62 79 74 65  age size in byte
7b40: 73 2e 20 20 54 68 65 20 73 65 63 6f 6e 64 20 66  s.  The second f
7b50: 6f 72 6d 20 73 65 74 73 20 74 68 65 0a 20 20 2a  orm sets the.  *
7b60: 2a 20 64 61 74 61 62 61 73 65 20 70 61 67 65 20  * database page 
7b70: 73 69 7a 65 20 76 61 6c 75 65 2e 20 20 54 68 65  size value.  The
7b80: 20 76 61 6c 75 65 20 63 61 6e 20 6f 6e 6c 79 20   value can only 
7b90: 62 65 20 73 65 74 20 69 66 0a 20 20 2a 2a 20 74  be set if.  ** t
7ba0: 68 65 20 64 61 74 61 62 61 73 65 20 68 61 73 20  he database has 
7bb0: 6e 6f 74 20 79 65 74 20 62 65 65 6e 20 63 72 65  not yet been cre
7bc0: 61 74 65 64 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  ated..  */.  cas
7bd0: 65 20 50 72 61 67 54 79 70 5f 50 41 47 45 5f 53  e PragTyp_PAGE_S
7be0: 49 5a 45 3a 20 7b 0a 20 20 20 20 42 74 72 65 65  IZE: {.    Btree
7bf0: 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74   *pBt = pDb->pBt
7c00: 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20 70 42  ;.    assert( pB
7c10: 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20  t!=0 );.    if( 
7c20: 21 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20  !zRight ){.     
7c30: 20 69 6e 74 20 73 69 7a 65 20 3d 20 41 4c 57 41   int size = ALWA
7c40: 59 53 28 70 42 74 29 20 3f 20 73 71 6c 69 74 65  YS(pBt) ? sqlite
7c50: 33 42 74 72 65 65 47 65 74 50 61 67 65 53 69 7a  3BtreeGetPageSiz
7c60: 65 28 70 42 74 29 20 3a 20 30 3b 0a 20 20 20 20  e(pBt) : 0;.    
7c70: 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e    returnSingleIn
7c80: 74 28 70 50 61 72 73 65 2c 20 22 70 61 67 65 5f  t(pParse, "page_
7c90: 73 69 7a 65 22 2c 20 73 69 7a 65 29 3b 0a 20 20  size", size);.  
7ca0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 2f    }else{.      /
7cb0: 2a 20 4d 61 6c 6c 6f 63 20 6d 61 79 20 66 61 69  * Malloc may fai
7cc0: 6c 20 77 68 65 6e 20 73 65 74 74 69 6e 67 20 74  l when setting t
7cd0: 68 65 20 70 61 67 65 2d 73 69 7a 65 2c 20 61 73  he page-size, as
7ce0: 20 74 68 65 72 65 20 69 73 20 61 6e 20 69 6e 74   there is an int
7cf0: 65 72 6e 61 6c 0a 20 20 20 20 20 20 2a 2a 20 62  ernal.      ** b
7d00: 75 66 66 65 72 20 74 68 61 74 20 74 68 65 20 70  uffer that the p
7d10: 61 67 65 72 20 6d 6f 64 75 6c 65 20 72 65 73 69  ager module resi
7d20: 7a 65 73 20 75 73 69 6e 67 20 73 71 6c 69 74 65  zes using sqlite
7d30: 33 5f 72 65 61 6c 6c 6f 63 28 29 2e 0a 20 20 20  3_realloc()..   
7d40: 20 20 20 2a 2f 0a 20 20 20 20 20 20 64 62 2d 3e     */.      db->
7d50: 6e 65 78 74 50 61 67 65 73 69 7a 65 20 3d 20 73  nextPagesize = s
7d60: 71 6c 69 74 65 33 41 74 6f 69 28 7a 52 69 67 68  qlite3Atoi(zRigh
7d70: 74 29 3b 0a 20 20 20 20 20 20 69 66 28 20 53 51  t);.      if( SQ
7d80: 4c 49 54 45 5f 4e 4f 4d 45 4d 3d 3d 73 71 6c 69  LITE_NOMEM==sqli
7d90: 74 65 33 42 74 72 65 65 53 65 74 50 61 67 65 53  te3BtreeSetPageS
7da0: 69 7a 65 28 70 42 74 2c 20 64 62 2d 3e 6e 65 78  ize(pBt, db->nex
7db0: 74 50 61 67 65 73 69 7a 65 2c 2d 31 2c 30 29 20  tPagesize,-1,0) 
7dc0: 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 6d  ){.        db->m
7dd0: 61 6c 6c 6f 63 46 61 69 6c 65 64 20 3d 20 31 3b  allocFailed = 1;
7de0: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20  .      }.    }. 
7df0: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
7e00: 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41   /*.  **  PRAGMA
7e10: 20 5b 64 61 74 61 62 61 73 65 2e 5d 73 65 63 75   [database.]secu
7e20: 72 65 5f 64 65 6c 65 74 65 0a 20 20 2a 2a 20 20  re_delete.  **  
7e30: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
7e40: 2e 5d 73 65 63 75 72 65 5f 64 65 6c 65 74 65 3d  .]secure_delete=
7e50: 4f 4e 2f 4f 46 46 0a 20 20 2a 2a 0a 20 20 2a 2a  ON/OFF.  **.  **
7e60: 20 54 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20   The first form 
7e70: 72 65 70 6f 72 74 73 20 74 68 65 20 63 75 72 72  reports the curr
7e80: 65 6e 74 20 73 65 74 74 69 6e 67 20 66 6f 72 20  ent setting for 
7e90: 74 68 65 0a 20 20 2a 2a 20 73 65 63 75 72 65 5f  the.  ** secure_
7ea0: 64 65 6c 65 74 65 20 66 6c 61 67 2e 20 20 54 68  delete flag.  Th
7eb0: 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 63 68  e second form ch
7ec0: 61 6e 67 65 73 20 74 68 65 20 73 65 63 75 72 65  anges the secure
7ed0: 5f 64 65 6c 65 74 65 0a 20 20 2a 2a 20 66 6c 61  _delete.  ** fla
7ee0: 67 20 73 65 74 74 69 6e 67 20 61 6e 64 20 72 65  g setting and re
7ef0: 70 6f 72 74 73 20 74 68 65 6e 65 77 20 76 61 6c  ports thenew val
7f00: 75 65 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20  ue..  */.  case 
7f10: 50 72 61 67 54 79 70 5f 53 45 43 55 52 45 5f 44  PragTyp_SECURE_D
7f20: 45 4c 45 54 45 3a 20 7b 0a 20 20 20 20 42 74 72  ELETE: {.    Btr
7f30: 65 65 20 2a 70 42 74 20 3d 20 70 44 62 2d 3e 70  ee *pBt = pDb->p
7f40: 42 74 3b 0a 20 20 20 20 69 6e 74 20 62 20 3d 20  Bt;.    int b = 
7f50: 2d 31 3b 0a 20 20 20 20 61 73 73 65 72 74 28 20  -1;.    assert( 
7f60: 70 42 74 21 3d 30 20 29 3b 0a 20 20 20 20 69 66  pBt!=0 );.    if
7f70: 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20  ( zRight ){.    
7f80: 20 20 62 20 3d 20 73 71 6c 69 74 65 33 47 65 74    b = sqlite3Get
7f90: 42 6f 6f 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20  Boolean(zRight, 
7fa0: 30 29 3b 0a 20 20 20 20 7d 0a 20 20 20 20 69 66  0);.    }.    if
7fb0: 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 26 26 20  ( pId2->n==0 && 
7fc0: 62 3e 3d 30 20 29 7b 0a 20 20 20 20 20 20 69 6e  b>=0 ){.      in
7fd0: 74 20 69 69 3b 0a 20 20 20 20 20 20 66 6f 72 28  t ii;.      for(
7fe0: 69 69 3d 30 3b 20 69 69 3c 64 62 2d 3e 6e 44 62  ii=0; ii<db->nDb
7ff0: 3b 20 69 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; ii++){.       
8000: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 63   sqlite3BtreeSec
8010: 75 72 65 44 65 6c 65 74 65 28 64 62 2d 3e 61 44  ureDelete(db->aD
8020: 62 5b 69 69 5d 2e 70 42 74 2c 20 62 29 3b 0a 20  b[ii].pBt, b);. 
8030: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
8040: 20 62 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65   b = sqlite3Btre
8050: 65 53 65 63 75 72 65 44 65 6c 65 74 65 28 70 42  eSecureDelete(pB
8060: 74 2c 20 62 29 3b 0a 20 20 20 20 72 65 74 75 72  t, b);.    retur
8070: 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73  nSingleInt(pPars
8080: 65 2c 20 22 73 65 63 75 72 65 5f 64 65 6c 65 74  e, "secure_delet
8090: 65 22 2c 20 62 29 3b 0a 20 20 20 20 62 72 65 61  e", b);.    brea
80a0: 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
80b0: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
80c0: 61 73 65 2e 5d 6d 61 78 5f 70 61 67 65 5f 63 6f  ase.]max_page_co
80d0: 75 6e 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41  unt.  **  PRAGMA
80e0: 20 5b 64 61 74 61 62 61 73 65 2e 5d 6d 61 78 5f   [database.]max_
80f0: 70 61 67 65 5f 63 6f 75 6e 74 3d 4e 0a 20 20 2a  page_count=N.  *
8100: 2a 0a 20 20 2a 2a 20 54 68 65 20 66 69 72 73 74  *.  ** The first
8110: 20 66 6f 72 6d 20 72 65 70 6f 72 74 73 20 74 68   form reports th
8120: 65 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e  e current settin
8130: 67 20 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 6d  g for the.  ** m
8140: 61 78 69 6d 75 6d 20 6e 75 6d 62 65 72 20 6f 66  aximum number of
8150: 20 70 61 67 65 73 20 69 6e 20 74 68 65 20 64 61   pages in the da
8160: 74 61 62 61 73 65 20 66 69 6c 65 2e 20 20 54 68  tabase file.  Th
8170: 65 20 0a 20 20 2a 2a 20 73 65 63 6f 6e 64 20 66  e .  ** second f
8180: 6f 72 6d 20 61 74 74 65 6d 70 74 73 20 74 6f 20  orm attempts to 
8190: 63 68 61 6e 67 65 20 74 68 69 73 20 73 65 74 74  change this sett
81a0: 69 6e 67 2e 20 20 42 6f 74 68 0a 20 20 2a 2a 20  ing.  Both.  ** 
81b0: 66 6f 72 6d 73 20 72 65 74 75 72 6e 20 74 68 65  forms return the
81c0: 20 63 75 72 72 65 6e 74 20 73 65 74 74 69 6e 67   current setting
81d0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  ..  **.  ** The 
81e0: 61 62 73 6f 6c 75 74 65 20 76 61 6c 75 65 20 6f  absolute value o
81f0: 66 20 4e 20 69 73 20 75 73 65 64 2e 20 20 54 68  f N is used.  Th
8200: 69 73 20 69 73 20 75 6e 64 6f 63 75 6d 65 6e 74  is is undocument
8210: 65 64 20 61 6e 64 20 6d 69 67 68 74 0a 20 20 2a  ed and might.  *
8220: 2a 20 63 68 61 6e 67 65 2e 20 20 54 68 65 20 6f  * change.  The o
8230: 6e 6c 79 20 70 75 72 70 6f 73 65 20 69 73 20 74  nly purpose is t
8240: 6f 20 70 72 6f 76 69 64 65 20 61 6e 20 65 61 73  o provide an eas
8250: 79 20 77 61 79 20 74 6f 20 74 65 73 74 0a 20 20  y way to test.  
8260: 2a 2a 20 74 68 65 20 73 71 6c 69 74 65 33 41 62  ** the sqlite3Ab
8270: 73 49 6e 74 33 32 28 29 20 66 75 6e 63 74 69 6f  sInt32() functio
8280: 6e 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 50 52  n..  **.  **  PR
8290: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
82a0: 70 61 67 65 5f 63 6f 75 6e 74 0a 20 20 2a 2a 0a  page_count.  **.
82b0: 20 20 2a 2a 20 52 65 74 75 72 6e 20 74 68 65 20    ** Return the 
82c0: 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
82d0: 69 6e 20 74 68 65 20 73 70 65 63 69 66 69 65 64  in the specified
82e0: 20 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a   database..  */.
82f0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 50    case PragTyp_P
8300: 41 47 45 5f 43 4f 55 4e 54 3a 20 7b 0a 20 20 20  AGE_COUNT: {.   
8310: 20 69 6e 74 20 69 52 65 67 3b 0a 20 20 20 20 73   int iReg;.    s
8320: 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69 66 79  qlite3CodeVerify
8330: 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69  Schema(pParse, i
8340: 44 62 29 3b 0a 20 20 20 20 69 52 65 67 20 3d 20  Db);.    iReg = 
8350: 2b 2b 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a  ++pParse->nMem;.
8360: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 54      if( sqlite3T
8370: 6f 6c 6f 77 65 72 28 7a 4c 65 66 74 5b 30 5d 29  olower(zLeft[0])
8380: 3d 3d 27 70 27 20 29 7b 0a 20 20 20 20 20 20 73  =='p' ){.      s
8390: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
83a0: 28 76 2c 20 4f 50 5f 50 61 67 65 63 6f 75 6e 74  (v, OP_Pagecount
83b0: 2c 20 69 44 62 2c 20 69 52 65 67 29 3b 0a 20 20  , iDb, iReg);.  
83c0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 73    }else{.      s
83d0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
83e0: 28 76 2c 20 4f 50 5f 4d 61 78 50 67 63 6e 74 2c  (v, OP_MaxPgcnt,
83f0: 20 69 44 62 2c 20 69 52 65 67 2c 20 0a 20 20 20   iDb, iReg, .   
8400: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
8410: 20 20 20 20 20 73 71 6c 69 74 65 33 41 62 73 49       sqlite3AbsI
8420: 6e 74 33 32 28 73 71 6c 69 74 65 33 41 74 6f 69  nt32(sqlite3Atoi
8430: 28 7a 52 69 67 68 74 29 29 29 3b 0a 20 20 20 20  (zRight)));.    
8440: 7d 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  }.    sqlite3Vdb
8450: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
8460: 73 75 6c 74 52 6f 77 2c 20 69 52 65 67 2c 20 31  sultRow, iReg, 1
8470: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
8480: 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20  beSetNumCols(v, 
8490: 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  1);.    sqlite3V
84a0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
84b0: 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   0, COLNAME_NAME
84c0: 2c 20 7a 4c 65 66 74 2c 20 53 51 4c 49 54 45 5f  , zLeft, SQLITE_
84d0: 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20  TRANSIENT);.    
84e0: 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
84f0: 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64  .  **  PRAGMA [d
8500: 61 74 61 62 61 73 65 2e 5d 6c 6f 63 6b 69 6e 67  atabase.]locking
8510: 5f 6d 6f 64 65 0a 20 20 2a 2a 20 20 50 52 41 47  _mode.  **  PRAG
8520: 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6c 6f  MA [database.]lo
8530: 63 6b 69 6e 67 5f 6d 6f 64 65 20 3d 20 28 6e 6f  cking_mode = (no
8540: 72 6d 61 6c 7c 65 78 63 6c 75 73 69 76 65 29 0a  rmal|exclusive).
8550: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
8560: 54 79 70 5f 4c 4f 43 4b 49 4e 47 5f 4d 4f 44 45  Typ_LOCKING_MODE
8570: 3a 20 7b 0a 20 20 20 20 63 6f 6e 73 74 20 63 68  : {.    const ch
8580: 61 72 20 2a 7a 52 65 74 20 3d 20 22 6e 6f 72 6d  ar *zRet = "norm
8590: 61 6c 22 3b 0a 20 20 20 20 69 6e 74 20 65 4d 6f  al";.    int eMo
85a0: 64 65 20 3d 20 67 65 74 4c 6f 63 6b 69 6e 67 4d  de = getLockingM
85b0: 6f 64 65 28 7a 52 69 67 68 74 29 3b 0a 0a 20 20  ode(zRight);..  
85c0: 20 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30    if( pId2->n==0
85d0: 20 26 26 20 65 4d 6f 64 65 3d 3d 50 41 47 45 52   && eMode==PAGER
85e0: 5f 4c 4f 43 4b 49 4e 47 4d 4f 44 45 5f 51 55 45  _LOCKINGMODE_QUE
85f0: 52 59 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 53  RY ){.      /* S
8600: 69 6d 70 6c 65 20 22 50 52 41 47 4d 41 20 6c 6f  imple "PRAGMA lo
8610: 63 6b 69 6e 67 5f 6d 6f 64 65 3b 22 20 73 74 61  cking_mode;" sta
8620: 74 65 6d 65 6e 74 2e 20 54 68 69 73 20 69 73 20  tement. This is 
8630: 61 20 71 75 65 72 79 20 66 6f 72 0a 20 20 20 20  a query for.    
8640: 20 20 2a 2a 20 74 68 65 20 63 75 72 72 65 6e 74    ** the current
8650: 20 64 65 66 61 75 6c 74 20 6c 6f 63 6b 69 6e 67   default locking
8660: 20 6d 6f 64 65 20 28 77 68 69 63 68 20 6d 61 79   mode (which may
8670: 20 62 65 20 64 69 66 66 65 72 65 6e 74 20 74 6f   be different to
8680: 0a 20 20 20 20 20 20 2a 2a 20 74 68 65 20 6c 6f  .      ** the lo
8690: 63 6b 69 6e 67 2d 6d 6f 64 65 20 6f 66 20 74 68  cking-mode of th
86a0: 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 29  e main database)
86b0: 2e 0a 20 20 20 20 20 20 2a 2f 0a 20 20 20 20 20  ..      */.     
86c0: 20 65 4d 6f 64 65 20 3d 20 64 62 2d 3e 64 66 6c   eMode = db->dfl
86d0: 74 4c 6f 63 6b 4d 6f 64 65 3b 0a 20 20 20 20 7d  tLockMode;.    }
86e0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 50 61 67 65  else{.      Page
86f0: 72 20 2a 70 50 61 67 65 72 3b 0a 20 20 20 20 20  r *pPager;.     
8700: 20 69 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20   if( pId2->n==0 
8710: 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20 54 68  ){.        /* Th
8720: 69 73 20 69 6e 64 69 63 61 74 65 73 20 74 68 61  is indicates tha
8730: 74 20 6e 6f 20 64 61 74 61 62 61 73 65 20 6e 61  t no database na
8740: 6d 65 20 77 61 73 20 73 70 65 63 69 66 69 65 64  me was specified
8750: 20 61 73 20 70 61 72 74 0a 20 20 20 20 20 20 20   as part.       
8760: 20 2a 2a 20 6f 66 20 74 68 65 20 50 52 41 47 4d   ** of the PRAGM
8770: 41 20 63 6f 6d 6d 61 6e 64 2e 20 49 6e 20 74 68  A command. In th
8780: 69 73 20 63 61 73 65 20 74 68 65 20 6c 6f 63 6b  is case the lock
8790: 69 6e 67 2d 6d 6f 64 65 20 6d 75 73 74 20 62 65  ing-mode must be
87a0: 0a 20 20 20 20 20 20 20 20 2a 2a 20 73 65 74 20  .        ** set 
87b0: 6f 6e 20 61 6c 6c 20 61 74 74 61 63 68 65 64 20  on all attached 
87c0: 64 61 74 61 62 61 73 65 73 2c 20 61 73 20 77 65  databases, as we
87d0: 6c 6c 20 61 73 20 74 68 65 20 6d 61 69 6e 20 64  ll as the main d
87e0: 62 20 66 69 6c 65 2e 0a 20 20 20 20 20 20 20 20  b file..        
87f0: 2a 2a 0a 20 20 20 20 20 20 20 20 2a 2a 20 41 6c  **.        ** Al
8800: 73 6f 2c 20 74 68 65 20 73 71 6c 69 74 65 33 2e  so, the sqlite3.
8810: 64 66 6c 74 4c 6f 63 6b 4d 6f 64 65 20 76 61 72  dfltLockMode var
8820: 69 61 62 6c 65 20 69 73 20 73 65 74 20 73 6f 20  iable is set so 
8830: 74 68 61 74 0a 20 20 20 20 20 20 20 20 2a 2a 20  that.        ** 
8840: 61 6e 79 20 73 75 62 73 65 71 75 65 6e 74 6c 79  any subsequently
8850: 20 61 74 74 61 63 68 65 64 20 64 61 74 61 62 61   attached databa
8860: 73 65 73 20 61 6c 73 6f 20 75 73 65 20 74 68 65  ses also use the
8870: 20 73 70 65 63 69 66 69 65 64 0a 20 20 20 20 20   specified.     
8880: 20 20 20 2a 2a 20 6c 6f 63 6b 69 6e 67 20 6d 6f     ** locking mo
8890: 64 65 2e 0a 20 20 20 20 20 20 20 20 2a 2f 0a 20  de..        */. 
88a0: 20 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20         int ii;. 
88b0: 20 20 20 20 20 20 20 61 73 73 65 72 74 28 70 44         assert(pD
88c0: 62 3d 3d 26 64 62 2d 3e 61 44 62 5b 30 5d 29 3b  b==&db->aDb[0]);
88d0: 0a 20 20 20 20 20 20 20 20 66 6f 72 28 69 69 3d  .        for(ii=
88e0: 32 3b 20 69 69 3c 64 62 2d 3e 6e 44 62 3b 20 69  2; ii<db->nDb; i
88f0: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 20 20  i++){.          
8900: 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33  pPager = sqlite3
8910: 42 74 72 65 65 50 61 67 65 72 28 64 62 2d 3e 61  BtreePager(db->a
8920: 44 62 5b 69 69 5d 2e 70 42 74 29 3b 0a 20 20 20  Db[ii].pBt);.   
8930: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 50 61         sqlite3Pa
8940: 67 65 72 4c 6f 63 6b 69 6e 67 4d 6f 64 65 28 70  gerLockingMode(p
8950: 50 61 67 65 72 2c 20 65 4d 6f 64 65 29 3b 0a 20  Pager, eMode);. 
8960: 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20         }.       
8970: 20 64 62 2d 3e 64 66 6c 74 4c 6f 63 6b 4d 6f 64   db->dfltLockMod
8980: 65 20 3d 20 28 75 38 29 65 4d 6f 64 65 3b 0a 20  e = (u8)eMode;. 
8990: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 70 50 61       }.      pPa
89a0: 67 65 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72  ger = sqlite3Btr
89b0: 65 65 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74  eePager(pDb->pBt
89c0: 29 3b 0a 20 20 20 20 20 20 65 4d 6f 64 65 20 3d  );.      eMode =
89d0: 20 73 71 6c 69 74 65 33 50 61 67 65 72 4c 6f 63   sqlite3PagerLoc
89e0: 6b 69 6e 67 4d 6f 64 65 28 70 50 61 67 65 72 2c  kingMode(pPager,
89f0: 20 65 4d 6f 64 65 29 3b 0a 20 20 20 20 7d 0a 0a   eMode);.    }..
8a00: 20 20 20 20 61 73 73 65 72 74 28 20 65 4d 6f 64      assert( eMod
8a10: 65 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47  e==PAGER_LOCKING
8a20: 4d 4f 44 45 5f 4e 4f 52 4d 41 4c 0a 20 20 20 20  MODE_NORMAL.    
8a30: 20 20 20 20 20 20 20 20 7c 7c 20 65 4d 6f 64 65          || eMode
8a40: 3d 3d 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d  ==PAGER_LOCKINGM
8a50: 4f 44 45 5f 45 58 43 4c 55 53 49 56 45 20 29 3b  ODE_EXCLUSIVE );
8a60: 0a 20 20 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d  .    if( eMode==
8a70: 50 41 47 45 52 5f 4c 4f 43 4b 49 4e 47 4d 4f 44  PAGER_LOCKINGMOD
8a80: 45 5f 45 58 43 4c 55 53 49 56 45 20 29 7b 0a 20  E_EXCLUSIVE ){. 
8a90: 20 20 20 20 20 7a 52 65 74 20 3d 20 22 65 78 63       zRet = "exc
8aa0: 6c 75 73 69 76 65 22 3b 0a 20 20 20 20 7d 0a 20  lusive";.    }. 
8ab0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
8ac0: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
8ad0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
8ae0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
8af0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6c  COLNAME_NAME, "l
8b00: 6f 63 6b 69 6e 67 5f 6d 6f 64 65 22 2c 20 53 51  ocking_mode", SQ
8b10: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
8b20: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
8b30: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
8b40: 38 2c 20 30 2c 20 31 2c 20 30 2c 20 7a 52 65 74  8, 0, 1, 0, zRet
8b50: 2c 20 30 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  , 0);.    sqlite
8b60: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
8b70: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
8b80: 31 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20  1);.    break;. 
8b90: 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50   }..  /*.  **  P
8ba0: 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e  RAGMA [database.
8bb0: 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 0a 20 20  ]journal_mode.  
8bc0: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
8bd0: 62 61 73 65 2e 5d 6a 6f 75 72 6e 61 6c 5f 6d 6f  base.]journal_mo
8be0: 64 65 20 3d 0a 20 20 2a 2a 20 20 20 20 20 20 20  de =.  **       
8bf0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28                 (
8c00: 64 65 6c 65 74 65 7c 70 65 72 73 69 73 74 7c 6f  delete|persist|o
8c10: 66 66 7c 74 72 75 6e 63 61 74 65 7c 6d 65 6d 6f  ff|truncate|memo
8c20: 72 79 7c 77 61 6c 7c 6f 66 66 29 0a 20 20 2a 2f  ry|wal|off).  */
8c30: 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f  .  case PragTyp_
8c40: 4a 4f 55 52 4e 41 4c 5f 4d 4f 44 45 3a 20 7b 0a  JOURNAL_MODE: {.
8c50: 20 20 20 20 69 6e 74 20 65 4d 6f 64 65 3b 20 20      int eMode;  
8c60: 20 20 20 20 20 20 2f 2a 20 4f 6e 65 20 6f 66 20        /* One of 
8c70: 74 68 65 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41  the PAGER_JOURNA
8c80: 4c 4d 4f 44 45 5f 58 58 58 20 73 79 6d 62 6f 6c  LMODE_XXX symbol
8c90: 73 20 2a 2f 0a 20 20 20 20 69 6e 74 20 69 69 3b  s */.    int ii;
8ca0: 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f             /* Lo
8cb0: 6f 70 20 63 6f 75 6e 74 65 72 20 2a 2f 0a 0a 20  op counter */.. 
8cc0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
8cd0: 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a  tNumCols(v, 1);.
8ce0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
8cf0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20  etColName(v, 0, 
8d00: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6a  COLNAME_NAME, "j
8d10: 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 2c 20 53 51  ournal_mode", SQ
8d20: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 0a 20  LITE_STATIC);.. 
8d30: 20 20 20 69 66 28 20 7a 52 69 67 68 74 3d 3d 30     if( zRight==0
8d40: 20 29 7b 0a 20 20 20 20 20 20 2f 2a 20 49 66 20   ){.      /* If 
8d50: 74 68 65 72 65 20 69 73 20 6e 6f 20 22 3d 4d 4f  there is no "=MO
8d60: 44 45 22 20 70 61 72 74 20 6f 66 20 74 68 65 20  DE" part of the 
8d70: 70 72 61 67 6d 61 2c 20 64 6f 20 61 20 71 75 65  pragma, do a que
8d80: 72 79 20 66 6f 72 20 74 68 65 0a 20 20 20 20 20  ry for the.     
8d90: 20 2a 2a 20 63 75 72 72 65 6e 74 20 6d 6f 64 65   ** current mode
8da0: 20 2a 2f 0a 20 20 20 20 20 20 65 4d 6f 64 65 20   */.      eMode 
8db0: 3d 20 50 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d  = PAGER_JOURNALM
8dc0: 4f 44 45 5f 51 55 45 52 59 3b 0a 20 20 20 20 7d  ODE_QUERY;.    }
8dd0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 63 6f 6e 73  else{.      cons
8de0: 74 20 63 68 61 72 20 2a 7a 4d 6f 64 65 3b 0a 20  t char *zMode;. 
8df0: 20 20 20 20 20 69 6e 74 20 6e 20 3d 20 73 71 6c       int n = sql
8e00: 69 74 65 33 53 74 72 6c 65 6e 33 30 28 7a 52 69  ite3Strlen30(zRi
8e10: 67 68 74 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  ght);.      for(
8e20: 65 4d 6f 64 65 3d 30 3b 20 28 7a 4d 6f 64 65 20  eMode=0; (zMode 
8e30: 3d 20 73 71 6c 69 74 65 33 4a 6f 75 72 6e 61 6c  = sqlite3Journal
8e40: 4d 6f 64 65 6e 61 6d 65 28 65 4d 6f 64 65 29 29  Modename(eMode))
8e50: 21 3d 30 3b 20 65 4d 6f 64 65 2b 2b 29 7b 0a 20  !=0; eMode++){. 
8e60: 20 20 20 20 20 20 20 69 66 28 20 73 71 6c 69 74         if( sqlit
8e70: 65 33 53 74 72 4e 49 43 6d 70 28 7a 52 69 67 68  e3StrNICmp(zRigh
8e80: 74 2c 20 7a 4d 6f 64 65 2c 20 6e 29 3d 3d 30 20  t, zMode, n)==0 
8e90: 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 7d  ) break;.      }
8ea0: 0a 20 20 20 20 20 20 69 66 28 20 21 7a 4d 6f 64  .      if( !zMod
8eb0: 65 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a 20  e ){.        /* 
8ec0: 49 66 20 74 68 65 20 22 3d 4d 4f 44 45 22 20 70  If the "=MODE" p
8ed0: 61 72 74 20 64 6f 65 73 20 6e 6f 74 20 6d 61 74  art does not mat
8ee0: 63 68 20 61 6e 79 20 6b 6e 6f 77 6e 20 6a 6f 75  ch any known jou
8ef0: 72 6e 61 6c 20 6d 6f 64 65 2c 0a 20 20 20 20 20  rnal mode,.     
8f00: 20 20 20 2a 2a 20 74 68 65 6e 20 64 6f 20 61 20     ** then do a 
8f10: 71 75 65 72 79 20 2a 2f 0a 20 20 20 20 20 20 20  query */.       
8f20: 20 65 4d 6f 64 65 20 3d 20 50 41 47 45 52 5f 4a   eMode = PAGER_J
8f30: 4f 55 52 4e 41 4c 4d 4f 44 45 5f 51 55 45 52 59  OURNALMODE_QUERY
8f40: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a  ;.      }.    }.
8f50: 20 20 20 20 69 66 28 20 65 4d 6f 64 65 3d 3d 50      if( eMode==P
8f60: 41 47 45 52 5f 4a 4f 55 52 4e 41 4c 4d 4f 44 45  AGER_JOURNALMODE
8f70: 5f 51 55 45 52 59 20 26 26 20 70 49 64 32 2d 3e  _QUERY && pId2->
8f80: 6e 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 2f 2a  n==0 ){.      /*
8f90: 20 43 6f 6e 76 65 72 74 20 22 50 52 41 47 4d 41   Convert "PRAGMA
8fa0: 20 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 69   journal_mode" i
8fb0: 6e 74 6f 20 22 50 52 41 47 4d 41 20 6d 61 69 6e  nto "PRAGMA main
8fc0: 2e 6a 6f 75 72 6e 61 6c 5f 6d 6f 64 65 22 20 2a  .journal_mode" *
8fd0: 2f 0a 20 20 20 20 20 20 69 44 62 20 3d 20 30 3b  /.      iDb = 0;
8fe0: 0a 20 20 20 20 20 20 70 49 64 32 2d 3e 6e 20 3d  .      pId2->n =
8ff0: 20 31 3b 0a 20 20 20 20 7d 0a 20 20 20 20 66 6f   1;.    }.    fo
9000: 72 28 69 69 3d 64 62 2d 3e 6e 44 62 2d 31 3b 20  r(ii=db->nDb-1; 
9010: 69 69 3e 3d 30 3b 20 69 69 2d 2d 29 7b 0a 20 20  ii>=0; ii--){.  
9020: 20 20 20 20 69 66 28 20 64 62 2d 3e 61 44 62 5b      if( db->aDb[
9030: 69 69 5d 2e 70 42 74 20 26 26 20 28 69 69 3d 3d  ii].pBt && (ii==
9040: 69 44 62 20 7c 7c 20 70 49 64 32 2d 3e 6e 3d 3d  iDb || pId2->n==
9050: 30 29 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  0) ){.        sq
9060: 6c 69 74 65 33 56 64 62 65 55 73 65 73 42 74 72  lite3VdbeUsesBtr
9070: 65 65 28 76 2c 20 69 69 29 3b 0a 20 20 20 20 20  ee(v, ii);.     
9080: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
9090: 64 4f 70 33 28 76 2c 20 4f 50 5f 4a 6f 75 72 6e  dOp3(v, OP_Journ
90a0: 61 6c 4d 6f 64 65 2c 20 69 69 2c 20 31 2c 20 65  alMode, ii, 1, e
90b0: 4d 6f 64 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20  Mode);.      }. 
90c0: 20 20 20 7d 0a 20 20 20 20 73 71 6c 69 74 65 33     }.    sqlite3
90d0: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
90e0: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31  _ResultRow, 1, 1
90f0: 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20  );.    break;.  
9100: 7d 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52  }..  /*.  **  PR
9110: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
9120: 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d  journal_size_lim
9130: 69 74 0a 20 20 2a 2a 20 20 50 52 41 47 4d 41 20  it.  **  PRAGMA 
9140: 5b 64 61 74 61 62 61 73 65 2e 5d 6a 6f 75 72 6e  [database.]journ
9150: 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69 74 3d 4e 0a  al_size_limit=N.
9160: 20 20 2a 2a 0a 20 20 2a 2a 20 47 65 74 20 6f 72    **.  ** Get or
9170: 20 73 65 74 20 74 68 65 20 73 69 7a 65 20 6c 69   set the size li
9180: 6d 69 74 20 6f 6e 20 72 6f 6c 6c 62 61 63 6b 20  mit on rollback 
9190: 6a 6f 75 72 6e 61 6c 20 66 69 6c 65 73 2e 0a 20  journal files.. 
91a0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
91b0: 79 70 5f 4a 4f 55 52 4e 41 4c 5f 53 49 5a 45 5f  yp_JOURNAL_SIZE_
91c0: 4c 49 4d 49 54 3a 20 7b 0a 20 20 20 20 50 61 67  LIMIT: {.    Pag
91d0: 65 72 20 2a 70 50 61 67 65 72 20 3d 20 73 71 6c  er *pPager = sql
91e0: 69 74 65 33 42 74 72 65 65 50 61 67 65 72 28 70  ite3BtreePager(p
91f0: 44 62 2d 3e 70 42 74 29 3b 0a 20 20 20 20 69 36  Db->pBt);.    i6
9200: 34 20 69 4c 69 6d 69 74 20 3d 20 2d 32 3b 0a 20  4 iLimit = -2;. 
9210: 20 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b     if( zRight ){
9220: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 65  .      sqlite3De
9230: 63 4f 72 48 65 78 54 6f 49 36 34 28 7a 52 69 67  cOrHexToI64(zRig
9240: 68 74 2c 20 26 69 4c 69 6d 69 74 29 3b 0a 20 20  ht, &iLimit);.  
9250: 20 20 20 20 69 66 28 20 69 4c 69 6d 69 74 3c 2d      if( iLimit<-
9260: 31 20 29 20 69 4c 69 6d 69 74 20 3d 20 2d 31 3b  1 ) iLimit = -1;
9270: 0a 20 20 20 20 7d 0a 20 20 20 20 69 4c 69 6d 69  .    }.    iLimi
9280: 74 20 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72  t = sqlite3Pager
9290: 4a 6f 75 72 6e 61 6c 53 69 7a 65 4c 69 6d 69 74  JournalSizeLimit
92a0: 28 70 50 61 67 65 72 2c 20 69 4c 69 6d 69 74 29  (pPager, iLimit)
92b0: 3b 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67  ;.    returnSing
92c0: 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 6a  leInt(pParse, "j
92d0: 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69 6d 69  ournal_size_limi
92e0: 74 22 2c 20 69 4c 69 6d 69 74 29 3b 0a 20 20 20  t", iLimit);.   
92f0: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 65 6e   break;.  }..#en
9300: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d  dif /* SQLITE_OM
9310: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
9320: 20 2a 2f 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20   */..  /*.  **  
9330: 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65  PRAGMA [database
9340: 2e 5d 61 75 74 6f 5f 76 61 63 75 75 6d 0a 20 20  .]auto_vacuum.  
9350: 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  **  PRAGMA [data
9360: 62 61 73 65 2e 5d 61 75 74 6f 5f 76 61 63 75 75  base.]auto_vacuu
9370: 6d 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 47 65  m=N.  **.  ** Ge
9380: 74 20 6f 72 20 73 65 74 20 74 68 65 20 76 61 6c  t or set the val
9390: 75 65 20 6f 66 20 74 68 65 20 64 61 74 61 62 61  ue of the databa
93a0: 73 65 20 27 61 75 74 6f 2d 76 61 63 75 75 6d 27  se 'auto-vacuum'
93b0: 20 70 61 72 61 6d 65 74 65 72 2e 0a 20 20 2a 2a   parameter..  **
93c0: 20 54 68 65 20 76 61 6c 75 65 20 69 73 20 6f 6e   The value is on
93d0: 65 20 6f 66 3a 20 20 30 20 4e 4f 4e 45 20 31 20  e of:  0 NONE 1 
93e0: 46 55 4c 4c 20 32 20 49 4e 43 52 45 4d 45 4e 54  FULL 2 INCREMENT
93f0: 41 4c 0a 20 20 2a 2f 0a 23 69 66 6e 64 65 66 20  AL.  */.#ifndef 
9400: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
9410: 56 41 43 55 55 4d 0a 20 20 63 61 73 65 20 50 72  VACUUM.  case Pr
9420: 61 67 54 79 70 5f 41 55 54 4f 5f 56 41 43 55 55  agTyp_AUTO_VACUU
9430: 4d 3a 20 7b 0a 20 20 20 20 42 74 72 65 65 20 2a  M: {.    Btree *
9440: 70 42 74 20 3d 20 70 44 62 2d 3e 70 42 74 3b 0a  pBt = pDb->pBt;.
9450: 20 20 20 20 61 73 73 65 72 74 28 20 70 42 74 21      assert( pBt!
9460: 3d 30 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a  =0 );.    if( !z
9470: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72  Right ){.      r
9480: 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70  eturnSingleInt(p
9490: 50 61 72 73 65 2c 20 22 61 75 74 6f 5f 76 61 63  Parse, "auto_vac
94a0: 75 75 6d 22 2c 20 73 71 6c 69 74 65 33 42 74 72  uum", sqlite3Btr
94b0: 65 65 47 65 74 41 75 74 6f 56 61 63 75 75 6d 28  eeGetAutoVacuum(
94c0: 70 42 74 29 29 3b 0a 20 20 20 20 7d 65 6c 73 65  pBt));.    }else
94d0: 7b 0a 20 20 20 20 20 20 69 6e 74 20 65 41 75 74  {.      int eAut
94e0: 6f 20 3d 20 67 65 74 41 75 74 6f 56 61 63 75 75  o = getAutoVacuu
94f0: 6d 28 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20  m(zRight);.     
9500: 20 61 73 73 65 72 74 28 20 65 41 75 74 6f 3e 3d   assert( eAuto>=
9510: 30 20 26 26 20 65 41 75 74 6f 3c 3d 32 20 29 3b  0 && eAuto<=2 );
9520: 0a 20 20 20 20 20 20 64 62 2d 3e 6e 65 78 74 41  .      db->nextA
9530: 75 74 6f 76 61 63 20 3d 20 28 75 38 29 65 41 75  utovac = (u8)eAu
9540: 74 6f 3b 0a 20 20 20 20 20 20 2f 2a 20 43 61 6c  to;.      /* Cal
9550: 6c 20 53 65 74 41 75 74 6f 56 61 63 75 75 6d 28  l SetAutoVacuum(
9560: 29 20 74 6f 20 73 65 74 20 69 6e 69 74 69 61 6c  ) to set initial
9570: 69 7a 65 20 74 68 65 20 69 6e 74 65 72 6e 61 6c  ize the internal
9580: 20 61 75 74 6f 20 61 6e 64 0a 20 20 20 20 20 20   auto and.      
9590: 2a 2a 20 69 6e 63 72 2d 76 61 63 75 75 6d 20 66  ** incr-vacuum f
95a0: 6c 61 67 73 2e 20 54 68 69 73 20 69 73 20 72 65  lags. This is re
95b0: 71 75 69 72 65 64 20 69 6e 20 63 61 73 65 20 74  quired in case t
95c0: 68 69 73 20 63 6f 6e 6e 65 63 74 69 6f 6e 0a 20  his connection. 
95d0: 20 20 20 20 20 2a 2a 20 63 72 65 61 74 65 73 20       ** creates 
95e0: 74 68 65 20 64 61 74 61 62 61 73 65 20 66 69 6c  the database fil
95f0: 65 2e 20 49 74 20 69 73 20 69 6d 70 6f 72 74 61  e. It is importa
9600: 6e 74 20 74 68 61 74 20 69 74 20 69 73 20 63 72  nt that it is cr
9610: 65 61 74 65 64 0a 20 20 20 20 20 20 2a 2a 20 61  eated.      ** a
9620: 73 20 61 6e 20 61 75 74 6f 2d 76 61 63 75 75 6d  s an auto-vacuum
9630: 20 63 61 70 61 62 6c 65 20 64 62 2e 0a 20 20 20   capable db..   
9640: 20 20 20 2a 2f 0a 20 20 20 20 20 20 72 63 20 3d     */.      rc =
9650: 20 73 71 6c 69 74 65 33 42 74 72 65 65 53 65 74   sqlite3BtreeSet
9660: 41 75 74 6f 56 61 63 75 75 6d 28 70 42 74 2c 20  AutoVacuum(pBt, 
9670: 65 41 75 74 6f 29 3b 0a 20 20 20 20 20 20 69 66  eAuto);.      if
9680: 28 20 72 63 3d 3d 53 51 4c 49 54 45 5f 4f 4b 20  ( rc==SQLITE_OK 
9690: 26 26 20 28 65 41 75 74 6f 3d 3d 31 20 7c 7c 20  && (eAuto==1 || 
96a0: 65 41 75 74 6f 3d 3d 32 29 20 29 7b 0a 20 20 20  eAuto==2) ){.   
96b0: 20 20 20 20 20 2f 2a 20 57 68 65 6e 20 73 65 74       /* When set
96c0: 74 69 6e 67 20 74 68 65 20 61 75 74 6f 5f 76 61  ting the auto_va
96d0: 63 75 75 6d 20 6d 6f 64 65 20 74 6f 20 65 69 74  cuum mode to eit
96e0: 68 65 72 20 22 66 75 6c 6c 22 20 6f 72 20 0a 20  her "full" or . 
96f0: 20 20 20 20 20 20 20 2a 2a 20 22 69 6e 63 72 65         ** "incre
9700: 6d 65 6e 74 61 6c 22 2c 20 77 72 69 74 65 20 74  mental", write t
9710: 68 65 20 76 61 6c 75 65 20 6f 66 20 6d 65 74 61  he value of meta
9720: 5b 36 5d 20 69 6e 20 74 68 65 20 64 61 74 61 62  [6] in the datab
9730: 61 73 65 0a 20 20 20 20 20 20 20 20 2a 2a 20 66  ase.        ** f
9740: 69 6c 65 2e 20 42 65 66 6f 72 65 20 77 72 69 74  ile. Before writ
9750: 69 6e 67 20 74 6f 20 6d 65 74 61 5b 36 5d 2c 20  ing to meta[6], 
9760: 63 68 65 63 6b 20 74 68 61 74 20 6d 65 74 61 5b  check that meta[
9770: 33 5d 20 69 6e 64 69 63 61 74 65 73 0a 20 20 20  3] indicates.   
9780: 20 20 20 20 20 2a 2a 20 74 68 61 74 20 74 68 69       ** that thi
9790: 73 20 72 65 61 6c 6c 79 20 69 73 20 61 6e 20 61  s really is an a
97a0: 75 74 6f 2d 76 61 63 75 75 6d 20 63 61 70 61 62  uto-vacuum capab
97b0: 6c 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20  le database..   
97c0: 20 20 20 20 20 2a 2f 0a 20 20 20 20 20 20 20 20       */.        
97d0: 73 74 61 74 69 63 20 63 6f 6e 73 74 20 69 6e 74  static const int
97e0: 20 69 4c 6e 20 3d 20 56 44 42 45 5f 4f 46 46 53   iLn = VDBE_OFFS
97f0: 45 54 5f 4c 49 4e 45 4e 4f 28 32 29 3b 0a 20 20  ET_LINENO(2);.  
9800: 20 20 20 20 20 20 73 74 61 74 69 63 20 63 6f 6e        static con
9810: 73 74 20 56 64 62 65 4f 70 4c 69 73 74 20 73 65  st VdbeOpList se
9820: 74 4d 65 74 61 36 5b 5d 20 3d 20 7b 0a 20 20 20  tMeta6[] = {.   
9830: 20 20 20 20 20 20 20 7b 20 4f 50 5f 54 72 61 6e         { OP_Tran
9840: 73 61 63 74 69 6f 6e 2c 20 20 20 20 30 2c 20 20  saction,    0,  
9850: 20 20 20 20 20 20 20 31 2c 20 20 20 20 20 20 20         1,       
9860: 20 20 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20            0},   
9870: 20 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20   /* 0 */.       
9880: 20 20 20 7b 20 4f 50 5f 52 65 61 64 43 6f 6f 6b     { OP_ReadCook
9890: 69 65 2c 20 20 20 20 20 30 2c 20 20 20 20 20 20  ie,     0,      
98a0: 20 20 20 31 2c 20 20 20 20 20 20 20 20 20 42 54     1,         BT
98b0: 52 45 45 5f 4c 41 52 47 45 53 54 5f 52 4f 4f 54  REE_LARGEST_ROOT
98c0: 5f 50 41 47 45 7d 2c 0a 20 20 20 20 20 20 20 20  _PAGE},.        
98d0: 20 20 7b 20 4f 50 5f 49 66 2c 20 20 20 20 20 20    { OP_If,      
98e0: 20 20 20 20 20 20 20 31 2c 20 20 20 20 20 20 20         1,       
98f0: 20 20 30 2c 20 20 20 20 20 20 20 20 20 20 20 20    0,            
9900: 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20 32       0},    /* 2
9910: 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7b 20   */.          { 
9920: 4f 50 5f 48 61 6c 74 2c 20 20 20 20 20 20 20 20  OP_Halt,        
9930: 20 20 20 53 51 4c 49 54 45 5f 4f 4b 2c 20 4f 45     SQLITE_OK, OE
9940: 5f 41 62 6f 72 74 2c 20 20 20 20 20 20 20 20 20  _Abort,         
9950: 20 30 7d 2c 20 20 20 20 2f 2a 20 33 20 2a 2f 0a   0},    /* 3 */.
9960: 20 20 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 49            { OP_I
9970: 6e 74 65 67 65 72 2c 20 20 20 20 20 20 20 20 30  nteger,        0
9980: 2c 20 20 20 20 20 20 20 20 20 31 2c 20 20 20 20  ,         1,    
9990: 20 20 20 20 20 20 20 20 20 20 20 20 20 30 7d 2c               0},
99a0: 20 20 20 20 2f 2a 20 34 20 2a 2f 0a 20 20 20 20      /* 4 */.    
99b0: 20 20 20 20 20 20 7b 20 4f 50 5f 53 65 74 43 6f        { OP_SetCo
99c0: 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c 20 20 20  okie,      0,   
99d0: 20 20 20 20 20 20 42 54 52 45 45 5f 49 4e 43 52        BTREE_INCR
99e0: 5f 56 41 43 55 55 4d 2c 20 31 7d 2c 20 20 20 20  _VACUUM, 1},    
99f0: 2f 2a 20 35 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 5 */.        
9a00: 7d 3b 0a 20 20 20 20 20 20 20 20 69 6e 74 20 69  };.        int i
9a10: 41 64 64 72 3b 0a 20 20 20 20 20 20 20 20 69 41  Addr;.        iA
9a20: 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62  ddr = sqlite3Vdb
9a30: 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20 41 72  eAddOpList(v, Ar
9a40: 72 61 79 53 69 7a 65 28 73 65 74 4d 65 74 61 36  raySize(setMeta6
9a50: 29 2c 20 73 65 74 4d 65 74 61 36 2c 20 69 4c 6e  ), setMeta6, iLn
9a60: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
9a70: 65 33 56 64 62 65 43 68 61 6e 67 65 50 31 28 76  e3VdbeChangeP1(v
9a80: 2c 20 69 41 64 64 72 2c 20 69 44 62 29 3b 0a 20  , iAddr, iDb);. 
9a90: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
9aa0: 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 69 41  beChangeP1(v, iA
9ab0: 64 64 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20  ddr+1, iDb);.   
9ac0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
9ad0: 43 68 61 6e 67 65 50 32 28 76 2c 20 69 41 64 64  ChangeP2(v, iAdd
9ae0: 72 2b 32 2c 20 69 41 64 64 72 2b 34 29 3b 0a 20  r+2, iAddr+4);. 
9af0: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
9b00: 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20 69 41  beChangeP1(v, iA
9b10: 64 64 72 2b 34 2c 20 65 41 75 74 6f 2d 31 29 3b  ddr+4, eAuto-1);
9b20: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
9b30: 56 64 62 65 43 68 61 6e 67 65 50 31 28 76 2c 20  VdbeChangeP1(v, 
9b40: 69 41 64 64 72 2b 35 2c 20 69 44 62 29 3b 0a 20  iAddr+5, iDb);. 
9b50: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
9b60: 62 65 55 73 65 73 42 74 72 65 65 28 76 2c 20 69  beUsesBtree(v, i
9b70: 44 62 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20  Db);.      }.   
9b80: 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20   }.    break;.  
9b90: 7d 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20  }.#endif..  /*. 
9ba0: 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74   **  PRAGMA [dat
9bb0: 61 62 61 73 65 2e 5d 69 6e 63 72 65 6d 65 6e 74  abase.]increment
9bc0: 61 6c 5f 76 61 63 75 75 6d 28 4e 29 0a 20 20 2a  al_vacuum(N).  *
9bd0: 2a 0a 20 20 2a 2a 20 44 6f 20 4e 20 73 74 65 70  *.  ** Do N step
9be0: 73 20 6f 66 20 69 6e 63 72 65 6d 65 6e 74 61 6c  s of incremental
9bf0: 20 76 61 63 75 75 6d 69 6e 67 20 6f 6e 20 61 20   vacuuming on a 
9c00: 64 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 23  database..  */.#
9c10: 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
9c20: 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 0a 20 20  IT_AUTOVACUUM.  
9c30: 63 61 73 65 20 50 72 61 67 54 79 70 5f 49 4e 43  case PragTyp_INC
9c40: 52 45 4d 45 4e 54 41 4c 5f 56 41 43 55 55 4d 3a  REMENTAL_VACUUM:
9c50: 20 7b 0a 20 20 20 20 69 6e 74 20 69 4c 69 6d 69   {.    int iLimi
9c60: 74 2c 20 61 64 64 72 3b 0a 20 20 20 20 69 66 28  t, addr;.    if(
9c70: 20 7a 52 69 67 68 74 3d 3d 30 20 7c 7c 20 21 73   zRight==0 || !s
9c80: 71 6c 69 74 65 33 47 65 74 49 6e 74 33 32 28 7a  qlite3GetInt32(z
9c90: 52 69 67 68 74 2c 20 26 69 4c 69 6d 69 74 29 20  Right, &iLimit) 
9ca0: 7c 7c 20 69 4c 69 6d 69 74 3c 3d 30 20 29 7b 0a  || iLimit<=0 ){.
9cb0: 20 20 20 20 20 20 69 4c 69 6d 69 74 20 3d 20 30        iLimit = 0
9cc0: 78 37 66 66 66 66 66 66 66 3b 0a 20 20 20 20 7d  x7fffffff;.    }
9cd0: 0a 20 20 20 20 73 71 6c 69 74 65 33 42 65 67 69  .    sqlite3Begi
9ce0: 6e 57 72 69 74 65 4f 70 65 72 61 74 69 6f 6e 28  nWriteOperation(
9cf0: 70 50 61 72 73 65 2c 20 30 2c 20 69 44 62 29 3b  pParse, 0, iDb);
9d00: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
9d10: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
9d20: 65 67 65 72 2c 20 69 4c 69 6d 69 74 2c 20 31 29  eger, iLimit, 1)
9d30: 3b 0a 20 20 20 20 61 64 64 72 20 3d 20 73 71 6c  ;.    addr = sql
9d40: 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76  ite3VdbeAddOp1(v
9d50: 2c 20 4f 50 5f 49 6e 63 72 56 61 63 75 75 6d 2c  , OP_IncrVacuum,
9d60: 20 69 44 62 29 3b 20 56 64 62 65 43 6f 76 65 72   iDb); VdbeCover
9d70: 61 67 65 28 76 29 3b 0a 20 20 20 20 73 71 6c 69  age(v);.    sqli
9d80: 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76 2c  te3VdbeAddOp1(v,
9d90: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
9da0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
9db0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 41  beAddOp2(v, OP_A
9dc0: 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b 0a 20  ddImm, 1, -1);. 
9dd0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
9de0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 66 50 6f 73  dOp2(v, OP_IfPos
9df0: 2c 20 31 2c 20 61 64 64 72 29 3b 20 56 64 62 65  , 1, addr); Vdbe
9e00: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
9e10: 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70   sqlite3VdbeJump
9e20: 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a 20  Here(v, addr);. 
9e30: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65     break;.  }.#e
9e40: 6e 64 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51  ndif..#ifndef SQ
9e50: 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f  LITE_OMIT_PAGER_
9e60: 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20 20 2a  PRAGMAS.  /*.  *
9e70: 2a 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62  *  PRAGMA [datab
9e80: 61 73 65 2e 5d 63 61 63 68 65 5f 73 69 7a 65 0a  ase.]cache_size.
9e90: 20 20 2a 2a 20 20 50 52 41 47 4d 41 20 5b 64 61    **  PRAGMA [da
9ea0: 74 61 62 61 73 65 2e 5d 63 61 63 68 65 5f 73 69  tabase.]cache_si
9eb0: 7a 65 3d 4e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54  ze=N.  **.  ** T
9ec0: 68 65 20 66 69 72 73 74 20 66 6f 72 6d 20 72 65  he first form re
9ed0: 70 6f 72 74 73 20 74 68 65 20 63 75 72 72 65 6e  ports the curren
9ee0: 74 20 6c 6f 63 61 6c 20 73 65 74 74 69 6e 67 20  t local setting 
9ef0: 66 6f 72 20 74 68 65 0a 20 20 2a 2a 20 70 61 67  for the.  ** pag
9f00: 65 20 63 61 63 68 65 20 73 69 7a 65 2e 20 54 68  e cache size. Th
9f10: 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20 73 65  e second form se
9f20: 74 73 20 74 68 65 20 6c 6f 63 61 6c 0a 20 20 2a  ts the local.  *
9f30: 2a 20 70 61 67 65 20 63 61 63 68 65 20 73 69 7a  * page cache siz
9f40: 65 20 76 61 6c 75 65 2e 20 20 49 66 20 4e 20 69  e value.  If N i
9f50: 73 20 70 6f 73 69 74 69 76 65 20 74 68 65 6e 20  s positive then 
9f60: 74 68 61 74 20 69 73 20 74 68 65 0a 20 20 2a 2a  that is the.  **
9f70: 20 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73   number of pages
9f80: 20 69 6e 20 74 68 65 20 63 61 63 68 65 2e 20 20   in the cache.  
9f90: 49 66 20 4e 20 69 73 20 6e 65 67 61 74 69 76 65  If N is negative
9fa0: 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a 20  , then the.  ** 
9fb0: 6e 75 6d 62 65 72 20 6f 66 20 70 61 67 65 73 20  number of pages 
9fc0: 69 73 20 61 64 6a 75 73 74 65 64 20 73 6f 20 74  is adjusted so t
9fd0: 68 61 74 20 74 68 65 20 63 61 63 68 65 20 75 73  hat the cache us
9fe0: 65 73 20 2d 4e 20 6b 69 62 69 62 79 74 65 73 0a  es -N kibibytes.
9ff0: 20 20 2a 2a 20 6f 66 20 6d 65 6d 6f 72 79 2e 0a    ** of memory..
a000: 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67    */.  case Prag
a010: 54 79 70 5f 43 41 43 48 45 5f 53 49 5a 45 3a 20  Typ_CACHE_SIZE: 
a020: 7b 0a 20 20 20 20 61 73 73 65 72 74 28 20 73 71  {.    assert( sq
a030: 6c 69 74 65 33 53 63 68 65 6d 61 4d 75 74 65 78  lite3SchemaMutex
a040: 48 65 6c 64 28 64 62 2c 20 69 44 62 2c 20 30 29  Held(db, iDb, 0)
a050: 20 29 3b 0a 20 20 20 20 69 66 28 20 21 7a 52 69   );.    if( !zRi
a060: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ght ){.      ret
a070: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
a080: 72 73 65 2c 20 22 63 61 63 68 65 5f 73 69 7a 65  rse, "cache_size
a090: 22 2c 20 70 44 62 2d 3e 70 53 63 68 65 6d 61 2d  ", pDb->pSchema-
a0a0: 3e 63 61 63 68 65 5f 73 69 7a 65 29 3b 0a 20 20  >cache_size);.  
a0b0: 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 69    }else{.      i
a0c0: 6e 74 20 73 69 7a 65 20 3d 20 73 71 6c 69 74 65  nt size = sqlite
a0d0: 33 41 74 6f 69 28 7a 52 69 67 68 74 29 3b 0a 20  3Atoi(zRight);. 
a0e0: 20 20 20 20 20 70 44 62 2d 3e 70 53 63 68 65 6d       pDb->pSchem
a0f0: 61 2d 3e 63 61 63 68 65 5f 73 69 7a 65 20 3d 20  a->cache_size = 
a100: 73 69 7a 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  size;.      sqli
a110: 74 65 33 42 74 72 65 65 53 65 74 43 61 63 68 65  te3BtreeSetCache
a120: 53 69 7a 65 28 70 44 62 2d 3e 70 42 74 2c 20 70  Size(pDb->pBt, p
a130: 44 62 2d 3e 70 53 63 68 65 6d 61 2d 3e 63 61 63  Db->pSchema->cac
a140: 68 65 5f 73 69 7a 65 29 3b 0a 20 20 20 20 7d 0a  he_size);.    }.
a150: 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a      break;.  }..
a160: 20 20 2f 2a 0a 20 20 2a 2a 20 20 50 52 41 47 4d    /*.  **  PRAGM
a170: 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 6d 6d 61  A [database.]mma
a180: 70 5f 73 69 7a 65 28 4e 29 0a 20 20 2a 2a 0a 20  p_size(N).  **. 
a190: 20 2a 2a 20 55 73 65 64 20 74 6f 20 73 65 74 20   ** Used to set 
a1a0: 6d 61 70 70 69 6e 67 20 73 69 7a 65 20 6c 69 6d  mapping size lim
a1b0: 69 74 2e 20 54 68 65 20 6d 61 70 70 69 6e 67 20  it. The mapping 
a1c0: 73 69 7a 65 20 6c 69 6d 69 74 20 69 73 0a 20 20  size limit is.  
a1d0: 2a 2a 20 75 73 65 64 20 74 6f 20 6c 69 6d 69 74  ** used to limit
a1e0: 20 74 68 65 20 61 67 67 72 65 67 61 74 65 20 73   the aggregate s
a1f0: 69 7a 65 20 6f 66 20 61 6c 6c 20 6d 65 6d 6f 72  ize of all memor
a200: 79 20 6d 61 70 70 65 64 20 72 65 67 69 6f 6e 73  y mapped regions
a210: 20 6f 66 20 74 68 65 0a 20 20 2a 2a 20 64 61 74   of the.  ** dat
a220: 61 62 61 73 65 20 66 69 6c 65 2e 20 49 66 20 74  abase file. If t
a230: 68 69 73 20 70 61 72 61 6d 65 74 65 72 20 69 73  his parameter is
a240: 20 73 65 74 20 74 6f 20 7a 65 72 6f 2c 20 74 68   set to zero, th
a250: 65 6e 20 6d 65 6d 6f 72 79 20 6d 61 70 70 69 6e  en memory mappin
a260: 67 0a 20 20 2a 2a 20 69 73 20 6e 6f 74 20 75 73  g.  ** is not us
a270: 65 64 20 61 74 20 61 6c 6c 2e 20 20 49 66 20 4e  ed at all.  If N
a280: 20 69 73 20 6e 65 67 61 74 69 76 65 2c 20 74 68   is negative, th
a290: 65 6e 20 74 68 65 20 64 65 66 61 75 6c 74 20 6d  en the default m
a2a0: 65 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20 6c  emory map.  ** l
a2b0: 69 6d 69 74 20 64 65 74 65 72 6d 69 6e 65 64 20  imit determined 
a2c0: 62 79 20 73 71 6c 69 74 65 33 5f 63 6f 6e 66 69  by sqlite3_confi
a2d0: 67 28 53 51 4c 49 54 45 5f 43 4f 4e 46 49 47 5f  g(SQLITE_CONFIG_
a2e0: 4d 4d 41 50 5f 53 49 5a 45 29 20 69 73 20 73 65  MMAP_SIZE) is se
a2f0: 74 2e 0a 20 20 2a 2a 20 54 68 65 20 70 61 72 61  t..  ** The para
a300: 6d 65 74 65 72 20 4e 20 69 73 20 6d 65 61 73 75  meter N is measu
a310: 72 65 64 20 69 6e 20 62 79 74 65 73 2e 0a 20 20  red in bytes..  
a320: 2a 2a 0a 20 20 2a 2a 20 54 68 69 73 20 76 61 6c  **.  ** This val
a330: 75 65 20 69 73 20 61 64 76 69 73 6f 72 79 2e 20  ue is advisory. 
a340: 20 54 68 65 20 75 6e 64 65 72 6c 79 69 6e 67 20   The underlying 
a350: 56 46 53 20 69 73 20 66 72 65 65 20 74 6f 20 6d  VFS is free to m
a360: 65 6d 6f 72 79 20 6d 61 70 0a 20 20 2a 2a 20 61  emory map.  ** a
a370: 73 20 6c 69 74 74 6c 65 20 6f 72 20 61 73 20 6d  s little or as m
a380: 75 63 68 20 61 73 20 69 74 20 77 61 6e 74 73 2e  uch as it wants.
a390: 20 20 45 78 63 65 70 74 2c 20 69 66 20 4e 20 69    Except, if N i
a3a0: 73 20 73 65 74 20 74 6f 20 30 20 74 68 65 6e 20  s set to 0 then 
a3b0: 74 68 65 0a 20 20 2a 2a 20 75 70 70 65 72 20 6c  the.  ** upper l
a3c0: 61 79 65 72 73 20 77 69 6c 6c 20 6e 65 76 65 72  ayers will never
a3d0: 20 69 6e 76 6f 6b 65 20 74 68 65 20 78 46 65 74   invoke the xFet
a3e0: 63 68 20 69 6e 74 65 72 66 61 63 65 73 20 74 6f  ch interfaces to
a3f0: 20 74 68 65 20 56 46 53 2e 0a 20 20 2a 2f 0a 20   the VFS..  */. 
a400: 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 4d 4d   case PragTyp_MM
a410: 41 50 5f 53 49 5a 45 3a 20 7b 0a 20 20 20 20 73  AP_SIZE: {.    s
a420: 71 6c 69 74 65 33 5f 69 6e 74 36 34 20 73 7a 3b  qlite3_int64 sz;
a430: 0a 23 69 66 20 53 51 4c 49 54 45 5f 4d 41 58 5f  .#if SQLITE_MAX_
a440: 4d 4d 41 50 5f 53 49 5a 45 3e 30 0a 20 20 20 20  MMAP_SIZE>0.    
a450: 61 73 73 65 72 74 28 20 73 71 6c 69 74 65 33 53  assert( sqlite3S
a460: 63 68 65 6d 61 4d 75 74 65 78 48 65 6c 64 28 64  chemaMutexHeld(d
a470: 62 2c 20 69 44 62 2c 20 30 29 20 29 3b 0a 20 20  b, iDb, 0) );.  
a480: 20 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a    if( zRight ){.
a490: 20 20 20 20 20 20 69 6e 74 20 69 69 3b 0a 20 20        int ii;.  
a4a0: 20 20 20 20 73 71 6c 69 74 65 33 44 65 63 4f 72      sqlite3DecOr
a4b0: 48 65 78 54 6f 49 36 34 28 7a 52 69 67 68 74 2c  HexToI64(zRight,
a4c0: 20 26 73 7a 29 3b 0a 20 20 20 20 20 20 69 66 28   &sz);.      if(
a4d0: 20 73 7a 3c 30 20 29 20 73 7a 20 3d 20 73 71 6c   sz<0 ) sz = sql
a4e0: 69 74 65 33 47 6c 6f 62 61 6c 43 6f 6e 66 69 67  ite3GlobalConfig
a4f0: 2e 73 7a 4d 6d 61 70 3b 0a 20 20 20 20 20 20 69  .szMmap;.      i
a500: 66 28 20 70 49 64 32 2d 3e 6e 3d 3d 30 20 29 20  f( pId2->n==0 ) 
a510: 64 62 2d 3e 73 7a 4d 6d 61 70 20 3d 20 73 7a 3b  db->szMmap = sz;
a520: 0a 20 20 20 20 20 20 66 6f 72 28 69 69 3d 64 62  .      for(ii=db
a530: 2d 3e 6e 44 62 2d 31 3b 20 69 69 3e 3d 30 3b 20  ->nDb-1; ii>=0; 
a540: 69 69 2d 2d 29 7b 0a 20 20 20 20 20 20 20 20 69  ii--){.        i
a550: 66 28 20 64 62 2d 3e 61 44 62 5b 69 69 5d 2e 70  f( db->aDb[ii].p
a560: 42 74 20 26 26 20 28 69 69 3d 3d 69 44 62 20 7c  Bt && (ii==iDb |
a570: 7c 20 70 49 64 32 2d 3e 6e 3d 3d 30 29 20 29 7b  | pId2->n==0) ){
a580: 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
a590: 65 33 42 74 72 65 65 53 65 74 4d 6d 61 70 4c 69  e3BtreeSetMmapLi
a5a0: 6d 69 74 28 64 62 2d 3e 61 44 62 5b 69 69 5d 2e  mit(db->aDb[ii].
a5b0: 70 42 74 2c 20 73 7a 29 3b 0a 20 20 20 20 20 20  pBt, sz);.      
a5c0: 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
a5d0: 7d 0a 20 20 20 20 73 7a 20 3d 20 2d 31 3b 0a 20  }.    sz = -1;. 
a5e0: 20 20 20 72 63 20 3d 20 73 71 6c 69 74 65 33 5f     rc = sqlite3_
a5f0: 66 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c  file_control(db,
a600: 20 7a 44 62 2c 20 53 51 4c 49 54 45 5f 46 43 4e   zDb, SQLITE_FCN
a610: 54 4c 5f 4d 4d 41 50 5f 53 49 5a 45 2c 20 26 73  TL_MMAP_SIZE, &s
a620: 7a 29 3b 0a 23 65 6c 73 65 0a 20 20 20 20 73 7a  z);.#else.    sz
a630: 20 3d 20 30 3b 0a 20 20 20 20 72 63 20 3d 20 53   = 0;.    rc = S
a640: 51 4c 49 54 45 5f 4f 4b 3b 0a 23 65 6e 64 69 66  QLITE_OK;.#endif
a650: 0a 20 20 20 20 69 66 28 20 72 63 3d 3d 53 51 4c  .    if( rc==SQL
a660: 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
a670: 72 65 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28  returnSingleInt(
a680: 70 50 61 72 73 65 2c 20 22 6d 6d 61 70 5f 73 69  pParse, "mmap_si
a690: 7a 65 22 2c 20 73 7a 29 3b 0a 20 20 20 20 7d 65  ze", sz);.    }e
a6a0: 6c 73 65 20 69 66 28 20 72 63 21 3d 53 51 4c 49  lse if( rc!=SQLI
a6b0: 54 45 5f 4e 4f 54 46 4f 55 4e 44 20 29 7b 0a 20  TE_NOTFOUND ){. 
a6c0: 20 20 20 20 20 70 50 61 72 73 65 2d 3e 6e 45 72       pParse->nEr
a6d0: 72 2b 2b 3b 0a 20 20 20 20 20 20 70 50 61 72 73  r++;.      pPars
a6e0: 65 2d 3e 72 63 20 3d 20 72 63 3b 0a 20 20 20 20  e->rc = rc;.    
a6f0: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
a700: 0a 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52  ..  /*.  **   PR
a710: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 0a  AGMA temp_store.
a720: 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 74 65    **   PRAGMA te
a730: 6d 70 5f 73 74 6f 72 65 20 3d 20 22 64 65 66 61  mp_store = "defa
a740: 75 6c 74 22 7c 22 6d 65 6d 6f 72 79 22 7c 22 66  ult"|"memory"|"f
a750: 69 6c 65 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52  ile".  **.  ** R
a760: 65 74 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65  eturn or set the
a770: 20 6c 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20   local value of 
a780: 74 68 65 20 74 65 6d 70 5f 73 74 6f 72 65 20 66  the temp_store f
a790: 6c 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20  lag.  Changing. 
a7a0: 20 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20 76 61   ** the local va
a7b0: 6c 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b  lue does not mak
a7c0: 65 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65  e changes to the
a7d0: 20 64 69 73 6b 20 66 69 6c 65 20 61 6e 64 20 74   disk file and t
a7e0: 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a 20  he default.  ** 
a7f0: 76 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65  value will be re
a800: 73 74 6f 72 65 64 20 74 68 65 20 6e 65 78 74 20  stored the next 
a810: 74 69 6d 65 20 74 68 65 20 64 61 74 61 62 61 73  time the databas
a820: 65 20 69 73 20 6f 70 65 6e 65 64 2e 0a 20 20 2a  e is opened..  *
a830: 2a 0a 20 20 2a 2a 20 4e 6f 74 65 20 74 68 61 74  *.  ** Note that
a840: 20 69 74 20 69 73 20 70 6f 73 73 69 62 6c 65 20   it is possible 
a850: 66 6f 72 20 74 68 65 20 6c 69 62 72 61 72 79 20  for the library 
a860: 63 6f 6d 70 69 6c 65 2d 74 69 6d 65 20 6f 70 74  compile-time opt
a870: 69 6f 6e 73 20 74 6f 0a 20 20 2a 2a 20 6f 76 65  ions to.  ** ove
a880: 72 72 69 64 65 20 74 68 69 73 20 73 65 74 74 69  rride this setti
a890: 6e 67 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50  ng.  */.  case P
a8a0: 72 61 67 54 79 70 5f 54 45 4d 50 5f 53 54 4f 52  ragTyp_TEMP_STOR
a8b0: 45 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52  E: {.    if( !zR
a8c0: 69 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65  ight ){.      re
a8d0: 74 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50  turnSingleInt(pP
a8e0: 61 72 73 65 2c 20 22 74 65 6d 70 5f 73 74 6f 72  arse, "temp_stor
a8f0: 65 22 2c 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f  e", db->temp_sto
a900: 72 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  re);.    }else{.
a910: 20 20 20 20 20 20 63 68 61 6e 67 65 54 65 6d 70        changeTemp
a920: 53 74 6f 72 61 67 65 28 70 50 61 72 73 65 2c 20  Storage(pParse, 
a930: 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 7d 0a 20  zRight);.    }. 
a940: 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20     break;.  }.. 
a950: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
a960: 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72  A temp_store_dir
a970: 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52  ectory.  **   PR
a980: 41 47 4d 41 20 74 65 6d 70 5f 73 74 6f 72 65 5f  AGMA temp_store_
a990: 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22  directory = ""|"
a9a0: 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a  directory_name".
a9b0: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
a9c0: 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61   or set the loca
a9d0: 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 74  l value of the t
a9e0: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
a9f0: 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ory flag.  Chang
aa00: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c  ing.  ** the val
aa10: 75 65 20 73 65 74 73 20 61 20 73 70 65 63 69 66  ue sets a specif
aa20: 69 63 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20  ic directory to 
aa30: 62 65 20 75 73 65 64 20 66 6f 72 20 74 65 6d 70  be used for temp
aa40: 6f 72 61 72 79 20 66 69 6c 65 73 2e 0a 20 20 2a  orary files..  *
aa50: 2a 20 53 65 74 74 69 6e 67 20 74 6f 20 61 20 6e  * Setting to a n
aa60: 75 6c 6c 20 73 74 72 69 6e 67 20 72 65 76 65 72  ull string rever
aa70: 74 73 20 74 6f 20 74 68 65 20 64 65 66 61 75 6c  ts to the defaul
aa80: 74 20 74 65 6d 70 6f 72 61 72 79 20 64 69 72 65  t temporary dire
aa90: 63 74 6f 72 79 20 73 65 61 72 63 68 2e 0a 20 20  ctory search..  
aaa0: 2a 2a 20 49 66 20 74 65 6d 70 6f 72 61 72 79 20  ** If temporary 
aab0: 64 69 72 65 63 74 6f 72 79 20 69 73 20 63 68 61  directory is cha
aac0: 6e 67 65 64 2c 20 74 68 65 6e 20 69 6e 76 61 6c  nged, then inval
aad0: 69 64 61 74 65 54 65 6d 70 53 74 6f 72 61 67 65  idateTempStorage
aae0: 2e 0a 20 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61  ..  **.  */.  ca
aaf0: 73 65 20 50 72 61 67 54 79 70 5f 54 45 4d 50 5f  se PragTyp_TEMP_
ab00: 53 54 4f 52 45 5f 44 49 52 45 43 54 4f 52 59 3a  STORE_DIRECTORY:
ab10: 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69 67   {.    if( !zRig
ab20: 68 74 20 29 7b 0a 20 20 20 20 20 20 69 66 28 20  ht ){.      if( 
ab30: 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69 72  sqlite3_temp_dir
ab40: 65 63 74 6f 72 79 20 29 7b 0a 20 20 20 20 20 20  ectory ){.      
ab50: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
ab60: 4e 75 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20  NumCols(v, 1);. 
ab70: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
ab80: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
ab90: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
aba0: 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22 74   .            "t
abb0: 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  emp_store_direct
abc0: 6f 72 79 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ory", SQLITE_STA
abd0: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71  TIC);.        sq
abe0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
abf0: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
ac00: 2c 20 31 2c 20 30 2c 20 73 71 6c 69 74 65 33 5f  , 1, 0, sqlite3_
ac10: 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 2c 20  temp_directory, 
ac20: 30 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  0);.        sqli
ac30: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
ac40: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
ac50: 2c 20 31 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 1);.      }.  
ac60: 20 20 7d 65 6c 73 65 7b 0a 23 69 66 6e 64 65 66    }else{.#ifndef
ac70: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 57 53 44   SQLITE_OMIT_WSD
ac80: 0a 20 20 20 20 20 20 69 66 28 20 7a 52 69 67 68  .      if( zRigh
ac90: 74 5b 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20  t[0] ){.        
aca0: 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20 20 20  int res;.       
acb0: 20 72 63 20 3d 20 73 71 6c 69 74 65 33 4f 73 41   rc = sqlite3OsA
acc0: 63 63 65 73 73 28 64 62 2d 3e 70 56 66 73 2c 20  ccess(db->pVfs, 
acd0: 7a 52 69 67 68 74 2c 20 53 51 4c 49 54 45 5f 41  zRight, SQLITE_A
ace0: 43 43 45 53 53 5f 52 45 41 44 57 52 49 54 45 2c  CCESS_READWRITE,
acf0: 20 26 72 65 73 29 3b 0a 20 20 20 20 20 20 20 20   &res);.        
ad00: 69 66 28 20 72 63 21 3d 53 51 4c 49 54 45 5f 4f  if( rc!=SQLITE_O
ad10: 4b 20 7c 7c 20 72 65 73 3d 3d 30 20 29 7b 0a 20  K || res==0 ){. 
ad20: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
ad30: 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65 2c  ErrorMsg(pParse,
ad40: 20 22 6e 6f 74 20 61 20 77 72 69 74 61 62 6c 65   "not a writable
ad50: 20 64 69 72 65 63 74 6f 72 79 22 29 3b 0a 20 20   directory");.  
ad60: 20 20 20 20 20 20 20 20 67 6f 74 6f 20 70 72 61          goto pra
ad70: 67 6d 61 5f 6f 75 74 3b 0a 20 20 20 20 20 20 20  gma_out;.       
ad80: 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20   }.      }.     
ad90: 20 69 66 28 20 53 51 4c 49 54 45 5f 54 45 4d 50   if( SQLITE_TEMP
ada0: 5f 53 54 4f 52 45 3d 3d 30 0a 20 20 20 20 20 20  _STORE==0.      
adb0: 20 7c 7c 20 28 53 51 4c 49 54 45 5f 54 45 4d 50   || (SQLITE_TEMP
adc0: 5f 53 54 4f 52 45 3d 3d 31 20 26 26 20 64 62 2d  _STORE==1 && db-
add0: 3e 74 65 6d 70 5f 73 74 6f 72 65 3c 3d 31 29 0a  >temp_store<=1).
ade0: 20 20 20 20 20 20 20 7c 7c 20 28 53 51 4c 49 54         || (SQLIT
adf0: 45 5f 54 45 4d 50 5f 53 54 4f 52 45 3d 3d 32 20  E_TEMP_STORE==2 
ae00: 26 26 20 64 62 2d 3e 74 65 6d 70 5f 73 74 6f 72  && db->temp_stor
ae10: 65 3d 3d 31 29 0a 20 20 20 20 20 20 29 7b 0a 20  e==1).      ){. 
ae20: 20 20 20 20 20 20 20 69 6e 76 61 6c 69 64 61 74         invalidat
ae30: 65 54 65 6d 70 53 74 6f 72 61 67 65 28 70 50 61  eTempStorage(pPa
ae40: 72 73 65 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  rse);.      }.  
ae50: 20 20 20 20 73 71 6c 69 74 65 33 5f 66 72 65 65      sqlite3_free
ae60: 28 73 71 6c 69 74 65 33 5f 74 65 6d 70 5f 64 69  (sqlite3_temp_di
ae70: 72 65 63 74 6f 72 79 29 3b 0a 20 20 20 20 20 20  rectory);.      
ae80: 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b  if( zRight[0] ){
ae90: 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33  .        sqlite3
aea0: 5f 74 65 6d 70 5f 64 69 72 65 63 74 6f 72 79 20  _temp_directory 
aeb0: 3d 20 73 71 6c 69 74 65 33 5f 6d 70 72 69 6e 74  = sqlite3_mprint
aec0: 66 28 22 25 73 22 2c 20 7a 52 69 67 68 74 29 3b  f("%s", zRight);
aed0: 0a 20 20 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20  .      }else{.  
aee0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 74 65        sqlite3_te
aef0: 6d 70 5f 64 69 72 65 63 74 6f 72 79 20 3d 20 30  mp_directory = 0
af00: 3b 0a 20 20 20 20 20 20 7d 0a 23 65 6e 64 69 66  ;.      }.#endif
af10: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
af20: 57 53 44 20 2a 2f 0a 20 20 20 20 7d 0a 20 20 20  WSD */.    }.   
af30: 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 23 69 66   break;.  }..#if
af40: 20 53 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 0a 20   SQLITE_OS_WIN. 
af50: 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
af60: 41 20 64 61 74 61 5f 73 74 6f 72 65 5f 64 69 72  A data_store_dir
af70: 65 63 74 6f 72 79 0a 20 20 2a 2a 20 20 20 50 52  ectory.  **   PR
af80: 41 47 4d 41 20 64 61 74 61 5f 73 74 6f 72 65 5f  AGMA data_store_
af90: 64 69 72 65 63 74 6f 72 79 20 3d 20 22 22 7c 22  directory = ""|"
afa0: 64 69 72 65 63 74 6f 72 79 5f 6e 61 6d 65 22 0a  directory_name".
afb0: 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74 75 72 6e    **.  ** Return
afc0: 20 6f 72 20 73 65 74 20 74 68 65 20 6c 6f 63 61   or set the loca
afd0: 6c 20 76 61 6c 75 65 20 6f 66 20 74 68 65 20 64  l value of the d
afe0: 61 74 61 5f 73 74 6f 72 65 5f 64 69 72 65 63 74  ata_store_direct
aff0: 6f 72 79 20 66 6c 61 67 2e 20 20 43 68 61 6e 67  ory flag.  Chang
b000: 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61 6c  ing.  ** the val
b010: 75 65 20 73 65 74 73 20 61 20 73 70 65 63 69 66  ue sets a specif
b020: 69 63 20 64 69 72 65 63 74 6f 72 79 20 74 6f 20  ic directory to 
b030: 62 65 20 75 73 65 64 20 66 6f 72 20 64 61 74 61  be used for data
b040: 62 61 73 65 20 66 69 6c 65 73 20 74 68 61 74 0a  base files that.
b050: 20 20 2a 2a 20 77 65 72 65 20 73 70 65 63 69 66    ** were specif
b060: 69 65 64 20 77 69 74 68 20 61 20 72 65 6c 61 74  ied with a relat
b070: 69 76 65 20 70 61 74 68 6e 61 6d 65 2e 20 20 53  ive pathname.  S
b080: 65 74 74 69 6e 67 20 74 6f 20 61 20 6e 75 6c 6c  etting to a null
b090: 20 73 74 72 69 6e 67 20 72 65 76 65 72 74 73 0a   string reverts.
b0a0: 20 20 2a 2a 20 74 6f 20 74 68 65 20 64 65 66 61    ** to the defa
b0b0: 75 6c 74 20 64 61 74 61 62 61 73 65 20 64 69 72  ult database dir
b0c0: 65 63 74 6f 72 79 2c 20 77 68 69 63 68 20 66 6f  ectory, which fo
b0d0: 72 20 64 61 74 61 62 61 73 65 20 66 69 6c 65 73  r database files
b0e0: 20 73 70 65 63 69 66 69 65 64 20 77 69 74 68 0a   specified with.
b0f0: 20 20 2a 2a 20 61 20 72 65 6c 61 74 69 76 65 20    ** a relative 
b100: 70 61 74 68 20 77 69 6c 6c 20 70 72 6f 62 61 62  path will probab
b110: 6c 79 20 62 65 20 62 61 73 65 64 20 6f 6e 20 74  ly be based on t
b120: 68 65 20 63 75 72 72 65 6e 74 20 64 69 72 65 63  he current direc
b130: 74 6f 72 79 20 66 6f 72 20 74 68 65 0a 20 20 2a  tory for the.  *
b140: 2a 20 70 72 6f 63 65 73 73 2e 20 20 44 61 74 61  * process.  Data
b150: 62 61 73 65 20 66 69 6c 65 20 73 70 65 63 69 66  base file specif
b160: 69 65 64 20 77 69 74 68 20 61 6e 20 61 62 73 6f  ied with an abso
b170: 6c 75 74 65 20 70 61 74 68 20 61 72 65 20 6e 6f  lute path are no
b180: 74 20 69 6d 70 61 63 74 65 64 0a 20 20 2a 2a 20  t impacted.  ** 
b190: 62 79 20 74 68 69 73 20 73 65 74 74 69 6e 67 2c  by this setting,
b1a0: 20 72 65 67 61 72 64 6c 65 73 73 20 6f 66 20 69   regardless of i
b1b0: 74 73 20 76 61 6c 75 65 2e 0a 20 20 2a 2a 0a 20  ts value..  **. 
b1c0: 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54   */.  case PragT
b1d0: 79 70 5f 44 41 54 41 5f 53 54 4f 52 45 5f 44 49  yp_DATA_STORE_DI
b1e0: 52 45 43 54 4f 52 59 3a 20 7b 0a 20 20 20 20 69  RECTORY: {.    i
b1f0: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
b200: 20 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 5f      if( sqlite3_
b210: 64 61 74 61 5f 64 69 72 65 63 74 6f 72 79 20 29  data_directory )
b220: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
b230: 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
b240: 76 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73  v, 1);.        s
b250: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
b260: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
b270: 4d 45 5f 4e 41 4d 45 2c 20 0a 20 20 20 20 20 20  ME_NAME, .      
b280: 20 20 20 20 20 20 22 64 61 74 61 5f 73 74 6f 72        "data_stor
b290: 65 5f 64 69 72 65 63 74 6f 72 79 22 2c 20 53 51  e_directory", SQ
b2a0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
b2b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b2c0: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
b2d0: 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c 20  ring8, 0, 1, 0, 
b2e0: 73 71 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72  sqlite3_data_dir
b2f0: 65 63 74 6f 72 79 2c 20 30 29 3b 0a 20 20 20 20  ectory, 0);.    
b300: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
b310: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75  ddOp2(v, OP_Resu
b320: 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20 20  ltRow, 1, 1);.  
b330: 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73 65 7b      }.    }else{
b340: 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
b350: 4f 4d 49 54 5f 57 53 44 0a 20 20 20 20 20 20 69  OMIT_WSD.      i
b360: 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29 7b 0a  f( zRight[0] ){.
b370: 20 20 20 20 20 20 20 20 69 6e 74 20 72 65 73 3b          int res;
b380: 0a 20 20 20 20 20 20 20 20 72 63 20 3d 20 73 71  .        rc = sq
b390: 6c 69 74 65 33 4f 73 41 63 63 65 73 73 28 64 62  lite3OsAccess(db
b3a0: 2d 3e 70 56 66 73 2c 20 7a 52 69 67 68 74 2c 20  ->pVfs, zRight, 
b3b0: 53 51 4c 49 54 45 5f 41 43 43 45 53 53 5f 52 45  SQLITE_ACCESS_RE
b3c0: 41 44 57 52 49 54 45 2c 20 26 72 65 73 29 3b 0a  ADWRITE, &res);.
b3d0: 20 20 20 20 20 20 20 20 69 66 28 20 72 63 21 3d          if( rc!=
b3e0: 53 51 4c 49 54 45 5f 4f 4b 20 7c 7c 20 72 65 73  SQLITE_OK || res
b3f0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
b400: 20 73 71 6c 69 74 65 33 45 72 72 6f 72 4d 73 67   sqlite3ErrorMsg
b410: 28 70 50 61 72 73 65 2c 20 22 6e 6f 74 20 61 20  (pParse, "not a 
b420: 77 72 69 74 61 62 6c 65 20 64 69 72 65 63 74 6f  writable directo
b430: 72 79 22 29 3b 0a 20 20 20 20 20 20 20 20 20 20  ry");.          
b440: 67 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b  goto pragma_out;
b450: 0a 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20  .        }.     
b460: 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
b470: 5f 66 72 65 65 28 73 71 6c 69 74 65 33 5f 64 61  _free(sqlite3_da
b480: 74 61 5f 64 69 72 65 63 74 6f 72 79 29 3b 0a 20  ta_directory);. 
b490: 20 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 5b       if( zRight[
b4a0: 30 5d 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71  0] ){.        sq
b4b0: 6c 69 74 65 33 5f 64 61 74 61 5f 64 69 72 65 63  lite3_data_direc
b4c0: 74 6f 72 79 20 3d 20 73 71 6c 69 74 65 33 5f 6d  tory = sqlite3_m
b4d0: 70 72 69 6e 74 66 28 22 25 73 22 2c 20 7a 52 69  printf("%s", zRi
b4e0: 67 68 74 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73  ght);.      }els
b4f0: 65 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  e{.        sqlit
b500: 65 33 5f 64 61 74 61 5f 64 69 72 65 63 74 6f 72  e3_data_director
b510: 79 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 23  y = 0;.      }.#
b520: 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
b530: 4f 4d 49 54 5f 57 53 44 20 2a 2f 0a 20 20 20 20  OMIT_WSD */.    
b540: 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d  }.    break;.  }
b550: 0a 23 65 6e 64 69 66 0a 0a 23 69 66 20 53 51 4c  .#endif..#if SQL
b560: 49 54 45 5f 45 4e 41 42 4c 45 5f 4c 4f 43 4b 49  ITE_ENABLE_LOCKI
b570: 4e 47 5f 53 54 59 4c 45 0a 20 20 2f 2a 0a 20 20  NG_STYLE.  /*.  
b580: 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74  **   PRAGMA [dat
b590: 61 62 61 73 65 2e 5d 6c 6f 63 6b 5f 70 72 6f 78  abase.]lock_prox
b5a0: 79 5f 66 69 6c 65 0a 20 20 2a 2a 20 20 20 50 52  y_file.  **   PR
b5b0: 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
b5c0: 6c 6f 63 6b 5f 70 72 6f 78 79 5f 66 69 6c 65 20  lock_proxy_file 
b5d0: 3d 20 22 3a 61 75 74 6f 3a 22 7c 22 6c 6f 63 6b  = ":auto:"|"lock
b5e0: 5f 66 69 6c 65 5f 70 61 74 68 22 0a 20 20 2a 2a  _file_path".  **
b5f0: 0a 20 20 2a 2a 20 52 65 74 75 72 6e 20 6f 72 20  .  ** Return or 
b600: 73 65 74 20 74 68 65 20 76 61 6c 75 65 20 6f 66  set the value of
b610: 20 74 68 65 20 6c 6f 63 6b 5f 70 72 6f 78 79 5f   the lock_proxy_
b620: 66 69 6c 65 20 66 6c 61 67 2e 20 20 43 68 61 6e  file flag.  Chan
b630: 67 69 6e 67 0a 20 20 2a 2a 20 74 68 65 20 76 61  ging.  ** the va
b640: 6c 75 65 20 73 65 74 73 20 61 20 73 70 65 63 69  lue sets a speci
b650: 66 69 63 20 66 69 6c 65 20 74 6f 20 62 65 20 75  fic file to be u
b660: 73 65 64 20 66 6f 72 20 64 61 74 61 62 61 73 65  sed for database
b670: 20 61 63 63 65 73 73 20 6c 6f 63 6b 73 2e 0a 20   access locks.. 
b680: 20 2a 2a 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20   **.  */.  case 
b690: 50 72 61 67 54 79 70 5f 4c 4f 43 4b 5f 50 52 4f  PragTyp_LOCK_PRO
b6a0: 58 59 5f 46 49 4c 45 3a 20 7b 0a 20 20 20 20 69  XY_FILE: {.    i
b6b0: 66 28 20 21 7a 52 69 67 68 74 20 29 7b 0a 20 20  f( !zRight ){.  
b6c0: 20 20 20 20 50 61 67 65 72 20 2a 70 50 61 67 65      Pager *pPage
b6d0: 72 20 3d 20 73 71 6c 69 74 65 33 42 74 72 65 65  r = sqlite3Btree
b6e0: 50 61 67 65 72 28 70 44 62 2d 3e 70 42 74 29 3b  Pager(pDb->pBt);
b6f0: 0a 20 20 20 20 20 20 63 68 61 72 20 2a 70 72 6f  .      char *pro
b700: 78 79 5f 66 69 6c 65 5f 70 61 74 68 20 3d 20 4e  xy_file_path = N
b710: 55 4c 4c 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  ULL;.      sqlit
b720: 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20 3d  e3_file *pFile =
b730: 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69 6c   sqlite3PagerFil
b740: 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20 20  e(pPager);.     
b750: 20 73 71 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f   sqlite3OsFileCo
b760: 6e 74 72 6f 6c 48 69 6e 74 28 70 46 69 6c 65 2c  ntrolHint(pFile,
b770: 20 53 51 4c 49 54 45 5f 47 45 54 5f 4c 4f 43 4b   SQLITE_GET_LOCK
b780: 50 52 4f 58 59 46 49 4c 45 2c 20 0a 20 20 20 20  PROXYFILE, .    
b790: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b7a0: 20 20 20 20 20 20 20 26 70 72 6f 78 79 5f 66 69         &proxy_fi
b7b0: 6c 65 5f 70 61 74 68 29 3b 0a 20 20 20 20 20 20  le_path);.      
b7c0: 0a 20 20 20 20 20 20 69 66 28 20 70 72 6f 78 79  .      if( proxy
b7d0: 5f 66 69 6c 65 5f 70 61 74 68 20 29 7b 0a 20 20  _file_path ){.  
b7e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b7f0: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
b800: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
b810: 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
b820: 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 0, COLNAME_N
b830: 41 4d 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20  AME, .          
b840: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b850: 20 20 20 20 22 6c 6f 63 6b 5f 70 72 6f 78 79 5f      "lock_proxy_
b860: 66 69 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  file", SQLITE_ST
b870: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73  ATIC);.        s
b880: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
b890: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
b8a0: 30 2c 20 31 2c 20 30 2c 20 70 72 6f 78 79 5f 66  0, 1, 0, proxy_f
b8b0: 69 6c 65 5f 70 61 74 68 2c 20 30 29 3b 0a 20 20  ile_path, 0);.  
b8c0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
b8d0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
b8e0: 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a  sultRow, 1, 1);.
b8f0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 65 6c 73        }.    }els
b900: 65 7b 0a 20 20 20 20 20 20 50 61 67 65 72 20 2a  e{.      Pager *
b910: 70 50 61 67 65 72 20 3d 20 73 71 6c 69 74 65 33  pPager = sqlite3
b920: 42 74 72 65 65 50 61 67 65 72 28 70 44 62 2d 3e  BtreePager(pDb->
b930: 70 42 74 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  pBt);.      sqli
b940: 74 65 33 5f 66 69 6c 65 20 2a 70 46 69 6c 65 20  te3_file *pFile 
b950: 3d 20 73 71 6c 69 74 65 33 50 61 67 65 72 46 69  = sqlite3PagerFi
b960: 6c 65 28 70 50 61 67 65 72 29 3b 0a 20 20 20 20  le(pPager);.    
b970: 20 20 69 6e 74 20 72 65 73 3b 0a 20 20 20 20 20    int res;.     
b980: 20 69 66 28 20 7a 52 69 67 68 74 5b 30 5d 20 29   if( zRight[0] )
b990: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d 73 71  {.        res=sq
b9a0: 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72  lite3OsFileContr
b9b0: 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45  ol(pFile, SQLITE
b9c0: 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49  _SET_LOCKPROXYFI
b9d0: 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  LE, .           
b9e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
b9f0: 20 20 20 20 20 20 20 20 20 20 7a 52 69 67 68 74            zRight
ba00: 29 3b 0a 20 20 20 20 20 20 7d 20 65 6c 73 65 20  );.      } else 
ba10: 7b 0a 20 20 20 20 20 20 20 20 72 65 73 3d 73 71  {.        res=sq
ba20: 6c 69 74 65 33 4f 73 46 69 6c 65 43 6f 6e 74 72  lite3OsFileContr
ba30: 6f 6c 28 70 46 69 6c 65 2c 20 53 51 4c 49 54 45  ol(pFile, SQLITE
ba40: 5f 53 45 54 5f 4c 4f 43 4b 50 52 4f 58 59 46 49  _SET_LOCKPROXYFI
ba50: 4c 45 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  LE, .           
ba60: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
ba70: 20 20 20 20 20 20 20 20 20 20 4e 55 4c 4c 29 3b            NULL);
ba80: 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 69  .      }.      i
ba90: 66 28 20 72 65 73 21 3d 53 51 4c 49 54 45 5f 4f  f( res!=SQLITE_O
baa0: 4b 20 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  K ){.        sql
bab0: 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61  ite3ErrorMsg(pPa
bac0: 72 73 65 2c 20 22 66 61 69 6c 65 64 20 74 6f 20  rse, "failed to 
bad0: 73 65 74 20 6c 6f 63 6b 20 70 72 6f 78 79 20 66  set lock proxy f
bae0: 69 6c 65 22 29 3b 0a 20 20 20 20 20 20 20 20 67  ile");.        g
baf0: 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
bb00: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
bb10: 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
bb20: 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f 45 4e  dif /* SQLITE_EN
bb30: 41 42 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59  ABLE_LOCKING_STY
bb40: 4c 45 20 2a 2f 20 20 20 20 20 20 0a 20 20 20 20  LE */      .    
bb50: 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  /*.  **   PRA
bb60: 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 73  GMA [database.]s
bb70: 79 6e 63 68 72 6f 6e 6f 75 73 0a 20 20 2a 2a 20  ynchronous.  ** 
bb80: 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61 62 61    PRAGMA [databa
bb90: 73 65 2e 5d 73 79 6e 63 68 72 6f 6e 6f 75 73 3d  se.]synchronous=
bba0: 4f 46 46 7c 4f 4e 7c 4e 4f 52 4d 41 4c 7c 46 55  OFF|ON|NORMAL|FU
bbb0: 4c 4c 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52 65 74  LL.  **.  ** Ret
bbc0: 75 72 6e 20 6f 72 20 73 65 74 20 74 68 65 20 6c  urn or set the l
bbd0: 6f 63 61 6c 20 76 61 6c 75 65 20 6f 66 20 74 68  ocal value of th
bbe0: 65 20 73 79 6e 63 68 72 6f 6e 6f 75 73 20 66 6c  e synchronous fl
bbf0: 61 67 2e 20 20 43 68 61 6e 67 69 6e 67 0a 20 20  ag.  Changing.  
bc00: 2a 2a 20 74 68 65 20 6c 6f 63 61 6c 20 76 61 6c  ** the local val
bc10: 75 65 20 64 6f 65 73 20 6e 6f 74 20 6d 61 6b 65  ue does not make
bc20: 20 63 68 61 6e 67 65 73 20 74 6f 20 74 68 65 20   changes to the 
bc30: 64 69 73 6b 20 66 69 6c 65 20 61 6e 64 20 74 68  disk file and th
bc40: 65 0a 20 20 2a 2a 20 64 65 66 61 75 6c 74 20 76  e.  ** default v
bc50: 61 6c 75 65 20 77 69 6c 6c 20 62 65 20 72 65 73  alue will be res
bc60: 74 6f 72 65 64 20 74 68 65 20 6e 65 78 74 20 74  tored the next t
bc70: 69 6d 65 20 74 68 65 20 64 61 74 61 62 61 73 65  ime the database
bc80: 20 69 73 0a 20 20 2a 2a 20 6f 70 65 6e 65 64 2e   is.  ** opened.
bc90: 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
bca0: 67 54 79 70 5f 53 59 4e 43 48 52 4f 4e 4f 55 53  gTyp_SYNCHRONOUS
bcb0: 3a 20 7b 0a 20 20 20 20 69 66 28 20 21 7a 52 69  : {.    if( !zRi
bcc0: 67 68 74 20 29 7b 0a 20 20 20 20 20 20 72 65 74  ght ){.      ret
bcd0: 75 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61  urnSingleInt(pPa
bce0: 72 73 65 2c 20 22 73 79 6e 63 68 72 6f 6e 6f 75  rse, "synchronou
bcf0: 73 22 2c 20 70 44 62 2d 3e 73 61 66 65 74 79 5f  s", pDb->safety_
bd00: 6c 65 76 65 6c 2d 31 29 3b 0a 20 20 20 20 7d 65  level-1);.    }e
bd10: 6c 73 65 7b 0a 20 20 20 20 20 20 69 66 28 20 21  lse{.      if( !
bd20: 64 62 2d 3e 61 75 74 6f 43 6f 6d 6d 69 74 20 29  db->autoCommit )
bd30: 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
bd40: 33 45 72 72 6f 72 4d 73 67 28 70 50 61 72 73 65  3ErrorMsg(pParse
bd50: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 22  , .            "
bd60: 53 61 66 65 74 79 20 6c 65 76 65 6c 20 6d 61 79  Safety level may
bd70: 20 6e 6f 74 20 62 65 20 63 68 61 6e 67 65 64 20   not be changed 
bd80: 69 6e 73 69 64 65 20 61 20 74 72 61 6e 73 61 63  inside a transac
bd90: 74 69 6f 6e 22 29 3b 0a 20 20 20 20 20 20 7d 65  tion");.      }e
bda0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 44 62  lse{.        pDb
bdb0: 2d 3e 73 61 66 65 74 79 5f 6c 65 76 65 6c 20 3d  ->safety_level =
bdc0: 20 67 65 74 53 61 66 65 74 79 4c 65 76 65 6c 28   getSafetyLevel(
bdd0: 7a 52 69 67 68 74 2c 30 2c 31 29 2b 31 3b 0a 20  zRight,0,1)+1;. 
bde0: 20 20 20 20 20 20 20 73 65 74 41 6c 6c 50 61 67         setAllPag
bdf0: 65 72 46 6c 61 67 73 28 64 62 29 3b 0a 20 20 20  erFlags(db);.   
be00: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 62     }.    }.    b
be10: 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64 69 66  reak;.  }.#endif
be20: 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
be30: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 20 2a 2f  PAGER_PRAGMAS */
be40: 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45  ..#ifndef SQLITE
be50: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
be60: 41 53 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  AS.  case PragTy
be70: 70 5f 46 4c 41 47 3a 20 7b 0a 20 20 20 20 69 66  p_FLAG: {.    if
be80: 28 20 7a 52 69 67 68 74 3d 3d 30 20 29 7b 0a 20  ( zRight==0 ){. 
be90: 20 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c       returnSingl
bea0: 65 49 6e 74 28 70 50 61 72 73 65 2c 20 61 50 72  eInt(pParse, aPr
beb0: 61 67 6d 61 4e 61 6d 65 73 5b 6d 69 64 5d 2e 7a  agmaNames[mid].z
bec0: 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20  Name,.          
bed0: 20 20 20 20 20 20 20 20 20 20 20 28 64 62 2d 3e             (db->
bee0: 66 6c 61 67 73 20 26 20 61 50 72 61 67 6d 61 4e  flags & aPragmaN
bef0: 61 6d 65 73 5b 6d 69 64 5d 2e 69 41 72 67 29 21  ames[mid].iArg)!
bf00: 3d 30 20 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b  =0 );.    }else{
bf10: 0a 20 20 20 20 20 20 69 6e 74 20 6d 61 73 6b 20  .      int mask 
bf20: 3d 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d  = aPragmaNames[m
bf30: 69 64 5d 2e 69 41 72 67 3b 20 20 20 20 2f 2a 20  id].iArg;    /* 
bf40: 4d 61 73 6b 20 6f 66 20 62 69 74 73 20 74 6f 20  Mask of bits to 
bf50: 73 65 74 20 6f 72 20 63 6c 65 61 72 2e 20 2a 2f  set or clear. */
bf60: 0a 20 20 20 20 20 20 69 66 28 20 64 62 2d 3e 61  .      if( db->a
bf70: 75 74 6f 43 6f 6d 6d 69 74 3d 3d 30 20 29 7b 0a  utoCommit==0 ){.
bf80: 20 20 20 20 20 20 20 20 2f 2a 20 46 6f 72 65 69          /* Forei
bf90: 67 6e 20 6b 65 79 20 73 75 70 70 6f 72 74 20 6d  gn key support m
bfa0: 61 79 20 6e 6f 74 20 62 65 20 65 6e 61 62 6c 65  ay not be enable
bfb0: 64 20 6f 72 20 64 69 73 61 62 6c 65 64 20 77 68  d or disabled wh
bfc0: 69 6c 65 20 6e 6f 74 0a 20 20 20 20 20 20 20 20  ile not.        
bfd0: 2a 2a 20 69 6e 20 61 75 74 6f 2d 63 6f 6d 6d 69  ** in auto-commi
bfe0: 74 20 6d 6f 64 65 2e 20 20 2a 2f 0a 20 20 20 20  t mode.  */.    
bff0: 20 20 20 20 6d 61 73 6b 20 26 3d 20 7e 28 53 51      mask &= ~(SQ
c000: 4c 49 54 45 5f 46 6f 72 65 69 67 6e 4b 65 79 73  LITE_ForeignKeys
c010: 29 3b 0a 20 20 20 20 20 20 7d 0a 23 69 66 20 53  );.      }.#if S
c020: 51 4c 49 54 45 5f 55 53 45 52 5f 41 55 54 48 45  QLITE_USER_AUTHE
c030: 4e 54 49 43 41 54 49 4f 4e 0a 20 20 20 20 20 20  NTICATION.      
c040: 69 66 28 20 64 62 2d 3e 61 75 74 68 2e 61 75 74  if( db->auth.aut
c050: 68 4c 65 76 65 6c 3d 3d 55 41 55 54 48 5f 55 73  hLevel==UAUTH_Us
c060: 65 72 20 29 7b 0a 20 20 20 20 20 20 20 20 2f 2a  er ){.        /*
c070: 20 44 6f 20 6e 6f 74 20 61 6c 6c 6f 77 20 6e 6f   Do not allow no
c080: 6e 2d 61 64 6d 69 6e 20 75 73 65 72 73 20 74 6f  n-admin users to
c090: 20 6d 6f 64 69 66 79 20 74 68 65 20 73 63 68 65   modify the sche
c0a0: 6d 61 20 61 72 62 69 74 72 61 72 69 6c 79 20 2a  ma arbitrarily *
c0b0: 2f 0a 20 20 20 20 20 20 20 20 6d 61 73 6b 20 26  /.        mask &
c0c0: 3d 20 7e 28 53 51 4c 49 54 45 5f 57 72 69 74 65  = ~(SQLITE_Write
c0d0: 53 63 68 65 6d 61 29 3b 0a 20 20 20 20 20 20 7d  Schema);.      }
c0e0: 0a 23 65 6e 64 69 66 0a 0a 20 20 20 20 20 20 69  .#endif..      i
c0f0: 66 28 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f  f( sqlite3GetBoo
c100: 6c 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 20  lean(zRight, 0) 
c110: 29 7b 0a 20 20 20 20 20 20 20 20 64 62 2d 3e 66  ){.        db->f
c120: 6c 61 67 73 20 7c 3d 20 6d 61 73 6b 3b 0a 20 20  lags |= mask;.  
c130: 20 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20      }else{.     
c140: 20 20 20 64 62 2d 3e 66 6c 61 67 73 20 26 3d 20     db->flags &= 
c150: 7e 6d 61 73 6b 3b 0a 20 20 20 20 20 20 20 20 69  ~mask;.        i
c160: 66 28 20 6d 61 73 6b 3d 3d 53 51 4c 49 54 45 5f  f( mask==SQLITE_
c170: 44 65 66 65 72 46 4b 73 20 29 20 64 62 2d 3e 6e  DeferFKs ) db->n
c180: 44 65 66 65 72 72 65 64 49 6d 6d 43 6f 6e 73 20  DeferredImmCons 
c190: 3d 20 30 3b 0a 20 20 20 20 20 20 7d 0a 0a 20 20  = 0;.      }..  
c1a0: 20 20 20 20 2f 2a 20 4d 61 6e 79 20 6f 66 20 74      /* Many of t
c1b0: 68 65 20 66 6c 61 67 2d 70 72 61 67 6d 61 73 20  he flag-pragmas 
c1c0: 6d 6f 64 69 66 79 20 74 68 65 20 63 6f 64 65 20  modify the code 
c1d0: 67 65 6e 65 72 61 74 65 64 20 62 79 20 74 68 65  generated by the
c1e0: 20 53 51 4c 20 0a 20 20 20 20 20 20 2a 2a 20 63   SQL .      ** c
c1f0: 6f 6d 70 69 6c 65 72 20 28 65 67 2e 20 63 6f 75  ompiler (eg. cou
c200: 6e 74 5f 63 68 61 6e 67 65 73 29 2e 20 53 6f 20  nt_changes). So 
c210: 61 64 64 20 61 6e 20 6f 70 63 6f 64 65 20 74 6f  add an opcode to
c220: 20 65 78 70 69 72 65 20 61 6c 6c 0a 20 20 20 20   expire all.    
c230: 20 20 2a 2a 20 63 6f 6d 70 69 6c 65 64 20 53 51    ** compiled SQ
c240: 4c 20 73 74 61 74 65 6d 65 6e 74 73 20 61 66 74  L statements aft
c250: 65 72 20 6d 6f 64 69 66 79 69 6e 67 20 61 20 70  er modifying a p
c260: 72 61 67 6d 61 20 76 61 6c 75 65 2e 0a 20 20 20  ragma value..   
c270: 20 20 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69     */.      sqli
c280: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
c290: 20 4f 50 5f 45 78 70 69 72 65 2c 20 30 2c 20 30   OP_Expire, 0, 0
c2a0: 29 3b 0a 20 20 20 20 20 20 73 65 74 41 6c 6c 50  );.      setAllP
c2b0: 61 67 65 72 46 6c 61 67 73 28 64 62 29 3b 0a 20  agerFlags(db);. 
c2c0: 20 20 20 7d 0a 20 20 20 20 62 72 65 61 6b 3b 0a     }.    break;.
c2d0: 20 20 7d 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51    }.#endif /* SQ
c2e0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50  LITE_OMIT_FLAG_P
c2f0: 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64  RAGMAS */..#ifnd
c300: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ef SQLITE_OMIT_S
c310: 43 48 45 4d 41 5f 50 52 41 47 4d 41 53 0a 20 20  CHEMA_PRAGMAS.  
c320: 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
c330: 20 74 61 62 6c 65 5f 69 6e 66 6f 28 3c 74 61 62   table_info(<tab
c340: 6c 65 3e 29 0a 20 20 2a 2a 0a 20 20 2a 2a 20 52  le>).  **.  ** R
c350: 65 74 75 72 6e 20 61 20 73 69 6e 67 6c 65 20 72  eturn a single r
c360: 6f 77 20 66 6f 72 20 65 61 63 68 20 63 6f 6c 75  ow for each colu
c370: 6d 6e 20 6f 66 20 74 68 65 20 6e 61 6d 65 64 20  mn of the named 
c380: 74 61 62 6c 65 2e 20 54 68 65 20 63 6f 6c 75 6d  table. The colum
c390: 6e 73 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 72  ns of.  ** the r
c3a0: 65 74 75 72 6e 65 64 20 64 61 74 61 20 73 65 74  eturned data set
c3b0: 20 61 72 65 3a 0a 20 20 2a 2a 0a 20 20 2a 2a 20   are:.  **.  ** 
c3c0: 63 69 64 3a 20 20 20 20 20 20 20 20 43 6f 6c 75  cid:        Colu
c3d0: 6d 6e 20 69 64 20 28 6e 75 6d 62 65 72 65 64 20  mn id (numbered 
c3e0: 66 72 6f 6d 20 6c 65 66 74 20 74 6f 20 72 69 67  from left to rig
c3f0: 68 74 2c 20 73 74 61 72 74 69 6e 67 20 61 74 20  ht, starting at 
c400: 30 29 0a 20 20 2a 2a 20 6e 61 6d 65 3a 20 20 20  0).  ** name:   
c410: 20 20 20 20 43 6f 6c 75 6d 6e 20 6e 61 6d 65 0a      Column name.
c420: 20 20 2a 2a 20 74 79 70 65 3a 20 20 20 20 20 20    ** type:      
c430: 20 43 6f 6c 75 6d 6e 20 64 65 63 6c 61 72 61 74   Column declarat
c440: 69 6f 6e 20 74 79 70 65 2e 0a 20 20 2a 2a 20 6e  ion type..  ** n
c450: 6f 74 6e 75 6c 6c 3a 20 20 20 20 54 72 75 65 20  otnull:    True 
c460: 69 66 20 27 4e 4f 54 20 4e 55 4c 4c 27 20 69 73  if 'NOT NULL' is
c470: 20 70 61 72 74 20 6f 66 20 63 6f 6c 75 6d 6e 20   part of column 
c480: 64 65 63 6c 61 72 61 74 69 6f 6e 0a 20 20 2a 2a  declaration.  **
c490: 20 64 66 6c 74 5f 76 61 6c 75 65 3a 20 54 68 65   dflt_value: The
c4a0: 20 64 65 66 61 75 6c 74 20 76 61 6c 75 65 20 66   default value f
c4b0: 6f 72 20 74 68 65 20 63 6f 6c 75 6d 6e 2c 20 69  or the column, i
c4c0: 66 20 61 6e 79 2e 0a 20 20 2a 2f 0a 20 20 63 61  f any..  */.  ca
c4d0: 73 65 20 50 72 61 67 54 79 70 5f 54 41 42 4c 45  se PragTyp_TABLE
c4e0: 5f 49 4e 46 4f 3a 20 69 66 28 20 7a 52 69 67 68  _INFO: if( zRigh
c4f0: 74 20 29 7b 0a 20 20 20 20 54 61 62 6c 65 20 2a  t ){.    Table *
c500: 70 54 61 62 3b 0a 20 20 20 20 70 54 61 62 20 3d  pTab;.    pTab =
c510: 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c   sqlite3FindTabl
c520: 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44  e(db, zRight, zD
c530: 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62  b);.    if( pTab
c540: 20 29 7b 0a 20 20 20 20 20 20 69 6e 74 20 69 2c   ){.      int i,
c550: 20 6b 3b 0a 20 20 20 20 20 20 69 6e 74 20 6e 48   k;.      int nH
c560: 69 64 64 65 6e 20 3d 20 30 3b 0a 20 20 20 20 20  idden = 0;.     
c570: 20 43 6f 6c 75 6d 6e 20 2a 70 43 6f 6c 3b 0a 20   Column *pCol;. 
c580: 20 20 20 20 20 49 6e 64 65 78 20 2a 70 50 6b 20       Index *pPk 
c590: 3d 20 73 71 6c 69 74 65 33 50 72 69 6d 61 72 79  = sqlite3Primary
c5a0: 4b 65 79 49 6e 64 65 78 28 70 54 61 62 29 3b 0a  KeyIndex(pTab);.
c5b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c5c0: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 36  eSetNumCols(v, 6
c5d0: 29 3b 0a 20 20 20 20 20 20 70 50 61 72 73 65 2d  );.      pParse-
c5e0: 3e 6e 4d 65 6d 20 3d 20 36 3b 0a 20 20 20 20 20  >nMem = 6;.     
c5f0: 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
c600: 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c  fySchema(pParse,
c610: 20 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c   iDb);.      sql
c620: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
c630: 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45  me(v, 0, COLNAME
c640: 5f 4e 41 4d 45 2c 20 22 63 69 64 22 2c 20 53 51  _NAME, "cid", SQ
c650: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
c660: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
c670: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20  etColName(v, 1, 
c680: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e  COLNAME_NAME, "n
c690: 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ame", SQLITE_STA
c6a0: 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  TIC);.      sqli
c6b0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
c6c0: 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 2, COLNAME_
c6d0: 4e 41 4d 45 2c 20 22 74 79 70 65 22 2c 20 53 51  NAME, "type", SQ
c6e0: 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20  LITE_STATIC);.  
c6f0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
c700: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c 20  etColName(v, 3, 
c710: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e  COLNAME_NAME, "n
c720: 6f 74 6e 75 6c 6c 22 2c 20 53 51 4c 49 54 45 5f  otnull", SQLITE_
c730: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73  STATIC);.      s
c740: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
c750: 4e 61 6d 65 28 76 2c 20 34 2c 20 43 4f 4c 4e 41  Name(v, 4, COLNA
c760: 4d 45 5f 4e 41 4d 45 2c 20 22 64 66 6c 74 5f 76  ME_NAME, "dflt_v
c770: 61 6c 75 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  alue", SQLITE_ST
c780: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
c790: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
c7a0: 6d 65 28 76 2c 20 35 2c 20 43 4f 4c 4e 41 4d 45  me(v, 5, COLNAME
c7b0: 5f 4e 41 4d 45 2c 20 22 70 6b 22 2c 20 53 51 4c  _NAME, "pk", SQL
c7c0: 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
c7d0: 20 20 20 73 71 6c 69 74 65 33 56 69 65 77 47 65     sqlite3ViewGe
c7e0: 74 43 6f 6c 75 6d 6e 4e 61 6d 65 73 28 70 50 61  tColumnNames(pPa
c7f0: 72 73 65 2c 20 70 54 61 62 29 3b 0a 20 20 20 20  rse, pTab);.    
c800: 20 20 66 6f 72 28 69 3d 30 2c 20 70 43 6f 6c 3d    for(i=0, pCol=
c810: 70 54 61 62 2d 3e 61 43 6f 6c 3b 20 69 3c 70 54  pTab->aCol; i<pT
c820: 61 62 2d 3e 6e 43 6f 6c 3b 20 69 2b 2b 2c 20 70  ab->nCol; i++, p
c830: 43 6f 6c 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  Col++){.        
c840: 69 66 28 20 49 73 48 69 64 64 65 6e 43 6f 6c 75  if( IsHiddenColu
c850: 6d 6e 28 70 43 6f 6c 29 20 29 7b 0a 20 20 20 20  mn(pCol) ){.    
c860: 20 20 20 20 20 20 6e 48 69 64 64 65 6e 2b 2b 3b        nHidden++;
c870: 0a 20 20 20 20 20 20 20 20 20 20 63 6f 6e 74 69  .          conti
c880: 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20  nue;.        }. 
c890: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
c8a0: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
c8b0: 6e 74 65 67 65 72 2c 20 69 2d 6e 48 69 64 64 65  nteger, i-nHidde
c8c0: 6e 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73  n, 1);.        s
c8d0: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
c8e0: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
c8f0: 30 2c 20 32 2c 20 30 2c 20 70 43 6f 6c 2d 3e 7a  0, 2, 0, pCol->z
c900: 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20  Name, 0);.      
c910: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
c920: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
c930: 38 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20  8, 0, 3, 0,.    
c940: 20 20 20 20 20 20 20 70 43 6f 6c 2d 3e 7a 54 79         pCol->zTy
c950: 70 65 20 3f 20 70 43 6f 6c 2d 3e 7a 54 79 70 65  pe ? pCol->zType
c960: 20 3a 20 22 22 2c 20 30 29 3b 0a 20 20 20 20 20   : "", 0);.     
c970: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
c980: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
c990: 65 72 2c 20 28 70 43 6f 6c 2d 3e 6e 6f 74 4e 75  er, (pCol->notNu
c9a0: 6c 6c 20 3f 20 31 20 3a 20 30 29 2c 20 34 29 3b  ll ? 1 : 0), 4);
c9b0: 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 43 6f  .        if( pCo
c9c0: 6c 2d 3e 7a 44 66 6c 74 20 29 7b 0a 20 20 20 20  l->zDflt ){.    
c9d0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
c9e0: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
c9f0: 72 69 6e 67 38 2c 20 30 2c 20 35 2c 20 30 2c 20  ring8, 0, 5, 0, 
ca00: 28 63 68 61 72 2a 29 70 43 6f 6c 2d 3e 7a 44 66  (char*)pCol->zDf
ca10: 6c 74 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  lt, 0);.        
ca20: 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20  }else{.         
ca30: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ca40: 70 32 28 76 2c 20 4f 50 5f 4e 75 6c 6c 2c 20 30  p2(v, OP_Null, 0
ca50: 2c 20 35 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a  , 5);.        }.
ca60: 20 20 20 20 20 20 20 20 69 66 28 20 28 70 43 6f          if( (pCo
ca70: 6c 2d 3e 63 6f 6c 46 6c 61 67 73 20 26 20 43 4f  l->colFlags & CO
ca80: 4c 46 4c 41 47 5f 50 52 49 4d 4b 45 59 29 3d 3d  LFLAG_PRIMKEY)==
ca90: 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 6b  0 ){.          k
caa0: 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 7d 65   = 0;.        }e
cab0: 6c 73 65 20 69 66 28 20 70 50 6b 3d 3d 30 20 29  lse if( pPk==0 )
cac0: 7b 0a 20 20 20 20 20 20 20 20 20 20 6b 20 3d 20  {.          k = 
cad0: 31 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c 73 65  1;.        }else
cae0: 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f 72 28  {.          for(
caf0: 6b 3d 31 3b 20 41 4c 57 41 59 53 28 6b 3c 3d 70  k=1; ALWAYS(k<=p
cb00: 54 61 62 2d 3e 6e 43 6f 6c 29 20 26 26 20 70 50  Tab->nCol) && pP
cb10: 6b 2d 3e 61 69 43 6f 6c 75 6d 6e 5b 6b 2d 31 5d  k->aiColumn[k-1]
cb20: 21 3d 69 3b 20 6b 2b 2b 29 7b 7d 0a 20 20 20 20  !=i; k++){}.    
cb30: 20 20 20 20 20 20 69 66 28 20 28 64 62 2d 3e 66        if( (db->f
cb40: 6c 61 67 73 20 26 20 53 51 4c 49 54 45 5f 4f 74  lags & SQLITE_Ot
cb50: 61 4d 6f 64 65 29 20 26 26 20 48 61 73 52 6f 77  aMode) && HasRow
cb60: 69 64 28 70 54 61 62 29 20 29 7b 0a 20 20 20 20  id(pTab) ){.    
cb70: 20 20 20 20 20 20 20 20 6b 20 3d 20 2d 31 20 2a          k = -1 *
cb80: 20 6b 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a   k;.          }.
cb90: 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20          }.      
cba0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
cbb0: 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65  Op2(v, OP_Intege
cbc0: 72 2c 20 6b 2c 20 36 29 3b 0a 20 20 20 20 20 20  r, k, 6);.      
cbd0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
cbe0: 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
cbf0: 52 6f 77 2c 20 31 2c 20 36 29 3b 0a 20 20 20 20  Row, 1, 6);.    
cc00: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
cc10: 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50  break;..  case P
cc20: 72 61 67 54 79 70 5f 53 54 41 54 53 3a 20 7b 0a  ragTyp_STATS: {.
cc30: 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b      Index *pIdx;
cc40: 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 69  .    HashElem *i
cc50: 3b 0a 20 20 20 20 76 20 3d 20 73 71 6c 69 74 65  ;.    v = sqlite
cc60: 33 47 65 74 56 64 62 65 28 70 50 61 72 73 65 29  3GetVdbe(pParse)
cc70: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
cc80: 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 34  eSetNumCols(v, 4
cc90: 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d 3e 6e  );.    pParse->n
cca0: 4d 65 6d 20 3d 20 34 3b 0a 20 20 20 20 73 71 6c  Mem = 4;.    sql
ccb0: 69 74 65 33 43 6f 64 65 56 65 72 69 66 79 53 63  ite3CodeVerifySc
ccc0: 68 65 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62  hema(pParse, iDb
ccd0: 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
cce0: 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20  beSetColName(v, 
ccf0: 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c  0, COLNAME_NAME,
cd00: 20 22 74 61 62 6c 65 22 2c 20 53 51 4c 49 54 45   "table", SQLITE
cd10: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71  _STATIC);.    sq
cd20: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
cd30: 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d  ame(v, 1, COLNAM
cd40: 45 5f 4e 41 4d 45 2c 20 22 69 6e 64 65 78 22 2c  E_NAME, "index",
cd50: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
cd60: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
cd70: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c  SetColName(v, 2,
cd80: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
cd90: 77 69 64 74 68 22 2c 20 53 51 4c 49 54 45 5f 53  width", SQLITE_S
cda0: 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69  TATIC);.    sqli
cdb0: 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d  te3VdbeSetColNam
cdc0: 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d 45 5f  e(v, 3, COLNAME_
cdd0: 4e 41 4d 45 2c 20 22 68 65 69 67 68 74 22 2c 20  NAME, "height", 
cde0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
cdf0: 20 20 20 20 66 6f 72 28 69 3d 73 71 6c 69 74 65      for(i=sqlite
ce00: 48 61 73 68 46 69 72 73 74 28 26 70 44 62 2d 3e  HashFirst(&pDb->
ce10: 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61 73 68  pSchema->tblHash
ce20: 29 3b 20 69 3b 20 69 3d 73 71 6c 69 74 65 48 61  ); i; i=sqliteHa
ce30: 73 68 4e 65 78 74 28 69 29 29 7b 0a 20 20 20 20  shNext(i)){.    
ce40: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20    Table *pTab = 
ce50: 73 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 69  sqliteHashData(i
ce60: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
ce70: 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
ce80: 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20  _String8, 0, 1, 
ce90: 30 2c 20 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 20  0, pTab->zName, 
cea0: 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0);.      sqlite
ceb0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
cec0: 50 5f 4e 75 6c 6c 2c 20 30 2c 20 32 29 3b 0a 20  P_Null, 0, 2);. 
ced0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cee0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
cef0: 65 67 65 72 2c 0a 20 20 20 20 20 20 20 20 20 20  eger,.          
cf00: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
cf10: 20 28 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67   (int)sqlite3Log
cf20: 45 73 74 54 6f 49 6e 74 28 70 54 61 62 2d 3e 73  EstToInt(pTab->s
cf30: 7a 54 61 62 52 6f 77 29 2c 20 33 29 3b 0a 20 20  zTabRow), 3);.  
cf40: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
cf50: 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65  ddOp2(v, OP_Inte
cf60: 67 65 72 2c 20 0a 20 20 20 20 20 20 20 20 20 20  ger, .          
cf70: 28 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67 45  (int)sqlite3LogE
cf80: 73 74 54 6f 49 6e 74 28 70 54 61 62 2d 3e 6e 52  stToInt(pTab->nR
cf90: 6f 77 4c 6f 67 45 73 74 29 2c 20 34 29 3b 0a 20  owLogEst), 4);. 
cfa0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
cfb0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
cfc0: 75 6c 74 52 6f 77 2c 20 31 2c 20 34 29 3b 0a 20  ultRow, 1, 4);. 
cfd0: 20 20 20 20 20 66 6f 72 28 70 49 64 78 3d 70 54       for(pIdx=pT
cfe0: 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64 78  ab->pIndex; pIdx
cff0: 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e 65  ; pIdx=pIdx->pNe
d000: 78 74 29 7b 0a 20 20 20 20 20 20 20 20 73 71 6c  xt){.        sql
d010: 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
d020: 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
d030: 20 32 2c 20 30 2c 20 70 49 64 78 2d 3e 7a 4e 61   2, 0, pIdx->zNa
d040: 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  me, 0);.        
d050: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
d060: 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c  2(v, OP_Integer,
d070: 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  .               
d080: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 28 69                (i
d090: 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67 45 73 74  nt)sqlite3LogEst
d0a0: 54 6f 49 6e 74 28 70 49 64 78 2d 3e 73 7a 49 64  ToInt(pIdx->szId
d0b0: 78 52 6f 77 29 2c 20 33 29 3b 0a 20 20 20 20 20  xRow), 3);.     
d0c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d0d0: 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67  dOp2(v, OP_Integ
d0e0: 65 72 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20  er, .           
d0f0: 20 28 69 6e 74 29 73 71 6c 69 74 65 33 4c 6f 67   (int)sqlite3Log
d100: 45 73 74 54 6f 49 6e 74 28 70 49 64 78 2d 3e 61  EstToInt(pIdx->a
d110: 69 52 6f 77 4c 6f 67 45 73 74 5b 30 5d 29 2c 20  iRowLogEst[0]), 
d120: 34 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  4);.        sqli
d130: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
d140: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31   OP_ResultRow, 1
d150: 2c 20 34 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20  , 4);.      }.  
d160: 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b    }.  }.  break;
d170: 0a 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  ..  case PragTyp
d180: 5f 49 4e 44 45 58 5f 49 4e 46 4f 3a 20 69 66 28  _INDEX_INFO: if(
d190: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 49   zRight ){.    I
d1a0: 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20  ndex *pIdx;.    
d1b0: 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20  Table *pTab;.   
d1c0: 20 70 49 64 78 20 3d 20 73 71 6c 69 74 65 33 46   pIdx = sqlite3F
d1d0: 69 6e 64 49 6e 64 65 78 28 64 62 2c 20 7a 52 69  indIndex(db, zRi
d1e0: 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 69  ght, zDb);.    i
d1f0: 66 28 20 70 49 64 78 20 29 7b 0a 20 20 20 20 20  f( pIdx ){.     
d200: 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 70 54   int i;.      pT
d210: 61 62 20 3d 20 70 49 64 78 2d 3e 70 54 61 62 6c  ab = pIdx->pTabl
d220: 65 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  e;.      sqlite3
d230: 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76  VdbeSetNumCols(v
d240: 2c 20 33 29 3b 0a 20 20 20 20 20 20 70 50 61 72  , 3);.      pPar
d250: 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20  se->nMem = 3;.  
d260: 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56      sqlite3CodeV
d270: 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72  erifySchema(pPar
d280: 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  se, iDb);.      
d290: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
d2a0: 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e  lName(v, 0, COLN
d2b0: 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 6e 6f  AME_NAME, "seqno
d2c0: 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43  ", SQLITE_STATIC
d2d0: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
d2e0: 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
d2f0: 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 1, COLNAME_NAM
d300: 45 2c 20 22 63 69 64 22 2c 20 53 51 4c 49 54 45  E, "cid", SQLITE
d310: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20  _STATIC);.      
d320: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
d330: 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e  lName(v, 2, COLN
d340: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e 61 6d 65 22  AME_NAME, "name"
d350: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
d360: 3b 0a 20 20 20 20 20 20 66 6f 72 28 69 3d 30 3b  ;.      for(i=0;
d370: 20 69 3c 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c   i<pIdx->nKeyCol
d380: 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20  ; i++){.        
d390: 69 31 36 20 63 6e 75 6d 20 3d 20 70 49 64 78 2d  i16 cnum = pIdx-
d3a0: 3e 61 69 43 6f 6c 75 6d 6e 5b 69 5d 3b 0a 20 20  >aiColumn[i];.  
d3b0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d3c0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
d3d0: 74 65 67 65 72 2c 20 69 2c 20 31 29 3b 0a 20 20  teger, i, 1);.  
d3e0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
d3f0: 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e  eAddOp2(v, OP_In
d400: 74 65 67 65 72 2c 20 63 6e 75 6d 2c 20 32 29 3b  teger, cnum, 2);
d410: 0a 20 20 20 20 20 20 20 20 61 73 73 65 72 74 28  .        assert(
d420: 20 70 54 61 62 2d 3e 6e 43 6f 6c 3e 63 6e 75 6d   pTab->nCol>cnum
d430: 20 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69   );.        sqli
d440: 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
d450: 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
d460: 33 2c 20 30 2c 20 70 54 61 62 2d 3e 61 43 6f 6c  3, 0, pTab->aCol
d470: 5b 63 6e 75 6d 5d 2e 7a 4e 61 6d 65 2c 20 30 29  [cnum].zName, 0)
d480: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
d490: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
d4a0: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
d4b0: 33 29 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20  3);.      }.    
d4c0: 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a  }.  }.  break;..
d4d0: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 49    case PragTyp_I
d4e0: 4e 44 45 58 5f 4c 49 53 54 3a 20 69 66 28 20 7a  NDEX_LIST: if( z
d4f0: 52 69 67 68 74 20 29 7b 0a 20 20 20 20 49 6e 64  Right ){.    Ind
d500: 65 78 20 2a 70 49 64 78 3b 0a 20 20 20 20 54 61  ex *pIdx;.    Ta
d510: 62 6c 65 20 2a 70 54 61 62 3b 0a 20 20 20 20 69  ble *pTab;.    i
d520: 6e 74 20 69 3b 0a 20 20 20 20 70 54 61 62 20 3d  nt i;.    pTab =
d530: 20 73 71 6c 69 74 65 33 46 69 6e 64 54 61 62 6c   sqlite3FindTabl
d540: 65 28 64 62 2c 20 7a 52 69 67 68 74 2c 20 7a 44  e(db, zRight, zD
d550: 62 29 3b 0a 20 20 20 20 69 66 28 20 70 54 61 62  b);.    if( pTab
d560: 20 29 7b 0a 20 20 20 20 20 20 76 20 3d 20 73 71   ){.      v = sq
d570: 6c 69 74 65 33 47 65 74 56 64 62 65 28 70 50 61  lite3GetVdbe(pPa
d580: 72 73 65 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  rse);.      sqli
d590: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
d5a0: 73 28 76 2c 20 33 29 3b 0a 20 20 20 20 20 20 70  s(v, 3);.      p
d5b0: 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b  Parse->nMem = 3;
d5c0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 43 6f  .      sqlite3Co
d5d0: 64 65 56 65 72 69 66 79 53 63 68 65 6d 61 28 70  deVerifySchema(p
d5e0: 50 61 72 73 65 2c 20 69 44 62 29 3b 0a 20 20 20  Parse, iDb);.   
d5f0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
d600: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
d610: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65  OLNAME_NAME, "se
d620: 71 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  q", SQLITE_STATI
d630: 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  C);.      sqlite
d640: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
d650: 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 1, COLNAME_NA
d660: 4d 45 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49  ME, "name", SQLI
d670: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
d680: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
d690: 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f  ColName(v, 2, CO
d6a0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 75 6e 69  LNAME_NAME, "uni
d6b0: 71 75 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  que", SQLITE_STA
d6c0: 54 49 43 29 3b 0a 20 20 20 20 20 20 66 6f 72 28  TIC);.      for(
d6d0: 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65  pIdx=pTab->pInde
d6e0: 78 2c 20 69 3d 30 3b 20 70 49 64 78 3b 20 70 49  x, i=0; pIdx; pI
d6f0: 64 78 3d 70 49 64 78 2d 3e 70 4e 65 78 74 2c 20  dx=pIdx->pNext, 
d700: 69 2b 2b 29 7b 0a 20 20 20 20 20 20 20 20 73 71  i++){.        sq
d710: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
d720: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69  v, OP_Integer, i
d730: 2c 20 31 29 3b 0a 20 20 20 20 20 20 20 20 73 71  , 1);.        sq
d740: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28  lite3VdbeAddOp4(
d750: 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30  v, OP_String8, 0
d760: 2c 20 32 2c 20 30 2c 20 70 49 64 78 2d 3e 7a 4e  , 2, 0, pIdx->zN
d770: 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  ame, 0);.       
d780: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
d790: 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
d7a0: 2c 20 49 73 55 6e 69 71 75 65 49 6e 64 65 78 28  , IsUniqueIndex(
d7b0: 70 49 64 78 29 2c 20 33 29 3b 0a 20 20 20 20 20  pIdx), 3);.     
d7c0: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
d7d0: 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c  dOp2(v, OP_Resul
d7e0: 74 52 6f 77 2c 20 31 2c 20 33 29 3b 0a 20 20 20  tRow, 1, 3);.   
d7f0: 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20     }.    }.  }. 
d800: 20 62 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20   break;..  case 
d810: 50 72 61 67 54 79 70 5f 44 41 54 41 42 41 53 45  PragTyp_DATABASE
d820: 5f 4c 49 53 54 3a 20 7b 0a 20 20 20 20 69 6e 74  _LIST: {.    int
d830: 20 69 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   i;.    sqlite3V
d840: 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
d850: 20 33 29 3b 0a 20 20 20 20 70 50 61 72 73 65 2d   3);.    pParse-
d860: 3e 6e 4d 65 6d 20 3d 20 33 3b 0a 20 20 20 20 73  >nMem = 3;.    s
d870: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
d880: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
d890: 4d 45 5f 4e 41 4d 45 2c 20 22 73 65 71 22 2c 20  ME_NAME, "seq", 
d8a0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
d8b0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
d8c0: 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31 2c 20  etColName(v, 1, 
d8d0: 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 6e  COLNAME_NAME, "n
d8e0: 61 6d 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ame", SQLITE_STA
d8f0: 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65  TIC);.    sqlite
d900: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
d910: 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 2, COLNAME_NA
d920: 4d 45 2c 20 22 66 69 6c 65 22 2c 20 53 51 4c 49  ME, "file", SQLI
d930: 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
d940: 66 6f 72 28 69 3d 30 3b 20 69 3c 64 62 2d 3e 6e  for(i=0; i<db->n
d950: 44 62 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20 20  Db; i++){.      
d960: 69 66 28 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 70  if( db->aDb[i].p
d970: 42 74 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65  Bt==0 ) continue
d980: 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28 20  ;.      assert( 
d990: 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65  db->aDb[i].zName
d9a0: 21 3d 30 20 29 3b 0a 20 20 20 20 20 20 73 71 6c  !=0 );.      sql
d9b0: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
d9c0: 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c  , OP_Integer, i,
d9d0: 20 31 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74   1);.      sqlit
d9e0: 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
d9f0: 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32  OP_String8, 0, 2
da00: 2c 20 30 2c 20 64 62 2d 3e 61 44 62 5b 69 5d 2e  , 0, db->aDb[i].
da10: 7a 4e 61 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20  zName, 0);.     
da20: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
da30: 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38  p4(v, OP_String8
da40: 2c 20 30 2c 20 33 2c 20 30 2c 0a 20 20 20 20 20  , 0, 3, 0,.     
da50: 20 20 20 20 20 20 73 71 6c 69 74 65 33 42 74 72        sqlite3Btr
da60: 65 65 47 65 74 46 69 6c 65 6e 61 6d 65 28 64 62  eeGetFilename(db
da70: 2d 3e 61 44 62 5b 69 5d 2e 70 42 74 29 2c 20 30  ->aDb[i].pBt), 0
da80: 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
da90: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
daa0: 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33  _ResultRow, 1, 3
dab0: 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62  );.    }.  }.  b
dac0: 72 65 61 6b 3b 0a 0a 20 20 63 61 73 65 20 50 72  reak;..  case Pr
dad0: 61 67 54 79 70 5f 43 4f 4c 4c 41 54 49 4f 4e 5f  agTyp_COLLATION_
dae0: 4c 49 53 54 3a 20 7b 0a 20 20 20 20 69 6e 74 20  LIST: {.    int 
daf0: 69 20 3d 20 30 3b 0a 20 20 20 20 48 61 73 68 45  i = 0;.    HashE
db00: 6c 65 6d 20 2a 70 3b 0a 20 20 20 20 73 71 6c 69  lem *p;.    sqli
db10: 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c  te3VdbeSetNumCol
db20: 73 28 76 2c 20 32 29 3b 0a 20 20 20 20 70 50 61  s(v, 2);.    pPa
db30: 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32 3b 0a 20  rse->nMem = 2;. 
db40: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
db50: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
db60: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 65  OLNAME_NAME, "se
db70: 71 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  q", SQLITE_STATI
db80: 43 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  C);.    sqlite3V
db90: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
dba0: 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   1, COLNAME_NAME
dbb0: 2c 20 22 6e 61 6d 65 22 2c 20 53 51 4c 49 54 45  , "name", SQLITE
dbc0: 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 66 6f  _STATIC);.    fo
dbd0: 72 28 70 3d 73 71 6c 69 74 65 48 61 73 68 46 69  r(p=sqliteHashFi
dbe0: 72 73 74 28 26 64 62 2d 3e 61 43 6f 6c 6c 53 65  rst(&db->aCollSe
dbf0: 71 29 3b 20 70 3b 20 70 3d 73 71 6c 69 74 65 48  q); p; p=sqliteH
dc00: 61 73 68 4e 65 78 74 28 70 29 29 7b 0a 20 20 20  ashNext(p)){.   
dc10: 20 20 20 43 6f 6c 6c 53 65 71 20 2a 70 43 6f 6c     CollSeq *pCol
dc20: 6c 20 3d 20 28 43 6f 6c 6c 53 65 71 20 2a 29 73  l = (CollSeq *)s
dc30: 71 6c 69 74 65 48 61 73 68 44 61 74 61 28 70 29  qliteHashData(p)
dc40: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
dc50: 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
dc60: 49 6e 74 65 67 65 72 2c 20 69 2b 2b 2c 20 31 29  Integer, i++, 1)
dc70: 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56  ;.      sqlite3V
dc80: 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f  dbeAddOp4(v, OP_
dc90: 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20 30  String8, 0, 2, 0
dca0: 2c 20 70 43 6f 6c 6c 2d 3e 7a 4e 61 6d 65 2c 20  , pColl->zName, 
dcb0: 30 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  0);.      sqlite
dcc0: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
dcd0: 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20  P_ResultRow, 1, 
dce0: 32 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20  2);.    }.  }.  
dcf0: 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a  break;.#endif /*
dd00: 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48   SQLITE_OMIT_SCH
dd10: 45 4d 41 5f 50 52 41 47 4d 41 53 20 2a 2f 0a 0a  EMA_PRAGMAS */..
dd20: 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f  #ifndef SQLITE_O
dd30: 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 0a  MIT_FOREIGN_KEY.
dd40: 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 46    case PragTyp_F
dd50: 4f 52 45 49 47 4e 5f 4b 45 59 5f 4c 49 53 54 3a  OREIGN_KEY_LIST:
dd60: 20 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20   if( zRight ){. 
dd70: 20 20 20 46 4b 65 79 20 2a 70 46 4b 3b 0a 20 20     FKey *pFK;.  
dd80: 20 20 54 61 62 6c 65 20 2a 70 54 61 62 3b 0a 20    Table *pTab;. 
dd90: 20 20 20 70 54 61 62 20 3d 20 73 71 6c 69 74 65     pTab = sqlite
dda0: 33 46 69 6e 64 54 61 62 6c 65 28 64 62 2c 20 7a  3FindTable(db, z
ddb0: 52 69 67 68 74 2c 20 7a 44 62 29 3b 0a 20 20 20  Right, zDb);.   
ddc0: 20 69 66 28 20 70 54 61 62 20 29 7b 0a 20 20 20   if( pTab ){.   
ddd0: 20 20 20 76 20 3d 20 73 71 6c 69 74 65 33 47 65     v = sqlite3Ge
dde0: 74 56 64 62 65 28 70 50 61 72 73 65 29 3b 0a 20  tVdbe(pParse);. 
ddf0: 20 20 20 20 20 70 46 4b 20 3d 20 70 54 61 62 2d       pFK = pTab-
de00: 3e 70 46 4b 65 79 3b 0a 20 20 20 20 20 20 69 66  >pFKey;.      if
de10: 28 20 70 46 4b 20 29 7b 0a 20 20 20 20 20 20 20  ( pFK ){.       
de20: 20 69 6e 74 20 69 20 3d 20 30 3b 20 0a 20 20 20   int i = 0; .   
de30: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
de40: 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 38 29  SetNumCols(v, 8)
de50: 3b 0a 20 20 20 20 20 20 20 20 70 50 61 72 73 65  ;.        pParse
de60: 2d 3e 6e 4d 65 6d 20 3d 20 38 3b 0a 20 20 20 20  ->nMem = 8;.    
de70: 20 20 20 20 73 71 6c 69 74 65 33 43 6f 64 65 56      sqlite3CodeV
de80: 65 72 69 66 79 53 63 68 65 6d 61 28 70 50 61 72  erifySchema(pPar
de90: 73 65 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20  se, iDb);.      
dea0: 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74    sqlite3VdbeSet
deb0: 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f  ColName(v, 0, CO
dec0: 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 69 64 22  LNAME_NAME, "id"
ded0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
dee0: 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
def0: 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28  3VdbeSetColName(
df00: 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41  v, 1, COLNAME_NA
df10: 4d 45 2c 20 22 73 65 71 22 2c 20 53 51 4c 49 54  ME, "seq", SQLIT
df20: 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20 20  E_STATIC);.     
df30: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
df40: 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43  tColName(v, 2, C
df50: 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 74 61  OLNAME_NAME, "ta
df60: 62 6c 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ble", SQLITE_STA
df70: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71  TIC);.        sq
df80: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
df90: 61 6d 65 28 76 2c 20 33 2c 20 43 4f 4c 4e 41 4d  ame(v, 3, COLNAM
dfa0: 45 5f 4e 41 4d 45 2c 20 22 66 72 6f 6d 22 2c 20  E_NAME, "from", 
dfb0: 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a  SQLITE_STATIC);.
dfc0: 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
dfd0: 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c  dbeSetColName(v,
dfe0: 20 34 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45   4, COLNAME_NAME
dff0: 2c 20 22 74 6f 22 2c 20 53 51 4c 49 54 45 5f 53  , "to", SQLITE_S
e000: 54 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20  TATIC);.        
e010: 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
e020: 6c 4e 61 6d 65 28 76 2c 20 35 2c 20 43 4f 4c 4e  lName(v, 5, COLN
e030: 41 4d 45 5f 4e 41 4d 45 2c 20 22 6f 6e 5f 75 70  AME_NAME, "on_up
e040: 64 61 74 65 22 2c 20 53 51 4c 49 54 45 5f 53 54  date", SQLITE_ST
e050: 41 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73  ATIC);.        s
e060: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
e070: 4e 61 6d 65 28 76 2c 20 36 2c 20 43 4f 4c 4e 41  Name(v, 6, COLNA
e080: 4d 45 5f 4e 41 4d 45 2c 20 22 6f 6e 5f 64 65 6c  ME_NAME, "on_del
e090: 65 74 65 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  ete", SQLITE_STA
e0a0: 54 49 43 29 3b 0a 20 20 20 20 20 20 20 20 73 71  TIC);.        sq
e0b0: 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e  lite3VdbeSetColN
e0c0: 61 6d 65 28 76 2c 20 37 2c 20 43 4f 4c 4e 41 4d  ame(v, 7, COLNAM
e0d0: 45 5f 4e 41 4d 45 2c 20 22 6d 61 74 63 68 22 2c  E_NAME, "match",
e0e0: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
e0f0: 0a 20 20 20 20 20 20 20 20 77 68 69 6c 65 28 70  .        while(p
e100: 46 4b 29 7b 0a 20 20 20 20 20 20 20 20 20 20 69  FK){.          i
e110: 6e 74 20 6a 3b 0a 20 20 20 20 20 20 20 20 20 20  nt j;.          
e120: 66 6f 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e  for(j=0; j<pFK->
e130: 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20  nCol; j++){.    
e140: 20 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 43          char *zC
e150: 6f 6c 20 3d 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a  ol = pFK->aCol[j
e160: 5d 2e 7a 43 6f 6c 3b 0a 20 20 20 20 20 20 20 20  ].zCol;.        
e170: 20 20 20 20 63 68 61 72 20 2a 7a 4f 6e 44 65 6c      char *zOnDel
e180: 65 74 65 20 3d 20 28 63 68 61 72 20 2a 29 61 63  ete = (char *)ac
e190: 74 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d 3e 61 41  tionName(pFK->aA
e1a0: 63 74 69 6f 6e 5b 30 5d 29 3b 0a 20 20 20 20 20  ction[0]);.     
e1b0: 20 20 20 20 20 20 20 63 68 61 72 20 2a 7a 4f 6e         char *zOn
e1c0: 55 70 64 61 74 65 20 3d 20 28 63 68 61 72 20 2a  Update = (char *
e1d0: 29 61 63 74 69 6f 6e 4e 61 6d 65 28 70 46 4b 2d  )actionName(pFK-
e1e0: 3e 61 41 63 74 69 6f 6e 5b 31 5d 29 3b 0a 20 20  >aAction[1]);.  
e1f0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
e200: 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
e210: 50 5f 49 6e 74 65 67 65 72 2c 20 69 2c 20 31 29  P_Integer, i, 1)
e220: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
e230: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
e240: 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6a  v, OP_Integer, j
e250: 2c 20 32 29 3b 0a 20 20 20 20 20 20 20 20 20 20  , 2);.          
e260: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
e270: 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
e280: 38 2c 20 30 2c 20 33 2c 20 30 2c 20 70 46 4b 2d  8, 0, 3, 0, pFK-
e290: 3e 7a 54 6f 2c 20 30 29 3b 0a 20 20 20 20 20 20  >zTo, 0);.      
e2a0: 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
e2b0: 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74  eAddOp4(v, OP_St
e2c0: 72 69 6e 67 38 2c 20 30 2c 20 34 2c 20 30 2c 0a  ring8, 0, 4, 0,.
e2d0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
e2e0: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 54                pT
e2f0: 61 62 2d 3e 61 43 6f 6c 5b 70 46 4b 2d 3e 61 43  ab->aCol[pFK->aC
e300: 6f 6c 5b 6a 5d 2e 69 46 72 6f 6d 5d 2e 7a 4e 61  ol[j].iFrom].zNa
e310: 6d 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 20 20  me, 0);.        
e320: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41      sqlite3VdbeA
e330: 64 64 4f 70 34 28 76 2c 20 7a 43 6f 6c 20 3f 20  ddOp4(v, zCol ? 
e340: 4f 50 5f 53 74 72 69 6e 67 38 20 3a 20 4f 50 5f  OP_String8 : OP_
e350: 4e 75 6c 6c 2c 20 30 2c 20 35 2c 20 30 2c 20 7a  Null, 0, 5, 0, z
e360: 43 6f 6c 2c 20 30 29 3b 0a 20 20 20 20 20 20 20  Col, 0);.       
e370: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
e380: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
e390: 69 6e 67 38 2c 20 30 2c 20 36 2c 20 30 2c 20 7a  ing8, 0, 6, 0, z
e3a0: 4f 6e 55 70 64 61 74 65 2c 20 30 29 3b 0a 20 20  OnUpdate, 0);.  
e3b0: 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
e3c0: 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
e3d0: 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 37 2c  P_String8, 0, 7,
e3e0: 20 30 2c 20 7a 4f 6e 44 65 6c 65 74 65 2c 20 30   0, zOnDelete, 0
e3f0: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
e400: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
e410: 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20  (v, OP_String8, 
e420: 30 2c 20 38 2c 20 30 2c 20 22 4e 4f 4e 45 22 2c  0, 8, 0, "NONE",
e430: 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20   0);.           
e440: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
e450: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
e460: 6f 77 2c 20 31 2c 20 38 29 3b 0a 20 20 20 20 20  ow, 1, 8);.     
e470: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20       }.         
e480: 20 2b 2b 69 3b 0a 20 20 20 20 20 20 20 20 20 20   ++i;.          
e490: 70 46 4b 20 3d 20 70 46 4b 2d 3e 70 4e 65 78 74  pFK = pFK->pNext
e4a0: 46 72 6f 6d 3b 0a 20 20 20 20 20 20 20 20 7d 0a  From;.        }.
e4b0: 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
e4c0: 7d 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69  }.  break;.#endi
e4d0: 66 20 2f 2a 20 21 64 65 66 69 6e 65 64 28 53 51  f /* !defined(SQ
e4e0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52 45 49 47  LITE_OMIT_FOREIG
e4f0: 4e 5f 4b 45 59 29 20 2a 2f 0a 0a 23 69 66 6e 64  N_KEY) */..#ifnd
e500: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ef SQLITE_OMIT_F
e510: 4f 52 45 49 47 4e 5f 4b 45 59 0a 23 69 66 6e 64  OREIGN_KEY.#ifnd
e520: 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 54  ef SQLITE_OMIT_T
e530: 52 49 47 47 45 52 0a 20 20 63 61 73 65 20 50 72  RIGGER.  case Pr
e540: 61 67 54 79 70 5f 46 4f 52 45 49 47 4e 5f 4b 45  agTyp_FOREIGN_KE
e550: 59 5f 43 48 45 43 4b 3a 20 7b 0a 20 20 20 20 46  Y_CHECK: {.    F
e560: 4b 65 79 20 2a 70 46 4b 3b 20 20 20 20 20 20 20  Key *pFK;       
e570: 20 20 20 20 20 20 2f 2a 20 41 20 66 6f 72 65 69        /* A forei
e580: 67 6e 20 6b 65 79 20 63 6f 6e 73 74 72 61 69 6e  gn key constrain
e590: 74 20 2a 2f 0a 20 20 20 20 54 61 62 6c 65 20 2a  t */.    Table *
e5a0: 70 54 61 62 3b 20 20 20 20 20 20 20 20 20 20 20  pTab;           
e5b0: 2f 2a 20 43 68 69 6c 64 20 74 61 62 6c 65 20 63  /* Child table c
e5c0: 6f 6e 74 61 69 6e 20 22 52 45 46 45 52 45 4e 43  ontain "REFERENC
e5d0: 45 53 22 20 6b 65 79 77 6f 72 64 20 2a 2f 0a 20  ES" keyword */. 
e5e0: 20 20 20 54 61 62 6c 65 20 2a 70 50 61 72 65 6e     Table *pParen
e5f0: 74 3b 20 20 20 20 20 20 20 20 2f 2a 20 50 61 72  t;        /* Par
e600: 65 6e 74 20 74 61 62 6c 65 20 74 68 61 74 20 63  ent table that c
e610: 68 69 6c 64 20 70 6f 69 6e 74 73 20 74 6f 20 2a  hild points to *
e620: 2f 0a 20 20 20 20 49 6e 64 65 78 20 2a 70 49 64  /.    Index *pId
e630: 78 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  x;           /* 
e640: 49 6e 64 65 78 20 69 6e 20 74 68 65 20 70 61 72  Index in the par
e650: 65 6e 74 20 74 61 62 6c 65 20 2a 2f 0a 20 20 20  ent table */.   
e660: 20 69 6e 74 20 69 3b 20 20 20 20 20 20 20 20 20   int i;         
e670: 20 20 20 20 20 20 20 20 2f 2a 20 4c 6f 6f 70 20          /* Loop 
e680: 63 6f 75 6e 74 65 72 3a 20 20 46 6f 72 65 69 67  counter:  Foreig
e690: 6e 20 6b 65 79 20 6e 75 6d 62 65 72 20 66 6f 72  n key number for
e6a0: 20 70 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74   pTab */.    int
e6b0: 20 6a 3b 20 20 20 20 20 20 20 20 20 20 20 20 20   j;             
e6c0: 20 20 20 20 2f 2a 20 4c 6f 6f 70 20 63 6f 75 6e      /* Loop coun
e6d0: 74 65 72 3a 20 20 46 69 65 6c 64 20 6f 66 20 74  ter:  Field of t
e6e0: 68 65 20 66 6f 72 65 69 67 6e 20 6b 65 79 20 2a  he foreign key *
e6f0: 2f 0a 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a  /.    HashElem *
e700: 6b 3b 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20  k;           /* 
e710: 4c 6f 6f 70 20 63 6f 75 6e 74 65 72 3a 20 20 4e  Loop counter:  N
e720: 65 78 74 20 74 61 62 6c 65 20 69 6e 20 73 63 68  ext table in sch
e730: 65 6d 61 20 2a 2f 0a 20 20 20 20 69 6e 74 20 78  ema */.    int x
e740: 3b 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ;               
e750: 20 20 2f 2a 20 72 65 73 75 6c 74 20 76 61 72 69    /* result vari
e760: 61 62 6c 65 20 2a 2f 0a 20 20 20 20 69 6e 74 20  able */.    int 
e770: 72 65 67 52 65 73 75 6c 74 3b 20 20 20 20 20 20  regResult;      
e780: 20 20 20 2f 2a 20 33 20 72 65 67 69 73 74 65 72     /* 3 register
e790: 73 20 74 6f 20 68 6f 6c 64 20 61 20 72 65 73 75  s to hold a resu
e7a0: 6c 74 20 72 6f 77 20 2a 2f 0a 20 20 20 20 69 6e  lt row */.    in
e7b0: 74 20 72 65 67 4b 65 79 3b 20 20 20 20 20 20 20  t regKey;       
e7c0: 20 20 20 20 20 2f 2a 20 52 65 67 69 73 74 65 72       /* Register
e7d0: 20 74 6f 20 68 6f 6c 64 20 6b 65 79 20 66 6f 72   to hold key for
e7e0: 20 63 68 65 63 6b 69 6e 67 20 74 68 65 20 46 4b   checking the FK
e7f0: 20 2a 2f 0a 20 20 20 20 69 6e 74 20 72 65 67 52   */.    int regR
e800: 6f 77 3b 20 20 20 20 20 20 20 20 20 20 20 20 2f  ow;            /
e810: 2a 20 52 65 67 69 73 74 65 72 73 20 74 6f 20 68  * Registers to h
e820: 6f 6c 64 20 61 20 72 6f 77 20 66 72 6f 6d 20 70  old a row from p
e830: 54 61 62 20 2a 2f 0a 20 20 20 20 69 6e 74 20 61  Tab */.    int a
e840: 64 64 72 54 6f 70 3b 20 20 20 20 20 20 20 20 20  ddrTop;         
e850: 20 20 2f 2a 20 54 6f 70 20 6f 66 20 61 20 6c 6f    /* Top of a lo
e860: 6f 70 20 63 68 65 63 6b 69 6e 67 20 66 6f 72 65  op checking fore
e870: 69 67 6e 20 6b 65 79 73 20 2a 2f 0a 20 20 20 20  ign keys */.    
e880: 69 6e 74 20 61 64 64 72 4f 6b 3b 20 20 20 20 20  int addrOk;     
e890: 20 20 20 20 20 20 20 2f 2a 20 4a 75 6d 70 20 68         /* Jump h
e8a0: 65 72 65 20 69 66 20 74 68 65 20 6b 65 79 20 69  ere if the key i
e8b0: 73 20 4f 4b 20 2a 2f 0a 20 20 20 20 69 6e 74 20  s OK */.    int 
e8c0: 2a 61 69 43 6f 6c 73 3b 20 20 20 20 20 20 20 20  *aiCols;        
e8d0: 20 20 20 2f 2a 20 63 68 69 6c 64 20 74 6f 20 70     /* child to p
e8e0: 61 72 65 6e 74 20 63 6f 6c 75 6d 6e 20 6d 61 70  arent column map
e8f0: 70 69 6e 67 20 2a 2f 0a 0a 20 20 20 20 72 65 67  ping */..    reg
e900: 52 65 73 75 6c 74 20 3d 20 70 50 61 72 73 65 2d  Result = pParse-
e910: 3e 6e 4d 65 6d 2b 31 3b 0a 20 20 20 20 70 50 61  >nMem+1;.    pPa
e920: 72 73 65 2d 3e 6e 4d 65 6d 20 2b 3d 20 34 3b 0a  rse->nMem += 4;.
e930: 20 20 20 20 72 65 67 4b 65 79 20 3d 20 2b 2b 70      regKey = ++p
e940: 50 61 72 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20  Parse->nMem;.   
e950: 20 72 65 67 52 6f 77 20 3d 20 2b 2b 70 50 61 72   regRow = ++pPar
e960: 73 65 2d 3e 6e 4d 65 6d 3b 0a 20 20 20 20 76 20  se->nMem;.    v 
e970: 3d 20 73 71 6c 69 74 65 33 47 65 74 56 64 62 65  = sqlite3GetVdbe
e980: 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20 73 71  (pParse);.    sq
e990: 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
e9a0: 6f 6c 73 28 76 2c 20 34 29 3b 0a 20 20 20 20 73  ols(v, 4);.    s
e9b0: 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c  qlite3VdbeSetCol
e9c0: 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c 4e 41  Name(v, 0, COLNA
e9d0: 4d 45 5f 4e 41 4d 45 2c 20 22 74 61 62 6c 65 22  ME_NAME, "table"
e9e0: 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29  , SQLITE_STATIC)
e9f0: 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
ea00: 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 31  eSetColName(v, 1
ea10: 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
ea20: 22 72 6f 77 69 64 22 2c 20 53 51 4c 49 54 45 5f  "rowid", SQLITE_
ea30: 53 54 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c  STATIC);.    sql
ea40: 69 74 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61  ite3VdbeSetColNa
ea50: 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e 41 4d 45  me(v, 2, COLNAME
ea60: 5f 4e 41 4d 45 2c 20 22 70 61 72 65 6e 74 22 2c  _NAME, "parent",
ea70: 20 53 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b   SQLITE_STATIC);
ea80: 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
ea90: 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 33 2c  SetColName(v, 3,
eaa0: 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
eab0: 66 6b 69 64 22 2c 20 53 51 4c 49 54 45 5f 53 54  fkid", SQLITE_ST
eac0: 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
ead0: 65 33 43 6f 64 65 56 65 72 69 66 79 53 63 68 65  e3CodeVerifySche
eae0: 6d 61 28 70 50 61 72 73 65 2c 20 69 44 62 29 3b  ma(pParse, iDb);
eaf0: 0a 20 20 20 20 6b 20 3d 20 73 71 6c 69 74 65 48  .    k = sqliteH
eb00: 61 73 68 46 69 72 73 74 28 26 64 62 2d 3e 61 44  ashFirst(&db->aD
eb10: 62 5b 69 44 62 5d 2e 70 53 63 68 65 6d 61 2d 3e  b[iDb].pSchema->
eb20: 74 62 6c 48 61 73 68 29 3b 0a 20 20 20 20 77 68  tblHash);.    wh
eb30: 69 6c 65 28 20 6b 20 29 7b 0a 20 20 20 20 20 20  ile( k ){.      
eb40: 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
eb50: 20 20 20 20 20 20 70 54 61 62 20 3d 20 73 71 6c        pTab = sql
eb60: 69 74 65 33 4c 6f 63 61 74 65 54 61 62 6c 65 28  ite3LocateTable(
eb70: 70 50 61 72 73 65 2c 20 30 2c 20 7a 52 69 67 68  pParse, 0, zRigh
eb80: 74 2c 20 7a 44 62 29 3b 0a 20 20 20 20 20 20 20  t, zDb);.       
eb90: 20 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 7d 65   k = 0;.      }e
eba0: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 70 54 61  lse{.        pTa
ebb0: 62 20 3d 20 28 54 61 62 6c 65 2a 29 73 71 6c 69  b = (Table*)sqli
ebc0: 74 65 48 61 73 68 44 61 74 61 28 6b 29 3b 0a 20  teHashData(k);. 
ebd0: 20 20 20 20 20 20 20 6b 20 3d 20 73 71 6c 69 74         k = sqlit
ebe0: 65 48 61 73 68 4e 65 78 74 28 6b 29 3b 0a 20 20  eHashNext(k);.  
ebf0: 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
ec00: 70 54 61 62 3d 3d 30 20 7c 7c 20 70 54 61 62 2d  pTab==0 || pTab-
ec10: 3e 70 46 4b 65 79 3d 3d 30 20 29 20 63 6f 6e 74  >pFKey==0 ) cont
ec20: 69 6e 75 65 3b 0a 20 20 20 20 20 20 73 71 6c 69  inue;.      sqli
ec30: 74 65 33 54 61 62 6c 65 4c 6f 63 6b 28 70 50 61  te3TableLock(pPa
ec40: 72 73 65 2c 20 69 44 62 2c 20 70 54 61 62 2d 3e  rse, iDb, pTab->
ec50: 74 6e 75 6d 2c 20 30 2c 20 70 54 61 62 2d 3e 7a  tnum, 0, pTab->z
ec60: 4e 61 6d 65 29 3b 0a 20 20 20 20 20 20 69 66 28  Name);.      if(
ec70: 20 70 54 61 62 2d 3e 6e 43 6f 6c 2b 72 65 67 52   pTab->nCol+regR
ec80: 6f 77 3e 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20  ow>pParse->nMem 
ec90: 29 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d  ) pParse->nMem =
eca0: 20 70 54 61 62 2d 3e 6e 43 6f 6c 20 2b 20 72 65   pTab->nCol + re
ecb0: 67 52 6f 77 3b 0a 20 20 20 20 20 20 73 71 6c 69  gRow;.      sqli
ecc0: 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 70 50 61  te3OpenTable(pPa
ecd0: 72 73 65 2c 20 30 2c 20 69 44 62 2c 20 70 54 61  rse, 0, iDb, pTa
ece0: 62 2c 20 4f 50 5f 4f 70 65 6e 52 65 61 64 29 3b  b, OP_OpenRead);
ecf0: 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
ed00: 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
ed10: 74 72 69 6e 67 38 2c 20 30 2c 20 72 65 67 52 65  tring8, 0, regRe
ed20: 73 75 6c 74 2c 20 30 2c 20 70 54 61 62 2d 3e 7a  sult, 0, pTab->z
ed30: 4e 61 6d 65 2c 0a 20 20 20 20 20 20 20 20 20 20  Name,.          
ed40: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 50 34                P4
ed50: 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20  _TRANSIENT);.   
ed60: 20 20 20 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d     for(i=1, pFK=
ed70: 70 54 61 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b  pTab->pFKey; pFK
ed80: 3b 20 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e  ; i++, pFK=pFK->
ed90: 70 4e 65 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20  pNextFrom){.    
eda0: 20 20 20 20 70 50 61 72 65 6e 74 20 3d 20 73 71      pParent = sq
edb0: 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64  lite3FindTable(d
edc0: 62 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62  b, pFK->zTo, zDb
edd0: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 70  );.        if( p
ede0: 50 61 72 65 6e 74 3d 3d 30 20 29 20 63 6f 6e 74  Parent==0 ) cont
edf0: 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 70 49  inue;.        pI
ee00: 64 78 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20  dx = 0;.        
ee10: 73 71 6c 69 74 65 33 54 61 62 6c 65 4c 6f 63 6b  sqlite3TableLock
ee20: 28 70 50 61 72 73 65 2c 20 69 44 62 2c 20 70 50  (pParse, iDb, pP
ee30: 61 72 65 6e 74 2d 3e 74 6e 75 6d 2c 20 30 2c 20  arent->tnum, 0, 
ee40: 70 50 61 72 65 6e 74 2d 3e 7a 4e 61 6d 65 29 3b  pParent->zName);
ee50: 0a 20 20 20 20 20 20 20 20 78 20 3d 20 73 71 6c  .        x = sql
ee60: 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64 65  ite3FkLocateInde
ee70: 78 28 70 50 61 72 73 65 2c 20 70 50 61 72 65 6e  x(pParse, pParen
ee80: 74 2c 20 70 46 4b 2c 20 26 70 49 64 78 2c 20 30  t, pFK, &pIdx, 0
ee90: 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20 78  );.        if( x
eea0: 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ==0 ){.         
eeb0: 20 69 66 28 20 70 49 64 78 3d 3d 30 20 29 7b 0a   if( pIdx==0 ){.
eec0: 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
eed0: 74 65 33 4f 70 65 6e 54 61 62 6c 65 28 70 50 61  te3OpenTable(pPa
eee0: 72 73 65 2c 20 69 2c 20 69 44 62 2c 20 70 50 61  rse, i, iDb, pPa
eef0: 72 65 6e 74 2c 20 4f 50 5f 4f 70 65 6e 52 65 61  rent, OP_OpenRea
ef00: 64 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 65  d);.          }e
ef10: 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 20  lse{.           
ef20: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
ef30: 70 33 28 76 2c 20 4f 50 5f 4f 70 65 6e 52 65 61  p3(v, OP_OpenRea
ef40: 64 2c 20 69 2c 20 70 49 64 78 2d 3e 74 6e 75 6d  d, i, pIdx->tnum
ef50: 2c 20 69 44 62 29 3b 0a 20 20 20 20 20 20 20 20  , iDb);.        
ef60: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53      sqlite3VdbeS
ef70: 65 74 50 34 4b 65 79 49 6e 66 6f 28 70 50 61 72  etP4KeyInfo(pPar
ef80: 73 65 2c 20 70 49 64 78 29 3b 0a 20 20 20 20 20  se, pIdx);.     
ef90: 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 7d       }.        }
efa0: 65 6c 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20  else{.          
efb0: 6b 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 20  k = 0;.         
efc0: 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 20 20   break;.        
efd0: 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  }.      }.      
efe0: 61 73 73 65 72 74 28 20 70 50 61 72 73 65 2d 3e  assert( pParse->
eff0: 6e 45 72 72 3e 30 20 7c 7c 20 70 46 4b 3d 3d 30  nErr>0 || pFK==0
f000: 20 29 3b 0a 20 20 20 20 20 20 69 66 28 20 70 46   );.      if( pF
f010: 4b 20 29 20 62 72 65 61 6b 3b 0a 20 20 20 20 20  K ) break;.     
f020: 20 69 66 28 20 70 50 61 72 73 65 2d 3e 6e 54 61   if( pParse->nTa
f030: 62 3c 69 20 29 20 70 50 61 72 73 65 2d 3e 6e 54  b<i ) pParse->nT
f040: 61 62 20 3d 20 69 3b 0a 20 20 20 20 20 20 61 64  ab = i;.      ad
f050: 64 72 54 6f 70 20 3d 20 73 71 6c 69 74 65 33 56  drTop = sqlite3V
f060: 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f  dbeAddOp1(v, OP_
f070: 52 65 77 69 6e 64 2c 20 30 29 3b 20 56 64 62 65  Rewind, 0); Vdbe
f080: 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20  Coverage(v);.   
f090: 20 20 20 66 6f 72 28 69 3d 31 2c 20 70 46 4b 3d     for(i=1, pFK=
f0a0: 70 54 61 62 2d 3e 70 46 4b 65 79 3b 20 70 46 4b  pTab->pFKey; pFK
f0b0: 3b 20 69 2b 2b 2c 20 70 46 4b 3d 70 46 4b 2d 3e  ; i++, pFK=pFK->
f0c0: 70 4e 65 78 74 46 72 6f 6d 29 7b 0a 20 20 20 20  pNextFrom){.    
f0d0: 20 20 20 20 70 50 61 72 65 6e 74 20 3d 20 73 71      pParent = sq
f0e0: 6c 69 74 65 33 46 69 6e 64 54 61 62 6c 65 28 64  lite3FindTable(d
f0f0: 62 2c 20 70 46 4b 2d 3e 7a 54 6f 2c 20 7a 44 62  b, pFK->zTo, zDb
f100: 29 3b 0a 20 20 20 20 20 20 20 20 70 49 64 78 20  );.        pIdx 
f110: 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 61 69 43  = 0;.        aiC
f120: 6f 6c 73 20 3d 20 30 3b 0a 20 20 20 20 20 20 20  ols = 0;.       
f130: 20 69 66 28 20 70 50 61 72 65 6e 74 20 29 7b 0a   if( pParent ){.
f140: 20 20 20 20 20 20 20 20 20 20 78 20 3d 20 73 71            x = sq
f150: 6c 69 74 65 33 46 6b 4c 6f 63 61 74 65 49 6e 64  lite3FkLocateInd
f160: 65 78 28 70 50 61 72 73 65 2c 20 70 50 61 72 65  ex(pParse, pPare
f170: 6e 74 2c 20 70 46 4b 2c 20 26 70 49 64 78 2c 20  nt, pFK, &pIdx, 
f180: 26 61 69 43 6f 6c 73 29 3b 0a 20 20 20 20 20 20  &aiCols);.      
f190: 20 20 20 20 61 73 73 65 72 74 28 20 78 3d 3d 30      assert( x==0
f1a0: 20 29 3b 0a 20 20 20 20 20 20 20 20 7d 0a 20 20   );.        }.  
f1b0: 20 20 20 20 20 20 61 64 64 72 4f 6b 20 3d 20 73        addrOk = s
f1c0: 71 6c 69 74 65 33 56 64 62 65 4d 61 6b 65 4c 61  qlite3VdbeMakeLa
f1d0: 62 65 6c 28 76 29 3b 0a 20 20 20 20 20 20 20 20  bel(v);.        
f1e0: 69 66 28 20 70 50 61 72 65 6e 74 20 26 26 20 70  if( pParent && p
f1f0: 49 64 78 3d 3d 30 20 29 7b 0a 20 20 20 20 20 20  Idx==0 ){.      
f200: 20 20 20 20 69 6e 74 20 69 4b 65 79 20 3d 20 70      int iKey = p
f210: 46 4b 2d 3e 61 43 6f 6c 5b 30 5d 2e 69 46 72 6f  FK->aCol[0].iFro
f220: 6d 3b 0a 20 20 20 20 20 20 20 20 20 20 61 73 73  m;.          ass
f230: 65 72 74 28 20 69 4b 65 79 3e 3d 30 20 26 26 20  ert( iKey>=0 && 
f240: 69 4b 65 79 3c 70 54 61 62 2d 3e 6e 43 6f 6c 20  iKey<pTab->nCol 
f250: 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69 66 28  );.          if(
f260: 20 69 4b 65 79 21 3d 70 54 61 62 2d 3e 69 50 4b   iKey!=pTab->iPK
f270: 65 79 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20  ey ){.          
f280: 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
f290: 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6c 75 6d 6e  Op3(v, OP_Column
f2a0: 2c 20 30 2c 20 69 4b 65 79 2c 20 72 65 67 52 6f  , 0, iKey, regRo
f2b0: 77 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20  w);.            
f2c0: 73 71 6c 69 74 65 33 43 6f 6c 75 6d 6e 44 65 66  sqlite3ColumnDef
f2d0: 61 75 6c 74 28 76 2c 20 70 54 61 62 2c 20 69 4b  ault(v, pTab, iK
f2e0: 65 79 2c 20 72 65 67 52 6f 77 29 3b 0a 20 20 20  ey, regRow);.   
f2f0: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
f300: 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
f310: 5f 49 73 4e 75 6c 6c 2c 20 72 65 67 52 6f 77 2c  _IsNull, regRow,
f320: 20 61 64 64 72 4f 6b 29 3b 20 56 64 62 65 43 6f   addrOk); VdbeCo
f330: 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
f340: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
f350: 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 4d  beAddOp2(v, OP_M
f360: 75 73 74 42 65 49 6e 74 2c 20 72 65 67 52 6f 77  ustBeInt, regRow
f370: 2c 20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20  , .             
f380: 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 75 72    sqlite3VdbeCur
f390: 72 65 6e 74 41 64 64 72 28 76 29 2b 33 29 3b 20  rentAddr(v)+3); 
f3a0: 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
f3b0: 0a 20 20 20 20 20 20 20 20 20 20 7d 65 6c 73 65  .          }else
f3c0: 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  {.            sq
f3d0: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
f3e0: 76 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20  v, OP_Rowid, 0, 
f3f0: 72 65 67 52 6f 77 29 3b 0a 20 20 20 20 20 20 20  regRow);.       
f400: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 20 20 73     }.          s
f410: 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
f420: 28 76 2c 20 4f 50 5f 4e 6f 74 45 78 69 73 74 73  (v, OP_NotExists
f430: 2c 20 69 2c 20 30 2c 20 72 65 67 52 6f 77 29 3b  , i, 0, regRow);
f440: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
f450: 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
f460: 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
f470: 20 4f 50 5f 47 6f 74 6f 2c 20 30 2c 20 61 64 64   OP_Goto, 0, add
f480: 72 4f 6b 29 3b 0a 20 20 20 20 20 20 20 20 20 20  rOk);.          
f490: 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d 70 48  sqlite3VdbeJumpH
f4a0: 65 72 65 28 76 2c 20 73 71 6c 69 74 65 33 56 64  ere(v, sqlite3Vd
f4b0: 62 65 43 75 72 72 65 6e 74 41 64 64 72 28 76 29  beCurrentAddr(v)
f4c0: 2d 32 29 3b 0a 20 20 20 20 20 20 20 20 7d 65 6c  -2);.        }el
f4d0: 73 65 7b 0a 20 20 20 20 20 20 20 20 20 20 66 6f  se{.          fo
f4e0: 72 28 6a 3d 30 3b 20 6a 3c 70 46 4b 2d 3e 6e 43  r(j=0; j<pFK->nC
f4f0: 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20 20 20  ol; j++){.      
f500: 20 20 20 20 20 20 73 71 6c 69 74 65 33 45 78 70        sqlite3Exp
f510: 72 43 6f 64 65 47 65 74 43 6f 6c 75 6d 6e 4f 66  rCodeGetColumnOf
f520: 54 61 62 6c 65 28 76 2c 20 70 54 61 62 2c 20 30  Table(v, pTab, 0
f530: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
f540: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 61 69                ai
f550: 43 6f 6c 73 20 3f 20 61 69 43 6f 6c 73 5b 6a 5d  Cols ? aiCols[j]
f560: 20 3a 20 70 46 4b 2d 3e 61 43 6f 6c 5b 6a 5d 2e   : pFK->aCol[j].
f570: 69 46 72 6f 6d 2c 20 72 65 67 52 6f 77 2b 6a 29  iFrom, regRow+j)
f580: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71  ;.            sq
f590: 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
f5a0: 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72 65  v, OP_IsNull, re
f5b0: 67 52 6f 77 2b 6a 2c 20 61 64 64 72 4f 6b 29 3b  gRow+j, addrOk);
f5c0: 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
f5d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20  ;.          }.  
f5e0: 20 20 20 20 20 20 20 20 69 66 28 20 70 50 61 72          if( pPar
f5f0: 65 6e 74 20 29 7b 0a 20 20 20 20 20 20 20 20 20  ent ){.         
f600: 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
f610: 64 4f 70 34 28 76 2c 20 4f 50 5f 4d 61 6b 65 52  dOp4(v, OP_MakeR
f620: 65 63 6f 72 64 2c 20 72 65 67 52 6f 77 2c 20 70  ecord, regRow, p
f630: 46 4b 2d 3e 6e 43 6f 6c 2c 20 72 65 67 4b 65 79  FK->nCol, regKey
f640: 2c 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20  ,.              
f650: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f660: 73 71 6c 69 74 65 33 49 6e 64 65 78 41 66 66 69  sqlite3IndexAffi
f670: 6e 69 74 79 53 74 72 28 76 2c 70 49 64 78 29 2c  nityStr(v,pIdx),
f680: 20 70 46 4b 2d 3e 6e 43 6f 6c 29 3b 0a 20 20 20   pFK->nCol);.   
f690: 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
f6a0: 56 64 62 65 41 64 64 4f 70 34 49 6e 74 28 76 2c  VdbeAddOp4Int(v,
f6b0: 20 4f 50 5f 46 6f 75 6e 64 2c 20 69 2c 20 61 64   OP_Found, i, ad
f6c0: 64 72 4f 6b 2c 20 72 65 67 4b 65 79 2c 20 30 29  drOk, regKey, 0)
f6d0: 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 56 64  ;.            Vd
f6e0: 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
f6f0: 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20 20           }.     
f700: 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c     }.        sql
f710: 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
f720: 2c 20 4f 50 5f 52 6f 77 69 64 2c 20 30 2c 20 72  , OP_Rowid, 0, r
f730: 65 67 52 65 73 75 6c 74 2b 31 29 3b 0a 20 20 20  egResult+1);.   
f740: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
f750: 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72  AddOp4(v, OP_Str
f760: 69 6e 67 38 2c 20 30 2c 20 72 65 67 52 65 73 75  ing8, 0, regResu
f770: 6c 74 2b 32 2c 20 30 2c 20 0a 20 20 20 20 20 20  lt+2, 0, .      
f780: 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
f790: 20 20 20 20 70 46 4b 2d 3e 7a 54 6f 2c 20 50 34      pFK->zTo, P4
f7a0: 5f 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20  _TRANSIENT);.   
f7b0: 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
f7c0: 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
f7d0: 65 67 65 72 2c 20 69 2d 31 2c 20 72 65 67 52 65  eger, i-1, regRe
f7e0: 73 75 6c 74 2b 33 29 3b 0a 20 20 20 20 20 20 20  sult+3);.       
f7f0: 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
f800: 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74 52  p2(v, OP_ResultR
f810: 6f 77 2c 20 72 65 67 52 65 73 75 6c 74 2c 20 34  ow, regResult, 4
f820: 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74  );.        sqlit
f830: 65 33 56 64 62 65 52 65 73 6f 6c 76 65 4c 61 62  e3VdbeResolveLab
f840: 65 6c 28 76 2c 20 61 64 64 72 4f 6b 29 3b 0a 20  el(v, addrOk);. 
f850: 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 44 62         sqlite3Db
f860: 46 72 65 65 28 64 62 2c 20 61 69 43 6f 6c 73 29  Free(db, aiCols)
f870: 3b 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 20 20  ;.      }.      
f880: 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
f890: 32 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 30 2c  2(v, OP_Next, 0,
f8a0: 20 61 64 64 72 54 6f 70 2b 31 29 3b 20 56 64 62   addrTop+1); Vdb
f8b0: 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
f8c0: 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
f8d0: 75 6d 70 48 65 72 65 28 76 2c 20 61 64 64 72 54  umpHere(v, addrT
f8e0: 6f 70 29 3b 0a 20 20 20 20 7d 0a 20 20 7d 0a 20  op);.    }.  }. 
f8f0: 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 20 2f   break;.#endif /
f900: 2a 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54  * !defined(SQLIT
f910: 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45 52 29 20  E_OMIT_TRIGGER) 
f920: 2a 2f 0a 23 65 6e 64 69 66 20 2f 2a 20 21 64 65  */.#endif /* !de
f930: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
f940: 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59 29 20 2a  T_FOREIGN_KEY) *
f950: 2f 0a 0a 23 69 66 6e 64 65 66 20 4e 44 45 42 55  /..#ifndef NDEBU
f960: 47 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  G.  case PragTyp
f970: 5f 50 41 52 53 45 52 5f 54 52 41 43 45 3a 20 7b  _PARSER_TRACE: {
f980: 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74 20  .    if( zRight 
f990: 29 7b 0a 20 20 20 20 20 20 69 66 28 20 73 71 6c  ){.      if( sql
f9a0: 69 74 65 33 47 65 74 42 6f 6f 6c 65 61 6e 28 7a  ite3GetBoolean(z
f9b0: 52 69 67 68 74 2c 20 30 29 20 29 7b 0a 20 20 20  Right, 0) ){.   
f9c0: 20 20 20 20 20 73 71 6c 69 74 65 33 50 61 72 73       sqlite3Pars
f9d0: 65 72 54 72 61 63 65 28 73 74 64 65 72 72 2c 20  erTrace(stderr, 
f9e0: 22 70 61 72 73 65 72 3a 20 22 29 3b 0a 20 20 20  "parser: ");.   
f9f0: 20 20 20 7d 65 6c 73 65 7b 0a 20 20 20 20 20 20     }else{.      
fa00: 20 20 73 71 6c 69 74 65 33 50 61 72 73 65 72 54    sqlite3ParserT
fa10: 72 61 63 65 28 30 2c 20 30 29 3b 0a 20 20 20 20  race(0, 0);.    
fa20: 20 20 7d 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20    }.    }.  }.  
fa30: 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20  break;.#endif.. 
fa40: 20 2f 2a 20 52 65 69 6e 73 74 61 6c 6c 20 74 68   /* Reinstall th
fa50: 65 20 4c 49 4b 45 20 61 6e 64 20 47 4c 4f 42 20  e LIKE and GLOB 
fa60: 66 75 6e 63 74 69 6f 6e 73 2e 20 20 54 68 65 20  functions.  The 
fa70: 76 61 72 69 61 6e 74 20 6f 66 20 4c 49 4b 45 0a  variant of LIKE.
fa80: 20 20 2a 2a 20 75 73 65 64 20 77 69 6c 6c 20 62    ** used will b
fa90: 65 20 63 61 73 65 20 73 65 6e 73 69 74 69 76 65  e case sensitive
faa0: 20 6f 72 20 6e 6f 74 20 64 65 70 65 6e 64 69 6e   or not dependin
fab0: 67 20 6f 6e 20 74 68 65 20 52 48 53 2e 0a 20 20  g on the RHS..  
fac0: 2a 2f 0a 20 20 63 61 73 65 20 50 72 61 67 54 79  */.  case PragTy
fad0: 70 5f 43 41 53 45 5f 53 45 4e 53 49 54 49 56 45  p_CASE_SENSITIVE
fae0: 5f 4c 49 4b 45 3a 20 7b 0a 20 20 20 20 69 66 28  _LIKE: {.    if(
faf0: 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
fb00: 20 73 71 6c 69 74 65 33 52 65 67 69 73 74 65 72   sqlite3Register
fb10: 4c 69 6b 65 46 75 6e 63 74 69 6f 6e 73 28 64 62  LikeFunctions(db
fb20: 2c 20 73 71 6c 69 74 65 33 47 65 74 42 6f 6f 6c  , sqlite3GetBool
fb30: 65 61 6e 28 7a 52 69 67 68 74 2c 20 30 29 29 3b  ean(zRight, 0));
fb40: 0a 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65  .    }.  }.  bre
fb50: 61 6b 3b 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c  ak;..#ifndef SQL
fb60: 49 54 45 5f 49 4e 54 45 47 52 49 54 59 5f 43 48  ITE_INTEGRITY_CH
fb70: 45 43 4b 5f 45 52 52 4f 52 5f 4d 41 58 0a 23 20  ECK_ERROR_MAX.# 
fb80: 64 65 66 69 6e 65 20 53 51 4c 49 54 45 5f 49 4e  define SQLITE_IN
fb90: 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f 45 52  TEGRITY_CHECK_ER
fba0: 52 4f 52 5f 4d 41 58 20 31 30 30 0a 23 65 6e 64  ROR_MAX 100.#end
fbb0: 69 66 0a 0a 23 69 66 6e 64 65 66 20 53 51 4c 49  if..#ifndef SQLI
fbc0: 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
fbd0: 59 5f 43 48 45 43 4b 0a 20 20 2f 2a 20 50 72 61  Y_CHECK.  /* Pra
fbe0: 67 6d 61 20 22 71 75 69 63 6b 5f 63 68 65 63 6b  gma "quick_check
fbf0: 22 20 69 73 20 72 65 64 75 63 65 64 20 76 65 72  " is reduced ver
fc00: 73 69 6f 6e 20 6f 66 20 0a 20 20 2a 2a 20 69 6e  sion of .  ** in
fc10: 74 65 67 72 69 74 79 5f 63 68 65 63 6b 20 64 65  tegrity_check de
fc20: 73 69 67 6e 65 64 20 74 6f 20 64 65 74 65 63 74  signed to detect
fc30: 20 6d 6f 73 74 20 64 61 74 61 62 61 73 65 20 63   most database c
fc40: 6f 72 72 75 70 74 69 6f 6e 0a 20 20 2a 2a 20 77  orruption.  ** w
fc50: 69 74 68 6f 75 74 20 6d 6f 73 74 20 6f 66 20 74  ithout most of t
fc60: 68 65 20 6f 76 65 72 68 65 61 64 20 6f 66 20 61  he overhead of a
fc70: 20 66 75 6c 6c 20 69 6e 74 65 67 72 69 74 79 2d   full integrity-
fc80: 63 68 65 63 6b 2e 0a 20 20 2a 2f 0a 20 20 63 61  check..  */.  ca
fc90: 73 65 20 50 72 61 67 54 79 70 5f 49 4e 54 45 47  se PragTyp_INTEG
fca0: 52 49 54 59 5f 43 48 45 43 4b 3a 20 7b 0a 20 20  RITY_CHECK: {.  
fcb0: 20 20 69 6e 74 20 69 2c 20 6a 2c 20 61 64 64 72    int i, j, addr
fcc0: 2c 20 6d 78 45 72 72 3b 0a 0a 20 20 20 20 2f 2a  , mxErr;..    /*
fcd0: 20 43 6f 64 65 20 74 68 61 74 20 61 70 70 65 61   Code that appea
fce0: 72 73 20 61 74 20 74 68 65 20 65 6e 64 20 6f 66  rs at the end of
fcf0: 20 74 68 65 20 69 6e 74 65 67 72 69 74 79 20 63   the integrity c
fd00: 68 65 63 6b 2e 20 20 49 66 20 6e 6f 20 65 72 72  heck.  If no err
fd10: 6f 72 0a 20 20 20 20 2a 2a 20 6d 65 73 73 61 67  or.    ** messag
fd20: 65 73 20 68 61 76 65 20 62 65 65 6e 20 67 65 6e  es have been gen
fd30: 65 72 61 74 65 64 2c 20 6f 75 74 70 75 74 20 4f  erated, output O
fd40: 4b 2e 20 20 4f 74 68 65 72 77 69 73 65 20 6f 75  K.  Otherwise ou
fd50: 74 70 75 74 20 74 68 65 0a 20 20 20 20 2a 2a 20  tput the.    ** 
fd60: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 0a 20 20  error message.  
fd70: 20 20 2a 2f 0a 20 20 20 20 73 74 61 74 69 63 20    */.    static 
fd80: 63 6f 6e 73 74 20 69 6e 74 20 69 4c 6e 20 3d 20  const int iLn = 
fd90: 56 44 42 45 5f 4f 46 46 53 45 54 5f 4c 49 4e 45  VDBE_OFFSET_LINE
fda0: 4e 4f 28 32 29 3b 0a 20 20 20 20 73 74 61 74 69  NO(2);.    stati
fdb0: 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c 69  c const VdbeOpLi
fdc0: 73 74 20 65 6e 64 43 6f 64 65 5b 5d 20 3d 20 7b  st endCode[] = {
fdd0: 0a 20 20 20 20 20 20 7b 20 4f 50 5f 49 66 4e 65  .      { OP_IfNe
fde0: 67 2c 20 20 20 20 20 20 20 31 2c 20 30 2c 20 20  g,       1, 0,  
fdf0: 20 20 20 20 20 20 30 7d 2c 20 20 20 20 2f 2a 20        0},    /* 
fe00: 30 20 2a 2f 0a 20 20 20 20 20 20 7b 20 4f 50 5f  0 */.      { OP_
fe10: 53 74 72 69 6e 67 38 2c 20 20 20 20 20 30 2c 20  String8,     0, 
fe20: 33 2c 20 20 20 20 20 20 20 20 30 7d 2c 20 20 20  3,        0},   
fe30: 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20 20 20 7b   /* 1 */.      {
fe40: 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20   OP_ResultRow,  
fe50: 20 33 2c 20 31 2c 20 20 20 20 20 20 20 20 30 7d   3, 1,        0}
fe60: 2c 0a 20 20 20 20 7d 3b 0a 0a 20 20 20 20 69 6e  ,.    };..    in
fe70: 74 20 69 73 51 75 69 63 6b 20 3d 20 28 73 71 6c  t isQuick = (sql
fe80: 69 74 65 33 54 6f 6c 6f 77 65 72 28 7a 4c 65 66  ite3Tolower(zLef
fe90: 74 5b 30 5d 29 3d 3d 27 71 27 29 3b 0a 0a 20 20  t[0])=='q');..  
fea0: 20 20 2f 2a 20 49 66 20 74 68 65 20 50 52 41 47    /* If the PRAG
feb0: 4d 41 20 63 6f 6d 6d 61 6e 64 20 77 61 73 20 6f  MA command was o
fec0: 66 20 74 68 65 20 66 6f 72 6d 20 22 50 52 41 47  f the form "PRAG
fed0: 4d 41 20 3c 64 62 3e 2e 69 6e 74 65 67 72 69 74  MA <db>.integrit
fee0: 79 5f 63 68 65 63 6b 22 2c 0a 20 20 20 20 2a 2a  y_check",.    **
fef0: 20 74 68 65 6e 20 69 44 62 20 69 73 20 73 65 74   then iDb is set
ff00: 20 74 6f 20 74 68 65 20 69 6e 64 65 78 20 6f 66   to the index of
ff10: 20 74 68 65 20 64 61 74 61 62 61 73 65 20 69 64   the database id
ff20: 65 6e 74 69 66 69 65 64 20 62 79 20 3c 64 62 3e  entified by <db>
ff30: 2e 0a 20 20 20 20 2a 2a 20 49 6e 20 74 68 69 73  ..    ** In this
ff40: 20 63 61 73 65 2c 20 74 68 65 20 69 6e 74 65 67   case, the integ
ff50: 72 69 74 79 20 6f 66 20 64 61 74 61 62 61 73 65  rity of database
ff60: 20 69 44 62 20 6f 6e 6c 79 20 69 73 20 76 65 72   iDb only is ver
ff70: 69 66 69 65 64 20 62 79 0a 20 20 20 20 2a 2a 20  ified by.    ** 
ff80: 74 68 65 20 56 44 42 45 20 63 72 65 61 74 65 64  the VDBE created
ff90: 20 62 65 6c 6f 77 2e 0a 20 20 20 20 2a 2a 0a 20   below..    **. 
ffa0: 20 20 20 2a 2a 20 4f 74 68 65 72 77 69 73 65 2c     ** Otherwise,
ffb0: 20 69 66 20 74 68 65 20 63 6f 6d 6d 61 6e 64 20   if the command 
ffc0: 77 61 73 20 73 69 6d 70 6c 79 20 22 50 52 41 47  was simply "PRAG
ffd0: 4d 41 20 69 6e 74 65 67 72 69 74 79 5f 63 68 65  MA integrity_che
ffe0: 63 6b 22 20 28 6f 72 0a 20 20 20 20 2a 2a 20 22  ck" (or.    ** "
fff0: 50 52 41 47 4d 41 20 71 75 69 63 6b 5f 63 68 65  PRAGMA quick_che
10000 63 6b 22 29 2c 20 74 68 65 6e 20 69 44 62 20 69  ck"), then iDb i
10010 73 20 73 65 74 20 74 6f 20 30 2e 20 49 6e 20 74  s set to 0. In t
10020 68 69 73 20 63 61 73 65 2c 20 73 65 74 20 69 44  his case, set iD
10030 62 0a 20 20 20 20 2a 2a 20 74 6f 20 2d 31 20 68  b.    ** to -1 h
10040 65 72 65 2c 20 74 6f 20 69 6e 64 69 63 61 74 65  ere, to indicate
10050 20 74 68 61 74 20 74 68 65 20 56 44 42 45 20 73   that the VDBE s
10060 68 6f 75 6c 64 20 76 65 72 69 66 79 20 74 68 65  hould verify the
10070 20 69 6e 74 65 67 72 69 74 79 0a 20 20 20 20 2a   integrity.    *
10080 2a 20 6f 66 20 61 6c 6c 20 61 74 74 61 63 68 65  * of all attache
10090 64 20 64 61 74 61 62 61 73 65 73 2e 20 20 2a 2f  d databases.  */
100a0 0a 20 20 20 20 61 73 73 65 72 74 28 20 69 44 62  .    assert( iDb
100b0 3e 3d 30 20 29 3b 0a 20 20 20 20 61 73 73 65 72  >=0 );.    asser
100c0 74 28 20 69 44 62 3d 3d 30 20 7c 7c 20 70 49 64  t( iDb==0 || pId
100d0 32 2d 3e 7a 20 29 3b 0a 20 20 20 20 69 66 28 20  2->z );.    if( 
100e0 70 49 64 32 2d 3e 7a 3d 3d 30 20 29 20 69 44 62  pId2->z==0 ) iDb
100f0 20 3d 20 2d 31 3b 0a 0a 20 20 20 20 2f 2a 20 49   = -1;..    /* I
10100 6e 69 74 69 61 6c 69 7a 65 20 74 68 65 20 56 44  nitialize the VD
10110 42 45 20 70 72 6f 67 72 61 6d 20 2a 2f 0a 20 20  BE program */.  
10120 20 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d    pParse->nMem =
10130 20 36 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56   6;.    sqlite3V
10140 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c  dbeSetNumCols(v,
10150 20 31 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33   1);.    sqlite3
10160 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
10170 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
10180 45 2c 20 22 69 6e 74 65 67 72 69 74 79 5f 63 68  E, "integrity_ch
10190 65 63 6b 22 2c 20 53 51 4c 49 54 45 5f 53 54 41  eck", SQLITE_STA
101a0 54 49 43 29 3b 0a 0a 20 20 20 20 2f 2a 20 53 65  TIC);..    /* Se
101b0 74 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 65 72  t the maximum er
101c0 72 6f 72 20 63 6f 75 6e 74 20 2a 2f 0a 20 20 20  ror count */.   
101d0 20 6d 78 45 72 72 20 3d 20 53 51 4c 49 54 45 5f   mxErr = SQLITE_
101e0 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b 5f  INTEGRITY_CHECK_
101f0 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20 20 20 69  ERROR_MAX;.    i
10200 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
10210 20 20 20 73 71 6c 69 74 65 33 47 65 74 49 6e 74     sqlite3GetInt
10220 33 32 28 7a 52 69 67 68 74 2c 20 26 6d 78 45 72  32(zRight, &mxEr
10230 72 29 3b 0a 20 20 20 20 20 20 69 66 28 20 6d 78  r);.      if( mx
10240 45 72 72 3c 3d 30 20 29 7b 0a 20 20 20 20 20 20  Err<=0 ){.      
10250 20 20 6d 78 45 72 72 20 3d 20 53 51 4c 49 54 45    mxErr = SQLITE
10260 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45 43 4b  _INTEGRITY_CHECK
10270 5f 45 52 52 4f 52 5f 4d 41 58 3b 0a 20 20 20 20  _ERROR_MAX;.    
10280 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71    }.    }.    sq
10290 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
102a0 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 6d  v, OP_Integer, m
102b0 78 45 72 72 2c 20 31 29 3b 20 20 2f 2a 20 72 65  xErr, 1);  /* re
102c0 67 5b 31 5d 20 68 6f 6c 64 73 20 65 72 72 6f 72  g[1] holds error
102d0 73 20 6c 65 66 74 20 2a 2f 0a 0a 20 20 20 20 2f  s left */..    /
102e0 2a 20 44 6f 20 61 6e 20 69 6e 74 65 67 72 69 74  * Do an integrit
102f0 79 20 63 68 65 63 6b 20 6f 6e 20 65 61 63 68 20  y check on each 
10300 64 61 74 61 62 61 73 65 20 66 69 6c 65 20 2a 2f  database file */
10310 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b 20 69 3c  .    for(i=0; i<
10320 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29 7b 0a 20  db->nDb; i++){. 
10330 20 20 20 20 20 48 61 73 68 45 6c 65 6d 20 2a 78       HashElem *x
10340 3b 0a 20 20 20 20 20 20 48 61 73 68 20 2a 70 54  ;.      Hash *pT
10350 62 6c 73 3b 0a 20 20 20 20 20 20 69 6e 74 20 63  bls;.      int c
10360 6e 74 20 3d 20 30 3b 0a 0a 20 20 20 20 20 20 69  nt = 0;..      i
10370 66 28 20 4f 4d 49 54 5f 54 45 4d 50 44 42 20 26  f( OMIT_TEMPDB &
10380 26 20 69 3d 3d 31 20 29 20 63 6f 6e 74 69 6e 75  & i==1 ) continu
10390 65 3b 0a 20 20 20 20 20 20 69 66 28 20 69 44 62  e;.      if( iDb
103a0 3e 3d 30 20 26 26 20 69 21 3d 69 44 62 20 29 20  >=0 && i!=iDb ) 
103b0 63 6f 6e 74 69 6e 75 65 3b 0a 0a 20 20 20 20 20  continue;..     
103c0 20 73 71 6c 69 74 65 33 43 6f 64 65 56 65 72 69   sqlite3CodeVeri
103d0 66 79 53 63 68 65 6d 61 28 70 50 61 72 73 65 2c  fySchema(pParse,
103e0 20 69 29 3b 0a 20 20 20 20 20 20 61 64 64 72 20   i);.      addr 
103f0 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64  = sqlite3VdbeAdd
10400 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50 6f 73 2c  Op1(v, OP_IfPos,
10410 20 31 29 3b 20 2f 2a 20 48 61 6c 74 20 69 66 20   1); /* Halt if 
10420 6f 75 74 20 6f 66 20 65 72 72 6f 72 73 20 2a 2f  out of errors */
10430 0a 20 20 20 20 20 20 56 64 62 65 43 6f 76 65 72  .      VdbeCover
10440 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 73 71  age(v);.      sq
10450 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28  lite3VdbeAddOp2(
10460 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c 20 30  v, OP_Halt, 0, 0
10470 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
10480 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
10490 61 64 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f 2a  addr);..      /*
104a0 20 44 6f 20 61 6e 20 69 6e 74 65 67 72 69 74 79   Do an integrity
104b0 20 63 68 65 63 6b 20 6f 66 20 74 68 65 20 42 2d   check of the B-
104c0 54 72 65 65 0a 20 20 20 20 20 20 2a 2a 0a 20 20  Tree.      **.  
104d0 20 20 20 20 2a 2a 20 42 65 67 69 6e 20 62 79 20      ** Begin by 
104e0 66 69 6c 6c 69 6e 67 20 72 65 67 69 73 74 65 72  filling register
104f0 73 20 32 2c 20 33 2c 20 2e 2e 2e 20 77 69 74 68  s 2, 3, ... with
10500 20 74 68 65 20 72 6f 6f 74 20 70 61 67 65 73 20   the root pages 
10510 6e 75 6d 62 65 72 73 0a 20 20 20 20 20 20 2a 2a  numbers.      **
10520 20 66 6f 72 20 61 6c 6c 20 74 61 62 6c 65 73 20   for all tables 
10530 61 6e 64 20 69 6e 64 69 63 65 73 20 69 6e 20 74  and indices in t
10540 68 65 20 64 61 74 61 62 61 73 65 2e 0a 20 20 20  he database..   
10550 20 20 20 2a 2f 0a 20 20 20 20 20 20 61 73 73 65     */.      asse
10560 72 74 28 20 73 71 6c 69 74 65 33 53 63 68 65 6d  rt( sqlite3Schem
10570 61 4d 75 74 65 78 48 65 6c 64 28 64 62 2c 20 69  aMutexHeld(db, i
10580 2c 20 30 29 20 29 3b 0a 20 20 20 20 20 20 70 54  , 0) );.      pT
10590 62 6c 73 20 3d 20 26 64 62 2d 3e 61 44 62 5b 69  bls = &db->aDb[i
105a0 5d 2e 70 53 63 68 65 6d 61 2d 3e 74 62 6c 48 61  ].pSchema->tblHa
105b0 73 68 3b 0a 20 20 20 20 20 20 66 6f 72 28 78 3d  sh;.      for(x=
105c0 73 71 6c 69 74 65 48 61 73 68 46 69 72 73 74 28  sqliteHashFirst(
105d0 70 54 62 6c 73 29 3b 20 78 3b 20 78 3d 73 71 6c  pTbls); x; x=sql
105e0 69 74 65 48 61 73 68 4e 65 78 74 28 78 29 29 7b  iteHashNext(x)){
105f0 0a 20 20 20 20 20 20 20 20 54 61 62 6c 65 20 2a  .        Table *
10600 70 54 61 62 20 3d 20 73 71 6c 69 74 65 48 61 73  pTab = sqliteHas
10610 68 44 61 74 61 28 78 29 3b 0a 20 20 20 20 20 20  hData(x);.      
10620 20 20 49 6e 64 65 78 20 2a 70 49 64 78 3b 0a 20    Index *pIdx;. 
10630 20 20 20 20 20 20 20 69 66 28 20 48 61 73 52 6f         if( HasRo
10640 77 69 64 28 70 54 61 62 29 20 29 7b 0a 20 20 20  wid(pTab) ){.   
10650 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
10660 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49  beAddOp2(v, OP_I
10670 6e 74 65 67 65 72 2c 20 70 54 61 62 2d 3e 74 6e  nteger, pTab->tn
10680 75 6d 2c 20 32 2b 63 6e 74 29 3b 0a 20 20 20 20  um, 2+cnt);.    
10690 20 20 20 20 20 20 56 64 62 65 43 6f 6d 6d 65 6e        VdbeCommen
106a0 74 28 28 76 2c 20 22 25 73 22 2c 20 70 54 61 62  t((v, "%s", pTab
106b0 2d 3e 7a 4e 61 6d 65 29 29 3b 0a 20 20 20 20 20  ->zName));.     
106c0 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20 20       cnt++;.    
106d0 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 66 6f      }.        fo
106e0 72 28 70 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e  r(pIdx=pTab->pIn
106f0 64 65 78 3b 20 70 49 64 78 3b 20 70 49 64 78 3d  dex; pIdx; pIdx=
10700 70 49 64 78 2d 3e 70 4e 65 78 74 29 7b 0a 20 20  pIdx->pNext){.  
10710 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
10720 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f  dbeAddOp2(v, OP_
10730 49 6e 74 65 67 65 72 2c 20 70 49 64 78 2d 3e 74  Integer, pIdx->t
10740 6e 75 6d 2c 20 32 2b 63 6e 74 29 3b 0a 20 20 20  num, 2+cnt);.   
10750 20 20 20 20 20 20 20 56 64 62 65 43 6f 6d 6d 65         VdbeComme
10760 6e 74 28 28 76 2c 20 22 25 73 22 2c 20 70 49 64  nt((v, "%s", pId
10770 78 2d 3e 7a 4e 61 6d 65 29 29 3b 0a 20 20 20 20  x->zName));.    
10780 20 20 20 20 20 20 63 6e 74 2b 2b 3b 0a 20 20 20        cnt++;.   
10790 20 20 20 20 20 7d 0a 20 20 20 20 20 20 7d 0a 0a       }.      }..
107a0 20 20 20 20 20 20 2f 2a 20 4d 61 6b 65 20 73 75        /* Make su
107b0 72 65 20 73 75 66 66 69 63 69 65 6e 74 20 6e 75  re sufficient nu
107c0 6d 62 65 72 20 6f 66 20 72 65 67 69 73 74 65 72  mber of register
107d0 73 20 68 61 76 65 20 62 65 65 6e 20 61 6c 6c 6f  s have been allo
107e0 63 61 74 65 64 20 2a 2f 0a 20 20 20 20 20 20 70  cated */.      p
107f0 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 4d 41  Parse->nMem = MA
10800 58 28 20 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c  X( pParse->nMem,
10810 20 63 6e 74 2b 38 20 29 3b 0a 0a 20 20 20 20 20   cnt+8 );..     
10820 20 2f 2a 20 44 6f 20 74 68 65 20 62 2d 74 72 65   /* Do the b-tre
10830 65 20 69 6e 74 65 67 72 69 74 79 20 63 68 65 63  e integrity chec
10840 6b 73 20 2a 2f 0a 20 20 20 20 20 20 73 71 6c 69  ks */.      sqli
10850 74 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c  te3VdbeAddOp3(v,
10860 20 4f 50 5f 49 6e 74 65 67 72 69 74 79 43 6b 2c   OP_IntegrityCk,
10870 20 32 2c 20 63 6e 74 2c 20 31 29 3b 0a 20 20 20   2, cnt, 1);.   
10880 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43 68     sqlite3VdbeCh
10890 61 6e 67 65 50 35 28 76 2c 20 28 75 38 29 69 29  angeP5(v, (u8)i)
108a0 3b 0a 20 20 20 20 20 20 61 64 64 72 20 3d 20 73  ;.      addr = s
108b0 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
108c0 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 32  (v, OP_IsNull, 2
108d0 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65 28  ); VdbeCoverage(
108e0 76 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65  v);.      sqlite
108f0 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f  3VdbeAddOp4(v, O
10900 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c  P_String8, 0, 3,
10910 20 30 2c 0a 20 20 20 20 20 20 20 20 20 73 71 6c   0,.         sql
10920 69 74 65 33 4d 50 72 69 6e 74 66 28 64 62 2c 20  ite3MPrintf(db, 
10930 22 2a 2a 2a 20 69 6e 20 64 61 74 61 62 61 73 65  "*** in database
10940 20 25 73 20 2a 2a 2a 5c 6e 22 2c 20 64 62 2d 3e   %s ***\n", db->
10950 61 44 62 5b 69 5d 2e 7a 4e 61 6d 65 29 2c 0a 20  aDb[i].zName),. 
10960 20 20 20 20 20 20 20 20 50 34 5f 44 59 4e 41 4d          P4_DYNAM
10970 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74  IC);.      sqlit
10980 65 33 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20  e3VdbeAddOp3(v, 
10990 4f 50 5f 4d 6f 76 65 2c 20 32 2c 20 34 2c 20 31  OP_Move, 2, 4, 1
109a0 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
109b0 56 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50  VdbeAddOp3(v, OP
109c0 5f 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20 32  _Concat, 4, 3, 2
109d0 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
109e0 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
109f0 5f 52 65 73 75 6c 74 52 6f 77 2c 20 32 2c 20 31  _ResultRow, 2, 1
10a00 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
10a10 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
10a20 61 64 64 72 29 3b 0a 0a 20 20 20 20 20 20 2f 2a  addr);..      /*
10a30 20 4d 61 6b 65 20 73 75 72 65 20 61 6c 6c 20 74   Make sure all t
10a40 68 65 20 69 6e 64 69 63 65 73 20 61 72 65 20 63  he indices are c
10a50 6f 6e 73 74 72 75 63 74 65 64 20 63 6f 72 72 65  onstructed corre
10a60 63 74 6c 79 2e 0a 20 20 20 20 20 20 2a 2f 0a 20  ctly..      */. 
10a70 20 20 20 20 20 66 6f 72 28 78 3d 73 71 6c 69 74       for(x=sqlit
10a80 65 48 61 73 68 46 69 72 73 74 28 70 54 62 6c 73  eHashFirst(pTbls
10a90 29 3b 20 78 20 26 26 20 21 69 73 51 75 69 63 6b  ); x && !isQuick
10aa0 3b 20 78 3d 73 71 6c 69 74 65 48 61 73 68 4e 65  ; x=sqliteHashNe
10ab0 78 74 28 78 29 29 7b 0a 20 20 20 20 20 20 20 20  xt(x)){.        
10ac0 54 61 62 6c 65 20 2a 70 54 61 62 20 3d 20 73 71  Table *pTab = sq
10ad0 6c 69 74 65 48 61 73 68 44 61 74 61 28 78 29 3b  liteHashData(x);
10ae0 0a 20 20 20 20 20 20 20 20 49 6e 64 65 78 20 2a  .        Index *
10af0 70 49 64 78 2c 20 2a 70 50 6b 3b 0a 20 20 20 20  pIdx, *pPk;.    
10b00 20 20 20 20 49 6e 64 65 78 20 2a 70 50 72 69 6f      Index *pPrio
10b10 72 20 3d 20 30 3b 0a 20 20 20 20 20 20 20 20 69  r = 0;.        i
10b20 6e 74 20 6c 6f 6f 70 54 6f 70 3b 0a 20 20 20 20  nt loopTop;.    
10b30 20 20 20 20 69 6e 74 20 69 44 61 74 61 43 75 72      int iDataCur
10b40 2c 20 69 49 64 78 43 75 72 3b 0a 20 20 20 20 20  , iIdxCur;.     
10b50 20 20 20 69 6e 74 20 72 31 20 3d 20 2d 31 3b 0a     int r1 = -1;.
10b60 0a 20 20 20 20 20 20 20 20 69 66 28 20 70 54 61  .        if( pTa
10b70 62 2d 3e 70 49 6e 64 65 78 3d 3d 30 20 29 20 63  b->pIndex==0 ) c
10b80 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20  ontinue;.       
10b90 20 70 50 6b 20 3d 20 48 61 73 52 6f 77 69 64 28   pPk = HasRowid(
10ba0 70 54 61 62 29 20 3f 20 30 20 3a 20 73 71 6c 69  pTab) ? 0 : sqli
10bb0 74 65 33 50 72 69 6d 61 72 79 4b 65 79 49 6e 64  te3PrimaryKeyInd
10bc0 65 78 28 70 54 61 62 29 3b 0a 20 20 20 20 20 20  ex(pTab);.      
10bd0 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33    addr = sqlite3
10be0 56 64 62 65 41 64 64 4f 70 31 28 76 2c 20 4f 50  VdbeAddOp1(v, OP
10bf0 5f 49 66 50 6f 73 2c 20 31 29 3b 20 20 2f 2a 20  _IfPos, 1);  /* 
10c00 53 74 6f 70 20 69 66 20 6f 75 74 20 6f 66 20 65  Stop if out of e
10c10 72 72 6f 72 73 20 2a 2f 0a 20 20 20 20 20 20 20  rrors */.       
10c20 20 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29   VdbeCoverage(v)
10c30 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  ;.        sqlite
10c40 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
10c50 50 5f 48 61 6c 74 2c 20 30 2c 20 30 29 3b 0a 20  P_Halt, 0, 0);. 
10c60 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
10c70 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 61 64  beJumpHere(v, ad
10c80 64 72 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c  dr);.        sql
10c90 69 74 65 33 45 78 70 72 43 61 63 68 65 43 6c 65  ite3ExprCacheCle
10ca0 61 72 28 70 50 61 72 73 65 29 3b 0a 20 20 20 20  ar(pParse);.    
10cb0 20 20 20 20 73 71 6c 69 74 65 33 4f 70 65 6e 54      sqlite3OpenT
10cc0 61 62 6c 65 41 6e 64 49 6e 64 69 63 65 73 28 70  ableAndIndices(p
10cd0 50 61 72 73 65 2c 20 70 54 61 62 2c 20 4f 50 5f  Parse, pTab, OP_
10ce0 4f 70 65 6e 52 65 61 64 2c 0a 20 20 20 20 20 20  OpenRead,.      
10cf0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
10d00 20 20 20 20 20 20 20 20 20 20 20 20 20 31 2c 20               1, 
10d10 30 2c 20 26 69 44 61 74 61 43 75 72 2c 20 26 69  0, &iDataCur, &i
10d20 49 64 78 43 75 72 29 3b 0a 20 20 20 20 20 20 20  IdxCur);.       
10d30 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
10d40 70 32 28 76 2c 20 4f 50 5f 49 6e 74 65 67 65 72  p2(v, OP_Integer
10d50 2c 20 30 2c 20 37 29 3b 0a 20 20 20 20 20 20 20  , 0, 7);.       
10d60 20 66 6f 72 28 6a 3d 30 2c 20 70 49 64 78 3d 70   for(j=0, pIdx=p
10d70 54 61 62 2d 3e 70 49 6e 64 65 78 3b 20 70 49 64  Tab->pIndex; pId
10d80 78 3b 20 70 49 64 78 3d 70 49 64 78 2d 3e 70 4e  x; pIdx=pIdx->pN
10d90 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20 20 20 20 20  ext, j++){.     
10da0 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
10db0 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 49 6e 74  AddOp2(v, OP_Int
10dc0 65 67 65 72 2c 20 30 2c 20 38 2b 6a 29 3b 20 2f  eger, 0, 8+j); /
10dd0 2a 20 69 6e 64 65 78 20 65 6e 74 72 69 65 73 20  * index entries 
10de0 63 6f 75 6e 74 65 72 20 2a 2f 0a 20 20 20 20 20  counter */.     
10df0 20 20 20 7d 0a 20 20 20 20 20 20 20 20 70 50 61     }.        pPa
10e00 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 4d 41 58 28  rse->nMem = MAX(
10e10 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 2c 20 38 2b  pParse->nMem, 8+
10e20 6a 29 3b 0a 20 20 20 20 20 20 20 20 73 71 6c 69  j);.        sqli
10e30 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
10e40 20 4f 50 5f 52 65 77 69 6e 64 2c 20 69 44 61 74   OP_Rewind, iDat
10e50 61 43 75 72 2c 20 30 29 3b 20 56 64 62 65 43 6f  aCur, 0); VdbeCo
10e60 76 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20  verage(v);.     
10e70 20 20 20 6c 6f 6f 70 54 6f 70 20 3d 20 73 71 6c     loopTop = sql
10e80 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
10e90 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 37 2c 20  , OP_AddImm, 7, 
10ea0 31 29 3b 0a 20 20 20 20 20 20 20 20 2f 2a 20 56  1);.        /* V
10eb0 65 72 69 66 79 20 74 68 61 74 20 61 6c 6c 20 4e  erify that all N
10ec0 4f 54 20 4e 55 4c 4c 20 63 6f 6c 75 6d 6e 73 20  OT NULL columns 
10ed0 72 65 61 6c 6c 79 20 61 72 65 20 4e 4f 54 20 4e  really are NOT N
10ee0 55 4c 4c 20 2a 2f 0a 20 20 20 20 20 20 20 20 66  ULL */.        f
10ef0 6f 72 28 6a 3d 30 3b 20 6a 3c 70 54 61 62 2d 3e  or(j=0; j<pTab->
10f00 6e 43 6f 6c 3b 20 6a 2b 2b 29 7b 0a 20 20 20 20  nCol; j++){.    
10f10 20 20 20 20 20 20 63 68 61 72 20 2a 7a 45 72 72        char *zErr
10f20 3b 0a 20 20 20 20 20 20 20 20 20 20 69 6e 74 20  ;.          int 
10f30 6a 6d 70 32 2c 20 6a 6d 70 33 3b 0a 20 20 20 20  jmp2, jmp3;.    
10f40 20 20 20 20 20 20 69 66 28 20 6a 3d 3d 70 54 61        if( j==pTa
10f50 62 2d 3e 69 50 4b 65 79 20 29 20 63 6f 6e 74 69  b->iPKey ) conti
10f60 6e 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 69  nue;.          i
10f70 66 28 20 70 54 61 62 2d 3e 61 43 6f 6c 5b 6a 5d  f( pTab->aCol[j]
10f80 2e 6e 6f 74 4e 75 6c 6c 3d 3d 30 20 29 20 63 6f  .notNull==0 ) co
10f90 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20 20  ntinue;.        
10fa0 20 20 73 71 6c 69 74 65 33 45 78 70 72 43 6f 64    sqlite3ExprCod
10fb0 65 47 65 74 43 6f 6c 75 6d 6e 4f 66 54 61 62 6c  eGetColumnOfTabl
10fc0 65 28 76 2c 20 70 54 61 62 2c 20 69 44 61 74 61  e(v, pTab, iData
10fd0 43 75 72 2c 20 6a 2c 20 33 29 3b 0a 20 20 20 20  Cur, j, 3);.    
10fe0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
10ff0 65 43 68 61 6e 67 65 50 35 28 76 2c 20 4f 50 46  eChangeP5(v, OPF
11000 4c 41 47 5f 54 59 50 45 4f 46 41 52 47 29 3b 0a  LAG_TYPEOFARG);.
11010 20 20 20 20 20 20 20 20 20 20 6a 6d 70 32 20 3d            jmp2 =
11020 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
11030 70 31 28 76 2c 20 4f 50 5f 4e 6f 74 4e 75 6c 6c  p1(v, OP_NotNull
11040 2c 20 33 29 3b 20 56 64 62 65 43 6f 76 65 72 61  , 3); VdbeCovera
11050 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20  ge(v);.         
11060 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
11070 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c  p2(v, OP_AddImm,
11080 20 31 2c 20 2d 31 29 3b 20 2f 2a 20 44 65 63 72   1, -1); /* Decr
11090 65 6d 65 6e 74 20 65 72 72 6f 72 20 6c 69 6d 69  ement error limi
110a0 74 20 2a 2f 0a 20 20 20 20 20 20 20 20 20 20 7a  t */.          z
110b0 45 72 72 20 3d 20 73 71 6c 69 74 65 33 4d 50 72  Err = sqlite3MPr
110c0 69 6e 74 66 28 64 62 2c 20 22 4e 55 4c 4c 20 76  intf(db, "NULL v
110d0 61 6c 75 65 20 69 6e 20 25 73 2e 25 73 22 2c 20  alue in %s.%s", 
110e0 70 54 61 62 2d 3e 7a 4e 61 6d 65 2c 0a 20 20 20  pTab->zName,.   
110f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11100 20 20 20 20 20 20 20 20 20 20 20 70 54 61 62 2d             pTab-
11110 3e 61 43 6f 6c 5b 6a 5d 2e 7a 4e 61 6d 65 29 3b  >aCol[j].zName);
11120 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
11130 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20  e3VdbeAddOp4(v, 
11140 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 33  OP_String8, 0, 3
11150 2c 20 30 2c 20 7a 45 72 72 2c 20 50 34 5f 44 59  , 0, zErr, P4_DY
11160 4e 41 4d 49 43 29 3b 0a 20 20 20 20 20 20 20 20  NAMIC);.        
11170 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
11180 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73 75 6c 74  Op2(v, OP_Result
11190 52 6f 77 2c 20 33 2c 20 31 29 3b 0a 20 20 20 20  Row, 3, 1);.    
111a0 20 20 20 20 20 20 6a 6d 70 33 20 3d 20 73 71 6c        jmp3 = sql
111b0 69 74 65 33 56 64 62 65 41 64 64 4f 70 31 28 76  ite3VdbeAddOp1(v
111c0 2c 20 4f 50 5f 49 66 50 6f 73 2c 20 31 29 3b 20  , OP_IfPos, 1); 
111d0 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
111e0 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74  .          sqlit
111f0 65 33 56 64 62 65 41 64 64 4f 70 30 28 76 2c 20  e3VdbeAddOp0(v, 
11200 4f 50 5f 48 61 6c 74 29 3b 0a 20 20 20 20 20 20  OP_Halt);.      
11210 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a      sqlite3VdbeJ
11220 75 6d 70 48 65 72 65 28 76 2c 20 6a 6d 70 32 29  umpHere(v, jmp2)
11230 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
11240 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
11250 76 2c 20 6a 6d 70 33 29 3b 0a 20 20 20 20 20 20  v, jmp3);.      
11260 20 20 7d 0a 20 20 20 20 20 20 20 20 2f 2a 20 56    }.        /* V
11270 61 6c 69 64 61 74 65 20 69 6e 64 65 78 20 65 6e  alidate index en
11280 74 72 69 65 73 20 66 6f 72 20 74 68 65 20 63 75  tries for the cu
11290 72 72 65 6e 74 20 72 6f 77 20 2a 2f 0a 20 20 20  rrent row */.   
112a0 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70 49       for(j=0, pI
112b0 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78 3b  dx=pTab->pIndex;
112c0 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64 78   pIdx; pIdx=pIdx
112d0 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a 20  ->pNext, j++){. 
112e0 20 20 20 20 20 20 20 20 20 69 6e 74 20 6a 6d 70           int jmp
112f0 32 2c 20 6a 6d 70 33 2c 20 6a 6d 70 34 2c 20 6a  2, jmp3, jmp4, j
11300 6d 70 35 3b 0a 20 20 20 20 20 20 20 20 20 20 69  mp5;.          i
11310 6e 74 20 63 6b 55 6e 69 71 20 3d 20 73 71 6c 69  nt ckUniq = sqli
11320 74 65 33 56 64 62 65 4d 61 6b 65 4c 61 62 65 6c  te3VdbeMakeLabel
11330 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 69  (v);.          i
11340 66 28 20 70 50 6b 3d 3d 70 49 64 78 20 29 20 63  f( pPk==pIdx ) c
11350 6f 6e 74 69 6e 75 65 3b 0a 20 20 20 20 20 20 20  ontinue;.       
11360 20 20 20 72 31 20 3d 20 73 71 6c 69 74 65 33 47     r1 = sqlite3G
11370 65 6e 65 72 61 74 65 49 6e 64 65 78 4b 65 79 28  enerateIndexKey(
11380 70 50 61 72 73 65 2c 20 70 49 64 78 2c 20 69 44  pParse, pIdx, iD
11390 61 74 61 43 75 72 2c 20 30 2c 20 30 2c 20 26 6a  ataCur, 0, 0, &j
113a0 6d 70 33 2c 0a 20 20 20 20 20 20 20 20 20 20 20  mp3,.           
113b0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
113c0 20 20 20 20 20 20 20 20 20 20 20 20 70 50 72 69              pPri
113d0 6f 72 2c 20 72 31 29 3b 0a 20 20 20 20 20 20 20  or, r1);.       
113e0 20 20 20 70 50 72 69 6f 72 20 3d 20 70 49 64 78     pPrior = pIdx
113f0 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
11400 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c  te3VdbeAddOp2(v,
11410 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 38 2b 6a 2c   OP_AddImm, 8+j,
11420 20 31 29 3b 20 20 2f 2a 20 69 6e 63 72 65 6d 65   1);  /* increme
11430 6e 74 20 65 6e 74 72 79 20 63 6f 75 6e 74 20 2a  nt entry count *
11440 2f 0a 20 20 20 20 20 20 20 20 20 20 2f 2a 20 56  /.          /* V
11450 65 72 69 66 79 20 74 68 61 74 20 61 6e 20 69 6e  erify that an in
11460 64 65 78 20 65 6e 74 72 79 20 65 78 69 73 74 73  dex entry exists
11470 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
11480 20 74 61 62 6c 65 20 72 6f 77 20 2a 2f 0a 20 20   table row */.  
11490 20 20 20 20 20 20 20 20 6a 6d 70 32 20 3d 20 73          jmp2 = s
114a0 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 34  qlite3VdbeAddOp4
114b0 49 6e 74 28 76 2c 20 4f 50 5f 46 6f 75 6e 64 2c  Int(v, OP_Found,
114c0 20 69 49 64 78 43 75 72 2b 6a 2c 20 63 6b 55 6e   iIdxCur+j, ckUn
114d0 69 71 2c 20 72 31 2c 0a 20 20 20 20 20 20 20 20  iq, r1,.        
114e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
114f0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 70 49                pI
11500 64 78 2d 3e 6e 43 6f 6c 75 6d 6e 29 3b 20 56 64  dx->nColumn); Vd
11510 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20  beCoverage(v);. 
11520 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
11530 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50  VdbeAddOp2(v, OP
11540 5f 41 64 64 49 6d 6d 2c 20 31 2c 20 2d 31 29 3b  _AddImm, 1, -1);
11550 20 2f 2a 20 44 65 63 72 65 6d 65 6e 74 20 65 72   /* Decrement er
11560 72 6f 72 20 6c 69 6d 69 74 20 2a 2f 0a 20 20 20  ror limit */.   
11570 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
11580 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
11590 74 72 69 6e 67 38 2c 20 30 2c 20 33 2c 20 30 2c  tring8, 0, 3, 0,
115a0 20 22 72 6f 77 20 22 2c 20 50 34 5f 53 54 41 54   "row ", P4_STAT
115b0 49 43 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  IC);.          s
115c0 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
115d0 28 76 2c 20 4f 50 5f 43 6f 6e 63 61 74 2c 20 37  (v, OP_Concat, 7
115e0 2c 20 33 2c 20 33 29 3b 0a 20 20 20 20 20 20 20  , 3, 3);.       
115f0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
11600 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
11610 67 38 2c 20 30 2c 20 34 2c 20 30 2c 20 0a 20 20  g8, 0, 4, 0, .  
11620 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11630 20 20 20 20 20 20 20 20 20 20 22 20 6d 69 73 73            " miss
11640 69 6e 67 20 66 72 6f 6d 20 69 6e 64 65 78 20 22  ing from index "
11650 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P4_STATIC);.  
11660 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
11670 64 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f  dbeAddOp3(v, OP_
11680 43 6f 6e 63 61 74 2c 20 34 2c 20 33 2c 20 33 29  Concat, 4, 3, 3)
11690 3b 0a 20 20 20 20 20 20 20 20 20 20 6a 6d 70 35  ;.          jmp5
116a0 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65 41 64   = sqlite3VdbeAd
116b0 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
116c0 67 38 2c 20 30 2c 20 34 2c 20 30 2c 0a 20 20 20  g8, 0, 4, 0,.   
116d0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
116f0 70 49 64 78 2d 3e 7a 4e 61 6d 65 2c 20 50 34 5f  pIdx->zName, P4_
11700 54 52 41 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20  TRANSIENT);.    
11710 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
11720 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f  eAddOp3(v, OP_Co
11730 6e 63 61 74 2c 20 34 2c 20 33 2c 20 33 29 3b 0a  ncat, 4, 3, 3);.
11740 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
11750 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
11760 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 33 2c 20  P_ResultRow, 3, 
11770 31 29 3b 0a 20 20 20 20 20 20 20 20 20 20 6a 6d  1);.          jm
11780 70 34 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  p4 = sqlite3Vdbe
11790 41 64 64 4f 70 31 28 76 2c 20 4f 50 5f 49 66 50  AddOp1(v, OP_IfP
117a0 6f 73 2c 20 31 29 3b 20 56 64 62 65 43 6f 76 65  os, 1); VdbeCove
117b0 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20 20  rage(v);.       
117c0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
117d0 64 4f 70 30 28 76 2c 20 4f 50 5f 48 61 6c 74 29  dOp0(v, OP_Halt)
117e0 3b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c 69  ;.          sqli
117f0 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
11800 76 2c 20 6a 6d 70 32 29 3b 0a 20 20 20 20 20 20  v, jmp2);.      
11810 20 20 20 20 2f 2a 20 46 6f 72 20 55 4e 49 51 55      /* For UNIQU
11820 45 20 69 6e 64 65 78 65 73 2c 20 76 65 72 69 66  E indexes, verif
11830 79 20 74 68 61 74 20 6f 6e 6c 79 20 6f 6e 65 20  y that only one 
11840 65 6e 74 72 79 20 65 78 69 73 74 73 20 77 69 74  entry exists wit
11850 68 20 74 68 65 0a 20 20 20 20 20 20 20 20 20 20  h the.          
11860 2a 2a 20 63 75 72 72 65 6e 74 20 6b 65 79 2e 20  ** current key. 
11870 20 54 68 65 20 65 6e 74 72 79 20 69 73 20 75 6e   The entry is un
11880 69 71 75 65 20 69 66 20 28 31 29 20 61 6e 79 20  ique if (1) any 
11890 63 6f 6c 75 6d 6e 20 69 73 20 4e 55 4c 4c 0a 20  column is NULL. 
118a0 20 20 20 20 20 20 20 20 20 2a 2a 20 6f 72 20 28           ** or (
118b0 32 29 20 74 68 65 20 6e 65 78 74 20 65 6e 74 72  2) the next entr
118c0 79 20 68 61 73 20 61 20 64 69 66 66 65 72 65 6e  y has a differen
118d0 74 20 6b 65 79 20 2a 2f 0a 20 20 20 20 20 20 20  t key */.       
118e0 20 20 20 69 66 28 20 49 73 55 6e 69 71 75 65 49     if( IsUniqueI
118f0 6e 64 65 78 28 70 49 64 78 29 20 29 7b 0a 20 20  ndex(pIdx) ){.  
11900 20 20 20 20 20 20 20 20 20 20 69 6e 74 20 75 6e            int un
11910 69 71 4f 6b 20 3d 20 73 71 6c 69 74 65 33 56 64  iqOk = sqlite3Vd
11920 62 65 4d 61 6b 65 4c 61 62 65 6c 28 76 29 3b 0a  beMakeLabel(v);.
11930 20 20 20 20 20 20 20 20 20 20 20 20 69 6e 74 20              int 
11940 6a 6d 70 36 3b 0a 20 20 20 20 20 20 20 20 20 20  jmp6;.          
11950 20 20 69 6e 74 20 6b 6b 3b 0a 20 20 20 20 20 20    int kk;.      
11960 20 20 20 20 20 20 66 6f 72 28 6b 6b 3d 30 3b 20        for(kk=0; 
11970 6b 6b 3c 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c  kk<pIdx->nKeyCol
11980 3b 20 6b 6b 2b 2b 29 7b 0a 20 20 20 20 20 20 20  ; kk++){.       
11990 20 20 20 20 20 20 20 69 6e 74 20 69 43 6f 6c 20         int iCol 
119a0 3d 20 70 49 64 78 2d 3e 61 69 43 6f 6c 75 6d 6e  = pIdx->aiColumn
119b0 5b 6b 6b 5d 3b 0a 20 20 20 20 20 20 20 20 20 20  [kk];.          
119c0 20 20 20 20 61 73 73 65 72 74 28 20 69 43 6f 6c      assert( iCol
119d0 3e 3d 30 20 26 26 20 69 43 6f 6c 3c 70 54 61 62  >=0 && iCol<pTab
119e0 2d 3e 6e 43 6f 6c 20 29 3b 0a 20 20 20 20 20 20  ->nCol );.      
119f0 20 20 20 20 20 20 20 20 69 66 28 20 70 54 61 62          if( pTab
11a00 2d 3e 61 43 6f 6c 5b 69 43 6f 6c 5d 2e 6e 6f 74  ->aCol[iCol].not
11a10 4e 75 6c 6c 20 29 20 63 6f 6e 74 69 6e 75 65 3b  Null ) continue;
11a20 0a 20 20 20 20 20 20 20 20 20 20 20 20 20 20 73  .              s
11a30 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
11a40 28 76 2c 20 4f 50 5f 49 73 4e 75 6c 6c 2c 20 72  (v, OP_IsNull, r
11a50 31 2b 6b 6b 2c 20 75 6e 69 71 4f 6b 29 3b 0a 20  1+kk, uniqOk);. 
11a60 20 20 20 20 20 20 20 20 20 20 20 20 20 56 64 62               Vdb
11a70 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a 20 20  eCoverage(v);.  
11a80 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20 20            }.    
11a90 20 20 20 20 20 20 20 20 6a 6d 70 36 20 3d 20 73          jmp6 = s
11aa0 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 31  qlite3VdbeAddOp1
11ab0 28 76 2c 20 4f 50 5f 4e 65 78 74 2c 20 69 49 64  (v, OP_Next, iId
11ac0 78 43 75 72 2b 6a 29 3b 20 56 64 62 65 43 6f 76  xCur+j); VdbeCov
11ad0 65 72 61 67 65 28 76 29 3b 0a 20 20 20 20 20 20  erage(v);.      
11ae0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
11af0 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 47 6f  eAddOp2(v, OP_Go
11b00 74 6f 2c 20 30 2c 20 75 6e 69 71 4f 6b 29 3b 0a  to, 0, uniqOk);.
11b10 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69              sqli
11b20 74 65 33 56 64 62 65 4a 75 6d 70 48 65 72 65 28  te3VdbeJumpHere(
11b30 76 2c 20 6a 6d 70 36 29 3b 0a 20 20 20 20 20 20  v, jmp6);.      
11b40 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
11b50 65 41 64 64 4f 70 34 49 6e 74 28 76 2c 20 4f 50  eAddOp4Int(v, OP
11b60 5f 49 64 78 47 54 2c 20 69 49 64 78 43 75 72 2b  _IdxGT, iIdxCur+
11b70 6a 2c 20 75 6e 69 71 4f 6b 2c 20 72 31 2c 0a 20  j, uniqOk, r1,. 
11b80 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11b90 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11ba0 70 49 64 78 2d 3e 6e 4b 65 79 43 6f 6c 29 3b 20  pIdx->nKeyCol); 
11bb0 56 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b  VdbeCoverage(v);
11bc0 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
11bd0 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
11be0 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c 20 31 2c 20  , OP_AddImm, 1, 
11bf0 2d 31 29 3b 20 2f 2a 20 44 65 63 72 65 6d 65 6e  -1); /* Decremen
11c00 74 20 65 72 72 6f 72 20 6c 69 6d 69 74 20 2a 2f  t error limit */
11c10 0a 20 20 20 20 20 20 20 20 20 20 20 20 73 71 6c  .            sql
11c20 69 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76  ite3VdbeAddOp4(v
11c30 2c 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c  , OP_String8, 0,
11c40 20 33 2c 20 30 2c 0a 20 20 20 20 20 20 20 20 20   3, 0,.         
11c50 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11c60 20 20 20 20 20 22 6e 6f 6e 2d 75 6e 69 71 75 65       "non-unique
11c70 20 65 6e 74 72 79 20 69 6e 20 69 6e 64 65 78 20   entry in index 
11c80 22 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20  ", P4_STATIC);. 
11c90 20 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74             sqlit
11ca0 65 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20  e3VdbeAddOp2(v, 
11cb0 4f 50 5f 47 6f 74 6f 2c 20 30 2c 20 6a 6d 70 35  OP_Goto, 0, jmp5
11cc0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 20 20 73  );.            s
11cd0 71 6c 69 74 65 33 56 64 62 65 52 65 73 6f 6c 76  qlite3VdbeResolv
11ce0 65 4c 61 62 65 6c 28 76 2c 20 75 6e 69 71 4f 6b  eLabel(v, uniqOk
11cf0 29 3b 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20  );.          }. 
11d00 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33           sqlite3
11d10 56 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20  VdbeJumpHere(v, 
11d20 6a 6d 70 34 29 3b 0a 20 20 20 20 20 20 20 20 20  jmp4);.         
11d30 20 73 71 6c 69 74 65 33 52 65 73 6f 6c 76 65 50   sqlite3ResolveP
11d40 61 72 74 49 64 78 4c 61 62 65 6c 28 70 50 61 72  artIdxLabel(pPar
11d50 73 65 2c 20 6a 6d 70 33 29 3b 0a 20 20 20 20 20  se, jmp3);.     
11d60 20 20 20 7d 0a 20 20 20 20 20 20 20 20 73 71 6c     }.        sql
11d70 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
11d80 2c 20 4f 50 5f 4e 65 78 74 2c 20 69 44 61 74 61  , OP_Next, iData
11d90 43 75 72 2c 20 6c 6f 6f 70 54 6f 70 29 3b 20 56  Cur, loopTop); V
11da0 64 62 65 43 6f 76 65 72 61 67 65 28 76 29 3b 0a  dbeCoverage(v);.
11db0 20 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56          sqlite3V
11dc0 64 62 65 4a 75 6d 70 48 65 72 65 28 76 2c 20 6c  dbeJumpHere(v, l
11dd0 6f 6f 70 54 6f 70 2d 31 29 3b 0a 23 69 66 6e 64  oopTop-1);.#ifnd
11de0 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 42  ef SQLITE_OMIT_B
11df0 54 52 45 45 43 4f 55 4e 54 0a 20 20 20 20 20 20  TREECOUNT.      
11e00 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64    sqlite3VdbeAdd
11e10 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e 67  Op4(v, OP_String
11e20 38 2c 20 30 2c 20 32 2c 20 30 2c 20 0a 20 20 20  8, 0, 2, 0, .   
11e30 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
11e40 20 20 22 77 72 6f 6e 67 20 23 20 6f 66 20 65 6e    "wrong # of en
11e50 74 72 69 65 73 20 69 6e 20 69 6e 64 65 78 20 22  tries in index "
11e60 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20 20  , P4_STATIC);.  
11e70 20 20 20 20 20 20 66 6f 72 28 6a 3d 30 2c 20 70        for(j=0, p
11e80 49 64 78 3d 70 54 61 62 2d 3e 70 49 6e 64 65 78  Idx=pTab->pIndex
11e90 3b 20 70 49 64 78 3b 20 70 49 64 78 3d 70 49 64  ; pIdx; pIdx=pId
11ea0 78 2d 3e 70 4e 65 78 74 2c 20 6a 2b 2b 29 7b 0a  x->pNext, j++){.
11eb0 20 20 20 20 20 20 20 20 20 20 69 66 28 20 70 50            if( pP
11ec0 6b 3d 3d 70 49 64 78 20 29 20 63 6f 6e 74 69 6e  k==pIdx ) contin
11ed0 75 65 3b 0a 20 20 20 20 20 20 20 20 20 20 61 64  ue;.          ad
11ee0 64 72 20 3d 20 73 71 6c 69 74 65 33 56 64 62 65  dr = sqlite3Vdbe
11ef0 43 75 72 72 65 6e 74 41 64 64 72 28 76 29 3b 0a  CurrentAddr(v);.
11f00 20 20 20 20 20 20 20 20 20 20 73 71 6c 69 74 65            sqlite
11f10 33 56 64 62 65 41 64 64 4f 70 32 28 76 2c 20 4f  3VdbeAddOp2(v, O
11f20 50 5f 49 66 50 6f 73 2c 20 31 2c 20 61 64 64 72  P_IfPos, 1, addr
11f30 2b 32 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67  +2); VdbeCoverag
11f40 65 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20  e(v);.          
11f50 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70  sqlite3VdbeAddOp
11f60 32 28 76 2c 20 4f 50 5f 48 61 6c 74 2c 20 30 2c  2(v, OP_Halt, 0,
11f70 20 30 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73   0);.          s
11f80 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 32  qlite3VdbeAddOp2
11f90 28 76 2c 20 4f 50 5f 43 6f 75 6e 74 2c 20 69 49  (v, OP_Count, iI
11fa0 64 78 43 75 72 2b 6a 2c 20 33 29 3b 0a 20 20 20  dxCur+j, 3);.   
11fb0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
11fc0 62 65 41 64 64 4f 70 33 28 76 2c 20 4f 50 5f 45  beAddOp3(v, OP_E
11fd0 71 2c 20 38 2b 6a 2c 20 61 64 64 72 2b 38 2c 20  q, 8+j, addr+8, 
11fe0 33 29 3b 20 56 64 62 65 43 6f 76 65 72 61 67 65  3); VdbeCoverage
11ff0 28 76 29 3b 0a 20 20 20 20 20 20 20 20 20 20 73  (v);.          s
12000 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e 67 65  qlite3VdbeChange
12010 50 35 28 76 2c 20 53 51 4c 49 54 45 5f 4e 4f 54  P5(v, SQLITE_NOT
12020 4e 55 4c 4c 29 3b 0a 20 20 20 20 20 20 20 20 20  NULL);.         
12030 20 73 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f   sqlite3VdbeAddO
12040 70 32 28 76 2c 20 4f 50 5f 41 64 64 49 6d 6d 2c  p2(v, OP_AddImm,
12050 20 31 2c 20 2d 31 29 3b 0a 20 20 20 20 20 20 20   1, -1);.       
12060 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
12070 64 4f 70 34 28 76 2c 20 4f 50 5f 53 74 72 69 6e  dOp4(v, OP_Strin
12080 67 38 2c 20 30 2c 20 33 2c 20 30 2c 20 70 49 64  g8, 0, 3, 0, pId
12090 78 2d 3e 7a 4e 61 6d 65 2c 20 50 34 5f 54 52 41  x->zName, P4_TRA
120a0 4e 53 49 45 4e 54 29 3b 0a 20 20 20 20 20 20 20  NSIENT);.       
120b0 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 41 64     sqlite3VdbeAd
120c0 64 4f 70 33 28 76 2c 20 4f 50 5f 43 6f 6e 63 61  dOp3(v, OP_Conca
120d0 74 2c 20 33 2c 20 32 2c 20 37 29 3b 0a 20 20 20  t, 3, 2, 7);.   
120e0 20 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64         sqlite3Vd
120f0 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
12100 65 73 75 6c 74 52 6f 77 2c 20 37 2c 20 31 29 3b  esultRow, 7, 1);
12110 0a 20 20 20 20 20 20 20 20 7d 0a 23 65 6e 64 69  .        }.#endi
12120 66 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54  f /* SQLITE_OMIT
12130 5f 42 54 52 45 45 43 4f 55 4e 54 20 2a 2f 0a 20  _BTREECOUNT */. 
12140 20 20 20 20 20 7d 20 0a 20 20 20 20 7d 0a 20 20       } .    }.  
12150 20 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33    addr = sqlite3
12160 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c  VdbeAddOpList(v,
12170 20 41 72 72 61 79 53 69 7a 65 28 65 6e 64 43 6f   ArraySize(endCo
12180 64 65 29 2c 20 65 6e 64 43 6f 64 65 2c 20 69 4c  de), endCode, iL
12190 6e 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56  n);.    sqlite3V
121a0 64 62 65 43 68 61 6e 67 65 50 33 28 76 2c 20 61  dbeChangeP3(v, a
121b0 64 64 72 2c 20 2d 6d 78 45 72 72 29 3b 0a 20 20  ddr, -mxErr);.  
121c0 20 20 73 71 6c 69 74 65 33 56 64 62 65 4a 75 6d    sqlite3VdbeJum
121d0 70 48 65 72 65 28 76 2c 20 61 64 64 72 29 3b 0a  pHere(v, addr);.
121e0 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 43      sqlite3VdbeC
121f0 68 61 6e 67 65 50 34 28 76 2c 20 61 64 64 72 2b  hangeP4(v, addr+
12200 31 2c 20 22 6f 6b 22 2c 20 50 34 5f 53 54 41 54  1, "ok", P4_STAT
12210 49 43 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b  IC);.  }.  break
12220 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49  ;.#endif /* SQLI
12230 54 45 5f 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54  TE_OMIT_INTEGRIT
12240 59 5f 43 48 45 43 4b 20 2a 2f 0a 0a 23 69 66 6e  Y_CHECK */..#ifn
12250 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  def SQLITE_OMIT_
12260 55 54 46 31 36 0a 20 20 2f 2a 0a 20 20 2a 2a 20  UTF16.  /*.  ** 
12270 20 20 50 52 41 47 4d 41 20 65 6e 63 6f 64 69 6e    PRAGMA encodin
12280 67 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20  g.  **   PRAGMA 
12290 65 6e 63 6f 64 69 6e 67 20 3d 20 22 75 74 66 2d  encoding = "utf-
122a0 38 22 7c 22 75 74 66 2d 31 36 22 7c 22 75 74 66  8"|"utf-16"|"utf
122b0 2d 31 36 6c 65 22 7c 22 75 74 66 2d 31 36 62 65  -16le"|"utf-16be
122c0 22 0a 20 20 2a 2a 0a 20 20 2a 2a 20 49 6e 20 69  ".  **.  ** In i
122d0 74 73 20 66 69 72 73 74 20 66 6f 72 6d 2c 20 74  ts first form, t
122e0 68 69 73 20 70 72 61 67 6d 61 20 72 65 74 75 72  his pragma retur
122f0 6e 73 20 74 68 65 20 65 6e 63 6f 64 69 6e 67 20  ns the encoding 
12300 6f 66 20 74 68 65 20 6d 61 69 6e 0a 20 20 2a 2a  of the main.  **
12310 20 64 61 74 61 62 61 73 65 2e 20 49 66 20 74 68   database. If th
12320 65 20 64 61 74 61 62 61 73 65 20 69 73 20 6e 6f  e database is no
12330 74 20 69 6e 69 74 69 61 6c 69 7a 65 64 2c 20 69  t initialized, i
12340 74 20 69 73 20 69 6e 69 74 69 61 6c 69 7a 65 64  t is initialized
12350 20 6e 6f 77 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20   now..  **.  ** 
12360 54 68 65 20 73 65 63 6f 6e 64 20 66 6f 72 6d 20  The second form 
12370 6f 66 20 74 68 69 73 20 70 72 61 67 6d 61 20 69  of this pragma i
12380 73 20 61 20 6e 6f 2d 6f 70 20 69 66 20 74 68 65  s a no-op if the
12390 20 6d 61 69 6e 20 64 61 74 61 62 61 73 65 20 66   main database f
123a0 69 6c 65 0a 20 20 2a 2a 20 68 61 73 20 6e 6f 74  ile.  ** has not
123b0 20 61 6c 72 65 61 64 79 20 62 65 65 6e 20 69 6e   already been in
123c0 69 74 69 61 6c 69 7a 65 64 2e 20 49 6e 20 74 68  itialized. In th
123d0 69 73 20 63 61 73 65 20 69 74 20 73 65 74 73 20  is case it sets 
123e0 74 68 65 20 64 65 66 61 75 6c 74 0a 20 20 2a 2a  the default.  **
123f0 20 65 6e 63 6f 64 69 6e 67 20 74 68 61 74 20 77   encoding that w
12400 69 6c 6c 20 62 65 20 75 73 65 64 20 66 6f 72 20  ill be used for 
12410 74 68 65 20 6d 61 69 6e 20 64 61 74 61 62 61 73  the main databas
12420 65 20 66 69 6c 65 20 69 66 20 61 20 6e 65 77 20  e file if a new 
12430 66 69 6c 65 0a 20 20 2a 2a 20 69 73 20 63 72 65  file.  ** is cre
12440 61 74 65 64 2e 20 49 66 20 61 6e 20 65 78 69 73  ated. If an exis
12450 74 69 6e 67 20 6d 61 69 6e 20 64 61 74 61 62 61  ting main databa
12460 73 65 20 66 69 6c 65 20 69 73 20 6f 70 65 6e 65  se file is opene
12470 64 2c 20 74 68 65 6e 20 74 68 65 0a 20 20 2a 2a  d, then the.  **
12480 20 64 65 66 61 75 6c 74 20 74 65 78 74 20 65 6e   default text en
12490 63 6f 64 69 6e 67 20 66 6f 72 20 74 68 65 20 65  coding for the e
124a0 78 69 73 74 69 6e 67 20 64 61 74 61 62 61 73 65  xisting database
124b0 20 69 73 20 75 73 65 64 2e 0a 20 20 2a 2a 20 0a   is used..  ** .
124c0 20 20 2a 2a 20 49 6e 20 61 6c 6c 20 63 61 73 65    ** In all case
124d0 73 20 6e 65 77 20 64 61 74 61 62 61 73 65 73 20  s new databases 
124e0 63 72 65 61 74 65 64 20 75 73 69 6e 67 20 74 68  created using th
124f0 65 20 41 54 54 41 43 48 20 63 6f 6d 6d 61 6e 64  e ATTACH command
12500 20 61 72 65 0a 20 20 2a 2a 20 63 72 65 61 74 65   are.  ** create
12510 64 20 74 6f 20 75 73 65 20 74 68 65 20 73 61 6d  d to use the sam
12520 65 20 64 65 66 61 75 6c 74 20 74 65 78 74 20 65  e default text e
12530 6e 63 6f 64 69 6e 67 20 61 73 20 74 68 65 20 6d  ncoding as the m
12540 61 69 6e 20 64 61 74 61 62 61 73 65 2e 20 49 66  ain database. If
12550 0a 20 20 2a 2a 20 74 68 65 20 6d 61 69 6e 20 64  .  ** the main d
12560 61 74 61 62 61 73 65 20 68 61 73 20 6e 6f 74 20  atabase has not 
12570 62 65 65 6e 20 69 6e 69 74 69 61 6c 69 7a 65 64  been initialized
12580 20 61 6e 64 2f 6f 72 20 63 72 65 61 74 65 64 20   and/or created 
12590 77 68 65 6e 20 41 54 54 41 43 48 0a 20 20 2a 2a  when ATTACH.  **
125a0 20 69 73 20 65 78 65 63 75 74 65 64 2c 20 74 68   is executed, th
125b0 69 73 20 69 73 20 64 6f 6e 65 20 62 65 66 6f 72  is is done befor
125c0 65 20 74 68 65 20 41 54 54 41 43 48 20 6f 70 65  e the ATTACH ope
125d0 72 61 74 69 6f 6e 2e 0a 20 20 2a 2a 0a 20 20 2a  ration..  **.  *
125e0 2a 20 49 6e 20 74 68 65 20 73 65 63 6f 6e 64 20  * In the second 
125f0 66 6f 72 6d 20 74 68 69 73 20 70 72 61 67 6d 61  form this pragma
12600 20 73 65 74 73 20 74 68 65 20 74 65 78 74 20 65   sets the text e
12610 6e 63 6f 64 69 6e 67 20 74 6f 20 62 65 20 75 73  ncoding to be us
12620 65 64 20 69 6e 0a 20 20 2a 2a 20 6e 65 77 20 64  ed in.  ** new d
12630 61 74 61 62 61 73 65 20 66 69 6c 65 73 20 63 72  atabase files cr
12640 65 61 74 65 64 20 75 73 69 6e 67 20 74 68 69 73  eated using this
12650 20 64 61 74 61 62 61 73 65 20 68 61 6e 64 6c 65   database handle
12660 2e 20 49 74 20 69 73 20 6f 6e 6c 79 0a 20 20 2a  . It is only.  *
12670 2a 20 75 73 65 66 75 6c 20 69 66 20 69 6e 76 6f  * useful if invo
12680 6b 65 64 20 69 6d 6d 65 64 69 61 74 65 6c 79 20  ked immediately 
12690 61 66 74 65 72 20 74 68 65 20 6d 61 69 6e 20 64  after the main d
126a0 61 74 61 62 61 73 65 20 69 0a 20 20 2a 2f 0a 20  atabase i.  */. 
126b0 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 45 4e   case PragTyp_EN
126c0 43 4f 44 49 4e 47 3a 20 7b 0a 20 20 20 20 73 74  CODING: {.    st
126d0 61 74 69 63 20 63 6f 6e 73 74 20 73 74 72 75 63  atic const struc
126e0 74 20 45 6e 63 4e 61 6d 65 20 7b 0a 20 20 20 20  t EncName {.    
126f0 20 20 63 68 61 72 20 2a 7a 4e 61 6d 65 3b 0a 20    char *zName;. 
12700 20 20 20 20 20 75 38 20 65 6e 63 3b 0a 20 20 20       u8 enc;.   
12710 20 7d 20 65 6e 63 6e 61 6d 65 73 5b 5d 20 3d 20   } encnames[] = 
12720 7b 0a 20 20 20 20 20 20 7b 20 22 55 54 46 38 22  {.      { "UTF8"
12730 2c 20 20 20 20 20 53 51 4c 49 54 45 5f 55 54 46  ,     SQLITE_UTF
12740 38 20 20 20 20 20 20 20 20 7d 2c 0a 20 20 20 20  8        },.    
12750 20 20 7b 20 22 55 54 46 2d 38 22 2c 20 20 20 20    { "UTF-8",    
12760 53 51 4c 49 54 45 5f 55 54 46 38 20 20 20 20 20  SQLITE_UTF8     
12770 20 20 20 7d 2c 20 20 2f 2a 20 4d 75 73 74 20 62     },  /* Must b
12780 65 20 65 6c 65 6d 65 6e 74 20 5b 31 5d 20 2a 2f  e element [1] */
12790 0a 20 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36  .      { "UTF-16
127a0 6c 65 22 2c 20 53 51 4c 49 54 45 5f 55 54 46 31  le", SQLITE_UTF1
127b0 36 4c 45 20 20 20 20 20 7d 2c 20 20 2f 2a 20 4d  6LE     },  /* M
127c0 75 73 74 20 62 65 20 65 6c 65 6d 65 6e 74 20 5b  ust be element [
127d0 32 5d 20 2a 2f 0a 20 20 20 20 20 20 7b 20 22 55  2] */.      { "U
127e0 54 46 2d 31 36 62 65 22 2c 20 53 51 4c 49 54 45  TF-16be", SQLITE
127f0 5f 55 54 46 31 36 42 45 20 20 20 20 20 7d 2c 20  _UTF16BE     }, 
12800 20 2f 2a 20 4d 75 73 74 20 62 65 20 65 6c 65 6d   /* Must be elem
12810 65 6e 74 20 5b 33 5d 20 2a 2f 0a 20 20 20 20 20  ent [3] */.     
12820 20 7b 20 22 55 54 46 31 36 6c 65 22 2c 20 20 53   { "UTF16le",  S
12830 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20 20 20  QLITE_UTF16LE   
12840 20 20 7d 2c 0a 20 20 20 20 20 20 7b 20 22 55 54    },.      { "UT
12850 46 31 36 62 65 22 2c 20 20 53 51 4c 49 54 45 5f  F16be",  SQLITE_
12860 55 54 46 31 36 42 45 20 20 20 20 20 7d 2c 0a 20  UTF16BE     },. 
12870 20 20 20 20 20 7b 20 22 55 54 46 2d 31 36 22 2c       { "UTF-16",
12880 20 20 20 30 20 20 20 20 20 20 20 20 20 20 20 20     0            
12890 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53 51 4c 49        }, /* SQLI
128a0 54 45 5f 55 54 46 31 36 4e 41 54 49 56 45 20 2a  TE_UTF16NATIVE *
128b0 2f 0a 20 20 20 20 20 20 7b 20 22 55 54 46 31 36  /.      { "UTF16
128c0 22 2c 20 20 20 20 30 20 20 20 20 20 20 20 20 20  ",    0         
128d0 20 20 20 20 20 20 20 20 20 7d 2c 20 2f 2a 20 53           }, /* S
128e0 51 4c 49 54 45 5f 55 54 46 31 36 4e 41 54 49 56  QLITE_UTF16NATIV
128f0 45 20 2a 2f 0a 20 20 20 20 20 20 7b 20 30 2c 20  E */.      { 0, 
12900 30 20 7d 0a 20 20 20 20 7d 3b 0a 20 20 20 20 63  0 }.    };.    c
12910 6f 6e 73 74 20 73 74 72 75 63 74 20 45 6e 63 4e  onst struct EncN
12920 61 6d 65 20 2a 70 45 6e 63 3b 0a 20 20 20 20 69  ame *pEnc;.    i
12930 66 28 20 21 7a 52 69 67 68 74 20 29 7b 20 20 20  f( !zRight ){   
12940 20 2f 2a 20 22 50 52 41 47 4d 41 20 65 6e 63 6f   /* "PRAGMA enco
12950 64 69 6e 67 22 20 2a 2f 0a 20 20 20 20 20 20 69  ding" */.      i
12960 66 28 20 73 71 6c 69 74 65 33 52 65 61 64 53 63  f( sqlite3ReadSc
12970 68 65 6d 61 28 70 50 61 72 73 65 29 20 29 20 67  hema(pParse) ) g
12980 6f 74 6f 20 70 72 61 67 6d 61 5f 6f 75 74 3b 0a  oto pragma_out;.
12990 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
129a0 65 53 65 74 4e 75 6d 43 6f 6c 73 28 76 2c 20 31  eSetNumCols(v, 1
129b0 29 3b 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33  );.      sqlite3
129c0 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76  VdbeSetColName(v
129d0 2c 20 30 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d  , 0, COLNAME_NAM
129e0 45 2c 20 22 65 6e 63 6f 64 69 6e 67 22 2c 20 53  E, "encoding", S
129f0 51 4c 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20  QLITE_STATIC);. 
12a00 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
12a10 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 53 74 72  AddOp2(v, OP_Str
12a20 69 6e 67 38 2c 20 30 2c 20 31 29 3b 0a 20 20 20  ing8, 0, 1);.   
12a30 20 20 20 61 73 73 65 72 74 28 20 65 6e 63 6e 61     assert( encna
12a40 6d 65 73 5b 53 51 4c 49 54 45 5f 55 54 46 38 5d  mes[SQLITE_UTF8]
12a50 2e 65 6e 63 3d 3d 53 51 4c 49 54 45 5f 55 54 46  .enc==SQLITE_UTF
12a60 38 20 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72  8 );.      asser
12a70 74 28 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49  t( encnames[SQLI
12a80 54 45 5f 55 54 46 31 36 4c 45 5d 2e 65 6e 63 3d  TE_UTF16LE].enc=
12a90 3d 53 51 4c 49 54 45 5f 55 54 46 31 36 4c 45 20  =SQLITE_UTF16LE 
12aa0 29 3b 0a 20 20 20 20 20 20 61 73 73 65 72 74 28  );.      assert(
12ab0 20 65 6e 63 6e 61 6d 65 73 5b 53 51 4c 49 54 45   encnames[SQLITE
12ac0 5f 55 54 46 31 36 42 45 5d 2e 65 6e 63 3d 3d 53  _UTF16BE].enc==S
12ad0 51 4c 49 54 45 5f 55 54 46 31 36 42 45 20 29 3b  QLITE_UTF16BE );
12ae0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
12af0 62 65 43 68 61 6e 67 65 50 34 28 76 2c 20 2d 31  beChangeP4(v, -1
12b00 2c 20 65 6e 63 6e 61 6d 65 73 5b 45 4e 43 28 70  , encnames[ENC(p
12b10 50 61 72 73 65 2d 3e 64 62 29 5d 2e 7a 4e 61 6d  Parse->db)].zNam
12b20 65 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20  e, P4_STATIC);. 
12b30 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65       sqlite3Vdbe
12b40 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65 73  AddOp2(v, OP_Res
12b50 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a 20  ultRow, 1, 1);. 
12b60 20 20 20 7d 65 6c 73 65 7b 20 20 20 20 20 20 20     }else{       
12b70 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
12b80 20 2f 2a 20 22 50 52 41 47 4d 41 20 65 6e 63 6f   /* "PRAGMA enco
12b90 64 69 6e 67 20 3d 20 58 58 58 22 20 2a 2f 0a 20  ding = XXX" */. 
12ba0 20 20 20 20 20 2f 2a 20 4f 6e 6c 79 20 63 68 61       /* Only cha
12bb0 6e 67 65 20 74 68 65 20 76 61 6c 75 65 20 6f 66  nge the value of
12bc0 20 73 71 6c 69 74 65 2e 65 6e 63 20 69 66 20 74   sqlite.enc if t
12bd0 68 65 20 64 61 74 61 62 61 73 65 20 68 61 6e 64  he database hand
12be0 6c 65 20 69 73 20 6e 6f 74 0a 20 20 20 20 20 20  le is not.      
12bf0 2a 2a 20 69 6e 69 74 69 61 6c 69 7a 65 64 2e 20  ** initialized. 
12c00 49 66 20 74 68 65 20 6d 61 69 6e 20 64 61 74 61  If the main data
12c10 62 61 73 65 20 65 78 69 73 74 73 2c 20 74 68 65  base exists, the
12c20 20 6e 65 77 20 73 71 6c 69 74 65 2e 65 6e 63 20   new sqlite.enc 
12c30 76 61 6c 75 65 0a 20 20 20 20 20 20 2a 2a 20 77  value.      ** w
12c40 69 6c 6c 20 62 65 20 6f 76 65 72 77 72 69 74 74  ill be overwritt
12c50 65 6e 20 77 68 65 6e 20 74 68 65 20 73 63 68 65  en when the sche
12c60 6d 61 20 69 73 20 6e 65 78 74 20 6c 6f 61 64 65  ma is next loade
12c70 64 2e 20 49 66 20 69 74 20 64 6f 65 73 20 6e 6f  d. If it does no
12c80 74 0a 20 20 20 20 20 20 2a 2a 20 61 6c 72 65 61  t.      ** alrea
12c90 64 79 20 65 78 69 73 74 73 2c 20 69 74 20 77 69  dy exists, it wi
12ca0 6c 6c 20 62 65 20 63 72 65 61 74 65 64 20 74 6f  ll be created to
12cb0 20 75 73 65 20 74 68 65 20 6e 65 77 20 65 6e 63   use the new enc
12cc0 6f 64 69 6e 67 20 76 61 6c 75 65 2e 0a 20 20 20  oding value..   
12cd0 20 20 20 2a 2f 0a 20 20 20 20 20 20 69 66 28 20     */.      if( 
12ce0 0a 20 20 20 20 20 20 20 20 21 28 44 62 48 61 73  .        !(DbHas
12cf0 50 72 6f 70 65 72 74 79 28 64 62 2c 20 30 2c 20  Property(db, 0, 
12d00 44 42 5f 53 63 68 65 6d 61 4c 6f 61 64 65 64 29  DB_SchemaLoaded)
12d10 29 20 7c 7c 20 0a 20 20 20 20 20 20 20 20 44 62  ) || .        Db
12d20 48 61 73 50 72 6f 70 65 72 74 79 28 64 62 2c 20  HasProperty(db, 
12d30 30 2c 20 44 42 5f 45 6d 70 74 79 29 20 0a 20 20  0, DB_Empty) .  
12d40 20 20 20 20 29 7b 0a 20 20 20 20 20 20 20 20 66      ){.        f
12d50 6f 72 28 70 45 6e 63 3d 26 65 6e 63 6e 61 6d 65  or(pEnc=&encname
12d60 73 5b 30 5d 3b 20 70 45 6e 63 2d 3e 7a 4e 61 6d  s[0]; pEnc->zNam
12d70 65 3b 20 70 45 6e 63 2b 2b 29 7b 0a 20 20 20 20  e; pEnc++){.    
12d80 20 20 20 20 20 20 69 66 28 20 30 3d 3d 73 71 6c        if( 0==sql
12d90 69 74 65 33 53 74 72 49 43 6d 70 28 7a 52 69 67  ite3StrICmp(zRig
12da0 68 74 2c 20 70 45 6e 63 2d 3e 7a 4e 61 6d 65 29  ht, pEnc->zName)
12db0 20 29 7b 0a 20 20 20 20 20 20 20 20 20 20 20 20   ){.            
12dc0 45 4e 43 28 70 50 61 72 73 65 2d 3e 64 62 29 20  ENC(pParse->db) 
12dd0 3d 20 70 45 6e 63 2d 3e 65 6e 63 20 3f 20 70 45  = pEnc->enc ? pE
12de0 6e 63 2d 3e 65 6e 63 20 3a 20 53 51 4c 49 54 45  nc->enc : SQLITE
12df0 5f 55 54 46 31 36 4e 41 54 49 56 45 3b 0a 20 20  _UTF16NATIVE;.  
12e00 20 20 20 20 20 20 20 20 20 20 62 72 65 61 6b 3b            break;
12e10 0a 20 20 20 20 20 20 20 20 20 20 7d 0a 20 20 20  .          }.   
12e20 20 20 20 20 20 7d 0a 20 20 20 20 20 20 20 20 69       }.        i
12e30 66 28 20 21 70 45 6e 63 2d 3e 7a 4e 61 6d 65 20  f( !pEnc->zName 
12e40 29 7b 0a 20 20 20 20 20 20 20 20 20 20 73 71 6c  ){.          sql
12e50 69 74 65 33 45 72 72 6f 72 4d 73 67 28 70 50 61  ite3ErrorMsg(pPa
12e60 72 73 65 2c 20 22 75 6e 73 75 70 70 6f 72 74 65  rse, "unsupporte
12e70 64 20 65 6e 63 6f 64 69 6e 67 3a 20 25 73 22 2c  d encoding: %s",
12e80 20 7a 52 69 67 68 74 29 3b 0a 20 20 20 20 20 20   zRight);.      
12e90 20 20 7d 0a 20 20 20 20 20 20 7d 0a 20 20 20 20    }.      }.    
12ea0 7d 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 23  }.  }.  break;.#
12eb0 65 6e 64 69 66 20 2f 2a 20 53 51 4c 49 54 45 5f  endif /* SQLITE_
12ec0 4f 4d 49 54 5f 55 54 46 31 36 20 2a 2f 0a 0a 23  OMIT_UTF16 */..#
12ed0 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f 4f 4d  ifndef SQLITE_OM
12ee0 49 54 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f  IT_SCHEMA_VERSIO
12ef0 4e 5f 50 52 41 47 4d 41 53 0a 20 20 2f 2a 0a 20  N_PRAGMAS.  /*. 
12f00 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61   **   PRAGMA [da
12f10 74 61 62 61 73 65 2e 5d 73 63 68 65 6d 61 5f 76  tabase.]schema_v
12f20 65 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52  ersion.  **   PR
12f30 41 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d  AGMA [database.]
12f40 73 63 68 65 6d 61 5f 76 65 72 73 69 6f 6e 20 3d  schema_version =
12f50 20 3c 69 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a   <integer>.  **.
12f60 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64    **   PRAGMA [d
12f70 61 74 61 62 61 73 65 2e 5d 75 73 65 72 5f 76 65  atabase.]user_ve
12f80 72 73 69 6f 6e 0a 20 20 2a 2a 20 20 20 50 52 41  rsion.  **   PRA
12f90 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 75  GMA [database.]u
12fa0 73 65 72 5f 76 65 72 73 69 6f 6e 20 3d 20 3c 69  ser_version = <i
12fb0 6e 74 65 67 65 72 3e 0a 20 20 2a 2a 0a 20 20 2a  nteger>.  **.  *
12fc0 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74 61  *   PRAGMA [data
12fd0 62 61 73 65 2e 5d 66 72 65 65 6c 69 73 74 5f 63  base.]freelist_c
12fe0 6f 75 6e 74 20 3d 20 3c 69 6e 74 65 67 65 72 3e  ount = <integer>
12ff0 0a 20 20 2a 2a 0a 20 20 2a 2a 20 20 20 50 52 41  .  **.  **   PRA
13000 47 4d 41 20 5b 64 61 74 61 62 61 73 65 2e 5d 61  GMA [database.]a
13010 70 70 6c 69 63 61 74 69 6f 6e 5f 69 64 0a 20 20  pplication_id.  
13020 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74  **   PRAGMA [dat
13030 61 62 61 73 65 2e 5d 61 70 70 6c 69 63 61 74 69  abase.]applicati
13040 6f 6e 5f 69 64 20 3d 20 3c 69 6e 74 65 67 65 72  on_id = <integer
13050 3e 0a 20 20 2a 2a 0a 20 20 2a 2a 20 54 68 65 20  >.  **.  ** The 
13060 70 72 61 67 6d 61 27 73 20 73 63 68 65 6d 61 5f  pragma's schema_
13070 76 65 72 73 69 6f 6e 20 61 6e 64 20 75 73 65 72  version and user
13080 5f 76 65 72 73 69 6f 6e 20 61 72 65 20 75 73 65  _version are use
13090 64 20 74 6f 20 73 65 74 20 6f 72 20 67 65 74 0a  d to set or get.
130a0 20 20 2a 2a 20 74 68 65 20 76 61 6c 75 65 20 6f    ** the value o
130b0 66 20 74 68 65 20 73 63 68 65 6d 61 2d 76 65 72  f the schema-ver
130c0 73 69 6f 6e 20 61 6e 64 20 75 73 65 72 2d 76 65  sion and user-ve
130d0 72 73 69 6f 6e 2c 20 72 65 73 70 65 63 74 69 76  rsion, respectiv
130e0 65 6c 79 2e 20 42 6f 74 68 0a 20 20 2a 2a 20 74  ely. Both.  ** t
130f0 68 65 20 73 63 68 65 6d 61 2d 76 65 72 73 69 6f  he schema-versio
13100 6e 20 61 6e 64 20 74 68 65 20 75 73 65 72 2d 76  n and the user-v
13110 65 72 73 69 6f 6e 20 61 72 65 20 33 32 2d 62 69  ersion are 32-bi
13120 74 20 73 69 67 6e 65 64 20 69 6e 74 65 67 65 72  t signed integer
13130 73 0a 20 20 2a 2a 20 73 74 6f 72 65 64 20 69 6e  s.  ** stored in
13140 20 74 68 65 20 64 61 74 61 62 61 73 65 20 68 65   the database he
13150 61 64 65 72 2e 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ader..  **.  ** 
13160 54 68 65 20 73 63 68 65 6d 61 2d 63 6f 6f 6b 69  The schema-cooki
13170 65 20 69 73 20 75 73 75 61 6c 6c 79 20 6f 6e 6c  e is usually onl
13180 79 20 6d 61 6e 69 70 75 6c 61 74 65 64 20 69 6e  y manipulated in
13190 74 65 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69  ternally by SQLi
131a0 74 65 2e 20 49 74 0a 20 20 2a 2a 20 69 73 20 69  te. It.  ** is i
131b0 6e 63 72 65 6d 65 6e 74 65 64 20 62 79 20 53 51  ncremented by SQ
131c0 4c 69 74 65 20 77 68 65 6e 65 76 65 72 20 74 68  Lite whenever th
131d0 65 20 64 61 74 61 62 61 73 65 20 73 63 68 65 6d  e database schem
131e0 61 20 69 73 20 6d 6f 64 69 66 69 65 64 20 28 62  a is modified (b
131f0 79 0a 20 20 2a 2a 20 63 72 65 61 74 69 6e 67 20  y.  ** creating 
13200 6f 72 20 64 72 6f 70 70 69 6e 67 20 61 20 74 61  or dropping a ta
13210 62 6c 65 20 6f 72 20 69 6e 64 65 78 29 2e 20 54  ble or index). T
13220 68 65 20 73 63 68 65 6d 61 20 76 65 72 73 69 6f  he schema versio
13230 6e 20 69 73 20 75 73 65 64 20 62 79 0a 20 20 2a  n is used by.  *
13240 2a 20 53 51 4c 69 74 65 20 65 61 63 68 20 74 69  * SQLite each ti
13250 6d 65 20 61 20 71 75 65 72 79 20 69 73 20 65 78  me a query is ex
13260 65 63 75 74 65 64 20 74 6f 20 65 6e 73 75 72 65  ecuted to ensure
13270 20 74 68 61 74 20 74 68 65 20 69 6e 74 65 72 6e   that the intern
13280 61 6c 20 63 61 63 68 65 0a 20 20 2a 2a 20 6f 66  al cache.  ** of
13290 20 74 68 65 20 73 63 68 65 6d 61 20 75 73 65 64   the schema used
132a0 20 77 68 65 6e 20 63 6f 6d 70 69 6c 69 6e 67 20   when compiling 
132b0 74 68 65 20 53 51 4c 20 71 75 65 72 79 20 6d 61  the SQL query ma
132c0 74 63 68 65 73 20 74 68 65 20 73 63 68 65 6d 61  tches the schema
132d0 20 6f 66 0a 20 20 2a 2a 20 74 68 65 20 64 61 74   of.  ** the dat
132e0 61 62 61 73 65 20 61 67 61 69 6e 73 74 20 77 68  abase against wh
132f0 69 63 68 20 74 68 65 20 63 6f 6d 70 69 6c 65 64  ich the compiled
13300 20 71 75 65 72 79 20 69 73 20 61 63 74 75 61 6c   query is actual
13310 6c 79 20 65 78 65 63 75 74 65 64 2e 0a 20 20 2a  ly executed..  *
13320 2a 20 53 75 62 76 65 72 74 69 6e 67 20 74 68 69  * Subverting thi
13330 73 20 6d 65 63 68 61 6e 69 73 6d 20 62 79 20 75  s mechanism by u
13340 73 69 6e 67 20 22 50 52 41 47 4d 41 20 73 63 68  sing "PRAGMA sch
13350 65 6d 61 5f 76 65 72 73 69 6f 6e 22 20 74 6f 20  ema_version" to 
13360 6d 6f 64 69 66 79 0a 20 20 2a 2a 20 74 68 65 20  modify.  ** the 
13370 73 63 68 65 6d 61 2d 76 65 72 73 69 6f 6e 20 69  schema-version i
13380 73 20 70 6f 74 65 6e 74 69 61 6c 6c 79 20 64 61  s potentially da
13390 6e 67 65 72 6f 75 73 20 61 6e 64 20 6d 61 79 20  ngerous and may 
133a0 6c 65 61 64 20 74 6f 20 70 72 6f 67 72 61 6d 0a  lead to program.
133b0 20 20 2a 2a 20 63 72 61 73 68 65 73 20 6f 72 20    ** crashes or 
133c0 64 61 74 61 62 61 73 65 20 63 6f 72 72 75 70 74  database corrupt
133d0 69 6f 6e 2e 20 55 73 65 20 77 69 74 68 20 63 61  ion. Use with ca
133e0 75 74 69 6f 6e 21 0a 20 20 2a 2a 0a 20 20 2a 2a  ution!.  **.  **
133f0 20 54 68 65 20 75 73 65 72 2d 76 65 72 73 69 6f   The user-versio
13400 6e 20 69 73 20 6e 6f 74 20 75 73 65 64 20 69 6e  n is not used in
13410 74 65 72 6e 61 6c 6c 79 20 62 79 20 53 51 4c 69  ternally by SQLi
13420 74 65 2e 20 49 74 20 6d 61 79 20 62 65 20 75 73  te. It may be us
13430 65 64 20 62 79 0a 20 20 2a 2a 20 61 70 70 6c 69  ed by.  ** appli
13440 63 61 74 69 6f 6e 73 20 66 6f 72 20 61 6e 79 20  cations for any 
13450 70 75 72 70 6f 73 65 2e 0a 20 20 2a 2f 0a 20 20  purpose..  */.  
13460 63 61 73 65 20 50 72 61 67 54 79 70 5f 48 45 41  case PragTyp_HEA
13470 44 45 52 5f 56 41 4c 55 45 3a 20 7b 0a 20 20 20  DER_VALUE: {.   
13480 20 69 6e 74 20 69 43 6f 6f 6b 69 65 3b 20 20 20   int iCookie;   
13490 2f 2a 20 43 6f 6f 6b 69 65 20 69 6e 64 65 78 2e  /* Cookie index.
134a0 20 31 20 66 6f 72 20 73 63 68 65 6d 61 2d 63 6f   1 for schema-co
134b0 6f 6b 69 65 2c 20 36 20 66 6f 72 20 75 73 65 72  okie, 6 for user
134c0 2d 63 6f 6f 6b 69 65 2e 20 2a 2f 0a 20 20 20 20  -cookie. */.    
134d0 73 71 6c 69 74 65 33 56 64 62 65 55 73 65 73 42  sqlite3VdbeUsesB
134e0 74 72 65 65 28 76 2c 20 69 44 62 29 3b 0a 20 20  tree(v, iDb);.  
134f0 20 20 73 77 69 74 63 68 28 20 7a 4c 65 66 74 5b    switch( zLeft[
13500 30 5d 20 29 7b 0a 20 20 20 20 20 20 63 61 73 65  0] ){.      case
13510 20 27 61 27 3a 20 63 61 73 65 20 27 41 27 3a 0a   'a': case 'A':.
13520 20 20 20 20 20 20 20 20 69 43 6f 6f 6b 69 65 20          iCookie 
13530 3d 20 42 54 52 45 45 5f 41 50 50 4c 49 43 41 54  = BTREE_APPLICAT
13540 49 4f 4e 5f 49 44 3b 0a 20 20 20 20 20 20 20 20  ION_ID;.        
13550 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63 61 73  break;.      cas
13560 65 20 27 66 27 3a 20 63 61 73 65 20 27 46 27 3a  e 'f': case 'F':
13570 0a 20 20 20 20 20 20 20 20 69 43 6f 6f 6b 69 65  .        iCookie
13580 20 3d 20 42 54 52 45 45 5f 46 52 45 45 5f 50 41   = BTREE_FREE_PA
13590 47 45 5f 43 4f 55 4e 54 3b 0a 20 20 20 20 20 20  GE_COUNT;.      
135a0 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20 63    break;.      c
135b0 61 73 65 20 27 73 27 3a 20 63 61 73 65 20 27 53  ase 's': case 'S
135c0 27 3a 0a 20 20 20 20 20 20 20 20 69 43 6f 6f 6b  ':.        iCook
135d0 69 65 20 3d 20 42 54 52 45 45 5f 53 43 48 45 4d  ie = BTREE_SCHEM
135e0 41 5f 56 45 52 53 49 4f 4e 3b 0a 20 20 20 20 20  A_VERSION;.     
135f0 20 20 20 62 72 65 61 6b 3b 0a 20 20 20 20 20 20     break;.      
13600 64 65 66 61 75 6c 74 3a 0a 20 20 20 20 20 20 20  default:.       
13610 20 69 43 6f 6f 6b 69 65 20 3d 20 42 54 52 45 45   iCookie = BTREE
13620 5f 55 53 45 52 5f 56 45 52 53 49 4f 4e 3b 0a 20  _USER_VERSION;. 
13630 20 20 20 20 20 20 20 62 72 65 61 6b 3b 0a 20 20         break;.  
13640 20 20 7d 0a 0a 20 20 20 20 69 66 28 20 7a 52 69    }..    if( zRi
13650 67 68 74 20 26 26 20 69 43 6f 6f 6b 69 65 21 3d  ght && iCookie!=
13660 42 54 52 45 45 5f 46 52 45 45 5f 50 41 47 45 5f  BTREE_FREE_PAGE_
13670 43 4f 55 4e 54 20 29 7b 0a 20 20 20 20 20 20 2f  COUNT ){.      /
13680 2a 20 57 72 69 74 65 20 74 68 65 20 73 70 65 63  * Write the spec
13690 69 66 69 65 64 20 63 6f 6f 6b 69 65 20 76 61 6c  ified cookie val
136a0 75 65 20 2a 2f 0a 20 20 20 20 20 20 73 74 61 74  ue */.      stat
136b0 69 63 20 63 6f 6e 73 74 20 56 64 62 65 4f 70 4c  ic const VdbeOpL
136c0 69 73 74 20 73 65 74 43 6f 6f 6b 69 65 5b 5d 20  ist setCookie[] 
136d0 3d 20 7b 0a 20 20 20 20 20 20 20 20 7b 20 4f 50  = {.        { OP
136e0 5f 54 72 61 6e 73 61 63 74 69 6f 6e 2c 20 20 20  _Transaction,   
136f0 20 30 2c 20 20 31 2c 20 20 30 7d 2c 20 20 20 20   0,  1,  0},    
13700 2f 2a 20 30 20 2a 2f 0a 20 20 20 20 20 20 20 20  /* 0 */.        
13710 7b 20 4f 50 5f 49 6e 74 65 67 65 72 2c 20 20 20  { OP_Integer,   
13720 20 20 20 20 20 30 2c 20 20 31 2c 20 20 30 7d 2c       0,  1,  0},
13730 20 20 20 20 2f 2a 20 31 20 2a 2f 0a 20 20 20 20      /* 1 */.    
13740 20 20 20 20 7b 20 4f 50 5f 53 65 74 43 6f 6f 6b      { OP_SetCook
13750 69 65 2c 20 20 20 20 20 20 30 2c 20 20 30 2c 20  ie,      0,  0, 
13760 20 31 7d 2c 20 20 20 20 2f 2a 20 32 20 2a 2f 0a   1},    /* 2 */.
13770 20 20 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69        };.      i
13780 6e 74 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65  nt addr = sqlite
13790 33 56 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76  3VdbeAddOpList(v
137a0 2c 20 41 72 72 61 79 53 69 7a 65 28 73 65 74 43  , ArraySize(setC
137b0 6f 6f 6b 69 65 29 2c 20 73 65 74 43 6f 6f 6b 69  ookie), setCooki
137c0 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  e, 0);.      sql
137d0 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
137e0 28 76 2c 20 61 64 64 72 2c 20 69 44 62 29 3b 0a  (v, addr, iDb);.
137f0 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
13800 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64  eChangeP1(v, add
13810 72 2b 31 2c 20 73 71 6c 69 74 65 33 41 74 6f 69  r+1, sqlite3Atoi
13820 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20 20  (zRight));.     
13830 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
13840 67 65 50 31 28 76 2c 20 61 64 64 72 2b 32 2c 20  geP1(v, addr+2, 
13850 69 44 62 29 3b 0a 20 20 20 20 20 20 73 71 6c 69  iDb);.      sqli
13860 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 32 28  te3VdbeChangeP2(
13870 76 2c 20 61 64 64 72 2b 32 2c 20 69 43 6f 6f 6b  v, addr+2, iCook
13880 69 65 29 3b 0a 20 20 20 20 7d 65 6c 73 65 7b 0a  ie);.    }else{.
13890 20 20 20 20 20 20 2f 2a 20 52 65 61 64 20 74 68        /* Read th
138a0 65 20 73 70 65 63 69 66 69 65 64 20 63 6f 6f 6b  e specified cook
138b0 69 65 20 76 61 6c 75 65 20 2a 2f 0a 20 20 20 20  ie value */.    
138c0 20 20 73 74 61 74 69 63 20 63 6f 6e 73 74 20 56    static const V
138d0 64 62 65 4f 70 4c 69 73 74 20 72 65 61 64 43 6f  dbeOpList readCo
138e0 6f 6b 69 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20  okie[] = {.     
138f0 20 20 20 7b 20 4f 50 5f 54 72 61 6e 73 61 63 74     { OP_Transact
13900 69 6f 6e 2c 20 20 20 20 20 30 2c 20 20 30 2c 20  ion,     0,  0, 
13910 20 30 7d 2c 20 20 20 20 2f 2a 20 30 20 2a 2f 0a   0},    /* 0 */.
13920 20 20 20 20 20 20 20 20 7b 20 4f 50 5f 52 65 61          { OP_Rea
13930 64 43 6f 6f 6b 69 65 2c 20 20 20 20 20 20 30 2c  dCookie,      0,
13940 20 20 31 2c 20 20 30 7d 2c 20 20 20 20 2f 2a 20    1,  0},    /* 
13950 31 20 2a 2f 0a 20 20 20 20 20 20 20 20 7b 20 4f  1 */.        { O
13960 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20 20 20 20  P_ResultRow,    
13970 20 20 20 31 2c 20 20 31 2c 20 20 30 7d 0a 20 20     1,  1,  0}.  
13980 20 20 20 20 7d 3b 0a 20 20 20 20 20 20 69 6e 74      };.      int
13990 20 61 64 64 72 20 3d 20 73 71 6c 69 74 65 33 56   addr = sqlite3V
139a0 64 62 65 41 64 64 4f 70 4c 69 73 74 28 76 2c 20  dbeAddOpList(v, 
139b0 41 72 72 61 79 53 69 7a 65 28 72 65 61 64 43 6f  ArraySize(readCo
139c0 6f 6b 69 65 29 2c 20 72 65 61 64 43 6f 6f 6b 69  okie), readCooki
139d0 65 2c 20 30 29 3b 0a 20 20 20 20 20 20 73 71 6c  e, 0);.      sql
139e0 69 74 65 33 56 64 62 65 43 68 61 6e 67 65 50 31  ite3VdbeChangeP1
139f0 28 76 2c 20 61 64 64 72 2c 20 69 44 62 29 3b 0a  (v, addr, iDb);.
13a00 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
13a10 65 43 68 61 6e 67 65 50 31 28 76 2c 20 61 64 64  eChangeP1(v, add
13a20 72 2b 31 2c 20 69 44 62 29 3b 0a 20 20 20 20 20  r+1, iDb);.     
13a30 20 73 71 6c 69 74 65 33 56 64 62 65 43 68 61 6e   sqlite3VdbeChan
13a40 67 65 50 33 28 76 2c 20 61 64 64 72 2b 31 2c 20  geP3(v, addr+1, 
13a50 69 43 6f 6f 6b 69 65 29 3b 0a 20 20 20 20 20 20  iCookie);.      
13a60 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75  sqlite3VdbeSetNu
13a70 6d 43 6f 6c 73 28 76 2c 20 31 29 3b 0a 20 20 20  mCols(v, 1);.   
13a80 20 20 20 73 71 6c 69 74 65 33 56 64 62 65 53 65     sqlite3VdbeSe
13a90 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43  tColName(v, 0, C
13aa0 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 7a 4c 65  OLNAME_NAME, zLe
13ab0 66 74 2c 20 53 51 4c 49 54 45 5f 54 52 41 4e 53  ft, SQLITE_TRANS
13ac0 49 45 4e 54 29 3b 0a 20 20 20 20 7d 0a 20 20 7d  IENT);.    }.  }
13ad0 0a 20 20 62 72 65 61 6b 3b 0a 23 65 6e 64 69 66  .  break;.#endif
13ae0 20 2f 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f   /* SQLITE_OMIT_
13af0 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f 50  SCHEMA_VERSION_P
13b00 52 41 47 4d 41 53 20 2a 2f 0a 0a 23 69 66 6e 64  RAGMAS */..#ifnd
13b10 65 66 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 43  ef SQLITE_OMIT_C
13b20 4f 4d 50 49 4c 45 4f 50 54 49 4f 4e 5f 44 49 41  OMPILEOPTION_DIA
13b30 47 53 0a 20 20 2f 2a 0a 20 20 2a 2a 20 20 20 50  GS.  /*.  **   P
13b40 52 41 47 4d 41 20 63 6f 6d 70 69 6c 65 5f 6f 70  RAGMA compile_op
13b50 74 69 6f 6e 73 0a 20 20 2a 2a 0a 20 20 2a 2a 20  tions.  **.  ** 
13b60 52 65 74 75 72 6e 20 74 68 65 20 6e 61 6d 65 73  Return the names
13b70 20 6f 66 20 61 6c 6c 20 63 6f 6d 70 69 6c 65 2d   of all compile-
13b80 74 69 6d 65 20 6f 70 74 69 6f 6e 73 20 75 73 65  time options use
13b90 64 20 69 6e 20 74 68 69 73 20 62 75 69 6c 64 2c  d in this build,
13ba0 0a 20 20 2a 2a 20 6f 6e 65 20 6f 70 74 69 6f 6e  .  ** one option
13bb0 20 70 65 72 20 72 6f 77 2e 0a 20 20 2a 2f 0a 20   per row..  */. 
13bc0 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 43 4f   case PragTyp_CO
13bd0 4d 50 49 4c 45 5f 4f 50 54 49 4f 4e 53 3a 20 7b  MPILE_OPTIONS: {
13be0 0a 20 20 20 20 69 6e 74 20 69 20 3d 20 30 3b 0a  .    int i = 0;.
13bf0 20 20 20 20 63 6f 6e 73 74 20 63 68 61 72 20 2a      const char *
13c00 7a 4f 70 74 3b 0a 20 20 20 20 73 71 6c 69 74 65  zOpt;.    sqlite
13c10 33 56 64 62 65 53 65 74 4e 75 6d 43 6f 6c 73 28  3VdbeSetNumCols(
13c20 76 2c 20 31 29 3b 0a 20 20 20 20 70 50 61 72 73  v, 1);.    pPars
13c30 65 2d 3e 6e 4d 65 6d 20 3d 20 31 3b 0a 20 20 20  e->nMem = 1;.   
13c40 20 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43   sqlite3VdbeSetC
13c50 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c 20 43 4f 4c  olName(v, 0, COL
13c60 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 6f 6d 70  NAME_NAME, "comp
13c70 69 6c 65 5f 6f 70 74 69 6f 6e 22 2c 20 53 51 4c  ile_option", SQL
13c80 49 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20  ITE_STATIC);.   
13c90 20 77 68 69 6c 65 28 20 28 7a 4f 70 74 20 3d 20   while( (zOpt = 
13ca0 73 71 6c 69 74 65 33 5f 63 6f 6d 70 69 6c 65 6f  sqlite3_compileo
13cb0 70 74 69 6f 6e 5f 67 65 74 28 69 2b 2b 29 29 21  ption_get(i++))!
13cc0 3d 30 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69  =0 ){.      sqli
13cd0 74 65 33 56 64 62 65 41 64 64 4f 70 34 28 76 2c  te3VdbeAddOp4(v,
13ce0 20 4f 50 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20   OP_String8, 0, 
13cf0 31 2c 20 30 2c 20 7a 4f 70 74 2c 20 30 29 3b 0a  1, 0, zOpt, 0);.
13d00 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64 62        sqlite3Vdb
13d10 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52 65  eAddOp2(v, OP_Re
13d20 73 75 6c 74 52 6f 77 2c 20 31 2c 20 31 29 3b 0a  sultRow, 1, 1);.
13d30 20 20 20 20 7d 0a 20 20 7d 0a 20 20 62 72 65 61      }.  }.  brea
13d40 6b 3b 0a 23 65 6e 64 69 66 20 2f 2a 20 53 51 4c  k;.#endif /* SQL
13d50 49 54 45 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45  ITE_OMIT_COMPILE
13d60 4f 50 54 49 4f 4e 5f 44 49 41 47 53 20 2a 2f 0a  OPTION_DIAGS */.
13d70 0a 23 69 66 6e 64 65 66 20 53 51 4c 49 54 45 5f  .#ifndef SQLITE_
13d80 4f 4d 49 54 5f 57 41 4c 0a 20 20 2f 2a 0a 20 20  OMIT_WAL.  /*.  
13d90 2a 2a 20 20 20 50 52 41 47 4d 41 20 5b 64 61 74  **   PRAGMA [dat
13da0 61 62 61 73 65 2e 5d 77 61 6c 5f 63 68 65 63 6b  abase.]wal_check
13db0 70 6f 69 6e 74 20 3d 20 70 61 73 73 69 76 65 7c  point = passive|
13dc0 66 75 6c 6c 7c 72 65 73 74 61 72 74 7c 74 72 75  full|restart|tru
13dd0 6e 63 61 74 65 0a 20 20 2a 2a 0a 20 20 2a 2a 20  ncate.  **.  ** 
13de0 43 68 65 63 6b 70 6f 69 6e 74 20 74 68 65 20 64  Checkpoint the d
13df0 61 74 61 62 61 73 65 2e 0a 20 20 2a 2f 0a 20 20  atabase..  */.  
13e00 63 61 73 65 20 50 72 61 67 54 79 70 5f 57 41 4c  case PragTyp_WAL
13e10 5f 43 48 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20  _CHECKPOINT: {. 
13e20 20 20 20 69 6e 74 20 69 42 74 20 3d 20 28 70 49     int iBt = (pI
13e30 64 32 2d 3e 7a 3f 69 44 62 3a 53 51 4c 49 54 45  d2->z?iDb:SQLITE
13e40 5f 4d 41 58 5f 41 54 54 41 43 48 45 44 29 3b 0a  _MAX_ATTACHED);.
13e50 20 20 20 20 69 6e 74 20 65 4d 6f 64 65 20 3d 20      int eMode = 
13e60 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
13e70 54 5f 50 41 53 53 49 56 45 3b 0a 20 20 20 20 69  T_PASSIVE;.    i
13e80 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20  f( zRight ){.   
13e90 20 20 20 69 66 28 20 73 71 6c 69 74 65 33 53 74     if( sqlite3St
13ea0 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 66  rICmp(zRight, "f
13eb0 75 6c 6c 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  ull")==0 ){.    
13ec0 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49      eMode = SQLI
13ed0 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 46 55  TE_CHECKPOINT_FU
13ee0 4c 4c 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65 20  LL;.      }else 
13ef0 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 49 43  if( sqlite3StrIC
13f00 6d 70 28 7a 52 69 67 68 74 2c 20 22 72 65 73 74  mp(zRight, "rest
13f10 61 72 74 22 29 3d 3d 30 20 29 7b 0a 20 20 20 20  art")==0 ){.    
13f20 20 20 20 20 65 4d 6f 64 65 20 3d 20 53 51 4c 49      eMode = SQLI
13f30 54 45 5f 43 48 45 43 4b 50 4f 49 4e 54 5f 52 45  TE_CHECKPOINT_RE
13f40 53 54 41 52 54 3b 0a 20 20 20 20 20 20 7d 65 6c  START;.      }el
13f50 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 53 74  se if( sqlite3St
13f60 72 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 74  rICmp(zRight, "t
13f70 72 75 6e 63 61 74 65 22 29 3d 3d 30 20 29 7b 0a  runcate")==0 ){.
13f80 20 20 20 20 20 20 20 20 65 4d 6f 64 65 20 3d 20          eMode = 
13f90 53 51 4c 49 54 45 5f 43 48 45 43 4b 50 4f 49 4e  SQLITE_CHECKPOIN
13fa0 54 5f 54 52 55 4e 43 41 54 45 3b 0a 20 20 20 20  T_TRUNCATE;.    
13fb0 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20 20 73 71    }.    }.    sq
13fc0 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d 43  lite3VdbeSetNumC
13fd0 6f 6c 73 28 76 2c 20 33 29 3b 0a 20 20 20 20 70  ols(v, 3);.    p
13fe0 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 33 3b  Parse->nMem = 3;
13ff0 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62 65  .    sqlite3Vdbe
14000 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30 2c  SetColName(v, 0,
14010 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20 22   COLNAME_NAME, "
14020 62 75 73 79 22 2c 20 53 51 4c 49 54 45 5f 53 54  busy", SQLITE_ST
14030 41 54 49 43 29 3b 0a 20 20 20 20 73 71 6c 69 74  ATIC);.    sqlit
14040 65 33 56 64 62 65 53 65 74 43 6f 6c 4e 61 6d 65  e3VdbeSetColName
14050 28 76 2c 20 31 2c 20 43 4f 4c 4e 41 4d 45 5f 4e  (v, 1, COLNAME_N
14060 41 4d 45 2c 20 22 6c 6f 67 22 2c 20 53 51 4c 49  AME, "log", SQLI
14070 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
14080 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
14090 6c 4e 61 6d 65 28 76 2c 20 32 2c 20 43 4f 4c 4e  lName(v, 2, COLN
140a0 41 4d 45 5f 4e 41 4d 45 2c 20 22 63 68 65 63 6b  AME_NAME, "check
140b0 70 6f 69 6e 74 65 64 22 2c 20 53 51 4c 49 54 45  pointed", SQLITE
140c0 5f 53 54 41 54 49 43 29 3b 0a 0a 20 20 20 20 73  _STATIC);..    s
140d0 71 6c 69 74 65 33 56 64 62 65 41 64 64 4f 70 33  qlite3VdbeAddOp3
140e0 28 76 2c 20 4f 50 5f 43 68 65 63 6b 70 6f 69 6e  (v, OP_Checkpoin
140f0 74 2c 20 69 42 74 2c 20 65 4d 6f 64 65 2c 20 31  t, iBt, eMode, 1
14100 29 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64  );.    sqlite3Vd
14110 62 65 41 64 64 4f 70 32 28 76 2c 20 4f 50 5f 52  beAddOp2(v, OP_R
14120 65 73 75 6c 74 52 6f 77 2c 20 31 2c 20 33 29 3b  esultRow, 1, 3);
14130 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b 0a 0a 20  .  }.  break;.. 
14140 20 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d   /*.  **   PRAGM
14150 41 20 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70  A wal_autocheckp
14160 6f 69 6e 74 0a 20 20 2a 2a 20 20 20 50 52 41 47  oint.  **   PRAG
14170 4d 41 20 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b  MA wal_autocheck
14180 70 6f 69 6e 74 20 3d 20 4e 0a 20 20 2a 2a 0a 20  point = N.  **. 
14190 20 2a 2a 20 43 6f 6e 66 69 67 75 72 65 20 61 20   ** Configure a 
141a0 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63 74  database connect
141b0 69 6f 6e 20 74 6f 20 61 75 74 6f 6d 61 74 69 63  ion to automatic
141c0 61 6c 6c 79 20 63 68 65 63 6b 70 6f 69 6e 74 20  ally checkpoint 
141d0 61 20 64 61 74 61 62 61 73 65 0a 20 20 2a 2a 20  a database.  ** 
141e0 61 66 74 65 72 20 61 63 63 75 6d 75 6c 61 74 69  after accumulati
141f0 6e 67 20 4e 20 66 72 61 6d 65 73 20 69 6e 20 74  ng N frames in t
14200 68 65 20 6c 6f 67 2e 20 4f 72 20 71 75 65 72 79  he log. Or query
14210 20 66 6f 72 20 74 68 65 20 63 75 72 72 65 6e 74   for the current
14220 20 76 61 6c 75 65 0a 20 20 2a 2a 20 6f 66 20 4e   value.  ** of N
14230 2e 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72  ..  */.  case Pr
14240 61 67 54 79 70 5f 57 41 4c 5f 41 55 54 4f 43 48  agTyp_WAL_AUTOCH
14250 45 43 4b 50 4f 49 4e 54 3a 20 7b 0a 20 20 20 20  ECKPOINT: {.    
14260 69 66 28 20 7a 52 69 67 68 74 20 29 7b 0a 20 20  if( zRight ){.  
14270 20 20 20 20 73 71 6c 69 74 65 33 5f 77 61 6c 5f      sqlite3_wal_
14280 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 28 64  autocheckpoint(d
14290 62 2c 20 73 71 6c 69 74 65 33 41 74 6f 69 28 7a  b, sqlite3Atoi(z
142a0 52 69 67 68 74 29 29 3b 0a 20 20 20 20 7d 0a 20  Right));.    }. 
142b0 20 20 20 72 65 74 75 72 6e 53 69 6e 67 6c 65 49     returnSingleI
142c0 6e 74 28 70 50 61 72 73 65 2c 20 22 77 61 6c 5f  nt(pParse, "wal_
142d0 61 75 74 6f 63 68 65 63 6b 70 6f 69 6e 74 22 2c  autocheckpoint",
142e0 20 0a 20 20 20 20 20 20 20 64 62 2d 3e 78 57 61   .       db->xWa
142f0 6c 43 61 6c 6c 62 61 63 6b 3d 3d 73 71 6c 69 74  lCallback==sqlit
14300 65 33 57 61 6c 44 65 66 61 75 6c 74 48 6f 6f 6b  e3WalDefaultHook
14310 20 3f 20 0a 20 20 20 20 20 20 20 20 20 20 20 53   ? .           S
14320 51 4c 49 54 45 5f 50 54 52 5f 54 4f 5f 49 4e 54  QLITE_PTR_TO_INT
14330 28 64 62 2d 3e 70 57 61 6c 41 72 67 29 20 3a 20  (db->pWalArg) : 
14340 30 29 3b 0a 20 20 7d 0a 20 20 62 72 65 61 6b 3b  0);.  }.  break;
14350 0a 23 65 6e 64 69 66 0a 0a 20 20 2f 2a 0a 20 20  .#endif..  /*.  
14360 2a 2a 20 20 50 52 41 47 4d 41 20 73 68 72 69 6e  **  PRAGMA shrin
14370 6b 5f 6d 65 6d 6f 72 79 0a 20 20 2a 2a 0a 20 20  k_memory.  **.  
14380 2a 2a 20 54 68 69 73 20 70 72 61 67 6d 61 20 61  ** This pragma a
14390 74 74 65 6d 70 74 73 20 74 6f 20 66 72 65 65 20  ttempts to free 
143a0 61 73 20 6d 75 63 68 20 6d 65 6d 6f 72 79 20 61  as much memory a
143b0 73 20 70 6f 73 73 69 62 6c 65 20 66 72 6f 6d 20  s possible from 
143c0 74 68 65 0a 20 20 2a 2a 20 63 75 72 72 65 6e 74  the.  ** current
143d0 20 64 61 74 61 62 61 73 65 20 63 6f 6e 6e 65 63   database connec
143e0 74 69 6f 6e 2e 0a 20 20 2a 2f 0a 20 20 63 61 73  tion..  */.  cas
143f0 65 20 50 72 61 67 54 79 70 5f 53 48 52 49 4e 4b  e PragTyp_SHRINK
14400 5f 4d 45 4d 4f 52 59 3a 20 7b 0a 20 20 20 20 73  _MEMORY: {.    s
14410 71 6c 69 74 65 33 5f 64 62 5f 72 65 6c 65 61 73  qlite3_db_releas
14420 65 5f 6d 65 6d 6f 72 79 28 64 62 29 3b 0a 20 20  e_memory(db);.  
14430 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20    break;.  }..  
14440 2f 2a 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  /*.  **   PRAGMA
14450 20 62 75 73 79 5f 74 69 6d 65 6f 75 74 0a 20 20   busy_timeout.  
14460 2a 2a 20 20 20 50 52 41 47 4d 41 20 62 75 73 79  **   PRAGMA busy
14470 5f 74 69 6d 65 6f 75 74 20 3d 20 4e 0a 20 20 2a  _timeout = N.  *
14480 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20 73 71 6c 69  *.  ** Call sqli
14490 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75 74  te3_busy_timeout
144a0 28 64 62 2c 20 4e 29 2e 20 20 52 65 74 75 72 6e  (db, N).  Return
144b0 20 74 68 65 20 63 75 72 72 65 6e 74 20 74 69 6d   the current tim
144c0 65 6f 75 74 20 76 61 6c 75 65 0a 20 20 2a 2a 20  eout value.  ** 
144d0 69 66 20 6f 6e 65 20 69 73 20 73 65 74 2e 20 20  if one is set.  
144e0 49 66 20 6e 6f 20 62 75 73 79 20 68 61 6e 64 6c  If no busy handl
144f0 65 72 20 6f 72 20 61 20 64 69 66 66 65 72 65 6e  er or a differen
14500 74 20 62 75 73 79 20 68 61 6e 64 6c 65 72 20 69  t busy handler i
14510 73 20 73 65 74 0a 20 20 2a 2a 20 74 68 65 6e 20  s set.  ** then 
14520 30 20 69 73 20 72 65 74 75 72 6e 65 64 2e 20 20  0 is returned.  
14530 53 65 74 74 69 6e 67 20 74 68 65 20 62 75 73 79  Setting the busy
14540 5f 74 69 6d 65 6f 75 74 20 74 6f 20 30 20 6f 72  _timeout to 0 or
14550 20 6e 65 67 61 74 69 76 65 0a 20 20 2a 2a 20 64   negative.  ** d
14560 69 73 61 62 6c 65 73 20 74 68 65 20 74 69 6d 65  isables the time
14570 6f 75 74 2e 0a 20 20 2a 2f 0a 20 20 2f 2a 63 61  out..  */.  /*ca
14580 73 65 20 50 72 61 67 54 79 70 5f 42 55 53 59 5f  se PragTyp_BUSY_
14590 54 49 4d 45 4f 55 54 2a 2f 20 64 65 66 61 75 6c  TIMEOUT*/ defaul
145a0 74 3a 20 7b 0a 20 20 20 20 61 73 73 65 72 74 28  t: {.    assert(
145b0 20 61 50 72 61 67 6d 61 4e 61 6d 65 73 5b 6d 69   aPragmaNames[mi
145c0 64 5d 2e 65 50 72 61 67 54 79 70 3d 3d 50 72 61  d].ePragTyp==Pra
145d0 67 54 79 70 5f 42 55 53 59 5f 54 49 4d 45 4f 55  gTyp_BUSY_TIMEOU
145e0 54 20 29 3b 0a 20 20 20 20 69 66 28 20 7a 52 69  T );.    if( zRi
145f0 67 68 74 20 29 7b 0a 20 20 20 20 20 20 73 71 6c  ght ){.      sql
14600 69 74 65 33 5f 62 75 73 79 5f 74 69 6d 65 6f 75  ite3_busy_timeou
14610 74 28 64 62 2c 20 73 71 6c 69 74 65 33 41 74 6f  t(db, sqlite3Ato
14620 69 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20 20  i(zRight));.    
14630 7d 0a 20 20 20 20 72 65 74 75 72 6e 53 69 6e 67  }.    returnSing
14640 6c 65 49 6e 74 28 70 50 61 72 73 65 2c 20 22 74  leInt(pParse, "t
14650 69 6d 65 6f 75 74 22 2c 20 20 64 62 2d 3e 62 75  imeout",  db->bu
14660 73 79 54 69 6d 65 6f 75 74 29 3b 0a 20 20 20 20  syTimeout);.    
14670 62 72 65 61 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a  break;.  }..  /*
14680 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 73  .  **   PRAGMA s
14690 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 0a 20  oft_heap_limit. 
146a0 20 2a 2a 20 20 20 50 52 41 47 4d 41 20 73 6f 66   **   PRAGMA sof
146b0 74 5f 68 65 61 70 5f 6c 69 6d 69 74 20 3d 20 4e  t_heap_limit = N
146c0 0a 20 20 2a 2a 0a 20 20 2a 2a 20 43 61 6c 6c 20  .  **.  ** Call 
146d0 73 71 6c 69 74 65 33 5f 73 6f 66 74 5f 68 65 61  sqlite3_soft_hea
146e0 70 5f 6c 69 6d 69 74 36 34 28 4e 29 2e 20 20 52  p_limit64(N).  R
146f0 65 74 75 72 6e 20 74 68 65 20 72 65 73 75 6c 74  eturn the result
14700 2e 20 20 49 66 20 4e 20 69 73 20 6f 6d 69 74 74  .  If N is omitt
14710 65 64 2c 0a 20 20 2a 2a 20 75 73 65 20 2d 31 2e  ed,.  ** use -1.
14720 0a 20 20 2a 2f 0a 20 20 63 61 73 65 20 50 72 61  .  */.  case Pra
14730 67 54 79 70 5f 53 4f 46 54 5f 48 45 41 50 5f 4c  gTyp_SOFT_HEAP_L
14740 49 4d 49 54 3a 20 7b 0a 20 20 20 20 73 71 6c 69  IMIT: {.    sqli
14750 74 65 33 5f 69 6e 74 36 34 20 4e 3b 0a 20 20 20  te3_int64 N;.   
14760 20 69 66 28 20 7a 52 69 67 68 74 20 26 26 20 73   if( zRight && s
14770 71 6c 69 74 65 33 44 65 63 4f 72 48 65 78 54 6f  qlite3DecOrHexTo
14780 49 36 34 28 7a 52 69 67 68 74 2c 20 26 4e 29 3d  I64(zRight, &N)=
14790 3d 53 51 4c 49 54 45 5f 4f 4b 20 29 7b 0a 20 20  =SQLITE_OK ){.  
147a0 20 20 20 20 73 71 6c 69 74 65 33 5f 73 6f 66 74      sqlite3_soft
147b0 5f 68 65 61 70 5f 6c 69 6d 69 74 36 34 28 4e 29  _heap_limit64(N)
147c0 3b 0a 20 20 20 20 7d 0a 20 20 20 20 72 65 74 75  ;.    }.    retu
147d0 72 6e 53 69 6e 67 6c 65 49 6e 74 28 70 50 61 72  rnSingleInt(pPar
147e0 73 65 2c 20 22 73 6f 66 74 5f 68 65 61 70 5f 6c  se, "soft_heap_l
147f0 69 6d 69 74 22 2c 20 20 73 71 6c 69 74 65 33 5f  imit",  sqlite3_
14800 73 6f 66 74 5f 68 65 61 70 5f 6c 69 6d 69 74 36  soft_heap_limit6
14810 34 28 2d 31 29 29 3b 0a 20 20 20 20 62 72 65 61  4(-1));.    brea
14820 6b 3b 0a 20 20 7d 0a 0a 20 20 2f 2a 0a 20 20 2a  k;.  }..  /*.  *
14830 2a 20 20 20 50 52 41 47 4d 41 20 74 68 72 65 61  *   PRAGMA threa
14840 64 73 0a 20 20 2a 2a 20 20 20 50 52 41 47 4d 41  ds.  **   PRAGMA
14850 20 74 68 72 65 61 64 73 20 3d 20 4e 0a 20 20 2a   threads = N.  *
14860 2a 0a 20 20 2a 2a 20 43 6f 6e 66 69 67 75 72 65  *.  ** Configure
14870 20 74 68 65 20 6d 61 78 69 6d 75 6d 20 6e 75 6d   the maximum num
14880 62 65 72 20 6f 66 20 77 6f 72 6b 65 72 20 74 68  ber of worker th
14890 72 65 61 64 73 2e 20 20 52 65 74 75 72 6e 20 74  reads.  Return t
148a0 68 65 20 6e 65 77 0a 20 20 2a 2a 20 6d 61 78 69  he new.  ** maxi
148b0 6d 75 6d 2c 20 77 68 69 63 68 20 6d 69 67 68 74  mum, which might
148c0 20 62 65 20 6c 65 73 73 20 74 68 61 6e 20 72 65   be less than re
148d0 71 75 65 73 74 65 64 2e 0a 20 20 2a 2f 0a 20 20  quested..  */.  
148e0 63 61 73 65 20 50 72 61 67 54 79 70 5f 54 48 52  case PragTyp_THR
148f0 45 41 44 53 3a 20 7b 0a 20 20 20 20 73 71 6c 69  EADS: {.    sqli
14900 74 65 33 5f 69 6e 74 36 34 20 4e 3b 0a 20 20 20  te3_int64 N;.   
14910 20 69 66 28 20 7a 52 69 67 68 74 0a 20 20 20 20   if( zRight.    
14920 20 26 26 20 73 71 6c 69 74 65 33 44 65 63 4f 72   && sqlite3DecOr
14930 48 65 78 54 6f 49 36 34 28 7a 52 69 67 68 74 2c  HexToI64(zRight,
14940 20 26 4e 29 3d 3d 53 51 4c 49 54 45 5f 4f 4b 0a   &N)==SQLITE_OK.
14950 20 20 20 20 20 26 26 20 4e 3e 3d 30 0a 20 20 20       && N>=0.   
14960 20 29 7b 0a 20 20 20 20 20 20 73 71 6c 69 74 65   ){.      sqlite
14970 33 5f 6c 69 6d 69 74 28 64 62 2c 20 53 51 4c 49  3_limit(db, SQLI
14980 54 45 5f 4c 49 4d 49 54 5f 57 4f 52 4b 45 52 5f  TE_LIMIT_WORKER_
14990 54 48 52 45 41 44 53 2c 20 28 69 6e 74 29 28 4e  THREADS, (int)(N
149a0 26 30 78 37 66 66 66 66 66 66 66 29 29 3b 0a 20  &0x7fffffff));. 
149b0 20 20 20 7d 0a 20 20 20 20 72 65 74 75 72 6e 53     }.    returnS
149c0 69 6e 67 6c 65 49 6e 74 28 70 50 61 72 73 65 2c  ingleInt(pParse,
149d0 20 22 74 68 72 65 61 64 73 22 2c 0a 20 20 20 20   "threads",.    
149e0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
149f0 73 71 6c 69 74 65 33 5f 6c 69 6d 69 74 28 64 62  sqlite3_limit(db
14a00 2c 20 53 51 4c 49 54 45 5f 4c 49 4d 49 54 5f 57  , SQLITE_LIMIT_W
14a10 4f 52 4b 45 52 5f 54 48 52 45 41 44 53 2c 20 2d  ORKER_THREADS, -
14a20 31 29 29 3b 0a 20 20 20 20 62 72 65 61 6b 3b 0a  1));.    break;.
14a30 20 20 7d 0a 0a 23 69 66 20 64 65 66 69 6e 65 64    }..#if defined
14a40 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 20 7c  (SQLITE_DEBUG) |
14a50 7c 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45  | defined(SQLITE
14a60 5f 54 45 53 54 29 0a 20 20 2f 2a 0a 20 20 2a 2a  _TEST).  /*.  **
14a70 20 52 65 70 6f 72 74 20 74 68 65 20 63 75 72 72   Report the curr
14a80 65 6e 74 20 73 74 61 74 65 20 6f 66 20 66 69 6c  ent state of fil
14a90 65 20 6c 6f 67 73 20 66 6f 72 20 61 6c 6c 20 64  e logs for all d
14aa0 61 74 61 62 61 73 65 73 0a 20 20 2a 2f 0a 20 20  atabases.  */.  
14ab0 63 61 73 65 20 50 72 61 67 54 79 70 5f 4c 4f 43  case PragTyp_LOC
14ac0 4b 5f 53 54 41 54 55 53 3a 20 7b 0a 20 20 20 20  K_STATUS: {.    
14ad0 73 74 61 74 69 63 20 63 6f 6e 73 74 20 63 68 61  static const cha
14ae0 72 20 2a 63 6f 6e 73 74 20 61 7a 4c 6f 63 6b 4e  r *const azLockN
14af0 61 6d 65 5b 5d 20 3d 20 7b 0a 20 20 20 20 20 20  ame[] = {.      
14b00 22 75 6e 6c 6f 63 6b 65 64 22 2c 20 22 73 68 61  "unlocked", "sha
14b10 72 65 64 22 2c 20 22 72 65 73 65 72 76 65 64 22  red", "reserved"
14b20 2c 20 22 70 65 6e 64 69 6e 67 22 2c 20 22 65 78  , "pending", "ex
14b30 63 6c 75 73 69 76 65 22 0a 20 20 20 20 7d 3b 0a  clusive".    };.
14b40 20 20 20 20 69 6e 74 20 69 3b 0a 20 20 20 20 73      int i;.    s
14b50 71 6c 69 74 65 33 56 64 62 65 53 65 74 4e 75 6d  qlite3VdbeSetNum
14b60 43 6f 6c 73 28 76 2c 20 32 29 3b 0a 20 20 20 20  Cols(v, 2);.    
14b70 70 50 61 72 73 65 2d 3e 6e 4d 65 6d 20 3d 20 32  pParse->nMem = 2
14b80 3b 0a 20 20 20 20 73 71 6c 69 74 65 33 56 64 62  ;.    sqlite3Vdb
14b90 65 53 65 74 43 6f 6c 4e 61 6d 65 28 76 2c 20 30  eSetColName(v, 0
14ba0 2c 20 43 4f 4c 4e 41 4d 45 5f 4e 41 4d 45 2c 20  , COLNAME_NAME, 
14bb0 22 64 61 74 61 62 61 73 65 22 2c 20 53 51 4c 49  "database", SQLI
14bc0 54 45 5f 53 54 41 54 49 43 29 3b 0a 20 20 20 20  TE_STATIC);.    
14bd0 73 71 6c 69 74 65 33 56 64 62 65 53 65 74 43 6f  sqlite3VdbeSetCo
14be0 6c 4e 61 6d 65 28 76 2c 20 31 2c 20 43 4f 4c 4e  lName(v, 1, COLN
14bf0 41 4d 45 5f 4e 41 4d 45 2c 20 22 73 74 61 74 75  AME_NAME, "statu
14c00 73 22 2c 20 53 51 4c 49 54 45 5f 53 54 41 54 49  s", SQLITE_STATI
14c10 43 29 3b 0a 20 20 20 20 66 6f 72 28 69 3d 30 3b  C);.    for(i=0;
14c20 20 69 3c 64 62 2d 3e 6e 44 62 3b 20 69 2b 2b 29   i<db->nDb; i++)
14c30 7b 0a 20 20 20 20 20 20 42 74 72 65 65 20 2a 70  {.      Btree *p
14c40 42 74 3b 0a 20 20 20 20 20 20 63 6f 6e 73 74 20  Bt;.      const 
14c50 63 68 61 72 20 2a 7a 53 74 61 74 65 20 3d 20 22  char *zState = "
14c60 75 6e 6b 6e 6f 77 6e 22 3b 0a 20 20 20 20 20 20  unknown";.      
14c70 69 6e 74 20 6a 3b 0a 20 20 20 20 20 20 69 66 28  int j;.      if(
14c80 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d   db->aDb[i].zNam
14c90 65 3d 3d 30 20 29 20 63 6f 6e 74 69 6e 75 65 3b  e==0 ) continue;
14ca0 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33 56 64  .      sqlite3Vd
14cb0 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50 5f 53  beAddOp4(v, OP_S
14cc0 74 72 69 6e 67 38 2c 20 30 2c 20 31 2c 20 30 2c  tring8, 0, 1, 0,
14cd0 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a 4e 61 6d   db->aDb[i].zNam
14ce0 65 2c 20 50 34 5f 53 54 41 54 49 43 29 3b 0a 20  e, P4_STATIC);. 
14cf0 20 20 20 20 20 70 42 74 20 3d 20 64 62 2d 3e 61       pBt = db->a
14d00 44 62 5b 69 5d 2e 70 42 74 3b 0a 20 20 20 20 20  Db[i].pBt;.     
14d10 20 69 66 28 20 70 42 74 3d 3d 30 20 7c 7c 20 73   if( pBt==0 || s
14d20 71 6c 69 74 65 33 42 74 72 65 65 50 61 67 65 72  qlite3BtreePager
14d30 28 70 42 74 29 3d 3d 30 20 29 7b 0a 20 20 20 20  (pBt)==0 ){.    
14d40 20 20 20 20 7a 53 74 61 74 65 20 3d 20 22 63 6c      zState = "cl
14d50 6f 73 65 64 22 3b 0a 20 20 20 20 20 20 7d 65 6c  osed";.      }el
14d60 73 65 20 69 66 28 20 73 71 6c 69 74 65 33 5f 66  se if( sqlite3_f
14d70 69 6c 65 5f 63 6f 6e 74 72 6f 6c 28 64 62 2c 20  ile_control(db, 
14d80 69 20 3f 20 64 62 2d 3e 61 44 62 5b 69 5d 2e 7a  i ? db->aDb[i].z
14d90 4e 61 6d 65 20 3a 20 30 2c 20 0a 20 20 20 20 20  Name : 0, .     
14da0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14db0 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20 20                  
14dc0 53 51 4c 49 54 45 5f 46 43 4e 54 4c 5f 4c 4f 43  SQLITE_FCNTL_LOC
14dd0 4b 53 54 41 54 45 2c 20 26 6a 29 3d 3d 53 51 4c  KSTATE, &j)==SQL
14de0 49 54 45 5f 4f 4b 20 29 7b 0a 20 20 20 20 20 20  ITE_OK ){.      
14df0 20 20 20 7a 53 74 61 74 65 20 3d 20 61 7a 4c 6f     zState = azLo
14e00 63 6b 4e 61 6d 65 5b 6a 5d 3b 0a 20 20 20 20 20  ckName[j];.     
14e10 20 7d 0a 20 20 20 20 20 20 73 71 6c 69 74 65 33   }.      sqlite3
14e20 56 64 62 65 41 64 64 4f 70 34 28 76 2c 20 4f 50  VdbeAddOp4(v, OP
14e30 5f 53 74 72 69 6e 67 38 2c 20 30 2c 20 32 2c 20  _String8, 0, 2, 
14e40 30 2c 20 7a 53 74 61 74 65 2c 20 50 34 5f 53 54  0, zState, P4_ST
14e50 41 54 49 43 29 3b 0a 20 20 20 20 20 20 73 71 6c  ATIC);.      sql
14e60 69 74 65 33 56 64 62 65 41 64 64 4f 70 32 28 76  ite3VdbeAddOp2(v
14e70 2c 20 4f 50 5f 52 65 73 75 6c 74 52 6f 77 2c 20  , OP_ResultRow, 
14e80 31 2c 20 32 29 3b 0a 20 20 20 20 7d 0a 20 20 20  1, 2);.    }.   
14e90 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e 64   break;.  }.#end
14ea0 69 66 0a 0a 23 69 66 64 65 66 20 53 51 4c 49 54  if..#ifdef SQLIT
14eb0 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 63 61  E_HAS_CODEC.  ca
14ec0 73 65 20 50 72 61 67 54 79 70 5f 4b 45 59 3a 20  se PragTyp_KEY: 
14ed0 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67 68 74  {.    if( zRight
14ee0 20 29 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76   ) sqlite3_key_v
14ef0 32 28 64 62 2c 20 7a 44 62 2c 20 7a 52 69 67 68  2(db, zDb, zRigh
14f00 74 2c 20 73 71 6c 69 74 65 33 53 74 72 6c 65 6e  t, sqlite3Strlen
14f10 33 30 28 7a 52 69 67 68 74 29 29 3b 0a 20 20 20  30(zRight));.   
14f20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 20 20 63 61   break;.  }.  ca
14f30 73 65 20 50 72 61 67 54 79 70 5f 52 45 4b 45 59  se PragTyp_REKEY
14f40 3a 20 7b 0a 20 20 20 20 69 66 28 20 7a 52 69 67  : {.    if( zRig
14f50 68 74 20 29 20 73 71 6c 69 74 65 33 5f 72 65 6b  ht ) sqlite3_rek
14f60 65 79 5f 76 32 28 64 62 2c 20 7a 44 62 2c 20 7a  ey_v2(db, zDb, z
14f70 52 69 67 68 74 2c 20 73 71 6c 69 74 65 33 53 74  Right, sqlite3St
14f80 72 6c 65 6e 33 30 28 7a 52 69 67 68 74 29 29 3b  rlen30(zRight));
14f90 0a 20 20 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a  .    break;.  }.
14fa0 20 20 63 61 73 65 20 50 72 61 67 54 79 70 5f 48    case PragTyp_H
14fb0 45 58 4b 45 59 3a 20 7b 0a 20 20 20 20 69 66 28  EXKEY: {.    if(
14fc0 20 7a 52 69 67 68 74 20 29 7b 0a 20 20 20 20 20   zRight ){.     
14fd0 20 75 38 20 69 42 79 74 65 3b 0a 20 20 20 20 20   u8 iByte;.     
14fe0 20 69 6e 74 20 69 3b 0a 20 20 20 20 20 20 63 68   int i;.      ch
14ff0 61 72 20 7a 4b 65 79 5b 34 30 5d 3b 0a 20 20 20  ar zKey[40];.   
15000 20 20 20 66 6f 72 28 69 3d 30 2c 20 69 42 79 74     for(i=0, iByt
15010 65 3d 30 3b 20 69 3c 73 69 7a 65 6f 66 28 7a 4b  e=0; i<sizeof(zK
15020 65 79 29 2a 32 20 26 26 20 73 71 6c 69 74 65 33  ey)*2 && sqlite3
15030 49 73 78 64 69 67 69 74 28 7a 52 69 67 68 74 5b  Isxdigit(zRight[
15040 69 5d 29 3b 20 69 2b 2b 29 7b 0a 20 20 20 20 20  i]); i++){.     
15050 20 20 20 69 42 79 74 65 20 3d 20 28 69 42 79 74     iByte = (iByt
15060 65 3c 3c 34 29 20 2b 20 73 71 6c 69 74 65 33 48  e<<4) + sqlite3H
15070 65 78 54 6f 49 6e 74 28 7a 52 69 67 68 74 5b 69  exToInt(zRight[i
15080 5d 29 3b 0a 20 20 20 20 20 20 20 20 69 66 28 20  ]);.        if( 
15090 28 69 26 31 29 21 3d 30 20 29 20 7a 4b 65 79 5b  (i&1)!=0 ) zKey[
150a0 69 2f 32 5d 20 3d 20 69 42 79 74 65 3b 0a 20 20  i/2] = iByte;.  
150b0 20 20 20 20 7d 0a 20 20 20 20 20 20 69 66 28 20      }.      if( 
150c0 28 7a 4c 65 66 74 5b 33 5d 20 26 20 30 78 66 29  (zLeft[3] & 0xf)
150d0 3d 3d 30 78 62 20 29 7b 0a 20 20 20 20 20 20 20  ==0xb ){.       
150e0 20 73 71 6c 69 74 65 33 5f 6b 65 79 5f 76 32 28   sqlite3_key_v2(
150f0 64 62 2c 20 7a 44 62 2c 20 7a 4b 65 79 2c 20 69  db, zDb, zKey, i
15100 2f 32 29 3b 0a 20 20 20 20 20 20 7d 65 6c 73 65  /2);.      }else
15110 7b 0a 20 20 20 20 20 20 20 20 73 71 6c 69 74 65  {.        sqlite
15120 33 5f 72 65 6b 65 79 5f 76 32 28 64 62 2c 20 7a  3_rekey_v2(db, z
15130 44 62 2c 20 7a 4b 65 79 2c 20 69 2f 32 29 3b 0a  Db, zKey, i/2);.
15140 20 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20        }.    }.  
15150 20 20 62 72 65 61 6b 3b 0a 20 20 7d 0a 23 65 6e    break;.  }.#en
15160 64 69 66 0a 23 69 66 20 64 65 66 69 6e 65 64 28  dif.#if defined(
15170 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43  SQLITE_HAS_CODEC
15180 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
15190 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44  ITE_ENABLE_CEROD
151a0 29 0a 20 20 63 61 73 65 20 50 72 61 67 54 79 70  ).  case PragTyp
151b0 5f 41 43 54 49 56 41 54 45 5f 45 58 54 45 4e 53  _ACTIVATE_EXTENS
151c0 49 4f 4e 53 3a 20 69 66 28 20 7a 52 69 67 68 74  IONS: if( zRight
151d0 20 29 7b 0a 23 69 66 64 65 66 20 53 51 4c 49 54   ){.#ifdef SQLIT
151e0 45 5f 48 41 53 5f 43 4f 44 45 43 0a 20 20 20 20  E_HAS_CODEC.    
151f0 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e 49  if( sqlite3StrNI
15200 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 73 65 65  Cmp(zRight, "see
15210 2d 22 2c 20 34 29 3d 3d 30 20 29 7b 0a 20 20 20  -", 4)==0 ){.   
15220 20 20 20 73 71 6c 69 74 65 33 5f 61 63 74 69 76     sqlite3_activ
15230 61 74 65 5f 73 65 65 28 26 7a 52 69 67 68 74 5b  ate_see(&zRight[
15240 34 5d 29 3b 0a 20 20 20 20 7d 0a 23 65 6e 64 69  4]);.    }.#endi
15250 66 0a 23 69 66 64 65 66 20 53 51 4c 49 54 45 5f  f.#ifdef SQLITE_
15260 45 4e 41 42 4c 45 5f 43 45 52 4f 44 0a 20 20 20  ENABLE_CEROD.   
15270 20 69 66 28 20 73 71 6c 69 74 65 33 53 74 72 4e   if( sqlite3StrN
15280 49 43 6d 70 28 7a 52 69 67 68 74 2c 20 22 63 65  ICmp(zRight, "ce
15290 72 6f 64 2d 22 2c 20 36 29 3d 3d 30 20 29 7b 0a  rod-", 6)==0 ){.
152a0 20 20 20 20 20 20 73 71 6c 69 74 65 33 5f 61 63        sqlite3_ac
152b0 74 69 76 61 74 65 5f 63 65 72 6f 64 28 26 7a 52  tivate_cerod(&zR
152c0 69 67 68 74 5b 36 5d 29 3b 0a 20 20 20 20 7d 0a  ight[6]);.    }.
152d0 23 65 6e 64 69 66 0a 20 20 7d 0a 20 20 62 72 65  #endif.  }.  bre
152e0 61 6b 3b 0a 23 65 6e 64 69 66 0a 0a 20 20 7d 20  ak;.#endif..  } 
152f0 2f 2a 20 45 6e 64 20 6f 66 20 74 68 65 20 50 52  /* End of the PR
15300 41 47 4d 41 20 73 77 69 74 63 68 20 2a 2f 0a 0a  AGMA switch */..
15310 70 72 61 67 6d 61 5f 6f 75 74 3a 0a 20 20 73 71  pragma_out:.  sq
15320 6c 69 74 65 33 44 62 46 72 65 65 28 64 62 2c 20  lite3DbFree(db, 
15330 7a 4c 65 66 74 29 3b 0a 20 20 73 71 6c 69 74 65  zLeft);.  sqlite
15340 33 44 62 46 72 65 65 28 64 62 2c 20 7a 52 69 67  3DbFree(db, zRig
15350 68 74 29 3b 0a 7d 0a 0a 23 65 6e 64 69 66 20 2f  ht);.}..#endif /
15360 2a 20 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 52  * SQLITE_OMIT_PR
15370 41 47 4d 41 20 2a 2f 0a                          AGMA */.