blob: c7001dc33997ff853f2fc025d6dbc3e78f9ff87a [file] [log] [blame]
drh9ccd8652013-09-13 16:36:46 +00001#!/usr/bin/tclsh
2#
3# Run this script to generate the pragma name lookup table C code.
4#
5# To add new pragmas, first add the name and other relevant attributes
6# of the pragma to the "pragma_def" object below. Then run this script
drh67e65e52015-02-02 21:34:54 +00007# to generate the ../src/pragma.h header file that contains macros and
8# the lookup table needed for pragma name lookup in the pragma.c module.
drh9ccd8652013-09-13 16:36:46 +00009# Then add the extra "case PragTyp_XXXXX:" and subsequent code for the
drh67e65e52015-02-02 21:34:54 +000010# new pragma in ../src/pragma.c.
drh9ccd8652013-09-13 16:36:46 +000011#
12
drhc232aca2016-12-15 16:01:17 +000013# Flag meanings:
14set flagMeaning(NeedSchema) {Force schema load before running}
15set flagMeaning(ReadOnly) {Read-only HEADER_VALUE}
16set flagMeaning(Result0) {Acts as query when no argument}
17set flagMeaning(Result1) {Acts as query when has one argument}
18set flagMeaning(SchemaReq) {Schema required - "main" is default}
19set flagMeaning(SchemaOpt) {Schema restricts name search if present}
20set flagMeaning(NoColumns) {OP_ResultRow called with zero columns}
dan9e1ab1a2017-01-05 19:32:48 +000021set flagMeaning(NoColumns1) {zero columns if RHS argument is present}
drhc232aca2016-12-15 16:01:17 +000022
drh9ccd8652013-09-13 16:36:46 +000023set pragma_def {
24 NAME: full_column_names
25 TYPE: FLAG
26 ARG: SQLITE_FullColNames
mistachkindd197832013-10-21 23:17:23 +000027 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000028
29 NAME: short_column_names
30 TYPE: FLAG
31 ARG: SQLITE_ShortColNames
mistachkindd197832013-10-21 23:17:23 +000032 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000033
34 NAME: count_changes
35 TYPE: FLAG
36 ARG: SQLITE_CountRows
mistachkindd197832013-10-21 23:17:23 +000037 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000038
39 NAME: empty_result_callbacks
40 TYPE: FLAG
41 ARG: SQLITE_NullCallback
mistachkindd197832013-10-21 23:17:23 +000042 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000043
44 NAME: legacy_file_format
45 TYPE: FLAG
46 ARG: SQLITE_LegacyFileFmt
mistachkindd197832013-10-21 23:17:23 +000047 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000048
49 NAME: fullfsync
50 TYPE: FLAG
51 ARG: SQLITE_FullFSync
mistachkindd197832013-10-21 23:17:23 +000052 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000053
54 NAME: checkpoint_fullfsync
55 TYPE: FLAG
56 ARG: SQLITE_CkptFullFSync
mistachkindd197832013-10-21 23:17:23 +000057 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000058
59 NAME: cache_spill
dan9e1ab1a2017-01-05 19:32:48 +000060 FLAG: Result0 SchemaReq NoColumns1
mistachkindd197832013-10-21 23:17:23 +000061 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000062
63 NAME: reverse_unordered_selects
64 TYPE: FLAG
65 ARG: SQLITE_ReverseOrder
mistachkindd197832013-10-21 23:17:23 +000066 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000067
68 NAME: query_only
69 TYPE: FLAG
70 ARG: SQLITE_QueryOnly
mistachkindd197832013-10-21 23:17:23 +000071 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000072
73 NAME: automatic_index
74 TYPE: FLAG
75 ARG: SQLITE_AutoIndex
mistachkindd197832013-10-21 23:17:23 +000076 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000077 IF: !defined(SQLITE_OMIT_AUTOMATIC_INDEX)
78
79 NAME: sql_trace
80 TYPE: FLAG
81 ARG: SQLITE_SqlTrace
mistachkindd197832013-10-21 23:17:23 +000082 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000083 IF: defined(SQLITE_DEBUG)
84
85 NAME: vdbe_listing
86 TYPE: FLAG
87 ARG: SQLITE_VdbeListing
mistachkindd197832013-10-21 23:17:23 +000088 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000089 IF: defined(SQLITE_DEBUG)
90
91 NAME: vdbe_trace
92 TYPE: FLAG
93 ARG: SQLITE_VdbeTrace
mistachkindd197832013-10-21 23:17:23 +000094 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000095 IF: defined(SQLITE_DEBUG)
96
97 NAME: vdbe_addoptrace
98 TYPE: FLAG
99 ARG: SQLITE_VdbeAddopTrace
mistachkindd197832013-10-21 23:17:23 +0000100 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000101 IF: defined(SQLITE_DEBUG)
102
103 NAME: vdbe_debug
104 TYPE: FLAG
105 ARG: SQLITE_SqlTrace|SQLITE_VdbeListing|SQLITE_VdbeTrace
mistachkindd197832013-10-21 23:17:23 +0000106 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000107 IF: defined(SQLITE_DEBUG)
108
drh84e55a82013-11-13 17:58:23 +0000109 NAME: vdbe_eqp
110 TYPE: FLAG
111 ARG: SQLITE_VdbeEQP
112 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
113 IF: defined(SQLITE_DEBUG)
114
drh9ccd8652013-09-13 16:36:46 +0000115 NAME: ignore_check_constraints
116 TYPE: FLAG
117 ARG: SQLITE_IgnoreChecks
mistachkindd197832013-10-21 23:17:23 +0000118 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000119 IF: !defined(SQLITE_OMIT_CHECK)
120
121 NAME: writable_schema
122 TYPE: FLAG
drh169dd922017-06-26 13:57:49 +0000123 ARG: SQLITE_WriteSchema
mistachkindd197832013-10-21 23:17:23 +0000124 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000125
126 NAME: read_uncommitted
127 TYPE: FLAG
drh169dd922017-06-26 13:57:49 +0000128 ARG: SQLITE_ReadUncommit
mistachkindd197832013-10-21 23:17:23 +0000129 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000130
131 NAME: recursive_triggers
132 TYPE: FLAG
133 ARG: SQLITE_RecTriggers
mistachkindd197832013-10-21 23:17:23 +0000134 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000135
136 NAME: foreign_keys
137 TYPE: FLAG
138 ARG: SQLITE_ForeignKeys
mistachkindd197832013-10-21 23:17:23 +0000139 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000140 IF: !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
141
142 NAME: defer_foreign_keys
143 TYPE: FLAG
144 ARG: SQLITE_DeferFKs
mistachkindd197832013-10-21 23:17:23 +0000145 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000146 IF: !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
147
drh1421d982015-05-27 03:46:18 +0000148 NAME: cell_size_check
149 TYPE: FLAG
150 ARG: SQLITE_CellSizeCk
151
drh9ccd8652013-09-13 16:36:46 +0000152 NAME: default_cache_size
dan9e1ab1a2017-01-05 19:32:48 +0000153 FLAG: NeedSchema Result0 SchemaReq NoColumns1
drhc232aca2016-12-15 16:01:17 +0000154 COLS: cache_size
drh9ccd8652013-09-13 16:36:46 +0000155 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS) && !defined(SQLITE_OMIT_DEPRECATED)
156
157 NAME: page_size
dan9e1ab1a2017-01-05 19:32:48 +0000158 FLAG: Result0 SchemaReq NoColumns1
drh9ccd8652013-09-13 16:36:46 +0000159 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
160
161 NAME: secure_delete
drhc232aca2016-12-15 16:01:17 +0000162 FLAG: Result0
drh9ccd8652013-09-13 16:36:46 +0000163 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
164
165 NAME: page_count
drhc232aca2016-12-15 16:01:17 +0000166 FLAG: NeedSchema Result0 SchemaReq
drh9ccd8652013-09-13 16:36:46 +0000167 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
168
169 NAME: max_page_count
170 TYPE: PAGE_COUNT
drhc232aca2016-12-15 16:01:17 +0000171 FLAG: NeedSchema Result0 SchemaReq
drh9ccd8652013-09-13 16:36:46 +0000172 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
173
174 NAME: locking_mode
drhc232aca2016-12-15 16:01:17 +0000175 FLAG: Result0 SchemaReq
drh9ccd8652013-09-13 16:36:46 +0000176 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
177
178 NAME: journal_mode
drhc232aca2016-12-15 16:01:17 +0000179 FLAG: NeedSchema Result0 SchemaReq
drh9ccd8652013-09-13 16:36:46 +0000180 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
181
182 NAME: journal_size_limit
drhc232aca2016-12-15 16:01:17 +0000183 FLAG: Result0 SchemaReq
drh9ccd8652013-09-13 16:36:46 +0000184 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
185
186 NAME: cache_size
dan9e1ab1a2017-01-05 19:32:48 +0000187 FLAG: NeedSchema Result0 SchemaReq NoColumns1
drh9ccd8652013-09-13 16:36:46 +0000188 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
189
190 NAME: mmap_size
191 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
192
193 NAME: auto_vacuum
dan9e1ab1a2017-01-05 19:32:48 +0000194 FLAG: NeedSchema Result0 SchemaReq NoColumns1
drh9ccd8652013-09-13 16:36:46 +0000195 IF: !defined(SQLITE_OMIT_AUTOVACUUM)
196
197 NAME: incremental_vacuum
drhc232aca2016-12-15 16:01:17 +0000198 FLAG: NeedSchema NoColumns
drh9ccd8652013-09-13 16:36:46 +0000199 IF: !defined(SQLITE_OMIT_AUTOVACUUM)
200
201 NAME: temp_store
dan9e1ab1a2017-01-05 19:32:48 +0000202 FLAG: Result0 NoColumns1
drh9ccd8652013-09-13 16:36:46 +0000203 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
204
205 NAME: temp_store_directory
dan9e1ab1a2017-01-05 19:32:48 +0000206 FLAG: NoColumns1
drh9ccd8652013-09-13 16:36:46 +0000207 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
208
209 NAME: data_store_directory
dan9e1ab1a2017-01-05 19:32:48 +0000210 FLAG: NoColumns1
drh9ccd8652013-09-13 16:36:46 +0000211 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS) && SQLITE_OS_WIN
212
213 NAME: lock_proxy_file
dan9e1ab1a2017-01-05 19:32:48 +0000214 FLAG: NoColumns1
drh9ccd8652013-09-13 16:36:46 +0000215 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS) && SQLITE_ENABLE_LOCKING_STYLE
216
217 NAME: synchronous
dan9e1ab1a2017-01-05 19:32:48 +0000218 FLAG: NeedSchema Result0 SchemaReq NoColumns1
drh9ccd8652013-09-13 16:36:46 +0000219 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
220
221 NAME: table_info
drhc232aca2016-12-15 16:01:17 +0000222 FLAG: NeedSchema Result1 SchemaOpt
223 COLS: cid name type notnull dflt_value pk
drh9ccd8652013-09-13 16:36:46 +0000224 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
225
drh3ef26152013-10-12 20:22:00 +0000226 NAME: stats
drhc232aca2016-12-15 16:01:17 +0000227 FLAG: NeedSchema Result0 SchemaReq
drha3928dd2017-02-17 15:26:36 +0000228 COLS: tbl idx wdth hght flgs
drh33bec3f2017-02-17 13:38:15 +0000229 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS) && defined(SQLITE_DEBUG)
drh3ef26152013-10-12 20:22:00 +0000230
drh9ccd8652013-09-13 16:36:46 +0000231 NAME: index_info
drhc228be52015-01-31 02:00:01 +0000232 TYPE: INDEX_INFO
233 ARG: 0
drhc232aca2016-12-15 16:01:17 +0000234 FLAG: NeedSchema Result1 SchemaOpt
235 COLS: seqno cid name
drhc228be52015-01-31 02:00:01 +0000236 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
237
238 NAME: index_xinfo
239 TYPE: INDEX_INFO
240 ARG: 1
drhc232aca2016-12-15 16:01:17 +0000241 FLAG: NeedSchema Result1 SchemaOpt
242 COLS: seqno cid name desc coll key
drh9ccd8652013-09-13 16:36:46 +0000243 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
244
245 NAME: index_list
drhc232aca2016-12-15 16:01:17 +0000246 FLAG: NeedSchema Result1 SchemaOpt
247 COLS: seq name unique origin partial
drh9ccd8652013-09-13 16:36:46 +0000248 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
249
250 NAME: database_list
drhc232aca2016-12-15 16:01:17 +0000251 FLAG: NeedSchema Result0
252 COLS: seq name file
drh9ccd8652013-09-13 16:36:46 +0000253 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
254
255 NAME: collation_list
drhc232aca2016-12-15 16:01:17 +0000256 FLAG: Result0
257 COLS: seq name
drh9ccd8652013-09-13 16:36:46 +0000258 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
259
260 NAME: foreign_key_list
drhc232aca2016-12-15 16:01:17 +0000261 FLAG: NeedSchema Result1 SchemaOpt
262 COLS: id seq table from to on_update on_delete match
drh9ccd8652013-09-13 16:36:46 +0000263 IF: !defined(SQLITE_OMIT_FOREIGN_KEY)
264
265 NAME: foreign_key_check
drhc45fdb22017-06-21 01:36:30 +0000266 FLAG: NeedSchema Result0
drhc232aca2016-12-15 16:01:17 +0000267 COLS: table rowid parent fkid
drh9ccd8652013-09-13 16:36:46 +0000268 IF: !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
269
270 NAME: parser_trace
drh35926802015-12-15 13:50:22 +0000271 IF: defined(SQLITE_DEBUG) && !defined(SQLITE_OMIT_PARSER_TRACE)
drh9ccd8652013-09-13 16:36:46 +0000272
273 NAME: case_sensitive_like
dane1ff3f52017-01-06 13:49:40 +0000274 FLAG: NoColumns
drh9ccd8652013-09-13 16:36:46 +0000275
276 NAME: integrity_check
drhc45fdb22017-06-21 01:36:30 +0000277 FLAG: NeedSchema Result0 Result1
drh9ccd8652013-09-13 16:36:46 +0000278 IF: !defined(SQLITE_OMIT_INTEGRITY_CHECK)
279
280 NAME: quick_check
281 TYPE: INTEGRITY_CHECK
drhc45fdb22017-06-21 01:36:30 +0000282 FLAG: NeedSchema Result0 Result1
drh9ccd8652013-09-13 16:36:46 +0000283 IF: !defined(SQLITE_OMIT_INTEGRITY_CHECK)
284
285 NAME: encoding
dan9e1ab1a2017-01-05 19:32:48 +0000286 FLAG: Result0 NoColumns1
drh9ccd8652013-09-13 16:36:46 +0000287 IF: !defined(SQLITE_OMIT_UTF16)
288
289 NAME: schema_version
290 TYPE: HEADER_VALUE
drh8e755e72014-12-19 18:49:55 +0000291 ARG: BTREE_SCHEMA_VERSION
dan9e1ab1a2017-01-05 19:32:48 +0000292 FLAG: NoColumns1 Result0
drh9ccd8652013-09-13 16:36:46 +0000293 IF: !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
294
295 NAME: user_version
296 TYPE: HEADER_VALUE
drh8e755e72014-12-19 18:49:55 +0000297 ARG: BTREE_USER_VERSION
dan9e1ab1a2017-01-05 19:32:48 +0000298 FLAG: NoColumns1 Result0
drh9ccd8652013-09-13 16:36:46 +0000299 IF: !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
300
drh91618562014-12-19 19:28:02 +0000301 NAME: data_version
302 TYPE: HEADER_VALUE
303 ARG: BTREE_DATA_VERSION
dan9e1ab1a2017-01-05 19:32:48 +0000304 FLAG: ReadOnly Result0
drh91618562014-12-19 19:28:02 +0000305 IF: !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
306
drh9ccd8652013-09-13 16:36:46 +0000307 NAME: freelist_count
308 TYPE: HEADER_VALUE
drh8e755e72014-12-19 18:49:55 +0000309 ARG: BTREE_FREE_PAGE_COUNT
dan9e1ab1a2017-01-05 19:32:48 +0000310 FLAG: ReadOnly Result0
drh9ccd8652013-09-13 16:36:46 +0000311 IF: !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
312
313 NAME: application_id
314 TYPE: HEADER_VALUE
drh8e755e72014-12-19 18:49:55 +0000315 ARG: BTREE_APPLICATION_ID
dan9e1ab1a2017-01-05 19:32:48 +0000316 FLAG: NoColumns1 Result0
drh9ccd8652013-09-13 16:36:46 +0000317 IF: !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
318
319 NAME: compile_options
drhc232aca2016-12-15 16:01:17 +0000320 FLAG: Result0
drh9ccd8652013-09-13 16:36:46 +0000321 IF: !defined(SQLITE_OMIT_COMPILEOPTION_DIAGS)
322
323 NAME: wal_checkpoint
drhf63936e2013-10-03 14:08:07 +0000324 FLAG: NeedSchema
drhc232aca2016-12-15 16:01:17 +0000325 COLS: busy log checkpointed
drh9ccd8652013-09-13 16:36:46 +0000326 IF: !defined(SQLITE_OMIT_WAL)
327
328 NAME: wal_autocheckpoint
329 IF: !defined(SQLITE_OMIT_WAL)
330
331 NAME: shrink_memory
dane1ff3f52017-01-06 13:49:40 +0000332 FLAG: NoColumns
drh9ccd8652013-09-13 16:36:46 +0000333
334 NAME: busy_timeout
drhc232aca2016-12-15 16:01:17 +0000335 FLAG: Result0
336 COLS: timeout
drh9ccd8652013-09-13 16:36:46 +0000337
338 NAME: lock_status
drhc232aca2016-12-15 16:01:17 +0000339 FLAG: Result0
340 COLS: database status
drh9ccd8652013-09-13 16:36:46 +0000341 IF: defined(SQLITE_DEBUG) || defined(SQLITE_TEST)
342
343 NAME: key
344 IF: defined(SQLITE_HAS_CODEC)
345
346 NAME: rekey
347 IF: defined(SQLITE_HAS_CODEC)
348
349 NAME: hexkey
350 IF: defined(SQLITE_HAS_CODEC)
351
drh8ab88322013-10-07 00:36:01 +0000352 NAME: hexrekey
353 TYPE: HEXKEY
354 IF: defined(SQLITE_HAS_CODEC)
355
drh9ccd8652013-09-13 16:36:46 +0000356 NAME: activate_extensions
357 IF: defined(SQLITE_HAS_CODEC) || defined(SQLITE_ENABLE_CEROD)
drh55e85ca2013-09-13 21:01:56 +0000358
359 NAME: soft_heap_limit
drhc232aca2016-12-15 16:01:17 +0000360 FLAG: Result0
drh03459612014-08-25 15:13:22 +0000361
362 NAME: threads
drhc232aca2016-12-15 16:01:17 +0000363 FLAG: Result0
drh72052a72017-02-17 16:26:34 +0000364
drh2ead47c2017-02-22 20:24:10 +0000365 NAME: optimize
drh761f6912017-04-03 13:33:51 +0000366 FLAG: Result1 NeedSchema
drh9ccd8652013-09-13 16:36:46 +0000367}
drh67e65e52015-02-02 21:34:54 +0000368
369# Open the output file
370#
371set destfile "[file dir [file dir [file normal $argv0]]]/src/pragma.h"
372puts "Overwriting $destfile with new pragma table..."
373set fd [open $destfile wb]
374puts $fd {/* DO NOT EDIT!
375** This file is automatically generated by the script at
376** ../tool/mkpragmatab.tcl. To update the set of pragmas, edit
377** that script and rerun it.
378*/}
379
380# Parse the PRAGMA table above.
381#
drh9ccd8652013-09-13 16:36:46 +0000382set name {}
383set type {}
384set if {}
drhf63936e2013-10-03 14:08:07 +0000385set flags {}
drhc232aca2016-12-15 16:01:17 +0000386set cols {}
387set cols_list {}
drh9ccd8652013-09-13 16:36:46 +0000388set arg 0
389proc record_one {} {
drhc232aca2016-12-15 16:01:17 +0000390 global name type if arg allbyname typebyif flags cols allcols
391 global cols_list colUsedBy
drh9ccd8652013-09-13 16:36:46 +0000392 if {$name==""} return
drhc232aca2016-12-15 16:01:17 +0000393 if {$cols!=""} {
394 if {![info exists allcols($cols)]} {
395 lappend cols_list $cols
396 set allcols($cols) [llength $cols_list]
397 }
398 set cx $allcols($cols)
399 lappend colUsedBy($cols) $name
400 } else {
401 set cx 0
402 }
403 set allbyname($name) [list $type $arg $if $flags $cx]
drh9ccd8652013-09-13 16:36:46 +0000404 set name {}
405 set type {}
406 set if {}
drhf63936e2013-10-03 14:08:07 +0000407 set flags {}
drhc232aca2016-12-15 16:01:17 +0000408 set cols {}
drh9ccd8652013-09-13 16:36:46 +0000409 set arg 0
410}
411foreach line [split $pragma_def \n] {
412 set line [string trim $line]
413 if {$line==""} continue
414 foreach {id val} [split $line :] break
415 set val [string trim $val]
416 if {$id=="NAME"} {
417 record_one
418 set name $val
419 set type [string toupper $val]
420 } elseif {$id=="TYPE"} {
421 set type $val
drhc232aca2016-12-15 16:01:17 +0000422 if {$type=="FLAG"} {
dan9e1ab1a2017-01-05 19:32:48 +0000423 lappend flags Result0 NoColumns1
drhc232aca2016-12-15 16:01:17 +0000424 }
drh9ccd8652013-09-13 16:36:46 +0000425 } elseif {$id=="ARG"} {
426 set arg $val
drhc232aca2016-12-15 16:01:17 +0000427 } elseif {$id=="COLS"} {
428 set cols $val
drh9ccd8652013-09-13 16:36:46 +0000429 } elseif {$id=="IF"} {
mistachkindd197832013-10-21 23:17:23 +0000430 lappend if $val
drhf63936e2013-10-03 14:08:07 +0000431 } elseif {$id=="FLAG"} {
432 foreach term [split $val] {
433 lappend flags $term
434 set allflags($term) 1
435 }
drh9ccd8652013-09-13 16:36:46 +0000436 } else {
437 error "bad pragma_def line: $line"
438 }
439}
440record_one
441set allnames [lsort [array names allbyname]]
442
443# Generate #defines for all pragma type names. Group the pragmas that are
444# omit in default builds (defined(SQLITE_DEBUG) and defined(SQLITE_HAS_CODEC))
445# at the end.
446#
drhc232aca2016-12-15 16:01:17 +0000447puts $fd "\n/* The various pragma types */"
drh9ccd8652013-09-13 16:36:46 +0000448set pnum 0
449foreach name $allnames {
450 set type [lindex $allbyname($name) 0]
451 if {[info exists seentype($type)]} continue
452 set if [lindex $allbyname($name) 2]
453 if {[regexp SQLITE_DEBUG $if] || [regexp SQLITE_HAS_CODEC $if]} continue
454 set seentype($type) 1
drh67e65e52015-02-02 21:34:54 +0000455 puts $fd [format {#define %-35s %4d} PragTyp_$type $pnum]
drh9ccd8652013-09-13 16:36:46 +0000456 incr pnum
457}
458foreach name $allnames {
459 set type [lindex $allbyname($name) 0]
460 if {[info exists seentype($type)]} continue
461 set if [lindex $allbyname($name) 2]
462 if {[regexp SQLITE_DEBUG $if]} continue
463 set seentype($type) 1
drh67e65e52015-02-02 21:34:54 +0000464 puts $fd [format {#define %-35s %4d} PragTyp_$type $pnum]
drh9ccd8652013-09-13 16:36:46 +0000465 incr pnum
466}
467foreach name $allnames {
468 set type [lindex $allbyname($name) 0]
469 if {[info exists seentype($type)]} continue
470 set seentype($type) 1
drh67e65e52015-02-02 21:34:54 +0000471 puts $fd [format {#define %-35s %4d} PragTyp_$type $pnum]
drh9ccd8652013-09-13 16:36:46 +0000472 incr pnum
473}
474
drhf63936e2013-10-03 14:08:07 +0000475# Generate #defines for flags
476#
drhc232aca2016-12-15 16:01:17 +0000477puts $fd "\n/* Property flags associated with various pragma. */"
drhf63936e2013-10-03 14:08:07 +0000478set fv 1
479foreach f [lsort [array names allflags]] {
drhc232aca2016-12-15 16:01:17 +0000480 puts $fd [format {#define PragFlg_%-10s 0x%02x /* %s */} \
481 $f $fv $flagMeaning($f)]
drhf63936e2013-10-03 14:08:07 +0000482 set fv [expr {$fv*2}]
483}
484
drhc232aca2016-12-15 16:01:17 +0000485# Generate the array of column names used by pragmas that act like
486# queries.
487#
488puts $fd "\n/* Names of columns for pragmas that return multi-column result"
489puts $fd "** or that return single-column results where the name of the"
490puts $fd "** result column is different from the name of the pragma\n*/"
491puts $fd "static const char *const pragCName\[\] = {"
492set offset 0
493foreach cols $cols_list {
494 set cols_offset($allcols($cols)) $offset
495 set ub " /* Used by: $colUsedBy($cols) */"
496 foreach c $cols {
497 puts $fd [format " /* %3d */ %-14s%s" $offset \"$c\", $ub]
498 set ub ""
499 incr offset
500 }
501}
502puts $fd "\175;"
503
drh9ccd8652013-09-13 16:36:46 +0000504# Generate the lookup table
505#
drhc232aca2016-12-15 16:01:17 +0000506puts $fd "\n/* Definitions of all built-in pragmas */"
drh2fcc1592016-12-15 20:59:03 +0000507puts $fd "typedef struct PragmaName \173"
drhc232aca2016-12-15 16:01:17 +0000508puts $fd " const char *const zName; /* Name of pragma */"
509puts $fd " u8 ePragTyp; /* PragTyp_XXX value */"
510puts $fd " u8 mPragFlg; /* Zero or more PragFlg_XXX values */"
511puts $fd { u8 iPragCName; /* Start of column names in pragCName[] */}
512puts $fd " u8 nPragCName; \
513/* Num of col names. 0 means use pragma name */"
514puts $fd " u32 iArg; /* Extra argument */"
drh2fcc1592016-12-15 20:59:03 +0000515puts $fd "\175 PragmaName;"
516puts $fd "static const PragmaName aPragmaName\[\] = \173"
drh9ccd8652013-09-13 16:36:46 +0000517
518set current_if {}
519set spacer [format { %26s } {}]
520foreach name $allnames {
drhc232aca2016-12-15 16:01:17 +0000521 foreach {type arg if flag cx} $allbyname($name) break
522 if {$cx==0} {
523 set cy 0
524 set nx 0
525 } else {
526 set cy $cols_offset($cx)
527 set nx [llength [lindex $cols_list [expr {$cx-1}]]]
528 }
drh9ccd8652013-09-13 16:36:46 +0000529 if {$if!=$current_if} {
mistachkindd197832013-10-21 23:17:23 +0000530 if {$current_if!=""} {
531 foreach this_if $current_if {
drh67e65e52015-02-02 21:34:54 +0000532 puts $fd "#endif"
mistachkindd197832013-10-21 23:17:23 +0000533 }
534 }
drh9ccd8652013-09-13 16:36:46 +0000535 set current_if $if
mistachkindd197832013-10-21 23:17:23 +0000536 if {$current_if!=""} {
537 foreach this_if $current_if {
drh67e65e52015-02-02 21:34:54 +0000538 puts $fd "#if $this_if"
mistachkindd197832013-10-21 23:17:23 +0000539 }
540 }
drh9ccd8652013-09-13 16:36:46 +0000541 }
drh9ccd8652013-09-13 16:36:46 +0000542 set typex [format PragTyp_%-23s $type,]
drhf63936e2013-10-03 14:08:07 +0000543 if {$flag==""} {
544 set flagx "0"
drh9ccd8652013-09-13 16:36:46 +0000545 } else {
drhc232aca2016-12-15 16:01:17 +0000546 set flagx PragFlg_[join $flag {|PragFlg_}]
drh9ccd8652013-09-13 16:36:46 +0000547 }
drhc232aca2016-12-15 16:01:17 +0000548 puts $fd " \173/* zName: */ \"$name\","
549 puts $fd " /* ePragTyp: */ PragTyp_$type,"
550 puts $fd " /* ePragFlg: */ $flagx,"
551 puts $fd " /* ColNames: */ $cy, $nx,"
552 puts $fd " /* iArg: */ $arg \175,"
drh9ccd8652013-09-13 16:36:46 +0000553}
mistachkindd197832013-10-21 23:17:23 +0000554if {$current_if!=""} {
555 foreach this_if $current_if {
drh67e65e52015-02-02 21:34:54 +0000556 puts $fd "#endif"
mistachkindd197832013-10-21 23:17:23 +0000557 }
558}
drh67e65e52015-02-02 21:34:54 +0000559puts $fd "\175;"
drh6bb64f62013-09-13 16:56:17 +0000560
561# count the number of pragmas, for information purposes
562#
563set allcnt 0
564set dfltcnt 0
565foreach name $allnames {
566 incr allcnt
567 set if [lindex $allbyname($name) 2]
568 if {[regexp {^defined} $if] || [regexp {[^!]defined} $if]} continue
569 incr dfltcnt
570}
drh67e65e52015-02-02 21:34:54 +0000571puts $fd "/* Number of pragmas: $dfltcnt on by default, $allcnt total. */"