Add ICU message format support
[chromium-blink-merge.git] / third_party / sqlite / src / tool / mkpragmatab.tcl
blobaa7c8078c556446a10dea6e8a5a39d4781329681
1 #!/usr/bin/tclsh
3 # Run this script to generate the pragma name lookup table C code.
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.
13 set pragma_def {
14 NAME: full_column_names
15 TYPE: FLAG
16 ARG: SQLITE_FullColNames
17 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
19 NAME: short_column_names
20 TYPE: FLAG
21 ARG: SQLITE_ShortColNames
22 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
24 NAME: count_changes
25 TYPE: FLAG
26 ARG: SQLITE_CountRows
27 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
29 NAME: empty_result_callbacks
30 TYPE: FLAG
31 ARG: SQLITE_NullCallback
32 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
34 NAME: legacy_file_format
35 TYPE: FLAG
36 ARG: SQLITE_LegacyFileFmt
37 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
39 NAME: fullfsync
40 TYPE: FLAG
41 ARG: SQLITE_FullFSync
42 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
44 NAME: checkpoint_fullfsync
45 TYPE: FLAG
46 ARG: SQLITE_CkptFullFSync
47 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
49 NAME: cache_spill
50 TYPE: FLAG
51 ARG: SQLITE_CacheSpill
52 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
54 NAME: reverse_unordered_selects
55 TYPE: FLAG
56 ARG: SQLITE_ReverseOrder
57 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
59 NAME: query_only
60 TYPE: FLAG
61 ARG: SQLITE_QueryOnly
62 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
64 NAME: automatic_index
65 TYPE: FLAG
66 ARG: SQLITE_AutoIndex
67 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
68 IF: !defined(SQLITE_OMIT_AUTOMATIC_INDEX)
70 NAME: sql_trace
71 TYPE: FLAG
72 ARG: SQLITE_SqlTrace
73 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
74 IF: defined(SQLITE_DEBUG)
76 NAME: vdbe_listing
77 TYPE: FLAG
78 ARG: SQLITE_VdbeListing
79 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
80 IF: defined(SQLITE_DEBUG)
82 NAME: vdbe_trace
83 TYPE: FLAG
84 ARG: SQLITE_VdbeTrace
85 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
86 IF: defined(SQLITE_DEBUG)
88 NAME: vdbe_addoptrace
89 TYPE: FLAG
90 ARG: SQLITE_VdbeAddopTrace
91 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
92 IF: defined(SQLITE_DEBUG)
94 NAME: vdbe_debug
95 TYPE: FLAG
96 ARG: SQLITE_SqlTrace|SQLITE_VdbeListing|SQLITE_VdbeTrace
97 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
98 IF: defined(SQLITE_DEBUG)
100 NAME: vdbe_eqp
101 TYPE: FLAG
102 ARG: SQLITE_VdbeEQP
103 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
104 IF: defined(SQLITE_DEBUG)
106 NAME: ignore_check_constraints
107 TYPE: FLAG
108 ARG: SQLITE_IgnoreChecks
109 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
110 IF: !defined(SQLITE_OMIT_CHECK)
112 NAME: writable_schema
113 TYPE: FLAG
114 ARG: SQLITE_WriteSchema|SQLITE_RecoveryMode
115 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
117 NAME: read_uncommitted
118 TYPE: FLAG
119 ARG: SQLITE_ReadUncommitted
120 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
122 NAME: recursive_triggers
123 TYPE: FLAG
124 ARG: SQLITE_RecTriggers
125 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
127 NAME: foreign_keys
128 TYPE: FLAG
129 ARG: SQLITE_ForeignKeys
130 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
131 IF: !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
133 NAME: defer_foreign_keys
134 TYPE: FLAG
135 ARG: SQLITE_DeferFKs
136 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
137 IF: !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
139 NAME: default_cache_size
140 FLAG: NeedSchema
141 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS) && !defined(SQLITE_OMIT_DEPRECATED)
143 NAME: page_size
144 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
146 NAME: secure_delete
147 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
149 NAME: page_count
150 FLAG: NeedSchema
151 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
153 NAME: max_page_count
154 TYPE: PAGE_COUNT
155 FLAG: NeedSchema
156 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
158 NAME: locking_mode
159 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
161 NAME: journal_mode
162 FLAG: NeedSchema
163 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
165 NAME: journal_size_limit
166 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
168 NAME: cache_size
169 FLAG: NeedSchema
170 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
172 NAME: mmap_size
173 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
175 NAME: auto_vacuum
176 FLAG: NeedSchema
177 IF: !defined(SQLITE_OMIT_AUTOVACUUM)
179 NAME: incremental_vacuum
180 FLAG: NeedSchema
181 IF: !defined(SQLITE_OMIT_AUTOVACUUM)
183 NAME: temp_store
184 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
186 NAME: temp_store_directory
187 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
189 NAME: data_store_directory
190 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS) && SQLITE_OS_WIN
192 NAME: lock_proxy_file
193 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS) && SQLITE_ENABLE_LOCKING_STYLE
195 NAME: synchronous
196 FLAG: NeedSchema
197 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
199 NAME: table_info
200 FLAG: NeedSchema
201 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
203 NAME: stats
204 FLAG: NeedSchema
205 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
207 NAME: index_info
208 FLAG: NeedSchema
209 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
211 NAME: index_list
212 FLAG: NeedSchema
213 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
215 NAME: database_list
216 FLAG: NeedSchema
217 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
219 NAME: collation_list
220 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
222 NAME: foreign_key_list
223 FLAG: NeedSchema
224 IF: !defined(SQLITE_OMIT_FOREIGN_KEY)
226 NAME: foreign_key_check
227 FLAG: NeedSchema
228 IF: !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
230 NAME: parser_trace
231 IF: defined(SQLITE_DEBUG)
233 NAME: case_sensitive_like
235 NAME: integrity_check
236 FLAG: NeedSchema
237 IF: !defined(SQLITE_OMIT_INTEGRITY_CHECK)
239 NAME: quick_check
240 TYPE: INTEGRITY_CHECK
241 FLAG: NeedSchema
242 IF: !defined(SQLITE_OMIT_INTEGRITY_CHECK)
244 NAME: encoding
245 IF: !defined(SQLITE_OMIT_UTF16)
247 NAME: schema_version
248 TYPE: HEADER_VALUE
249 IF: !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
251 NAME: user_version
252 TYPE: HEADER_VALUE
253 IF: !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
255 NAME: freelist_count
256 TYPE: HEADER_VALUE
257 IF: !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
259 NAME: application_id
260 TYPE: HEADER_VALUE
261 IF: !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
263 NAME: compile_options
264 IF: !defined(SQLITE_OMIT_COMPILEOPTION_DIAGS)
266 NAME: wal_checkpoint
267 FLAG: NeedSchema
268 IF: !defined(SQLITE_OMIT_WAL)
270 NAME: wal_autocheckpoint
271 IF: !defined(SQLITE_OMIT_WAL)
273 NAME: shrink_memory
275 NAME: busy_timeout
277 NAME: lock_status
278 IF: defined(SQLITE_DEBUG) || defined(SQLITE_TEST)
280 NAME: key
281 IF: defined(SQLITE_HAS_CODEC)
283 NAME: rekey
284 IF: defined(SQLITE_HAS_CODEC)
286 NAME: hexkey
287 IF: defined(SQLITE_HAS_CODEC)
289 NAME: hexrekey
290 TYPE: HEXKEY
291 IF: defined(SQLITE_HAS_CODEC)
293 NAME: activate_extensions
294 IF: defined(SQLITE_HAS_CODEC) || defined(SQLITE_ENABLE_CEROD)
296 NAME: soft_heap_limit
298 NAME: threads
300 fconfigure stdout -translation lf
301 set name {}
302 set type {}
303 set if {}
304 set flags {}
305 set arg 0
306 proc record_one {} {
307 global name type if arg allbyname typebyif flags
308 if {$name==""} return
309 set allbyname($name) [list $type $arg $if $flags]
310 set name {}
311 set type {}
312 set if {}
313 set flags {}
314 set arg 0
316 foreach line [split $pragma_def \n] {
317 set line [string trim $line]
318 if {$line==""} continue
319 foreach {id val} [split $line :] break
320 set val [string trim $val]
321 if {$id=="NAME"} {
322 record_one
323 set name $val
324 set type [string toupper $val]
325 } elseif {$id=="TYPE"} {
326 set type $val
327 } elseif {$id=="ARG"} {
328 set arg $val
329 } elseif {$id=="IF"} {
330 lappend if $val
331 } elseif {$id=="FLAG"} {
332 foreach term [split $val] {
333 lappend flags $term
334 set allflags($term) 1
336 } else {
337 error "bad pragma_def line: $line"
340 record_one
341 set allnames [lsort [array names allbyname]]
343 # Generate #defines for all pragma type names. Group the pragmas that are
344 # omit in default builds (defined(SQLITE_DEBUG) and defined(SQLITE_HAS_CODEC))
345 # at the end.
347 set pnum 0
348 foreach name $allnames {
349 set type [lindex $allbyname($name) 0]
350 if {[info exists seentype($type)]} continue
351 set if [lindex $allbyname($name) 2]
352 if {[regexp SQLITE_DEBUG $if] || [regexp SQLITE_HAS_CODEC $if]} continue
353 set seentype($type) 1
354 puts [format {#define %-35s %4d} PragTyp_$type $pnum]
355 incr pnum
357 foreach name $allnames {
358 set type [lindex $allbyname($name) 0]
359 if {[info exists seentype($type)]} continue
360 set if [lindex $allbyname($name) 2]
361 if {[regexp SQLITE_DEBUG $if]} continue
362 set seentype($type) 1
363 puts [format {#define %-35s %4d} PragTyp_$type $pnum]
364 incr pnum
366 foreach name $allnames {
367 set type [lindex $allbyname($name) 0]
368 if {[info exists seentype($type)]} continue
369 set seentype($type) 1
370 puts [format {#define %-35s %4d} PragTyp_$type $pnum]
371 incr pnum
374 # Generate #defines for flags
376 set fv 1
377 foreach f [lsort [array names allflags]] {
378 puts [format {#define PragFlag_%-20s 0x%02x} $f $fv]
379 set fv [expr {$fv*2}]
382 # Generate the lookup table
384 puts "static const struct sPragmaNames \173"
385 puts " const char *const zName; /* Name of pragma */"
386 puts " u8 ePragTyp; /* PragTyp_XXX value */"
387 puts " u8 mPragFlag; /* Zero or more PragFlag_XXX values */"
388 puts " u32 iArg; /* Extra argument */"
389 puts "\175 aPragmaNames\[\] = \173"
391 set current_if {}
392 set spacer [format { %26s } {}]
393 foreach name $allnames {
394 foreach {type arg if flag} $allbyname($name) break
395 if {$if!=$current_if} {
396 if {$current_if!=""} {
397 foreach this_if $current_if {
398 puts "#endif"
401 set current_if $if
402 if {$current_if!=""} {
403 foreach this_if $current_if {
404 puts "#if $this_if"
408 set typex [format PragTyp_%-23s $type,]
409 if {$flag==""} {
410 set flagx "0"
411 } else {
412 set flagx PragFlag_[join $flag {|PragFlag_}]
414 puts " \173 /* zName: */ \"$name\","
415 puts " /* ePragTyp: */ PragTyp_$type,"
416 puts " /* ePragFlag: */ $flagx,"
417 puts " /* iArg: */ $arg \175,"
419 if {$current_if!=""} {
420 foreach this_if $current_if {
421 puts "#endif"
424 puts "\175;"
426 # count the number of pragmas, for information purposes
428 set allcnt 0
429 set dfltcnt 0
430 foreach name $allnames {
431 incr allcnt
432 set if [lindex $allbyname($name) 2]
433 if {[regexp {^defined} $if] || [regexp {[^!]defined} $if]} continue
434 incr dfltcnt
436 puts "/* Number of pragmas: $dfltcnt on by default, $allcnt total. */"