blob: 858e0332cf57621a1bfc8d8c144ca4a726bba000 [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}
21
drh9ccd8652013-09-13 16:36:46 +000022set pragma_def {
23 NAME: full_column_names
24 TYPE: FLAG
25 ARG: SQLITE_FullColNames
mistachkindd197832013-10-21 23:17:23 +000026 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000027
28 NAME: short_column_names
29 TYPE: FLAG
30 ARG: SQLITE_ShortColNames
mistachkindd197832013-10-21 23:17:23 +000031 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000032
33 NAME: count_changes
34 TYPE: FLAG
35 ARG: SQLITE_CountRows
mistachkindd197832013-10-21 23:17:23 +000036 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000037
38 NAME: empty_result_callbacks
39 TYPE: FLAG
40 ARG: SQLITE_NullCallback
mistachkindd197832013-10-21 23:17:23 +000041 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000042
43 NAME: legacy_file_format
44 TYPE: FLAG
45 ARG: SQLITE_LegacyFileFmt
mistachkindd197832013-10-21 23:17:23 +000046 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000047
48 NAME: fullfsync
49 TYPE: FLAG
50 ARG: SQLITE_FullFSync
mistachkindd197832013-10-21 23:17:23 +000051 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000052
53 NAME: checkpoint_fullfsync
54 TYPE: FLAG
55 ARG: SQLITE_CkptFullFSync
mistachkindd197832013-10-21 23:17:23 +000056 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000057
58 NAME: cache_spill
drhc232aca2016-12-15 16:01:17 +000059 FLAG: Result0 SchemaReq
mistachkindd197832013-10-21 23:17:23 +000060 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000061
62 NAME: reverse_unordered_selects
63 TYPE: FLAG
64 ARG: SQLITE_ReverseOrder
mistachkindd197832013-10-21 23:17:23 +000065 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000066
67 NAME: query_only
68 TYPE: FLAG
69 ARG: SQLITE_QueryOnly
mistachkindd197832013-10-21 23:17:23 +000070 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000071
72 NAME: automatic_index
73 TYPE: FLAG
74 ARG: SQLITE_AutoIndex
mistachkindd197832013-10-21 23:17:23 +000075 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000076 IF: !defined(SQLITE_OMIT_AUTOMATIC_INDEX)
77
78 NAME: sql_trace
79 TYPE: FLAG
80 ARG: SQLITE_SqlTrace
mistachkindd197832013-10-21 23:17:23 +000081 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000082 IF: defined(SQLITE_DEBUG)
83
84 NAME: vdbe_listing
85 TYPE: FLAG
86 ARG: SQLITE_VdbeListing
mistachkindd197832013-10-21 23:17:23 +000087 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000088 IF: defined(SQLITE_DEBUG)
89
90 NAME: vdbe_trace
91 TYPE: FLAG
92 ARG: SQLITE_VdbeTrace
mistachkindd197832013-10-21 23:17:23 +000093 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000094 IF: defined(SQLITE_DEBUG)
95
96 NAME: vdbe_addoptrace
97 TYPE: FLAG
98 ARG: SQLITE_VdbeAddopTrace
mistachkindd197832013-10-21 23:17:23 +000099 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000100 IF: defined(SQLITE_DEBUG)
101
102 NAME: vdbe_debug
103 TYPE: FLAG
104 ARG: SQLITE_SqlTrace|SQLITE_VdbeListing|SQLITE_VdbeTrace
mistachkindd197832013-10-21 23:17:23 +0000105 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000106 IF: defined(SQLITE_DEBUG)
107
drh84e55a82013-11-13 17:58:23 +0000108 NAME: vdbe_eqp
109 TYPE: FLAG
110 ARG: SQLITE_VdbeEQP
111 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
112 IF: defined(SQLITE_DEBUG)
113
drh9ccd8652013-09-13 16:36:46 +0000114 NAME: ignore_check_constraints
115 TYPE: FLAG
116 ARG: SQLITE_IgnoreChecks
mistachkindd197832013-10-21 23:17:23 +0000117 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000118 IF: !defined(SQLITE_OMIT_CHECK)
119
120 NAME: writable_schema
121 TYPE: FLAG
122 ARG: SQLITE_WriteSchema|SQLITE_RecoveryMode
mistachkindd197832013-10-21 23:17:23 +0000123 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000124
125 NAME: read_uncommitted
126 TYPE: FLAG
127 ARG: SQLITE_ReadUncommitted
mistachkindd197832013-10-21 23:17:23 +0000128 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000129
130 NAME: recursive_triggers
131 TYPE: FLAG
132 ARG: SQLITE_RecTriggers
mistachkindd197832013-10-21 23:17:23 +0000133 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000134
135 NAME: foreign_keys
136 TYPE: FLAG
137 ARG: SQLITE_ForeignKeys
mistachkindd197832013-10-21 23:17:23 +0000138 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000139 IF: !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
140
141 NAME: defer_foreign_keys
142 TYPE: FLAG
143 ARG: SQLITE_DeferFKs
mistachkindd197832013-10-21 23:17:23 +0000144 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000145 IF: !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
146
drh1421d982015-05-27 03:46:18 +0000147 NAME: cell_size_check
148 TYPE: FLAG
149 ARG: SQLITE_CellSizeCk
150
drh9ccd8652013-09-13 16:36:46 +0000151 NAME: default_cache_size
drhc232aca2016-12-15 16:01:17 +0000152 FLAG: NeedSchema Result0 SchemaReq
153 COLS: cache_size
drh9ccd8652013-09-13 16:36:46 +0000154 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS) && !defined(SQLITE_OMIT_DEPRECATED)
155
156 NAME: page_size
drhc232aca2016-12-15 16:01:17 +0000157 FLAG: Result0 SchemaReq
drh9ccd8652013-09-13 16:36:46 +0000158 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
159
160 NAME: secure_delete
drhc232aca2016-12-15 16:01:17 +0000161 FLAG: Result0
drh9ccd8652013-09-13 16:36:46 +0000162 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
163
164 NAME: page_count
drhc232aca2016-12-15 16:01:17 +0000165 FLAG: NeedSchema Result0 SchemaReq
drh9ccd8652013-09-13 16:36:46 +0000166 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
167
168 NAME: max_page_count
169 TYPE: PAGE_COUNT
drhc232aca2016-12-15 16:01:17 +0000170 FLAG: NeedSchema Result0 SchemaReq
drh9ccd8652013-09-13 16:36:46 +0000171 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
172
173 NAME: locking_mode
drhc232aca2016-12-15 16:01:17 +0000174 FLAG: Result0 SchemaReq
drh9ccd8652013-09-13 16:36:46 +0000175 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
176
177 NAME: journal_mode
drhc232aca2016-12-15 16:01:17 +0000178 FLAG: NeedSchema Result0 SchemaReq
drh9ccd8652013-09-13 16:36:46 +0000179 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
180
181 NAME: journal_size_limit
drhc232aca2016-12-15 16:01:17 +0000182 FLAG: Result0 SchemaReq
drh9ccd8652013-09-13 16:36:46 +0000183 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
184
185 NAME: cache_size
drhc232aca2016-12-15 16:01:17 +0000186 FLAG: NeedSchema Result0 SchemaReq
drh9ccd8652013-09-13 16:36:46 +0000187 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
188
189 NAME: mmap_size
190 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
191
192 NAME: auto_vacuum
drhc232aca2016-12-15 16:01:17 +0000193 FLAG: NeedSchema Result0 SchemaReq
drh9ccd8652013-09-13 16:36:46 +0000194 IF: !defined(SQLITE_OMIT_AUTOVACUUM)
195
196 NAME: incremental_vacuum
drhc232aca2016-12-15 16:01:17 +0000197 FLAG: NeedSchema NoColumns
drh9ccd8652013-09-13 16:36:46 +0000198 IF: !defined(SQLITE_OMIT_AUTOVACUUM)
199
200 NAME: temp_store
drhc232aca2016-12-15 16:01:17 +0000201 FLAG: Result0
drh9ccd8652013-09-13 16:36:46 +0000202 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
203
204 NAME: temp_store_directory
205 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
206
207 NAME: data_store_directory
208 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS) && SQLITE_OS_WIN
209
210 NAME: lock_proxy_file
211 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS) && SQLITE_ENABLE_LOCKING_STYLE
212
213 NAME: synchronous
drhc232aca2016-12-15 16:01:17 +0000214 FLAG: NeedSchema Result0 SchemaReq
drh9ccd8652013-09-13 16:36:46 +0000215 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
216
217 NAME: table_info
drhc232aca2016-12-15 16:01:17 +0000218 FLAG: NeedSchema Result1 SchemaOpt
219 COLS: cid name type notnull dflt_value pk
drh9ccd8652013-09-13 16:36:46 +0000220 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
221
drh3ef26152013-10-12 20:22:00 +0000222 NAME: stats
drhc232aca2016-12-15 16:01:17 +0000223 FLAG: NeedSchema Result0 SchemaReq
224 COLS: table index width height
drh3ef26152013-10-12 20:22:00 +0000225 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
226
drh9ccd8652013-09-13 16:36:46 +0000227 NAME: index_info
drhc228be52015-01-31 02:00:01 +0000228 TYPE: INDEX_INFO
229 ARG: 0
drhc232aca2016-12-15 16:01:17 +0000230 FLAG: NeedSchema Result1 SchemaOpt
231 COLS: seqno cid name
drhc228be52015-01-31 02:00:01 +0000232 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
233
234 NAME: index_xinfo
235 TYPE: INDEX_INFO
236 ARG: 1
drhc232aca2016-12-15 16:01:17 +0000237 FLAG: NeedSchema Result1 SchemaOpt
238 COLS: seqno cid name desc coll key
drh9ccd8652013-09-13 16:36:46 +0000239 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
240
241 NAME: index_list
drhc232aca2016-12-15 16:01:17 +0000242 FLAG: NeedSchema Result1 SchemaOpt
243 COLS: seq name unique origin partial
drh9ccd8652013-09-13 16:36:46 +0000244 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
245
246 NAME: database_list
drhc232aca2016-12-15 16:01:17 +0000247 FLAG: NeedSchema Result0
248 COLS: seq name file
drh9ccd8652013-09-13 16:36:46 +0000249 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
250
251 NAME: collation_list
drhc232aca2016-12-15 16:01:17 +0000252 FLAG: Result0
253 COLS: seq name
drh9ccd8652013-09-13 16:36:46 +0000254 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
255
256 NAME: foreign_key_list
drhc232aca2016-12-15 16:01:17 +0000257 FLAG: NeedSchema Result1 SchemaOpt
258 COLS: id seq table from to on_update on_delete match
drh9ccd8652013-09-13 16:36:46 +0000259 IF: !defined(SQLITE_OMIT_FOREIGN_KEY)
260
261 NAME: foreign_key_check
drhf63936e2013-10-03 14:08:07 +0000262 FLAG: NeedSchema
drhc232aca2016-12-15 16:01:17 +0000263 COLS: table rowid parent fkid
drh9ccd8652013-09-13 16:36:46 +0000264 IF: !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
265
266 NAME: parser_trace
drh35926802015-12-15 13:50:22 +0000267 IF: defined(SQLITE_DEBUG) && !defined(SQLITE_OMIT_PARSER_TRACE)
drh9ccd8652013-09-13 16:36:46 +0000268
269 NAME: case_sensitive_like
270
271 NAME: integrity_check
drhf63936e2013-10-03 14:08:07 +0000272 FLAG: NeedSchema
drh9ccd8652013-09-13 16:36:46 +0000273 IF: !defined(SQLITE_OMIT_INTEGRITY_CHECK)
274
275 NAME: quick_check
276 TYPE: INTEGRITY_CHECK
drhf63936e2013-10-03 14:08:07 +0000277 FLAG: NeedSchema
drh9ccd8652013-09-13 16:36:46 +0000278 IF: !defined(SQLITE_OMIT_INTEGRITY_CHECK)
279
280 NAME: encoding
drhc232aca2016-12-15 16:01:17 +0000281 FLAG: Result0
drh9ccd8652013-09-13 16:36:46 +0000282 IF: !defined(SQLITE_OMIT_UTF16)
283
284 NAME: schema_version
285 TYPE: HEADER_VALUE
drh8e755e72014-12-19 18:49:55 +0000286 ARG: BTREE_SCHEMA_VERSION
drh9ccd8652013-09-13 16:36:46 +0000287 IF: !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
288
289 NAME: user_version
290 TYPE: HEADER_VALUE
drh8e755e72014-12-19 18:49:55 +0000291 ARG: BTREE_USER_VERSION
drh9ccd8652013-09-13 16:36:46 +0000292 IF: !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
293
drh91618562014-12-19 19:28:02 +0000294 NAME: data_version
295 TYPE: HEADER_VALUE
296 ARG: BTREE_DATA_VERSION
297 FLAG: ReadOnly
298 IF: !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
299
drh9ccd8652013-09-13 16:36:46 +0000300 NAME: freelist_count
301 TYPE: HEADER_VALUE
drh8e755e72014-12-19 18:49:55 +0000302 ARG: BTREE_FREE_PAGE_COUNT
303 FLAG: ReadOnly
drh9ccd8652013-09-13 16:36:46 +0000304 IF: !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
305
306 NAME: application_id
307 TYPE: HEADER_VALUE
drh8e755e72014-12-19 18:49:55 +0000308 ARG: BTREE_APPLICATION_ID
drh9ccd8652013-09-13 16:36:46 +0000309 IF: !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
310
311 NAME: compile_options
drhc232aca2016-12-15 16:01:17 +0000312 FLAG: Result0
drh9ccd8652013-09-13 16:36:46 +0000313 IF: !defined(SQLITE_OMIT_COMPILEOPTION_DIAGS)
314
315 NAME: wal_checkpoint
drhf63936e2013-10-03 14:08:07 +0000316 FLAG: NeedSchema
drhc232aca2016-12-15 16:01:17 +0000317 COLS: busy log checkpointed
drh9ccd8652013-09-13 16:36:46 +0000318 IF: !defined(SQLITE_OMIT_WAL)
319
320 NAME: wal_autocheckpoint
321 IF: !defined(SQLITE_OMIT_WAL)
322
323 NAME: shrink_memory
324
325 NAME: busy_timeout
drhc232aca2016-12-15 16:01:17 +0000326 FLAG: Result0
327 COLS: timeout
drh9ccd8652013-09-13 16:36:46 +0000328
329 NAME: lock_status
drhc232aca2016-12-15 16:01:17 +0000330 FLAG: Result0
331 COLS: database status
drh9ccd8652013-09-13 16:36:46 +0000332 IF: defined(SQLITE_DEBUG) || defined(SQLITE_TEST)
333
334 NAME: key
335 IF: defined(SQLITE_HAS_CODEC)
336
337 NAME: rekey
338 IF: defined(SQLITE_HAS_CODEC)
339
340 NAME: hexkey
341 IF: defined(SQLITE_HAS_CODEC)
342
drh8ab88322013-10-07 00:36:01 +0000343 NAME: hexrekey
344 TYPE: HEXKEY
345 IF: defined(SQLITE_HAS_CODEC)
346
drh9ccd8652013-09-13 16:36:46 +0000347 NAME: activate_extensions
348 IF: defined(SQLITE_HAS_CODEC) || defined(SQLITE_ENABLE_CEROD)
drh55e85ca2013-09-13 21:01:56 +0000349
350 NAME: soft_heap_limit
drhc232aca2016-12-15 16:01:17 +0000351 FLAG: Result0
drh03459612014-08-25 15:13:22 +0000352
353 NAME: threads
drhc232aca2016-12-15 16:01:17 +0000354 FLAG: Result0
drh9ccd8652013-09-13 16:36:46 +0000355}
drh67e65e52015-02-02 21:34:54 +0000356
357# Open the output file
358#
359set destfile "[file dir [file dir [file normal $argv0]]]/src/pragma.h"
360puts "Overwriting $destfile with new pragma table..."
361set fd [open $destfile wb]
362puts $fd {/* DO NOT EDIT!
363** This file is automatically generated by the script at
364** ../tool/mkpragmatab.tcl. To update the set of pragmas, edit
365** that script and rerun it.
366*/}
367
368# Parse the PRAGMA table above.
369#
drh9ccd8652013-09-13 16:36:46 +0000370set name {}
371set type {}
372set if {}
drhf63936e2013-10-03 14:08:07 +0000373set flags {}
drhc232aca2016-12-15 16:01:17 +0000374set cols {}
375set cols_list {}
drh9ccd8652013-09-13 16:36:46 +0000376set arg 0
377proc record_one {} {
drhc232aca2016-12-15 16:01:17 +0000378 global name type if arg allbyname typebyif flags cols allcols
379 global cols_list colUsedBy
drh9ccd8652013-09-13 16:36:46 +0000380 if {$name==""} return
drhc232aca2016-12-15 16:01:17 +0000381 if {$cols!=""} {
382 if {![info exists allcols($cols)]} {
383 lappend cols_list $cols
384 set allcols($cols) [llength $cols_list]
385 }
386 set cx $allcols($cols)
387 lappend colUsedBy($cols) $name
388 } else {
389 set cx 0
390 }
391 set allbyname($name) [list $type $arg $if $flags $cx]
drh9ccd8652013-09-13 16:36:46 +0000392 set name {}
393 set type {}
394 set if {}
drhf63936e2013-10-03 14:08:07 +0000395 set flags {}
drhc232aca2016-12-15 16:01:17 +0000396 set cols {}
drh9ccd8652013-09-13 16:36:46 +0000397 set arg 0
398}
399foreach line [split $pragma_def \n] {
400 set line [string trim $line]
401 if {$line==""} continue
402 foreach {id val} [split $line :] break
403 set val [string trim $val]
404 if {$id=="NAME"} {
405 record_one
406 set name $val
407 set type [string toupper $val]
408 } elseif {$id=="TYPE"} {
409 set type $val
drhc232aca2016-12-15 16:01:17 +0000410 if {$type=="FLAG"} {
411 lappend flags Result0 NoColumns
412 }
413 if {$type=="HEADER_VALUE"} {
414 lappend flags Result0
415 }
drh9ccd8652013-09-13 16:36:46 +0000416 } elseif {$id=="ARG"} {
417 set arg $val
drhc232aca2016-12-15 16:01:17 +0000418 } elseif {$id=="COLS"} {
419 set cols $val
drh9ccd8652013-09-13 16:36:46 +0000420 } elseif {$id=="IF"} {
mistachkindd197832013-10-21 23:17:23 +0000421 lappend if $val
drhf63936e2013-10-03 14:08:07 +0000422 } elseif {$id=="FLAG"} {
423 foreach term [split $val] {
424 lappend flags $term
425 set allflags($term) 1
426 }
drh9ccd8652013-09-13 16:36:46 +0000427 } else {
428 error "bad pragma_def line: $line"
429 }
430}
431record_one
432set allnames [lsort [array names allbyname]]
433
434# Generate #defines for all pragma type names. Group the pragmas that are
435# omit in default builds (defined(SQLITE_DEBUG) and defined(SQLITE_HAS_CODEC))
436# at the end.
437#
drhc232aca2016-12-15 16:01:17 +0000438puts $fd "\n/* The various pragma types */"
drh9ccd8652013-09-13 16:36:46 +0000439set pnum 0
440foreach name $allnames {
441 set type [lindex $allbyname($name) 0]
442 if {[info exists seentype($type)]} continue
443 set if [lindex $allbyname($name) 2]
444 if {[regexp SQLITE_DEBUG $if] || [regexp SQLITE_HAS_CODEC $if]} continue
445 set seentype($type) 1
drh67e65e52015-02-02 21:34:54 +0000446 puts $fd [format {#define %-35s %4d} PragTyp_$type $pnum]
drh9ccd8652013-09-13 16:36:46 +0000447 incr pnum
448}
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]} 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 seentype($type) 1
drh67e65e52015-02-02 21:34:54 +0000462 puts $fd [format {#define %-35s %4d} PragTyp_$type $pnum]
drh9ccd8652013-09-13 16:36:46 +0000463 incr pnum
464}
465
drhf63936e2013-10-03 14:08:07 +0000466# Generate #defines for flags
467#
drhc232aca2016-12-15 16:01:17 +0000468puts $fd "\n/* Property flags associated with various pragma. */"
drhf63936e2013-10-03 14:08:07 +0000469set fv 1
470foreach f [lsort [array names allflags]] {
drhc232aca2016-12-15 16:01:17 +0000471 puts $fd [format {#define PragFlg_%-10s 0x%02x /* %s */} \
472 $f $fv $flagMeaning($f)]
drhf63936e2013-10-03 14:08:07 +0000473 set fv [expr {$fv*2}]
474}
475
drhc232aca2016-12-15 16:01:17 +0000476# Generate the array of column names used by pragmas that act like
477# queries.
478#
479puts $fd "\n/* Names of columns for pragmas that return multi-column result"
480puts $fd "** or that return single-column results where the name of the"
481puts $fd "** result column is different from the name of the pragma\n*/"
482puts $fd "static const char *const pragCName\[\] = {"
483set offset 0
484foreach cols $cols_list {
485 set cols_offset($allcols($cols)) $offset
486 set ub " /* Used by: $colUsedBy($cols) */"
487 foreach c $cols {
488 puts $fd [format " /* %3d */ %-14s%s" $offset \"$c\", $ub]
489 set ub ""
490 incr offset
491 }
492}
493puts $fd "\175;"
494
drh9ccd8652013-09-13 16:36:46 +0000495# Generate the lookup table
496#
drhc232aca2016-12-15 16:01:17 +0000497puts $fd "\n/* Definitions of all built-in pragmas */"
drh67e65e52015-02-02 21:34:54 +0000498puts $fd "static const struct sPragmaNames \173"
drhc232aca2016-12-15 16:01:17 +0000499puts $fd " const char *const zName; /* Name of pragma */"
500puts $fd " u8 ePragTyp; /* PragTyp_XXX value */"
501puts $fd " u8 mPragFlg; /* Zero or more PragFlg_XXX values */"
502puts $fd { u8 iPragCName; /* Start of column names in pragCName[] */}
503puts $fd " u8 nPragCName; \
504/* Num of col names. 0 means use pragma name */"
505puts $fd " u32 iArg; /* Extra argument */"
drh67e65e52015-02-02 21:34:54 +0000506puts $fd "\175 aPragmaNames\[\] = \173"
drh9ccd8652013-09-13 16:36:46 +0000507
508set current_if {}
509set spacer [format { %26s } {}]
510foreach name $allnames {
drhc232aca2016-12-15 16:01:17 +0000511 foreach {type arg if flag cx} $allbyname($name) break
512 if {$cx==0} {
513 set cy 0
514 set nx 0
515 } else {
516 set cy $cols_offset($cx)
517 set nx [llength [lindex $cols_list [expr {$cx-1}]]]
518 }
drh9ccd8652013-09-13 16:36:46 +0000519 if {$if!=$current_if} {
mistachkindd197832013-10-21 23:17:23 +0000520 if {$current_if!=""} {
521 foreach this_if $current_if {
drh67e65e52015-02-02 21:34:54 +0000522 puts $fd "#endif"
mistachkindd197832013-10-21 23:17:23 +0000523 }
524 }
drh9ccd8652013-09-13 16:36:46 +0000525 set current_if $if
mistachkindd197832013-10-21 23:17:23 +0000526 if {$current_if!=""} {
527 foreach this_if $current_if {
drh67e65e52015-02-02 21:34:54 +0000528 puts $fd "#if $this_if"
mistachkindd197832013-10-21 23:17:23 +0000529 }
530 }
drh9ccd8652013-09-13 16:36:46 +0000531 }
drh9ccd8652013-09-13 16:36:46 +0000532 set typex [format PragTyp_%-23s $type,]
drhf63936e2013-10-03 14:08:07 +0000533 if {$flag==""} {
534 set flagx "0"
drh9ccd8652013-09-13 16:36:46 +0000535 } else {
drhc232aca2016-12-15 16:01:17 +0000536 set flagx PragFlg_[join $flag {|PragFlg_}]
drh9ccd8652013-09-13 16:36:46 +0000537 }
drhc232aca2016-12-15 16:01:17 +0000538 puts $fd " \173/* zName: */ \"$name\","
539 puts $fd " /* ePragTyp: */ PragTyp_$type,"
540 puts $fd " /* ePragFlg: */ $flagx,"
541 puts $fd " /* ColNames: */ $cy, $nx,"
542 puts $fd " /* iArg: */ $arg \175,"
drh9ccd8652013-09-13 16:36:46 +0000543}
mistachkindd197832013-10-21 23:17:23 +0000544if {$current_if!=""} {
545 foreach this_if $current_if {
drh67e65e52015-02-02 21:34:54 +0000546 puts $fd "#endif"
mistachkindd197832013-10-21 23:17:23 +0000547 }
548}
drh67e65e52015-02-02 21:34:54 +0000549puts $fd "\175;"
drh6bb64f62013-09-13 16:56:17 +0000550
551# count the number of pragmas, for information purposes
552#
553set allcnt 0
554set dfltcnt 0
555foreach name $allnames {
556 incr allcnt
557 set if [lindex $allbyname($name) 2]
558 if {[regexp {^defined} $if] || [regexp {[^!]defined} $if]} continue
559 incr dfltcnt
560}
drh67e65e52015-02-02 21:34:54 +0000561puts $fd "/* Number of pragmas: $dfltcnt on by default, $allcnt total. */"