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

Artifact 84af2b180484323a2ea22a2279e8bd9e3e1e492e:


0000: 23 21 2f 75 73 72 2f 62 69 6e 2f 74 63 6c 73 68  #!/usr/bin/tclsh
0010: 0a 23 0a 23 20 52 75 6e 20 74 68 69 73 20 73 63  .#.# Run this sc
0020: 72 69 70 74 20 74 6f 20 67 65 6e 65 72 61 74 65  ript to generate
0030: 20 74 68 65 20 70 72 61 67 6d 61 20 6e 61 6d 65   the pragma name
0040: 20 6c 6f 6f 6b 75 70 20 74 61 62 6c 65 20 43 20   lookup table C 
0050: 63 6f 64 65 2e 0a 23 0a 23 20 54 6f 20 61 64 64  code..#.# To add
0060: 20 6e 65 77 20 70 72 61 67 6d 61 73 2c 20 66 69   new pragmas, fi
0070: 72 73 74 20 61 64 64 20 74 68 65 20 6e 61 6d 65  rst add the name
0080: 20 61 6e 64 20 6f 74 68 65 72 20 72 65 6c 65 76   and other relev
0090: 61 6e 74 20 61 74 74 72 69 62 75 74 65 73 0a 23  ant attributes.#
00a0: 20 6f 66 20 74 68 65 20 70 72 61 67 6d 61 20 74   of the pragma t
00b0: 6f 20 74 68 65 20 22 70 72 61 67 6d 61 5f 64 65  o the "pragma_de
00c0: 66 22 20 6f 62 6a 65 63 74 20 62 65 6c 6f 77 2e  f" object below.
00d0: 20 20 54 68 65 6e 20 72 75 6e 20 74 68 69 73 20    Then run this 
00e0: 73 63 72 69 70 74 0a 23 20 74 6f 20 67 65 6e 65  script.# to gene
00f0: 72 61 74 65 20 74 68 65 20 2e 2e 2f 73 72 63 2f  rate the ../src/
0100: 70 72 61 67 6d 61 2e 68 20 68 65 61 64 65 72 20  pragma.h header 
0110: 66 69 6c 65 20 74 68 61 74 20 63 6f 6e 74 61 69  file that contai
0120: 6e 73 20 6d 61 63 72 6f 73 20 61 6e 64 0a 23 20  ns macros and.# 
0130: 74 68 65 20 6c 6f 6f 6b 75 70 20 74 61 62 6c 65  the lookup table
0140: 20 6e 65 65 64 65 64 20 66 6f 72 20 70 72 61 67   needed for prag
0150: 6d 61 20 6e 61 6d 65 20 6c 6f 6f 6b 75 70 20 69  ma name lookup i
0160: 6e 20 74 68 65 20 70 72 61 67 6d 61 2e 63 20 6d  n the pragma.c m
0170: 6f 64 75 6c 65 2e 0a 23 20 54 68 65 6e 20 61 64  odule..# Then ad
0180: 64 20 74 68 65 20 65 78 74 72 61 20 22 63 61 73  d the extra "cas
0190: 65 20 50 72 61 67 54 79 70 5f 58 58 58 58 58 3a  e PragTyp_XXXXX:
01a0: 22 20 61 6e 64 20 73 75 62 73 65 71 75 65 6e 74  " and subsequent
01b0: 20 63 6f 64 65 20 66 6f 72 20 74 68 65 0a 23 20   code for the.# 
01c0: 6e 65 77 20 70 72 61 67 6d 61 20 69 6e 20 2e 2e  new pragma in ..
01d0: 2f 73 72 63 2f 70 72 61 67 6d 61 2e 63 2e 0a 23  /src/pragma.c..#
01e0: 0a 0a 73 65 74 20 70 72 61 67 6d 61 5f 64 65 66  ..set pragma_def
01f0: 20 7b 0a 20 20 4e 41 4d 45 3a 20 66 75 6c 6c 5f   {.  NAME: full_
0200: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 0a 20 20 54  column_names.  T
0210: 59 50 45 3a 20 46 4c 41 47 0a 20 20 41 52 47 3a  YPE: FLAG.  ARG:
0220: 20 20 53 51 4c 49 54 45 5f 46 75 6c 6c 43 6f 6c    SQLITE_FullCol
0230: 4e 61 6d 65 73 0a 20 20 49 46 3a 20 20 20 21 64  Names.  IF:   !d
0240: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
0250: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29  IT_FLAG_PRAGMAS)
0260: 0a 0a 20 20 4e 41 4d 45 3a 20 73 68 6f 72 74 5f  ..  NAME: short_
0270: 63 6f 6c 75 6d 6e 5f 6e 61 6d 65 73 0a 20 20 54  column_names.  T
0280: 59 50 45 3a 20 46 4c 41 47 0a 20 20 41 52 47 3a  YPE: FLAG.  ARG:
0290: 20 20 53 51 4c 49 54 45 5f 53 68 6f 72 74 43 6f    SQLITE_ShortCo
02a0: 6c 4e 61 6d 65 73 0a 20 20 49 46 3a 20 20 20 21  lNames.  IF:   !
02b0: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
02c0: 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53  MIT_FLAG_PRAGMAS
02d0: 29 0a 0a 20 20 4e 41 4d 45 3a 20 63 6f 75 6e 74  )..  NAME: count
02e0: 5f 63 68 61 6e 67 65 73 0a 20 20 54 59 50 45 3a  _changes.  TYPE:
02f0: 20 46 4c 41 47 0a 20 20 41 52 47 3a 20 20 53 51   FLAG.  ARG:  SQ
0300: 4c 49 54 45 5f 43 6f 75 6e 74 52 6f 77 73 0a 20  LITE_CountRows. 
0310: 20 49 46 3a 20 20 20 21 64 65 66 69 6e 65 64 28   IF:   !defined(
0320: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47  SQLITE_OMIT_FLAG
0330: 5f 50 52 41 47 4d 41 53 29 0a 0a 20 20 4e 41 4d  _PRAGMAS)..  NAM
0340: 45 3a 20 65 6d 70 74 79 5f 72 65 73 75 6c 74 5f  E: empty_result_
0350: 63 61 6c 6c 62 61 63 6b 73 0a 20 20 54 59 50 45  callbacks.  TYPE
0360: 3a 20 46 4c 41 47 0a 20 20 41 52 47 3a 20 20 53  : FLAG.  ARG:  S
0370: 51 4c 49 54 45 5f 4e 75 6c 6c 43 61 6c 6c 62 61  QLITE_NullCallba
0380: 63 6b 0a 20 20 49 46 3a 20 20 20 21 64 65 66 69  ck.  IF:   !defi
0390: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
03a0: 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 0a 20  FLAG_PRAGMAS).. 
03b0: 20 4e 41 4d 45 3a 20 6c 65 67 61 63 79 5f 66 69   NAME: legacy_fi
03c0: 6c 65 5f 66 6f 72 6d 61 74 0a 20 20 54 59 50 45  le_format.  TYPE
03d0: 3a 20 46 4c 41 47 0a 20 20 41 52 47 3a 20 20 53  : FLAG.  ARG:  S
03e0: 51 4c 49 54 45 5f 4c 65 67 61 63 79 46 69 6c 65  QLITE_LegacyFile
03f0: 46 6d 74 0a 20 20 49 46 3a 20 20 20 21 64 65 66  Fmt.  IF:   !def
0400: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
0410: 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 0a  _FLAG_PRAGMAS)..
0420: 20 20 4e 41 4d 45 3a 20 66 75 6c 6c 66 73 79 6e    NAME: fullfsyn
0430: 63 0a 20 20 54 59 50 45 3a 20 46 4c 41 47 0a 20  c.  TYPE: FLAG. 
0440: 20 41 52 47 3a 20 20 53 51 4c 49 54 45 5f 46 75   ARG:  SQLITE_Fu
0450: 6c 6c 46 53 79 6e 63 0a 20 20 49 46 3a 20 20 20  llFSync.  IF:   
0460: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
0470: 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41  OMIT_FLAG_PRAGMA
0480: 53 29 0a 0a 20 20 4e 41 4d 45 3a 20 63 68 65 63  S)..  NAME: chec
0490: 6b 70 6f 69 6e 74 5f 66 75 6c 6c 66 73 79 6e 63  kpoint_fullfsync
04a0: 0a 20 20 54 59 50 45 3a 20 46 4c 41 47 0a 20 20  .  TYPE: FLAG.  
04b0: 41 52 47 3a 20 20 53 51 4c 49 54 45 5f 43 6b 70  ARG:  SQLITE_Ckp
04c0: 74 46 75 6c 6c 46 53 79 6e 63 0a 20 20 49 46 3a  tFullFSync.  IF:
04d0: 20 20 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49     !defined(SQLI
04e0: 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41  TE_OMIT_FLAG_PRA
04f0: 47 4d 41 53 29 0a 0a 20 20 4e 41 4d 45 3a 20 63  GMAS)..  NAME: c
0500: 61 63 68 65 5f 73 70 69 6c 6c 0a 20 20 54 59 50  ache_spill.  TYP
0510: 45 3a 20 46 4c 41 47 0a 20 20 41 52 47 3a 20 20  E: FLAG.  ARG:  
0520: 53 51 4c 49 54 45 5f 43 61 63 68 65 53 70 69 6c  SQLITE_CacheSpil
0530: 6c 0a 20 20 49 46 3a 20 20 20 21 64 65 66 69 6e  l.  IF:   !defin
0540: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46  ed(SQLITE_OMIT_F
0550: 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 0a 20 20  LAG_PRAGMAS)..  
0560: 4e 41 4d 45 3a 20 72 65 76 65 72 73 65 5f 75 6e  NAME: reverse_un
0570: 6f 72 64 65 72 65 64 5f 73 65 6c 65 63 74 73 0a  ordered_selects.
0580: 20 20 54 59 50 45 3a 20 46 4c 41 47 0a 20 20 41    TYPE: FLAG.  A
0590: 52 47 3a 20 20 53 51 4c 49 54 45 5f 52 65 76 65  RG:  SQLITE_Reve
05a0: 72 73 65 4f 72 64 65 72 0a 20 20 49 46 3a 20 20  rseOrder.  IF:  
05b0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
05c0: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
05d0: 41 53 29 0a 0a 20 20 4e 41 4d 45 3a 20 71 75 65  AS)..  NAME: que
05e0: 72 79 5f 6f 6e 6c 79 0a 20 20 54 59 50 45 3a 20  ry_only.  TYPE: 
05f0: 46 4c 41 47 0a 20 20 41 52 47 3a 20 20 53 51 4c  FLAG.  ARG:  SQL
0600: 49 54 45 5f 51 75 65 72 79 4f 6e 6c 79 0a 20 20  ITE_QueryOnly.  
0610: 49 46 3a 20 20 20 21 64 65 66 69 6e 65 64 28 53  IF:   !defined(S
0620: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f  QLITE_OMIT_FLAG_
0630: 50 52 41 47 4d 41 53 29 0a 0a 20 20 4e 41 4d 45  PRAGMAS)..  NAME
0640: 3a 20 61 75 74 6f 6d 61 74 69 63 5f 69 6e 64 65  : automatic_inde
0650: 78 0a 20 20 54 59 50 45 3a 20 46 4c 41 47 0a 20  x.  TYPE: FLAG. 
0660: 20 41 52 47 3a 20 20 53 51 4c 49 54 45 5f 41 75   ARG:  SQLITE_Au
0670: 74 6f 49 6e 64 65 78 0a 20 20 49 46 3a 20 20 20  toIndex.  IF:   
0680: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
0690: 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41  OMIT_FLAG_PRAGMA
06a0: 53 29 0a 20 20 49 46 3a 20 20 20 21 64 65 66 69  S).  IF:   !defi
06b0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
06c0: 41 55 54 4f 4d 41 54 49 43 5f 49 4e 44 45 58 29  AUTOMATIC_INDEX)
06d0: 0a 0a 20 20 4e 41 4d 45 3a 20 73 71 6c 5f 74 72  ..  NAME: sql_tr
06e0: 61 63 65 0a 20 20 54 59 50 45 3a 20 46 4c 41 47  ace.  TYPE: FLAG
06f0: 0a 20 20 41 52 47 3a 20 20 53 51 4c 49 54 45 5f  .  ARG:  SQLITE_
0700: 53 71 6c 54 72 61 63 65 0a 20 20 49 46 3a 20 20  SqlTrace.  IF:  
0710: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
0720: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
0730: 41 53 29 0a 20 20 49 46 3a 20 20 20 64 65 66 69  AS).  IF:   defi
0740: 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55 47  ned(SQLITE_DEBUG
0750: 29 0a 0a 20 20 4e 41 4d 45 3a 20 76 64 62 65 5f  )..  NAME: vdbe_
0760: 6c 69 73 74 69 6e 67 0a 20 20 54 59 50 45 3a 20  listing.  TYPE: 
0770: 46 4c 41 47 0a 20 20 41 52 47 3a 20 20 53 51 4c  FLAG.  ARG:  SQL
0780: 49 54 45 5f 56 64 62 65 4c 69 73 74 69 6e 67 0a  ITE_VdbeListing.
0790: 20 20 49 46 3a 20 20 20 21 64 65 66 69 6e 65 64    IF:   !defined
07a0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41  (SQLITE_OMIT_FLA
07b0: 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 49 46 3a  G_PRAGMAS).  IF:
07c0: 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54     defined(SQLIT
07d0: 45 5f 44 45 42 55 47 29 0a 0a 20 20 4e 41 4d 45  E_DEBUG)..  NAME
07e0: 3a 20 76 64 62 65 5f 74 72 61 63 65 0a 20 20 54  : vdbe_trace.  T
07f0: 59 50 45 3a 20 46 4c 41 47 0a 20 20 41 52 47 3a  YPE: FLAG.  ARG:
0800: 20 20 53 51 4c 49 54 45 5f 56 64 62 65 54 72 61    SQLITE_VdbeTra
0810: 63 65 0a 20 20 49 46 3a 20 20 20 21 64 65 66 69  ce.  IF:   !defi
0820: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
0830: 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a 20 20  FLAG_PRAGMAS).  
0840: 49 46 3a 20 20 20 64 65 66 69 6e 65 64 28 53 51  IF:   defined(SQ
0850: 4c 49 54 45 5f 44 45 42 55 47 29 0a 0a 20 20 4e  LITE_DEBUG)..  N
0860: 41 4d 45 3a 20 76 64 62 65 5f 61 64 64 6f 70 74  AME: vdbe_addopt
0870: 72 61 63 65 0a 20 20 54 59 50 45 3a 20 46 4c 41  race.  TYPE: FLA
0880: 47 0a 20 20 41 52 47 3a 20 20 53 51 4c 49 54 45  G.  ARG:  SQLITE
0890: 5f 56 64 62 65 41 64 64 6f 70 54 72 61 63 65 0a  _VdbeAddopTrace.
08a0: 20 20 49 46 3a 20 20 20 21 64 65 66 69 6e 65 64    IF:   !defined
08b0: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41  (SQLITE_OMIT_FLA
08c0: 47 5f 50 52 41 47 4d 41 53 29 0a 20 20 49 46 3a  G_PRAGMAS).  IF:
08d0: 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54     defined(SQLIT
08e0: 45 5f 44 45 42 55 47 29 0a 0a 20 20 4e 41 4d 45  E_DEBUG)..  NAME
08f0: 3a 20 76 64 62 65 5f 64 65 62 75 67 0a 20 20 54  : vdbe_debug.  T
0900: 59 50 45 3a 20 46 4c 41 47 0a 20 20 41 52 47 3a  YPE: FLAG.  ARG:
0910: 20 20 53 51 4c 49 54 45 5f 53 71 6c 54 72 61 63    SQLITE_SqlTrac
0920: 65 7c 53 51 4c 49 54 45 5f 56 64 62 65 4c 69 73  e|SQLITE_VdbeLis
0930: 74 69 6e 67 7c 53 51 4c 49 54 45 5f 56 64 62 65  ting|SQLITE_Vdbe
0940: 54 72 61 63 65 0a 20 20 49 46 3a 20 20 20 21 64  Trace.  IF:   !d
0950: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
0960: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29  IT_FLAG_PRAGMAS)
0970: 0a 20 20 49 46 3a 20 20 20 64 65 66 69 6e 65 64  .  IF:   defined
0980: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 0a  (SQLITE_DEBUG)..
0990: 20 20 4e 41 4d 45 3a 20 76 64 62 65 5f 65 71 70    NAME: vdbe_eqp
09a0: 0a 20 20 54 59 50 45 3a 20 46 4c 41 47 0a 20 20  .  TYPE: FLAG.  
09b0: 41 52 47 3a 20 20 53 51 4c 49 54 45 5f 56 64 62  ARG:  SQLITE_Vdb
09c0: 65 45 51 50 0a 20 20 49 46 3a 20 20 20 21 64 65  eEQP.  IF:   !de
09d0: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
09e0: 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29 0a  T_FLAG_PRAGMAS).
09f0: 20 20 49 46 3a 20 20 20 64 65 66 69 6e 65 64 28    IF:   defined(
0a00: 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 0a 20  SQLITE_DEBUG).. 
0a10: 20 4e 41 4d 45 3a 20 69 67 6e 6f 72 65 5f 63 68   NAME: ignore_ch
0a20: 65 63 6b 5f 63 6f 6e 73 74 72 61 69 6e 74 73 0a  eck_constraints.
0a30: 20 20 54 59 50 45 3a 20 46 4c 41 47 0a 20 20 41    TYPE: FLAG.  A
0a40: 52 47 3a 20 20 53 51 4c 49 54 45 5f 49 67 6e 6f  RG:  SQLITE_Igno
0a50: 72 65 43 68 65 63 6b 73 0a 20 20 49 46 3a 20 20  reChecks.  IF:  
0a60: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
0a70: 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d  _OMIT_FLAG_PRAGM
0a80: 41 53 29 0a 20 20 49 46 3a 20 20 20 21 64 65 66  AS).  IF:   !def
0a90: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
0aa0: 5f 43 48 45 43 4b 29 0a 0a 20 20 4e 41 4d 45 3a  _CHECK)..  NAME:
0ab0: 20 77 72 69 74 61 62 6c 65 5f 73 63 68 65 6d 61   writable_schema
0ac0: 0a 20 20 54 59 50 45 3a 20 46 4c 41 47 0a 20 20  .  TYPE: FLAG.  
0ad0: 41 52 47 3a 20 20 53 51 4c 49 54 45 5f 57 72 69  ARG:  SQLITE_Wri
0ae0: 74 65 53 63 68 65 6d 61 7c 53 51 4c 49 54 45 5f  teSchema|SQLITE_
0af0: 52 65 63 6f 76 65 72 79 4d 6f 64 65 0a 20 20 49  RecoveryMode.  I
0b00: 46 3a 20 20 20 21 64 65 66 69 6e 65 64 28 53 51  F:   !defined(SQ
0b10: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50  LITE_OMIT_FLAG_P
0b20: 52 41 47 4d 41 53 29 0a 0a 20 20 4e 41 4d 45 3a  RAGMAS)..  NAME:
0b30: 20 72 65 61 64 5f 75 6e 63 6f 6d 6d 69 74 74 65   read_uncommitte
0b40: 64 0a 20 20 54 59 50 45 3a 20 46 4c 41 47 0a 20  d.  TYPE: FLAG. 
0b50: 20 41 52 47 3a 20 20 53 51 4c 49 54 45 5f 52 65   ARG:  SQLITE_Re
0b60: 61 64 55 6e 63 6f 6d 6d 69 74 74 65 64 0a 20 20  adUncommitted.  
0b70: 49 46 3a 20 20 20 21 64 65 66 69 6e 65 64 28 53  IF:   !defined(S
0b80: 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f  QLITE_OMIT_FLAG_
0b90: 50 52 41 47 4d 41 53 29 0a 0a 20 20 4e 41 4d 45  PRAGMAS)..  NAME
0ba0: 3a 20 72 65 63 75 72 73 69 76 65 5f 74 72 69 67  : recursive_trig
0bb0: 67 65 72 73 0a 20 20 54 59 50 45 3a 20 46 4c 41  gers.  TYPE: FLA
0bc0: 47 0a 20 20 41 52 47 3a 20 20 53 51 4c 49 54 45  G.  ARG:  SQLITE
0bd0: 5f 52 65 63 54 72 69 67 67 65 72 73 0a 20 20 49  _RecTriggers.  I
0be0: 46 3a 20 20 20 21 64 65 66 69 6e 65 64 28 53 51  F:   !defined(SQ
0bf0: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50  LITE_OMIT_FLAG_P
0c00: 52 41 47 4d 41 53 29 0a 0a 20 20 4e 41 4d 45 3a  RAGMAS)..  NAME:
0c10: 20 66 6f 72 65 69 67 6e 5f 6b 65 79 73 0a 20 20   foreign_keys.  
0c20: 54 59 50 45 3a 20 46 4c 41 47 0a 20 20 41 52 47  TYPE: FLAG.  ARG
0c30: 3a 20 20 53 51 4c 49 54 45 5f 46 6f 72 65 69 67  :  SQLITE_Foreig
0c40: 6e 4b 65 79 73 0a 20 20 49 46 3a 20 20 20 21 64  nKeys.  IF:   !d
0c50: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
0c60: 49 54 5f 46 4c 41 47 5f 50 52 41 47 4d 41 53 29  IT_FLAG_PRAGMAS)
0c70: 0a 20 20 49 46 3a 20 20 20 21 64 65 66 69 6e 65  .  IF:   !define
0c80: 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f  d(SQLITE_OMIT_FO
0c90: 52 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64  REIGN_KEY) && !d
0ca0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
0cb0: 49 54 5f 54 52 49 47 47 45 52 29 0a 0a 20 20 4e  IT_TRIGGER)..  N
0cc0: 41 4d 45 3a 20 64 65 66 65 72 5f 66 6f 72 65 69  AME: defer_forei
0cd0: 67 6e 5f 6b 65 79 73 0a 20 20 54 59 50 45 3a 20  gn_keys.  TYPE: 
0ce0: 46 4c 41 47 0a 20 20 41 52 47 3a 20 20 53 51 4c  FLAG.  ARG:  SQL
0cf0: 49 54 45 5f 44 65 66 65 72 46 4b 73 0a 20 20 49  ITE_DeferFKs.  I
0d00: 46 3a 20 20 20 21 64 65 66 69 6e 65 64 28 53 51  F:   !defined(SQ
0d10: 4c 49 54 45 5f 4f 4d 49 54 5f 46 4c 41 47 5f 50  LITE_OMIT_FLAG_P
0d20: 52 41 47 4d 41 53 29 0a 20 20 49 46 3a 20 20 20  RAGMAS).  IF:   
0d30: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
0d40: 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
0d50: 29 20 26 26 20 21 64 65 66 69 6e 65 64 28 53 51  ) && !defined(SQ
0d60: 4c 49 54 45 5f 4f 4d 49 54 5f 54 52 49 47 47 45  LITE_OMIT_TRIGGE
0d70: 52 29 0a 0a 20 20 4e 41 4d 45 3a 20 63 65 6c 6c  R)..  NAME: cell
0d80: 5f 73 69 7a 65 5f 63 68 65 63 6b 0a 20 20 54 59  _size_check.  TY
0d90: 50 45 3a 20 46 4c 41 47 0a 20 20 41 52 47 3a 20  PE: FLAG.  ARG: 
0da0: 20 53 51 4c 49 54 45 5f 43 65 6c 6c 53 69 7a 65   SQLITE_CellSize
0db0: 43 6b 0a 0a 20 20 4e 41 4d 45 3a 20 64 65 66 61  Ck..  NAME: defa
0dc0: 75 6c 74 5f 63 61 63 68 65 5f 73 69 7a 65 0a 20  ult_cache_size. 
0dd0: 20 46 4c 41 47 3a 20 4e 65 65 64 53 63 68 65 6d   FLAG: NeedSchem
0de0: 61 0a 20 20 49 46 3a 20 20 20 21 64 65 66 69 6e  a.  IF:   !defin
0df0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50  ed(SQLITE_OMIT_P
0e00: 41 47 45 52 5f 50 52 41 47 4d 41 53 29 20 26 26  AGER_PRAGMAS) &&
0e10: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
0e20: 5f 4f 4d 49 54 5f 44 45 50 52 45 43 41 54 45 44  _OMIT_DEPRECATED
0e30: 29 0a 0a 20 20 4e 41 4d 45 3a 20 70 61 67 65 5f  )..  NAME: page_
0e40: 73 69 7a 65 0a 20 20 49 46 3a 20 20 20 21 64 65  size.  IF:   !de
0e50: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
0e60: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29  T_PAGER_PRAGMAS)
0e70: 0a 0a 20 20 4e 41 4d 45 3a 20 73 65 63 75 72 65  ..  NAME: secure
0e80: 5f 64 65 6c 65 74 65 0a 20 20 49 46 3a 20 20 20  _delete.  IF:   
0e90: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
0ea0: 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d  OMIT_PAGER_PRAGM
0eb0: 41 53 29 0a 0a 20 20 4e 41 4d 45 3a 20 70 61 67  AS)..  NAME: pag
0ec0: 65 5f 63 6f 75 6e 74 0a 20 20 46 4c 41 47 3a 20  e_count.  FLAG: 
0ed0: 4e 65 65 64 53 63 68 65 6d 61 0a 20 20 49 46 3a  NeedSchema.  IF:
0ee0: 20 20 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49     !defined(SQLI
0ef0: 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52  TE_OMIT_PAGER_PR
0f00: 41 47 4d 41 53 29 0a 0a 20 20 4e 41 4d 45 3a 20  AGMAS)..  NAME: 
0f10: 6d 61 78 5f 70 61 67 65 5f 63 6f 75 6e 74 0a 20  max_page_count. 
0f20: 20 54 59 50 45 3a 20 50 41 47 45 5f 43 4f 55 4e   TYPE: PAGE_COUN
0f30: 54 0a 20 20 46 4c 41 47 3a 20 4e 65 65 64 53 63  T.  FLAG: NeedSc
0f40: 68 65 6d 61 0a 20 20 49 46 3a 20 20 20 21 64 65  hema.  IF:   !de
0f50: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
0f60: 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29  T_PAGER_PRAGMAS)
0f70: 0a 0a 20 20 4e 41 4d 45 3a 20 6c 6f 63 6b 69 6e  ..  NAME: lockin
0f80: 67 5f 6d 6f 64 65 0a 20 20 49 46 3a 20 20 20 21  g_mode.  IF:   !
0f90: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
0fa0: 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41  MIT_PAGER_PRAGMA
0fb0: 53 29 0a 0a 20 20 4e 41 4d 45 3a 20 6a 6f 75 72  S)..  NAME: jour
0fc0: 6e 61 6c 5f 6d 6f 64 65 0a 20 20 46 4c 41 47 3a  nal_mode.  FLAG:
0fd0: 20 4e 65 65 64 53 63 68 65 6d 61 0a 20 20 49 46   NeedSchema.  IF
0fe0: 3a 20 20 20 21 64 65 66 69 6e 65 64 28 53 51 4c  :   !defined(SQL
0ff0: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
1000: 52 41 47 4d 41 53 29 0a 0a 20 20 4e 41 4d 45 3a  RAGMAS)..  NAME:
1010: 20 6a 6f 75 72 6e 61 6c 5f 73 69 7a 65 5f 6c 69   journal_size_li
1020: 6d 69 74 0a 20 20 49 46 3a 20 20 20 21 64 65 66  mit.  IF:   !def
1030: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1040: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a  _PAGER_PRAGMAS).
1050: 0a 20 20 4e 41 4d 45 3a 20 63 61 63 68 65 5f 73  .  NAME: cache_s
1060: 69 7a 65 0a 20 20 49 46 3a 20 20 20 21 64 65 66  ize.  IF:   !def
1070: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1080: 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a  _PAGER_PRAGMAS).
1090: 0a 20 20 4e 41 4d 45 3a 20 6d 6d 61 70 5f 73 69  .  NAME: mmap_si
10a0: 7a 65 0a 20 20 49 46 3a 20 20 20 21 64 65 66 69  ze.  IF:   !defi
10b0: 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f  ned(SQLITE_OMIT_
10c0: 50 41 47 45 52 5f 50 52 41 47 4d 41 53 29 0a 0a  PAGER_PRAGMAS)..
10d0: 20 20 4e 41 4d 45 3a 20 61 75 74 6f 5f 76 61 63    NAME: auto_vac
10e0: 75 75 6d 0a 20 20 46 4c 41 47 3a 20 4e 65 65 64  uum.  FLAG: Need
10f0: 53 63 68 65 6d 61 0a 20 20 49 46 3a 20 20 20 21  Schema.  IF:   !
1100: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f  defined(SQLITE_O
1110: 4d 49 54 5f 41 55 54 4f 56 41 43 55 55 4d 29 0a  MIT_AUTOVACUUM).
1120: 0a 20 20 4e 41 4d 45 3a 20 69 6e 63 72 65 6d 65  .  NAME: increme
1130: 6e 74 61 6c 5f 76 61 63 75 75 6d 0a 20 20 46 4c  ntal_vacuum.  FL
1140: 41 47 3a 20 4e 65 65 64 53 63 68 65 6d 61 0a 20  AG: NeedSchema. 
1150: 20 49 46 3a 20 20 20 21 64 65 66 69 6e 65 64 28   IF:   !defined(
1160: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 41 55 54 4f  SQLITE_OMIT_AUTO
1170: 56 41 43 55 55 4d 29 0a 0a 20 20 4e 41 4d 45 3a  VACUUM)..  NAME:
1180: 20 74 65 6d 70 5f 73 74 6f 72 65 0a 20 20 49 46   temp_store.  IF
1190: 3a 20 20 20 21 64 65 66 69 6e 65 64 28 53 51 4c  :   !defined(SQL
11a0: 49 54 45 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50  ITE_OMIT_PAGER_P
11b0: 52 41 47 4d 41 53 29 0a 0a 20 20 4e 41 4d 45 3a  RAGMAS)..  NAME:
11c0: 20 74 65 6d 70 5f 73 74 6f 72 65 5f 64 69 72 65   temp_store_dire
11d0: 63 74 6f 72 79 0a 20 20 49 46 3a 20 20 20 21 64  ctory.  IF:   !d
11e0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
11f0: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
1200: 29 0a 0a 20 20 4e 41 4d 45 3a 20 64 61 74 61 5f  )..  NAME: data_
1210: 73 74 6f 72 65 5f 64 69 72 65 63 74 6f 72 79 0a  store_directory.
1220: 20 20 49 46 3a 20 20 20 21 64 65 66 69 6e 65 64    IF:   !defined
1230: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 50 41 47  (SQLITE_OMIT_PAG
1240: 45 52 5f 50 52 41 47 4d 41 53 29 20 26 26 20 53  ER_PRAGMAS) && S
1250: 51 4c 49 54 45 5f 4f 53 5f 57 49 4e 0a 0a 20 20  QLITE_OS_WIN..  
1260: 4e 41 4d 45 3a 20 6c 6f 63 6b 5f 70 72 6f 78 79  NAME: lock_proxy
1270: 5f 66 69 6c 65 0a 20 20 49 46 3a 20 20 20 21 64  _file.  IF:   !d
1280: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1290: 49 54 5f 50 41 47 45 52 5f 50 52 41 47 4d 41 53  IT_PAGER_PRAGMAS
12a0: 29 20 26 26 20 53 51 4c 49 54 45 5f 45 4e 41 42  ) && SQLITE_ENAB
12b0: 4c 45 5f 4c 4f 43 4b 49 4e 47 5f 53 54 59 4c 45  LE_LOCKING_STYLE
12c0: 0a 0a 20 20 4e 41 4d 45 3a 20 73 79 6e 63 68 72  ..  NAME: synchr
12d0: 6f 6e 6f 75 73 0a 20 20 46 4c 41 47 3a 20 4e 65  onous.  FLAG: Ne
12e0: 65 64 53 63 68 65 6d 61 0a 20 20 49 46 3a 20 20  edSchema.  IF:  
12f0: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1300: 5f 4f 4d 49 54 5f 50 41 47 45 52 5f 50 52 41 47  _OMIT_PAGER_PRAG
1310: 4d 41 53 29 0a 0a 20 20 4e 41 4d 45 3a 20 74 61  MAS)..  NAME: ta
1320: 62 6c 65 5f 69 6e 66 6f 0a 20 20 46 4c 41 47 3a  ble_info.  FLAG:
1330: 20 4e 65 65 64 53 63 68 65 6d 61 0a 20 20 49 46   NeedSchema.  IF
1340: 3a 20 20 20 21 64 65 66 69 6e 65 64 28 53 51 4c  :   !defined(SQL
1350: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
1360: 50 52 41 47 4d 41 53 29 0a 0a 20 20 4e 41 4d 45  PRAGMAS)..  NAME
1370: 3a 20 73 74 61 74 73 0a 20 20 46 4c 41 47 3a 20  : stats.  FLAG: 
1380: 4e 65 65 64 53 63 68 65 6d 61 0a 20 20 49 46 3a  NeedSchema.  IF:
1390: 20 20 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49     !defined(SQLI
13a0: 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50  TE_OMIT_SCHEMA_P
13b0: 52 41 47 4d 41 53 29 0a 0a 20 20 4e 41 4d 45 3a  RAGMAS)..  NAME:
13c0: 20 69 6e 64 65 78 5f 69 6e 66 6f 0a 20 20 54 59   index_info.  TY
13d0: 50 45 3a 20 49 4e 44 45 58 5f 49 4e 46 4f 0a 20  PE: INDEX_INFO. 
13e0: 20 41 52 47 3a 20 20 30 0a 20 20 46 4c 41 47 3a   ARG:  0.  FLAG:
13f0: 20 4e 65 65 64 53 63 68 65 6d 61 0a 20 20 49 46   NeedSchema.  IF
1400: 3a 20 20 20 21 64 65 66 69 6e 65 64 28 53 51 4c  :   !defined(SQL
1410: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
1420: 50 52 41 47 4d 41 53 29 0a 0a 20 20 4e 41 4d 45  PRAGMAS)..  NAME
1430: 3a 20 69 6e 64 65 78 5f 78 69 6e 66 6f 0a 20 20  : index_xinfo.  
1440: 54 59 50 45 3a 20 49 4e 44 45 58 5f 49 4e 46 4f  TYPE: INDEX_INFO
1450: 0a 20 20 41 52 47 3a 20 20 31 0a 20 20 46 4c 41  .  ARG:  1.  FLA
1460: 47 3a 20 4e 65 65 64 53 63 68 65 6d 61 0a 20 20  G: NeedSchema.  
1470: 49 46 3a 20 20 20 21 64 65 66 69 6e 65 64 28 53  IF:   !defined(S
1480: 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
1490: 41 5f 50 52 41 47 4d 41 53 29 0a 0a 20 20 4e 41  A_PRAGMAS)..  NA
14a0: 4d 45 3a 20 69 6e 64 65 78 5f 6c 69 73 74 0a 20  ME: index_list. 
14b0: 20 46 4c 41 47 3a 20 4e 65 65 64 53 63 68 65 6d   FLAG: NeedSchem
14c0: 61 0a 20 20 49 46 3a 20 20 20 21 64 65 66 69 6e  a.  IF:   !defin
14d0: 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53  ed(SQLITE_OMIT_S
14e0: 43 48 45 4d 41 5f 50 52 41 47 4d 41 53 29 0a 0a  CHEMA_PRAGMAS)..
14f0: 20 20 4e 41 4d 45 3a 20 64 61 74 61 62 61 73 65    NAME: database
1500: 5f 6c 69 73 74 0a 20 20 46 4c 41 47 3a 20 4e 65  _list.  FLAG: Ne
1510: 65 64 53 63 68 65 6d 61 0a 20 20 49 46 3a 20 20  edSchema.  IF:  
1520: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1530: 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 50 52 41  _OMIT_SCHEMA_PRA
1540: 47 4d 41 53 29 0a 0a 20 20 4e 41 4d 45 3a 20 63  GMAS)..  NAME: c
1550: 6f 6c 6c 61 74 69 6f 6e 5f 6c 69 73 74 0a 20 20  ollation_list.  
1560: 49 46 3a 20 20 20 21 64 65 66 69 6e 65 64 28 53  IF:   !defined(S
1570: 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d  QLITE_OMIT_SCHEM
1580: 41 5f 50 52 41 47 4d 41 53 29 0a 0a 20 20 4e 41  A_PRAGMAS)..  NA
1590: 4d 45 3a 20 66 6f 72 65 69 67 6e 5f 6b 65 79 5f  ME: foreign_key_
15a0: 6c 69 73 74 0a 20 20 46 4c 41 47 3a 20 4e 65 65  list.  FLAG: Nee
15b0: 64 53 63 68 65 6d 61 0a 20 20 49 46 3a 20 20 20  dSchema.  IF:   
15c0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
15d0: 4f 4d 49 54 5f 46 4f 52 45 49 47 4e 5f 4b 45 59  OMIT_FOREIGN_KEY
15e0: 29 0a 0a 20 20 4e 41 4d 45 3a 20 66 6f 72 65 69  )..  NAME: forei
15f0: 67 6e 5f 6b 65 79 5f 63 68 65 63 6b 0a 20 20 46  gn_key_check.  F
1600: 4c 41 47 3a 20 4e 65 65 64 53 63 68 65 6d 61 0a  LAG: NeedSchema.
1610: 20 20 49 46 3a 20 20 20 21 64 65 66 69 6e 65 64    IF:   !defined
1620: 28 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 46 4f 52  (SQLITE_OMIT_FOR
1630: 45 49 47 4e 5f 4b 45 59 29 20 26 26 20 21 64 65  EIGN_KEY) && !de
1640: 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49  fined(SQLITE_OMI
1650: 54 5f 54 52 49 47 47 45 52 29 0a 0a 20 20 4e 41  T_TRIGGER)..  NA
1660: 4d 45 3a 20 70 61 72 73 65 72 5f 74 72 61 63 65  ME: parser_trace
1670: 0a 20 20 49 46 3a 20 20 20 64 65 66 69 6e 65 64  .  IF:   defined
1680: 28 53 51 4c 49 54 45 5f 44 45 42 55 47 29 0a 0a  (SQLITE_DEBUG)..
1690: 20 20 4e 41 4d 45 3a 20 63 61 73 65 5f 73 65 6e    NAME: case_sen
16a0: 73 69 74 69 76 65 5f 6c 69 6b 65 0a 0a 20 20 4e  sitive_like..  N
16b0: 41 4d 45 3a 20 69 6e 74 65 67 72 69 74 79 5f 63  AME: integrity_c
16c0: 68 65 63 6b 0a 20 20 46 4c 41 47 3a 20 4e 65 65  heck.  FLAG: Nee
16d0: 64 53 63 68 65 6d 61 0a 20 20 49 46 3a 20 20 20  dSchema.  IF:   
16e0: 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f  !defined(SQLITE_
16f0: 4f 4d 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43  OMIT_INTEGRITY_C
1700: 48 45 43 4b 29 0a 0a 20 20 4e 41 4d 45 3a 20 71  HECK)..  NAME: q
1710: 75 69 63 6b 5f 63 68 65 63 6b 0a 20 20 54 59 50  uick_check.  TYP
1720: 45 3a 20 49 4e 54 45 47 52 49 54 59 5f 43 48 45  E: INTEGRITY_CHE
1730: 43 4b 0a 20 20 46 4c 41 47 3a 20 4e 65 65 64 53  CK.  FLAG: NeedS
1740: 63 68 65 6d 61 0a 20 20 49 46 3a 20 20 20 21 64  chema.  IF:   !d
1750: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1760: 49 54 5f 49 4e 54 45 47 52 49 54 59 5f 43 48 45  IT_INTEGRITY_CHE
1770: 43 4b 29 0a 0a 20 20 4e 41 4d 45 3a 20 65 6e 63  CK)..  NAME: enc
1780: 6f 64 69 6e 67 0a 20 20 49 46 3a 20 20 20 21 64  oding.  IF:   !d
1790: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
17a0: 49 54 5f 55 54 46 31 36 29 0a 0a 20 20 4e 41 4d  IT_UTF16)..  NAM
17b0: 45 3a 20 73 63 68 65 6d 61 5f 76 65 72 73 69 6f  E: schema_versio
17c0: 6e 0a 20 20 54 59 50 45 3a 20 48 45 41 44 45 52  n.  TYPE: HEADER
17d0: 5f 56 41 4c 55 45 0a 20 20 41 52 47 3a 20 20 42  _VALUE.  ARG:  B
17e0: 54 52 45 45 5f 53 43 48 45 4d 41 5f 56 45 52 53  TREE_SCHEMA_VERS
17f0: 49 4f 4e 0a 20 20 49 46 3a 20 20 20 21 64 65 66  ION.  IF:   !def
1800: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1810: 5f 53 43 48 45 4d 41 5f 56 45 52 53 49 4f 4e 5f  _SCHEMA_VERSION_
1820: 50 52 41 47 4d 41 53 29 0a 0a 20 20 4e 41 4d 45  PRAGMAS)..  NAME
1830: 3a 20 75 73 65 72 5f 76 65 72 73 69 6f 6e 0a 20  : user_version. 
1840: 20 54 59 50 45 3a 20 48 45 41 44 45 52 5f 56 41   TYPE: HEADER_VA
1850: 4c 55 45 0a 20 20 41 52 47 3a 20 20 42 54 52 45  LUE.  ARG:  BTRE
1860: 45 5f 55 53 45 52 5f 56 45 52 53 49 4f 4e 0a 20  E_USER_VERSION. 
1870: 20 49 46 3a 20 20 20 21 64 65 66 69 6e 65 64 28   IF:   !defined(
1880: 53 51 4c 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45  SQLITE_OMIT_SCHE
1890: 4d 41 5f 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d  MA_VERSION_PRAGM
18a0: 41 53 29 0a 0a 20 20 4e 41 4d 45 3a 20 64 61 74  AS)..  NAME: dat
18b0: 61 5f 76 65 72 73 69 6f 6e 0a 20 20 54 59 50 45  a_version.  TYPE
18c0: 3a 20 48 45 41 44 45 52 5f 56 41 4c 55 45 0a 20  : HEADER_VALUE. 
18d0: 20 41 52 47 3a 20 20 42 54 52 45 45 5f 44 41 54   ARG:  BTREE_DAT
18e0: 41 5f 56 45 52 53 49 4f 4e 0a 20 20 46 4c 41 47  A_VERSION.  FLAG
18f0: 3a 20 52 65 61 64 4f 6e 6c 79 0a 20 20 49 46 3a  : ReadOnly.  IF:
1900: 20 20 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49     !defined(SQLI
1910: 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56  TE_OMIT_SCHEMA_V
1920: 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 29 0a  ERSION_PRAGMAS).
1930: 0a 20 20 4e 41 4d 45 3a 20 66 72 65 65 6c 69 73  .  NAME: freelis
1940: 74 5f 63 6f 75 6e 74 0a 20 20 54 59 50 45 3a 20  t_count.  TYPE: 
1950: 48 45 41 44 45 52 5f 56 41 4c 55 45 0a 20 20 41  HEADER_VALUE.  A
1960: 52 47 3a 20 20 42 54 52 45 45 5f 46 52 45 45 5f  RG:  BTREE_FREE_
1970: 50 41 47 45 5f 43 4f 55 4e 54 0a 20 20 46 4c 41  PAGE_COUNT.  FLA
1980: 47 3a 20 52 65 61 64 4f 6e 6c 79 0a 20 20 49 46  G: ReadOnly.  IF
1990: 3a 20 20 20 21 64 65 66 69 6e 65 64 28 53 51 4c  :   !defined(SQL
19a0: 49 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f  ITE_OMIT_SCHEMA_
19b0: 56 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 29  VERSION_PRAGMAS)
19c0: 0a 0a 20 20 4e 41 4d 45 3a 20 61 70 70 6c 69 63  ..  NAME: applic
19d0: 61 74 69 6f 6e 5f 69 64 0a 20 20 54 59 50 45 3a  ation_id.  TYPE:
19e0: 20 48 45 41 44 45 52 5f 56 41 4c 55 45 0a 20 20   HEADER_VALUE.  
19f0: 41 52 47 3a 20 20 42 54 52 45 45 5f 41 50 50 4c  ARG:  BTREE_APPL
1a00: 49 43 41 54 49 4f 4e 5f 49 44 0a 20 20 49 46 3a  ICATION_ID.  IF:
1a10: 20 20 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49     !defined(SQLI
1a20: 54 45 5f 4f 4d 49 54 5f 53 43 48 45 4d 41 5f 56  TE_OMIT_SCHEMA_V
1a30: 45 52 53 49 4f 4e 5f 50 52 41 47 4d 41 53 29 0a  ERSION_PRAGMAS).
1a40: 0a 20 20 4e 41 4d 45 3a 20 63 6f 6d 70 69 6c 65  .  NAME: compile
1a50: 5f 6f 70 74 69 6f 6e 73 0a 20 20 49 46 3a 20 20  _options.  IF:  
1a60: 20 21 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45   !defined(SQLITE
1a70: 5f 4f 4d 49 54 5f 43 4f 4d 50 49 4c 45 4f 50 54  _OMIT_COMPILEOPT
1a80: 49 4f 4e 5f 44 49 41 47 53 29 0a 0a 20 20 4e 41  ION_DIAGS)..  NA
1a90: 4d 45 3a 20 77 61 6c 5f 63 68 65 63 6b 70 6f 69  ME: wal_checkpoi
1aa0: 6e 74 0a 20 20 46 4c 41 47 3a 20 4e 65 65 64 53  nt.  FLAG: NeedS
1ab0: 63 68 65 6d 61 0a 20 20 49 46 3a 20 20 20 21 64  chema.  IF:   !d
1ac0: 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d  efined(SQLITE_OM
1ad0: 49 54 5f 57 41 4c 29 0a 0a 20 20 4e 41 4d 45 3a  IT_WAL)..  NAME:
1ae0: 20 77 61 6c 5f 61 75 74 6f 63 68 65 63 6b 70 6f   wal_autocheckpo
1af0: 69 6e 74 0a 20 20 49 46 3a 20 20 20 21 64 65 66  int.  IF:   !def
1b00: 69 6e 65 64 28 53 51 4c 49 54 45 5f 4f 4d 49 54  ined(SQLITE_OMIT
1b10: 5f 57 41 4c 29 0a 0a 20 20 4e 41 4d 45 3a 20 73  _WAL)..  NAME: s
1b20: 68 72 69 6e 6b 5f 6d 65 6d 6f 72 79 0a 0a 20 20  hrink_memory..  
1b30: 4e 41 4d 45 3a 20 62 75 73 79 5f 74 69 6d 65 6f  NAME: busy_timeo
1b40: 75 74 0a 0a 20 20 4e 41 4d 45 3a 20 6c 6f 63 6b  ut..  NAME: lock
1b50: 5f 73 74 61 74 75 73 0a 20 20 49 46 3a 20 20 20  _status.  IF:   
1b60: 64 65 66 69 6e 65 64 28 53 51 4c 49 54 45 5f 44  defined(SQLITE_D
1b70: 45 42 55 47 29 20 7c 7c 20 64 65 66 69 6e 65 64  EBUG) || defined
1b80: 28 53 51 4c 49 54 45 5f 54 45 53 54 29 0a 0a 20  (SQLITE_TEST).. 
1b90: 20 4e 41 4d 45 3a 20 6b 65 79 0a 20 20 49 46 3a   NAME: key.  IF:
1ba0: 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49 54     defined(SQLIT
1bb0: 45 5f 48 41 53 5f 43 4f 44 45 43 29 0a 0a 20 20  E_HAS_CODEC)..  
1bc0: 4e 41 4d 45 3a 20 72 65 6b 65 79 0a 20 20 49 46  NAME: rekey.  IF
1bd0: 3a 20 20 20 64 65 66 69 6e 65 64 28 53 51 4c 49  :   defined(SQLI
1be0: 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 0a 0a 20  TE_HAS_CODEC).. 
1bf0: 20 4e 41 4d 45 3a 20 68 65 78 6b 65 79 0a 20 20   NAME: hexkey.  
1c00: 49 46 3a 20 20 20 64 65 66 69 6e 65 64 28 53 51  IF:   defined(SQ
1c10: 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29 0a  LITE_HAS_CODEC).
1c20: 0a 20 20 4e 41 4d 45 3a 20 68 65 78 72 65 6b 65  .  NAME: hexreke
1c30: 79 0a 20 20 54 59 50 45 3a 20 48 45 58 4b 45 59  y.  TYPE: HEXKEY
1c40: 0a 20 20 49 46 3a 20 20 20 64 65 66 69 6e 65 64  .  IF:   defined
1c50: 28 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45  (SQLITE_HAS_CODE
1c60: 43 29 0a 0a 20 20 4e 41 4d 45 3a 20 61 63 74 69  C)..  NAME: acti
1c70: 76 61 74 65 5f 65 78 74 65 6e 73 69 6f 6e 73 0a  vate_extensions.
1c80: 20 20 49 46 3a 20 20 20 64 65 66 69 6e 65 64 28    IF:   defined(
1c90: 53 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43  SQLITE_HAS_CODEC
1ca0: 29 20 7c 7c 20 64 65 66 69 6e 65 64 28 53 51 4c  ) || defined(SQL
1cb0: 49 54 45 5f 45 4e 41 42 4c 45 5f 43 45 52 4f 44  ITE_ENABLE_CEROD
1cc0: 29 0a 0a 20 20 4e 41 4d 45 3a 20 73 6f 66 74 5f  )..  NAME: soft_
1cd0: 68 65 61 70 5f 6c 69 6d 69 74 0a 0a 20 20 4e 41  heap_limit..  NA
1ce0: 4d 45 3a 20 74 68 72 65 61 64 73 0a 7d 0a 0a 23  ME: threads.}..#
1cf0: 20 4f 70 65 6e 20 74 68 65 20 6f 75 74 70 75 74   Open the output
1d00: 20 66 69 6c 65 0a 23 0a 73 65 74 20 64 65 73 74   file.#.set dest
1d10: 66 69 6c 65 20 22 5b 66 69 6c 65 20 64 69 72 20  file "[file dir 
1d20: 5b 66 69 6c 65 20 64 69 72 20 5b 66 69 6c 65 20  [file dir [file 
1d30: 6e 6f 72 6d 61 6c 20 24 61 72 67 76 30 5d 5d 5d  normal $argv0]]]
1d40: 2f 73 72 63 2f 70 72 61 67 6d 61 2e 68 22 0a 70  /src/pragma.h".p
1d50: 75 74 73 20 22 4f 76 65 72 77 72 69 74 69 6e 67  uts "Overwriting
1d60: 20 24 64 65 73 74 66 69 6c 65 20 77 69 74 68 20   $destfile with 
1d70: 6e 65 77 20 70 72 61 67 6d 61 20 74 61 62 6c 65  new pragma table
1d80: 2e 2e 2e 22 0a 73 65 74 20 66 64 20 5b 6f 70 65  ...".set fd [ope
1d90: 6e 20 24 64 65 73 74 66 69 6c 65 20 77 62 5d 0a  n $destfile wb].
1da0: 70 75 74 73 20 24 66 64 20 7b 2f 2a 20 44 4f 20  puts $fd {/* DO 
1db0: 4e 4f 54 20 45 44 49 54 21 0a 2a 2a 20 54 68 69  NOT EDIT!.** Thi
1dc0: 73 20 66 69 6c 65 20 69 73 20 61 75 74 6f 6d 61  s file is automa
1dd0: 74 69 63 61 6c 6c 79 20 67 65 6e 65 72 61 74 65  tically generate
1de0: 64 20 62 79 20 74 68 65 20 73 63 72 69 70 74 20  d by the script 
1df0: 61 74 0a 2a 2a 20 2e 2e 2f 74 6f 6f 6c 2f 6d 6b  at.** ../tool/mk
1e00: 70 72 61 67 6d 61 74 61 62 2e 74 63 6c 2e 20 20  pragmatab.tcl.  
1e10: 54 6f 20 75 70 64 61 74 65 20 74 68 65 20 73 65  To update the se
1e20: 74 20 6f 66 20 70 72 61 67 6d 61 73 2c 20 65 64  t of pragmas, ed
1e30: 69 74 0a 2a 2a 20 74 68 61 74 20 73 63 72 69 70  it.** that scrip
1e40: 74 20 61 6e 64 20 72 65 72 75 6e 20 69 74 2e 0a  t and rerun it..
1e50: 2a 2f 7d 0a 0a 23 20 50 61 72 73 65 20 74 68 65  */}..# Parse the
1e60: 20 50 52 41 47 4d 41 20 74 61 62 6c 65 20 61 62   PRAGMA table ab
1e70: 6f 76 65 2e 0a 23 0a 73 65 74 20 6e 61 6d 65 20  ove..#.set name 
1e80: 7b 7d 0a 73 65 74 20 74 79 70 65 20 7b 7d 0a 73  {}.set type {}.s
1e90: 65 74 20 69 66 20 7b 7d 0a 73 65 74 20 66 6c 61  et if {}.set fla
1ea0: 67 73 20 7b 7d 0a 73 65 74 20 61 72 67 20 30 0a  gs {}.set arg 0.
1eb0: 70 72 6f 63 20 72 65 63 6f 72 64 5f 6f 6e 65 20  proc record_one 
1ec0: 7b 7d 20 7b 0a 20 20 67 6c 6f 62 61 6c 20 6e 61  {} {.  global na
1ed0: 6d 65 20 74 79 70 65 20 69 66 20 61 72 67 20 61  me type if arg a
1ee0: 6c 6c 62 79 6e 61 6d 65 20 74 79 70 65 62 79 69  llbyname typebyi
1ef0: 66 20 66 6c 61 67 73 0a 20 20 69 66 20 7b 24 6e  f flags.  if {$n
1f00: 61 6d 65 3d 3d 22 22 7d 20 72 65 74 75 72 6e 0a  ame==""} return.
1f10: 20 20 73 65 74 20 61 6c 6c 62 79 6e 61 6d 65 28    set allbyname(
1f20: 24 6e 61 6d 65 29 20 5b 6c 69 73 74 20 24 74 79  $name) [list $ty
1f30: 70 65 20 24 61 72 67 20 24 69 66 20 24 66 6c 61  pe $arg $if $fla
1f40: 67 73 5d 0a 20 20 73 65 74 20 6e 61 6d 65 20 7b  gs].  set name {
1f50: 7d 0a 20 20 73 65 74 20 74 79 70 65 20 7b 7d 0a  }.  set type {}.
1f60: 20 20 73 65 74 20 69 66 20 7b 7d 0a 20 20 73 65    set if {}.  se
1f70: 74 20 66 6c 61 67 73 20 7b 7d 0a 20 20 73 65 74  t flags {}.  set
1f80: 20 61 72 67 20 30 0a 7d 0a 66 6f 72 65 61 63 68   arg 0.}.foreach
1f90: 20 6c 69 6e 65 20 5b 73 70 6c 69 74 20 24 70 72   line [split $pr
1fa0: 61 67 6d 61 5f 64 65 66 20 5c 6e 5d 20 7b 0a 20  agma_def \n] {. 
1fb0: 20 73 65 74 20 6c 69 6e 65 20 5b 73 74 72 69 6e   set line [strin
1fc0: 67 20 74 72 69 6d 20 24 6c 69 6e 65 5d 0a 20 20  g trim $line].  
1fd0: 69 66 20 7b 24 6c 69 6e 65 3d 3d 22 22 7d 20 63  if {$line==""} c
1fe0: 6f 6e 74 69 6e 75 65 0a 20 20 66 6f 72 65 61 63  ontinue.  foreac
1ff0: 68 20 7b 69 64 20 76 61 6c 7d 20 5b 73 70 6c 69  h {id val} [spli
2000: 74 20 24 6c 69 6e 65 20 3a 5d 20 62 72 65 61 6b  t $line :] break
2010: 0a 20 20 73 65 74 20 76 61 6c 20 5b 73 74 72 69  .  set val [stri
2020: 6e 67 20 74 72 69 6d 20 24 76 61 6c 5d 0a 20 20  ng trim $val].  
2030: 69 66 20 7b 24 69 64 3d 3d 22 4e 41 4d 45 22 7d  if {$id=="NAME"}
2040: 20 7b 0a 20 20 20 20 72 65 63 6f 72 64 5f 6f 6e   {.    record_on
2050: 65 20 20 20 20 0a 20 20 20 20 73 65 74 20 6e 61  e    .    set na
2060: 6d 65 20 24 76 61 6c 0a 20 20 20 20 73 65 74 20  me $val.    set 
2070: 74 79 70 65 20 5b 73 74 72 69 6e 67 20 74 6f 75  type [string tou
2080: 70 70 65 72 20 24 76 61 6c 5d 0a 20 20 7d 20 65  pper $val].  } e
2090: 6c 73 65 69 66 20 7b 24 69 64 3d 3d 22 54 59 50  lseif {$id=="TYP
20a0: 45 22 7d 20 7b 0a 20 20 20 20 73 65 74 20 74 79  E"} {.    set ty
20b0: 70 65 20 24 76 61 6c 0a 20 20 7d 20 65 6c 73 65  pe $val.  } else
20c0: 69 66 20 7b 24 69 64 3d 3d 22 41 52 47 22 7d 20  if {$id=="ARG"} 
20d0: 7b 0a 20 20 20 20 73 65 74 20 61 72 67 20 24 76  {.    set arg $v
20e0: 61 6c 0a 20 20 7d 20 65 6c 73 65 69 66 20 7b 24  al.  } elseif {$
20f0: 69 64 3d 3d 22 49 46 22 7d 20 7b 0a 20 20 20 20  id=="IF"} {.    
2100: 6c 61 70 70 65 6e 64 20 69 66 20 24 76 61 6c 0a  lappend if $val.
2110: 20 20 7d 20 65 6c 73 65 69 66 20 7b 24 69 64 3d    } elseif {$id=
2120: 3d 22 46 4c 41 47 22 7d 20 7b 0a 20 20 20 20 66  ="FLAG"} {.    f
2130: 6f 72 65 61 63 68 20 74 65 72 6d 20 5b 73 70 6c  oreach term [spl
2140: 69 74 20 24 76 61 6c 5d 20 7b 0a 20 20 20 20 20  it $val] {.     
2150: 20 6c 61 70 70 65 6e 64 20 66 6c 61 67 73 20 24   lappend flags $
2160: 74 65 72 6d 0a 20 20 20 20 20 20 73 65 74 20 61  term.      set a
2170: 6c 6c 66 6c 61 67 73 28 24 74 65 72 6d 29 20 31  llflags($term) 1
2180: 0a 20 20 20 20 7d 0a 20 20 7d 20 65 6c 73 65 20  .    }.  } else 
2190: 7b 0a 20 20 20 20 65 72 72 6f 72 20 22 62 61 64  {.    error "bad
21a0: 20 70 72 61 67 6d 61 5f 64 65 66 20 6c 69 6e 65   pragma_def line
21b0: 3a 20 24 6c 69 6e 65 22 0a 20 20 7d 0a 7d 0a 72  : $line".  }.}.r
21c0: 65 63 6f 72 64 5f 6f 6e 65 0a 73 65 74 20 61 6c  ecord_one.set al
21d0: 6c 6e 61 6d 65 73 20 5b 6c 73 6f 72 74 20 5b 61  lnames [lsort [a
21e0: 72 72 61 79 20 6e 61 6d 65 73 20 61 6c 6c 62 79  rray names allby
21f0: 6e 61 6d 65 5d 5d 0a 0a 23 20 47 65 6e 65 72 61  name]]..# Genera
2200: 74 65 20 23 64 65 66 69 6e 65 73 20 66 6f 72 20  te #defines for 
2210: 61 6c 6c 20 70 72 61 67 6d 61 20 74 79 70 65 20  all pragma type 
2220: 6e 61 6d 65 73 2e 20 20 47 72 6f 75 70 20 74 68  names.  Group th
2230: 65 20 70 72 61 67 6d 61 73 20 74 68 61 74 20 61  e pragmas that a
2240: 72 65 0a 23 20 6f 6d 69 74 20 69 6e 20 64 65 66  re.# omit in def
2250: 61 75 6c 74 20 62 75 69 6c 64 73 20 28 64 65 66  ault builds (def
2260: 69 6e 65 64 28 53 51 4c 49 54 45 5f 44 45 42 55  ined(SQLITE_DEBU
2270: 47 29 20 61 6e 64 20 64 65 66 69 6e 65 64 28 53  G) and defined(S
2280: 51 4c 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 29  QLITE_HAS_CODEC)
2290: 29 0a 23 20 61 74 20 74 68 65 20 65 6e 64 2e 0a  ).# at the end..
22a0: 23 0a 73 65 74 20 70 6e 75 6d 20 30 0a 66 6f 72  #.set pnum 0.for
22b0: 65 61 63 68 20 6e 61 6d 65 20 24 61 6c 6c 6e 61  each name $allna
22c0: 6d 65 73 20 7b 0a 20 20 73 65 74 20 74 79 70 65  mes {.  set type
22d0: 20 5b 6c 69 6e 64 65 78 20 24 61 6c 6c 62 79 6e   [lindex $allbyn
22e0: 61 6d 65 28 24 6e 61 6d 65 29 20 30 5d 0a 20 20  ame($name) 0].  
22f0: 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73 74 73  if {[info exists
2300: 20 73 65 65 6e 74 79 70 65 28 24 74 79 70 65 29   seentype($type)
2310: 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 20 20 73 65  ]} continue.  se
2320: 74 20 69 66 20 5b 6c 69 6e 64 65 78 20 24 61 6c  t if [lindex $al
2330: 6c 62 79 6e 61 6d 65 28 24 6e 61 6d 65 29 20 32  lbyname($name) 2
2340: 5d 0a 20 20 69 66 20 7b 5b 72 65 67 65 78 70 20  ].  if {[regexp 
2350: 53 51 4c 49 54 45 5f 44 45 42 55 47 20 24 69 66  SQLITE_DEBUG $if
2360: 5d 20 7c 7c 20 5b 72 65 67 65 78 70 20 53 51 4c  ] || [regexp SQL
2370: 49 54 45 5f 48 41 53 5f 43 4f 44 45 43 20 24 69  ITE_HAS_CODEC $i
2380: 66 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 20 20 73  f]} continue.  s
2390: 65 74 20 73 65 65 6e 74 79 70 65 28 24 74 79 70  et seentype($typ
23a0: 65 29 20 31 0a 20 20 70 75 74 73 20 24 66 64 20  e) 1.  puts $fd 
23b0: 5b 66 6f 72 6d 61 74 20 7b 23 64 65 66 69 6e 65  [format {#define
23c0: 20 25 2d 33 35 73 20 25 34 64 7d 20 50 72 61 67   %-35s %4d} Prag
23d0: 54 79 70 5f 24 74 79 70 65 20 24 70 6e 75 6d 5d  Typ_$type $pnum]
23e0: 0a 20 20 69 6e 63 72 20 70 6e 75 6d 0a 7d 0a 66  .  incr pnum.}.f
23f0: 6f 72 65 61 63 68 20 6e 61 6d 65 20 24 61 6c 6c  oreach name $all
2400: 6e 61 6d 65 73 20 7b 0a 20 20 73 65 74 20 74 79  names {.  set ty
2410: 70 65 20 5b 6c 69 6e 64 65 78 20 24 61 6c 6c 62  pe [lindex $allb
2420: 79 6e 61 6d 65 28 24 6e 61 6d 65 29 20 30 5d 0a  yname($name) 0].
2430: 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69 73    if {[info exis
2440: 74 73 20 73 65 65 6e 74 79 70 65 28 24 74 79 70  ts seentype($typ
2450: 65 29 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 20 20  e)]} continue.  
2460: 73 65 74 20 69 66 20 5b 6c 69 6e 64 65 78 20 24  set if [lindex $
2470: 61 6c 6c 62 79 6e 61 6d 65 28 24 6e 61 6d 65 29  allbyname($name)
2480: 20 32 5d 0a 20 20 69 66 20 7b 5b 72 65 67 65 78   2].  if {[regex
2490: 70 20 53 51 4c 49 54 45 5f 44 45 42 55 47 20 24  p SQLITE_DEBUG $
24a0: 69 66 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 20 20  if]} continue.  
24b0: 73 65 74 20 73 65 65 6e 74 79 70 65 28 24 74 79  set seentype($ty
24c0: 70 65 29 20 31 0a 20 20 70 75 74 73 20 24 66 64  pe) 1.  puts $fd
24d0: 20 5b 66 6f 72 6d 61 74 20 7b 23 64 65 66 69 6e   [format {#defin
24e0: 65 20 25 2d 33 35 73 20 25 34 64 7d 20 50 72 61  e %-35s %4d} Pra
24f0: 67 54 79 70 5f 24 74 79 70 65 20 24 70 6e 75 6d  gTyp_$type $pnum
2500: 5d 0a 20 20 69 6e 63 72 20 70 6e 75 6d 0a 7d 0a  ].  incr pnum.}.
2510: 66 6f 72 65 61 63 68 20 6e 61 6d 65 20 24 61 6c  foreach name $al
2520: 6c 6e 61 6d 65 73 20 7b 0a 20 20 73 65 74 20 74  lnames {.  set t
2530: 79 70 65 20 5b 6c 69 6e 64 65 78 20 24 61 6c 6c  ype [lindex $all
2540: 62 79 6e 61 6d 65 28 24 6e 61 6d 65 29 20 30 5d  byname($name) 0]
2550: 0a 20 20 69 66 20 7b 5b 69 6e 66 6f 20 65 78 69  .  if {[info exi
2560: 73 74 73 20 73 65 65 6e 74 79 70 65 28 24 74 79  sts seentype($ty
2570: 70 65 29 5d 7d 20 63 6f 6e 74 69 6e 75 65 0a 20  pe)]} continue. 
2580: 20 73 65 74 20 73 65 65 6e 74 79 70 65 28 24 74   set seentype($t
2590: 79 70 65 29 20 31 0a 20 20 70 75 74 73 20 24 66  ype) 1.  puts $f
25a0: 64 20 5b 66 6f 72 6d 61 74 20 7b 23 64 65 66 69  d [format {#defi
25b0: 6e 65 20 25 2d 33 35 73 20 25 34 64 7d 20 50 72  ne %-35s %4d} Pr
25c0: 61 67 54 79 70 5f 24 74 79 70 65 20 24 70 6e 75  agTyp_$type $pnu
25d0: 6d 5d 0a 20 20 69 6e 63 72 20 70 6e 75 6d 0a 7d  m].  incr pnum.}
25e0: 0a 0a 23 20 47 65 6e 65 72 61 74 65 20 23 64 65  ..# Generate #de
25f0: 66 69 6e 65 73 20 66 6f 72 20 66 6c 61 67 73 0a  fines for flags.
2600: 23 0a 73 65 74 20 66 76 20 31 0a 66 6f 72 65 61  #.set fv 1.forea
2610: 63 68 20 66 20 5b 6c 73 6f 72 74 20 5b 61 72 72  ch f [lsort [arr
2620: 61 79 20 6e 61 6d 65 73 20 61 6c 6c 66 6c 61 67  ay names allflag
2630: 73 5d 5d 20 7b 0a 20 20 70 75 74 73 20 24 66 64  s]] {.  puts $fd
2640: 20 5b 66 6f 72 6d 61 74 20 7b 23 64 65 66 69 6e   [format {#defin
2650: 65 20 50 72 61 67 46 6c 61 67 5f 25 2d 32 30 73  e PragFlag_%-20s
2660: 20 30 78 25 30 32 78 7d 20 24 66 20 24 66 76 5d   0x%02x} $f $fv]
2670: 0a 20 20 73 65 74 20 66 76 20 5b 65 78 70 72 20  .  set fv [expr 
2680: 7b 24 66 76 2a 32 7d 5d 0a 7d 0a 0a 23 20 47 65  {$fv*2}].}..# Ge
2690: 6e 65 72 61 74 65 20 74 68 65 20 6c 6f 6f 6b 75  nerate the looku
26a0: 70 20 74 61 62 6c 65 0a 23 0a 70 75 74 73 20 24  p table.#.puts $
26b0: 66 64 20 22 73 74 61 74 69 63 20 63 6f 6e 73 74  fd "static const
26c0: 20 73 74 72 75 63 74 20 73 50 72 61 67 6d 61 4e   struct sPragmaN
26d0: 61 6d 65 73 20 5c 31 37 33 22 0a 70 75 74 73 20  ames \173".puts 
26e0: 24 66 64 20 22 20 20 63 6f 6e 73 74 20 63 68 61  $fd "  const cha
26f0: 72 20 2a 63 6f 6e 73 74 20 7a 4e 61 6d 65 3b 20  r *const zName; 
2700: 20 2f 2a 20 4e 61 6d 65 20 6f 66 20 70 72 61 67   /* Name of prag
2710: 6d 61 20 2a 2f 22 0a 70 75 74 73 20 24 66 64 20  ma */".puts $fd 
2720: 22 20 20 75 38 20 65 50 72 61 67 54 79 70 3b 20  "  u8 ePragTyp; 
2730: 20 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20               /* 
2740: 50 72 61 67 54 79 70 5f 58 58 58 20 76 61 6c 75  PragTyp_XXX valu
2750: 65 20 2a 2f 22 0a 70 75 74 73 20 24 66 64 20 22  e */".puts $fd "
2760: 20 20 75 38 20 6d 50 72 61 67 46 6c 61 67 3b 20    u8 mPragFlag; 
2770: 20 20 20 20 20 20 20 20 20 20 20 20 2f 2a 20 5a              /* Z
2780: 65 72 6f 20 6f 72 20 6d 6f 72 65 20 50 72 61 67  ero or more Prag
2790: 46 6c 61 67 5f 58 58 58 20 76 61 6c 75 65 73 20  Flag_XXX values 
27a0: 2a 2f 22 0a 70 75 74 73 20 24 66 64 20 22 20 20  */".puts $fd "  
27b0: 75 33 32 20 69 41 72 67 3b 20 20 20 20 20 20 20  u32 iArg;       
27c0: 20 20 20 20 20 20 20 20 20 20 2f 2a 20 45 78 74            /* Ext
27d0: 72 61 20 61 72 67 75 6d 65 6e 74 20 2a 2f 22 0a  ra argument */".
27e0: 70 75 74 73 20 24 66 64 20 22 5c 31 37 35 20 61  puts $fd "\175 a
27f0: 50 72 61 67 6d 61 4e 61 6d 65 73 5c 5b 5c 5d 20  PragmaNames\[\] 
2800: 3d 20 5c 31 37 33 22 0a 0a 73 65 74 20 63 75 72  = \173"..set cur
2810: 72 65 6e 74 5f 69 66 20 7b 7d 0a 73 65 74 20 73  rent_if {}.set s
2820: 70 61 63 65 72 20 5b 66 6f 72 6d 61 74 20 7b 20  pacer [format { 
2830: 20 20 20 25 32 36 73 20 7d 20 7b 7d 5d 0a 66 6f     %26s } {}].fo
2840: 72 65 61 63 68 20 6e 61 6d 65 20 24 61 6c 6c 6e  reach name $alln
2850: 61 6d 65 73 20 7b 0a 20 20 66 6f 72 65 61 63 68  ames {.  foreach
2860: 20 7b 74 79 70 65 20 61 72 67 20 69 66 20 66 6c   {type arg if fl
2870: 61 67 7d 20 24 61 6c 6c 62 79 6e 61 6d 65 28 24  ag} $allbyname($
2880: 6e 61 6d 65 29 20 62 72 65 61 6b 0a 20 20 69 66  name) break.  if
2890: 20 7b 24 69 66 21 3d 24 63 75 72 72 65 6e 74 5f   {$if!=$current_
28a0: 69 66 7d 20 7b 0a 20 20 20 20 69 66 20 7b 24 63  if} {.    if {$c
28b0: 75 72 72 65 6e 74 5f 69 66 21 3d 22 22 7d 20 7b  urrent_if!=""} {
28c0: 0a 20 20 20 20 20 20 66 6f 72 65 61 63 68 20 74  .      foreach t
28d0: 68 69 73 5f 69 66 20 24 63 75 72 72 65 6e 74 5f  his_if $current_
28e0: 69 66 20 7b 0a 20 20 20 20 20 20 20 20 70 75 74  if {.        put
28f0: 73 20 24 66 64 20 22 23 65 6e 64 69 66 22 0a 20  s $fd "#endif". 
2900: 20 20 20 20 20 7d 0a 20 20 20 20 7d 0a 20 20 20       }.    }.   
2910: 20 73 65 74 20 63 75 72 72 65 6e 74 5f 69 66 20   set current_if 
2920: 24 69 66 0a 20 20 20 20 69 66 20 7b 24 63 75 72  $if.    if {$cur
2930: 72 65 6e 74 5f 69 66 21 3d 22 22 7d 20 7b 0a 20  rent_if!=""} {. 
2940: 20 20 20 20 20 66 6f 72 65 61 63 68 20 74 68 69       foreach thi
2950: 73 5f 69 66 20 24 63 75 72 72 65 6e 74 5f 69 66  s_if $current_if
2960: 20 7b 0a 20 20 20 20 20 20 20 20 70 75 74 73 20   {.        puts 
2970: 24 66 64 20 22 23 69 66 20 24 74 68 69 73 5f 69  $fd "#if $this_i
2980: 66 22 0a 20 20 20 20 20 20 7d 0a 20 20 20 20 7d  f".      }.    }
2990: 0a 20 20 7d 0a 20 20 73 65 74 20 74 79 70 65 78  .  }.  set typex
29a0: 20 5b 66 6f 72 6d 61 74 20 50 72 61 67 54 79 70   [format PragTyp
29b0: 5f 25 2d 32 33 73 20 24 74 79 70 65 2c 5d 0a 20  _%-23s $type,]. 
29c0: 20 69 66 20 7b 24 66 6c 61 67 3d 3d 22 22 7d 20   if {$flag==""} 
29d0: 7b 0a 20 20 20 20 73 65 74 20 66 6c 61 67 78 20  {.    set flagx 
29e0: 22 30 22 0a 20 20 7d 20 65 6c 73 65 20 7b 0a 20  "0".  } else {. 
29f0: 20 20 20 73 65 74 20 66 6c 61 67 78 20 50 72 61     set flagx Pra
2a00: 67 46 6c 61 67 5f 5b 6a 6f 69 6e 20 24 66 6c 61  gFlag_[join $fla
2a10: 67 20 7b 7c 50 72 61 67 46 6c 61 67 5f 7d 5d 0a  g {|PragFlag_}].
2a20: 20 20 7d 0a 20 20 70 75 74 73 20 24 66 64 20 22    }.  puts $fd "
2a30: 20 20 5c 31 37 33 20 2f 2a 20 7a 4e 61 6d 65 3a    \173 /* zName:
2a40: 20 20 20 20 20 2a 2f 20 5c 22 24 6e 61 6d 65 5c       */ \"$name\
2a50: 22 2c 22 0a 20 20 70 75 74 73 20 24 66 64 20 22  ",".  puts $fd "
2a60: 20 20 20 20 2f 2a 20 65 50 72 61 67 54 79 70 3a      /* ePragTyp:
2a70: 20 20 2a 2f 20 50 72 61 67 54 79 70 5f 24 74 79    */ PragTyp_$ty
2a80: 70 65 2c 22 0a 20 20 70 75 74 73 20 24 66 64 20  pe,".  puts $fd 
2a90: 22 20 20 20 20 2f 2a 20 65 50 72 61 67 46 6c 61  "    /* ePragFla
2aa0: 67 3a 20 2a 2f 20 24 66 6c 61 67 78 2c 22 0a 20  g: */ $flagx,". 
2ab0: 20 70 75 74 73 20 24 66 64 20 22 20 20 20 20 2f   puts $fd "    /
2ac0: 2a 20 69 41 72 67 3a 20 20 20 20 20 20 2a 2f 20  * iArg:      */ 
2ad0: 24 61 72 67 20 5c 31 37 35 2c 22 0a 7d 0a 69 66  $arg \175,".}.if
2ae0: 20 7b 24 63 75 72 72 65 6e 74 5f 69 66 21 3d 22   {$current_if!="
2af0: 22 7d 20 7b 0a 20 20 66 6f 72 65 61 63 68 20 74  "} {.  foreach t
2b00: 68 69 73 5f 69 66 20 24 63 75 72 72 65 6e 74 5f  his_if $current_
2b10: 69 66 20 7b 0a 20 20 20 20 70 75 74 73 20 24 66  if {.    puts $f
2b20: 64 20 22 23 65 6e 64 69 66 22 0a 20 20 7d 0a 7d  d "#endif".  }.}
2b30: 0a 70 75 74 73 20 24 66 64 20 22 5c 31 37 35 3b  .puts $fd "\175;
2b40: 22 0a 0a 23 20 63 6f 75 6e 74 20 74 68 65 20 6e  "..# count the n
2b50: 75 6d 62 65 72 20 6f 66 20 70 72 61 67 6d 61 73  umber of pragmas
2b60: 2c 20 66 6f 72 20 69 6e 66 6f 72 6d 61 74 69 6f  , for informatio
2b70: 6e 20 70 75 72 70 6f 73 65 73 0a 23 0a 73 65 74  n purposes.#.set
2b80: 20 61 6c 6c 63 6e 74 20 30 0a 73 65 74 20 64 66   allcnt 0.set df
2b90: 6c 74 63 6e 74 20 30 0a 66 6f 72 65 61 63 68 20  ltcnt 0.foreach 
2ba0: 6e 61 6d 65 20 24 61 6c 6c 6e 61 6d 65 73 20 7b  name $allnames {
2bb0: 0a 20 20 69 6e 63 72 20 61 6c 6c 63 6e 74 0a 20  .  incr allcnt. 
2bc0: 20 73 65 74 20 69 66 20 5b 6c 69 6e 64 65 78 20   set if [lindex 
2bd0: 24 61 6c 6c 62 79 6e 61 6d 65 28 24 6e 61 6d 65  $allbyname($name
2be0: 29 20 32 5d 0a 20 20 69 66 20 7b 5b 72 65 67 65  ) 2].  if {[rege
2bf0: 78 70 20 7b 5e 64 65 66 69 6e 65 64 7d 20 24 69  xp {^defined} $i
2c00: 66 5d 20 7c 7c 20 5b 72 65 67 65 78 70 20 7b 5b  f] || [regexp {[
2c10: 5e 21 5d 64 65 66 69 6e 65 64 7d 20 24 69 66 5d  ^!]defined} $if]
2c20: 7d 20 63 6f 6e 74 69 6e 75 65 0a 20 20 69 6e 63  } continue.  inc
2c30: 72 20 64 66 6c 74 63 6e 74 0a 7d 0a 70 75 74 73  r dfltcnt.}.puts
2c40: 20 24 66 64 20 22 2f 2a 20 4e 75 6d 62 65 72 20   $fd "/* Number 
2c50: 6f 66 20 70 72 61 67 6d 61 73 3a 20 24 64 66 6c  of pragmas: $dfl
2c60: 74 63 6e 74 20 6f 6e 20 62 79 20 64 65 66 61 75  tcnt on by defau
2c70: 6c 74 2c 20 24 61 6c 6c 63 6e 74 20 74 6f 74 61  lt, $allcnt tota
2c80: 6c 2e 20 2a 2f 22 0a                             l. */".