blob: 28a1e468b89ed2a3a3d0971402c23ab1350a027d [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
7# to generate the C-code for the lookup table and copy/paste the output
8# of this script into the appropriate spot in the pragma.c source file.
9# Then add the extra "case PragTyp_XXXXX:" and subsequent code for the
10# new pragma.
11#
12
13set pragma_def {
14 NAME: full_column_names
15 TYPE: FLAG
16 ARG: SQLITE_FullColNames
mistachkindd197832013-10-21 23:17:23 +000017 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000018
19 NAME: short_column_names
20 TYPE: FLAG
21 ARG: SQLITE_ShortColNames
mistachkindd197832013-10-21 23:17:23 +000022 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000023
24 NAME: count_changes
25 TYPE: FLAG
26 ARG: SQLITE_CountRows
mistachkindd197832013-10-21 23:17:23 +000027 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000028
29 NAME: empty_result_callbacks
30 TYPE: FLAG
31 ARG: SQLITE_NullCallback
mistachkindd197832013-10-21 23:17:23 +000032 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000033
34 NAME: legacy_file_format
35 TYPE: FLAG
36 ARG: SQLITE_LegacyFileFmt
mistachkindd197832013-10-21 23:17:23 +000037 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000038
39 NAME: fullfsync
40 TYPE: FLAG
41 ARG: SQLITE_FullFSync
mistachkindd197832013-10-21 23:17:23 +000042 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000043
44 NAME: checkpoint_fullfsync
45 TYPE: FLAG
46 ARG: SQLITE_CkptFullFSync
mistachkindd197832013-10-21 23:17:23 +000047 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000048
49 NAME: cache_spill
50 TYPE: FLAG
51 ARG: SQLITE_CacheSpill
mistachkindd197832013-10-21 23:17:23 +000052 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000053
54 NAME: reverse_unordered_selects
55 TYPE: FLAG
56 ARG: SQLITE_ReverseOrder
mistachkindd197832013-10-21 23:17:23 +000057 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000058
59 NAME: query_only
60 TYPE: FLAG
61 ARG: SQLITE_QueryOnly
mistachkindd197832013-10-21 23:17:23 +000062 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000063
64 NAME: automatic_index
65 TYPE: FLAG
66 ARG: SQLITE_AutoIndex
mistachkindd197832013-10-21 23:17:23 +000067 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000068 IF: !defined(SQLITE_OMIT_AUTOMATIC_INDEX)
69
70 NAME: sql_trace
71 TYPE: FLAG
72 ARG: SQLITE_SqlTrace
mistachkindd197832013-10-21 23:17:23 +000073 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000074 IF: defined(SQLITE_DEBUG)
75
76 NAME: vdbe_listing
77 TYPE: FLAG
78 ARG: SQLITE_VdbeListing
mistachkindd197832013-10-21 23:17:23 +000079 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000080 IF: defined(SQLITE_DEBUG)
81
82 NAME: vdbe_trace
83 TYPE: FLAG
84 ARG: SQLITE_VdbeTrace
mistachkindd197832013-10-21 23:17:23 +000085 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000086 IF: defined(SQLITE_DEBUG)
87
88 NAME: vdbe_addoptrace
89 TYPE: FLAG
90 ARG: SQLITE_VdbeAddopTrace
mistachkindd197832013-10-21 23:17:23 +000091 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000092 IF: defined(SQLITE_DEBUG)
93
94 NAME: vdbe_debug
95 TYPE: FLAG
96 ARG: SQLITE_SqlTrace|SQLITE_VdbeListing|SQLITE_VdbeTrace
mistachkindd197832013-10-21 23:17:23 +000097 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000098 IF: defined(SQLITE_DEBUG)
99
drh84e55a82013-11-13 17:58:23 +0000100 NAME: vdbe_eqp
101 TYPE: FLAG
102 ARG: SQLITE_VdbeEQP
103 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
104 IF: defined(SQLITE_DEBUG)
105
drh9ccd8652013-09-13 16:36:46 +0000106 NAME: ignore_check_constraints
107 TYPE: FLAG
108 ARG: SQLITE_IgnoreChecks
mistachkindd197832013-10-21 23:17:23 +0000109 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000110 IF: !defined(SQLITE_OMIT_CHECK)
111
112 NAME: writable_schema
113 TYPE: FLAG
114 ARG: SQLITE_WriteSchema|SQLITE_RecoveryMode
mistachkindd197832013-10-21 23:17:23 +0000115 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000116
117 NAME: read_uncommitted
118 TYPE: FLAG
119 ARG: SQLITE_ReadUncommitted
mistachkindd197832013-10-21 23:17:23 +0000120 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000121
122 NAME: recursive_triggers
123 TYPE: FLAG
124 ARG: SQLITE_RecTriggers
mistachkindd197832013-10-21 23:17:23 +0000125 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000126
127 NAME: foreign_keys
128 TYPE: FLAG
129 ARG: SQLITE_ForeignKeys
mistachkindd197832013-10-21 23:17:23 +0000130 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000131 IF: !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
132
133 NAME: defer_foreign_keys
134 TYPE: FLAG
135 ARG: SQLITE_DeferFKs
mistachkindd197832013-10-21 23:17:23 +0000136 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000137 IF: !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
138
139 NAME: default_cache_size
drhf63936e2013-10-03 14:08:07 +0000140 FLAG: NeedSchema
drh9ccd8652013-09-13 16:36:46 +0000141 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS) && !defined(SQLITE_OMIT_DEPRECATED)
142
143 NAME: page_size
144 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
145
146 NAME: secure_delete
147 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
148
149 NAME: page_count
drhf63936e2013-10-03 14:08:07 +0000150 FLAG: NeedSchema
drh9ccd8652013-09-13 16:36:46 +0000151 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
152
153 NAME: max_page_count
154 TYPE: PAGE_COUNT
drhf63936e2013-10-03 14:08:07 +0000155 FLAG: NeedSchema
drh9ccd8652013-09-13 16:36:46 +0000156 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
157
158 NAME: locking_mode
159 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
160
161 NAME: journal_mode
drhf63936e2013-10-03 14:08:07 +0000162 FLAG: NeedSchema
drh9ccd8652013-09-13 16:36:46 +0000163 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
164
165 NAME: journal_size_limit
166 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
167
168 NAME: cache_size
drhf63936e2013-10-03 14:08:07 +0000169 FLAG: NeedSchema
drh9ccd8652013-09-13 16:36:46 +0000170 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
171
172 NAME: mmap_size
173 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
174
175 NAME: auto_vacuum
drhf63936e2013-10-03 14:08:07 +0000176 FLAG: NeedSchema
drh9ccd8652013-09-13 16:36:46 +0000177 IF: !defined(SQLITE_OMIT_AUTOVACUUM)
178
179 NAME: incremental_vacuum
drhf63936e2013-10-03 14:08:07 +0000180 FLAG: NeedSchema
drh9ccd8652013-09-13 16:36:46 +0000181 IF: !defined(SQLITE_OMIT_AUTOVACUUM)
182
183 NAME: temp_store
184 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
185
186 NAME: temp_store_directory
187 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
188
189 NAME: data_store_directory
190 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS) && SQLITE_OS_WIN
191
192 NAME: lock_proxy_file
193 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS) && SQLITE_ENABLE_LOCKING_STYLE
194
195 NAME: synchronous
drhf63936e2013-10-03 14:08:07 +0000196 FLAG: NeedSchema
drh9ccd8652013-09-13 16:36:46 +0000197 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
198
199 NAME: table_info
drhf63936e2013-10-03 14:08:07 +0000200 FLAG: NeedSchema
drh9ccd8652013-09-13 16:36:46 +0000201 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
202
drh3ef26152013-10-12 20:22:00 +0000203 NAME: stats
204 FLAG: NeedSchema
205 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
206
drh9ccd8652013-09-13 16:36:46 +0000207 NAME: index_info
drhf63936e2013-10-03 14:08:07 +0000208 FLAG: NeedSchema
drh9ccd8652013-09-13 16:36:46 +0000209 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
210
211 NAME: index_list
drhf63936e2013-10-03 14:08:07 +0000212 FLAG: NeedSchema
drh9ccd8652013-09-13 16:36:46 +0000213 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
214
215 NAME: database_list
drhf63936e2013-10-03 14:08:07 +0000216 FLAG: NeedSchema
drh9ccd8652013-09-13 16:36:46 +0000217 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
218
219 NAME: collation_list
220 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
221
222 NAME: foreign_key_list
drhf63936e2013-10-03 14:08:07 +0000223 FLAG: NeedSchema
drh9ccd8652013-09-13 16:36:46 +0000224 IF: !defined(SQLITE_OMIT_FOREIGN_KEY)
225
226 NAME: foreign_key_check
drhf63936e2013-10-03 14:08:07 +0000227 FLAG: NeedSchema
drh9ccd8652013-09-13 16:36:46 +0000228 IF: !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
229
230 NAME: parser_trace
231 IF: defined(SQLITE_DEBUG)
232
233 NAME: case_sensitive_like
234
235 NAME: integrity_check
drhf63936e2013-10-03 14:08:07 +0000236 FLAG: NeedSchema
drh9ccd8652013-09-13 16:36:46 +0000237 IF: !defined(SQLITE_OMIT_INTEGRITY_CHECK)
238
239 NAME: quick_check
240 TYPE: INTEGRITY_CHECK
drhf63936e2013-10-03 14:08:07 +0000241 FLAG: NeedSchema
drh9ccd8652013-09-13 16:36:46 +0000242 IF: !defined(SQLITE_OMIT_INTEGRITY_CHECK)
243
244 NAME: encoding
245 IF: !defined(SQLITE_OMIT_UTF16)
246
247 NAME: schema_version
248 TYPE: HEADER_VALUE
249 IF: !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
250
251 NAME: user_version
252 TYPE: HEADER_VALUE
253 IF: !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
254
255 NAME: freelist_count
256 TYPE: HEADER_VALUE
257 IF: !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
258
259 NAME: application_id
260 TYPE: HEADER_VALUE
261 IF: !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
262
263 NAME: compile_options
264 IF: !defined(SQLITE_OMIT_COMPILEOPTION_DIAGS)
265
266 NAME: wal_checkpoint
drhf63936e2013-10-03 14:08:07 +0000267 FLAG: NeedSchema
drh9ccd8652013-09-13 16:36:46 +0000268 IF: !defined(SQLITE_OMIT_WAL)
269
270 NAME: wal_autocheckpoint
271 IF: !defined(SQLITE_OMIT_WAL)
272
273 NAME: shrink_memory
274
275 NAME: busy_timeout
276
277 NAME: lock_status
278 IF: defined(SQLITE_DEBUG) || defined(SQLITE_TEST)
279
280 NAME: key
281 IF: defined(SQLITE_HAS_CODEC)
282
283 NAME: rekey
284 IF: defined(SQLITE_HAS_CODEC)
285
286 NAME: hexkey
287 IF: defined(SQLITE_HAS_CODEC)
288
drh8ab88322013-10-07 00:36:01 +0000289 NAME: hexrekey
290 TYPE: HEXKEY
291 IF: defined(SQLITE_HAS_CODEC)
292
drh9ccd8652013-09-13 16:36:46 +0000293 NAME: activate_extensions
294 IF: defined(SQLITE_HAS_CODEC) || defined(SQLITE_ENABLE_CEROD)
drh55e85ca2013-09-13 21:01:56 +0000295
296 NAME: soft_heap_limit
drh9ccd8652013-09-13 16:36:46 +0000297}
mistachkindd197832013-10-21 23:17:23 +0000298fconfigure stdout -translation lf
drh9ccd8652013-09-13 16:36:46 +0000299set name {}
300set type {}
301set if {}
drhf63936e2013-10-03 14:08:07 +0000302set flags {}
drh9ccd8652013-09-13 16:36:46 +0000303set arg 0
304proc record_one {} {
drhf63936e2013-10-03 14:08:07 +0000305 global name type if arg allbyname typebyif flags
drh9ccd8652013-09-13 16:36:46 +0000306 if {$name==""} return
drhf63936e2013-10-03 14:08:07 +0000307 set allbyname($name) [list $type $arg $if $flags]
drh9ccd8652013-09-13 16:36:46 +0000308 set name {}
309 set type {}
310 set if {}
drhf63936e2013-10-03 14:08:07 +0000311 set flags {}
drh9ccd8652013-09-13 16:36:46 +0000312 set arg 0
313}
314foreach line [split $pragma_def \n] {
315 set line [string trim $line]
316 if {$line==""} continue
317 foreach {id val} [split $line :] break
318 set val [string trim $val]
319 if {$id=="NAME"} {
320 record_one
321 set name $val
322 set type [string toupper $val]
323 } elseif {$id=="TYPE"} {
324 set type $val
325 } elseif {$id=="ARG"} {
326 set arg $val
327 } elseif {$id=="IF"} {
mistachkindd197832013-10-21 23:17:23 +0000328 lappend if $val
drhf63936e2013-10-03 14:08:07 +0000329 } elseif {$id=="FLAG"} {
330 foreach term [split $val] {
331 lappend flags $term
332 set allflags($term) 1
333 }
drh9ccd8652013-09-13 16:36:46 +0000334 } else {
335 error "bad pragma_def line: $line"
336 }
337}
338record_one
339set allnames [lsort [array names allbyname]]
340
341# Generate #defines for all pragma type names. Group the pragmas that are
342# omit in default builds (defined(SQLITE_DEBUG) and defined(SQLITE_HAS_CODEC))
343# at the end.
344#
345set pnum 0
346foreach name $allnames {
347 set type [lindex $allbyname($name) 0]
348 if {[info exists seentype($type)]} continue
349 set if [lindex $allbyname($name) 2]
350 if {[regexp SQLITE_DEBUG $if] || [regexp SQLITE_HAS_CODEC $if]} continue
351 set seentype($type) 1
352 puts [format {#define %-35s %4d} PragTyp_$type $pnum]
353 incr pnum
354}
355foreach name $allnames {
356 set type [lindex $allbyname($name) 0]
357 if {[info exists seentype($type)]} continue
358 set if [lindex $allbyname($name) 2]
359 if {[regexp SQLITE_DEBUG $if]} continue
360 set seentype($type) 1
361 puts [format {#define %-35s %4d} PragTyp_$type $pnum]
362 incr pnum
363}
364foreach name $allnames {
365 set type [lindex $allbyname($name) 0]
366 if {[info exists seentype($type)]} continue
367 set seentype($type) 1
368 puts [format {#define %-35s %4d} PragTyp_$type $pnum]
369 incr pnum
370}
371
drhf63936e2013-10-03 14:08:07 +0000372# Generate #defines for flags
373#
374set fv 1
375foreach f [lsort [array names allflags]] {
376 puts [format {#define PragFlag_%-20s 0x%02x} $f $fv]
377 set fv [expr {$fv*2}]
378}
379
drh9ccd8652013-09-13 16:36:46 +0000380# Generate the lookup table
381#
382puts "static const struct sPragmaNames \173"
drh77ff23f2013-09-13 21:03:45 +0000383puts " const char *const zName; /* Name of pragma */"
drhd49c3582013-09-13 19:00:06 +0000384puts " u8 ePragTyp; /* PragTyp_XXX value */"
drhf63936e2013-10-03 14:08:07 +0000385puts " u8 mPragFlag; /* Zero or more PragFlag_XXX values */"
drh9ccd8652013-09-13 16:36:46 +0000386puts " u32 iArg; /* Extra argument */"
387puts "\175 aPragmaNames\[\] = \173"
388
389set current_if {}
390set spacer [format { %26s } {}]
391foreach name $allnames {
drhf63936e2013-10-03 14:08:07 +0000392 foreach {type arg if flag} $allbyname($name) break
drh9ccd8652013-09-13 16:36:46 +0000393 if {$if!=$current_if} {
mistachkindd197832013-10-21 23:17:23 +0000394 if {$current_if!=""} {
395 foreach this_if $current_if {
396 puts "#endif"
397 }
398 }
drh9ccd8652013-09-13 16:36:46 +0000399 set current_if $if
mistachkindd197832013-10-21 23:17:23 +0000400 if {$current_if!=""} {
401 foreach this_if $current_if {
402 puts "#if $this_if"
403 }
404 }
drh9ccd8652013-09-13 16:36:46 +0000405 }
drh9ccd8652013-09-13 16:36:46 +0000406 set typex [format PragTyp_%-23s $type,]
drhf63936e2013-10-03 14:08:07 +0000407 if {$flag==""} {
408 set flagx "0"
drh9ccd8652013-09-13 16:36:46 +0000409 } else {
drhf63936e2013-10-03 14:08:07 +0000410 set flagx PragFlag_[join $flag {|PragFlag_}]
drh9ccd8652013-09-13 16:36:46 +0000411 }
drhf63936e2013-10-03 14:08:07 +0000412 puts " \173 /* zName: */ \"$name\","
413 puts " /* ePragTyp: */ PragTyp_$type,"
414 puts " /* ePragFlag: */ $flagx,"
415 puts " /* iArg: */ $arg \175,"
drh9ccd8652013-09-13 16:36:46 +0000416}
mistachkindd197832013-10-21 23:17:23 +0000417if {$current_if!=""} {
418 foreach this_if $current_if {
419 puts "#endif"
420 }
421}
drh9ccd8652013-09-13 16:36:46 +0000422puts "\175;"
drh6bb64f62013-09-13 16:56:17 +0000423
424# count the number of pragmas, for information purposes
425#
426set allcnt 0
427set dfltcnt 0
428foreach name $allnames {
429 incr allcnt
430 set if [lindex $allbyname($name) 2]
431 if {[regexp {^defined} $if] || [regexp {[^!]defined} $if]} continue
432 incr dfltcnt
433}
434puts "/* Number of pragmas: $dfltcnt on by default, $allcnt total. */"