blob: c493c836954d1d4ab51291866bce162c6fa7fe83 [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
drh9ccd8652013-09-13 16:36:46 +000044 NAME: fullfsync
45 TYPE: FLAG
46 ARG: SQLITE_FullFSync
mistachkindd197832013-10-21 23:17:23 +000047 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000048
49 NAME: checkpoint_fullfsync
50 TYPE: FLAG
51 ARG: SQLITE_CkptFullFSync
mistachkindd197832013-10-21 23:17:23 +000052 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000053
54 NAME: cache_spill
dan9e1ab1a2017-01-05 19:32:48 +000055 FLAG: Result0 SchemaReq NoColumns1
mistachkindd197832013-10-21 23:17:23 +000056 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000057
58 NAME: reverse_unordered_selects
59 TYPE: FLAG
60 ARG: SQLITE_ReverseOrder
mistachkindd197832013-10-21 23:17:23 +000061 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000062
63 NAME: query_only
64 TYPE: FLAG
65 ARG: SQLITE_QueryOnly
mistachkindd197832013-10-21 23:17:23 +000066 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000067
68 NAME: automatic_index
69 TYPE: FLAG
70 ARG: SQLITE_AutoIndex
mistachkindd197832013-10-21 23:17:23 +000071 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000072 IF: !defined(SQLITE_OMIT_AUTOMATIC_INDEX)
73
74 NAME: sql_trace
75 TYPE: FLAG
76 ARG: SQLITE_SqlTrace
mistachkindd197832013-10-21 23:17:23 +000077 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000078 IF: defined(SQLITE_DEBUG)
79
80 NAME: vdbe_listing
81 TYPE: FLAG
82 ARG: SQLITE_VdbeListing
mistachkindd197832013-10-21 23:17:23 +000083 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000084 IF: defined(SQLITE_DEBUG)
85
86 NAME: vdbe_trace
87 TYPE: FLAG
88 ARG: SQLITE_VdbeTrace
mistachkindd197832013-10-21 23:17:23 +000089 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000090 IF: defined(SQLITE_DEBUG)
91
92 NAME: vdbe_addoptrace
93 TYPE: FLAG
94 ARG: SQLITE_VdbeAddopTrace
mistachkindd197832013-10-21 23:17:23 +000095 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +000096 IF: defined(SQLITE_DEBUG)
97
98 NAME: vdbe_debug
99 TYPE: FLAG
100 ARG: SQLITE_SqlTrace|SQLITE_VdbeListing|SQLITE_VdbeTrace
mistachkindd197832013-10-21 23:17:23 +0000101 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000102 IF: defined(SQLITE_DEBUG)
103
drh84e55a82013-11-13 17:58:23 +0000104 NAME: vdbe_eqp
105 TYPE: FLAG
106 ARG: SQLITE_VdbeEQP
107 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
108 IF: defined(SQLITE_DEBUG)
109
drh03d405f2017-09-12 20:09:31 +0000110 NAME: noop_update
111 TYPE: FLAG
112 ARG: SQLITE_NoopUpdate
113 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh56391f22017-11-01 18:48:54 +0000114 IF: defined(SQLITE_ENABLE_NOOP_UPDATE)
drh03d405f2017-09-12 20:09:31 +0000115
drh9ccd8652013-09-13 16:36:46 +0000116 NAME: ignore_check_constraints
117 TYPE: FLAG
118 ARG: SQLITE_IgnoreChecks
mistachkindd197832013-10-21 23:17:23 +0000119 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000120 IF: !defined(SQLITE_OMIT_CHECK)
121
122 NAME: writable_schema
123 TYPE: FLAG
drhfd748c62018-10-30 16:25:35 +0000124 ARG: SQLITE_WriteSchema|SQLITE_NoSchemaError
mistachkindd197832013-10-21 23:17:23 +0000125 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000126
127 NAME: read_uncommitted
128 TYPE: FLAG
drh169dd922017-06-26 13:57:49 +0000129 ARG: SQLITE_ReadUncommit
mistachkindd197832013-10-21 23:17:23 +0000130 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000131
132 NAME: recursive_triggers
133 TYPE: FLAG
134 ARG: SQLITE_RecTriggers
mistachkindd197832013-10-21 23:17:23 +0000135 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000136
drh2b1c2aa2020-01-07 19:45:40 +0000137 NAME: trusted_schema
138 TYPE: FLAG
139 ARG: SQLITE_TrustedSchema
140 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
141
drh9ccd8652013-09-13 16:36:46 +0000142 NAME: foreign_keys
143 TYPE: FLAG
144 ARG: SQLITE_ForeignKeys
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
148 NAME: defer_foreign_keys
149 TYPE: FLAG
150 ARG: SQLITE_DeferFKs
mistachkindd197832013-10-21 23:17:23 +0000151 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000152 IF: !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
153
drh1421d982015-05-27 03:46:18 +0000154 NAME: cell_size_check
155 TYPE: FLAG
156 ARG: SQLITE_CellSizeCk
157
drh9ccd8652013-09-13 16:36:46 +0000158 NAME: default_cache_size
dan9e1ab1a2017-01-05 19:32:48 +0000159 FLAG: NeedSchema Result0 SchemaReq NoColumns1
drhc232aca2016-12-15 16:01:17 +0000160 COLS: cache_size
drh9ccd8652013-09-13 16:36:46 +0000161 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS) && !defined(SQLITE_OMIT_DEPRECATED)
162
163 NAME: page_size
dan9e1ab1a2017-01-05 19:32:48 +0000164 FLAG: Result0 SchemaReq NoColumns1
drh9ccd8652013-09-13 16:36:46 +0000165 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
166
167 NAME: secure_delete
drhc232aca2016-12-15 16:01:17 +0000168 FLAG: Result0
drh9ccd8652013-09-13 16:36:46 +0000169 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
170
171 NAME: page_count
drhc232aca2016-12-15 16:01:17 +0000172 FLAG: NeedSchema Result0 SchemaReq
drh9ccd8652013-09-13 16:36:46 +0000173 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
174
175 NAME: max_page_count
176 TYPE: PAGE_COUNT
drhc232aca2016-12-15 16:01:17 +0000177 FLAG: NeedSchema Result0 SchemaReq
drh9ccd8652013-09-13 16:36:46 +0000178 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
179
180 NAME: locking_mode
drhc232aca2016-12-15 16:01:17 +0000181 FLAG: Result0 SchemaReq
drh9ccd8652013-09-13 16:36:46 +0000182 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
183
184 NAME: journal_mode
drhc232aca2016-12-15 16:01:17 +0000185 FLAG: NeedSchema Result0 SchemaReq
drh9ccd8652013-09-13 16:36:46 +0000186 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
187
188 NAME: journal_size_limit
drhc232aca2016-12-15 16:01:17 +0000189 FLAG: Result0 SchemaReq
drh9ccd8652013-09-13 16:36:46 +0000190 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
191
192 NAME: cache_size
dan9e1ab1a2017-01-05 19:32:48 +0000193 FLAG: NeedSchema Result0 SchemaReq NoColumns1
drh9ccd8652013-09-13 16:36:46 +0000194 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
195
196 NAME: mmap_size
197 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
198
199 NAME: auto_vacuum
dan9e1ab1a2017-01-05 19:32:48 +0000200 FLAG: NeedSchema Result0 SchemaReq NoColumns1
drh9ccd8652013-09-13 16:36:46 +0000201 IF: !defined(SQLITE_OMIT_AUTOVACUUM)
202
203 NAME: incremental_vacuum
drhc232aca2016-12-15 16:01:17 +0000204 FLAG: NeedSchema NoColumns
drh9ccd8652013-09-13 16:36:46 +0000205 IF: !defined(SQLITE_OMIT_AUTOVACUUM)
206
207 NAME: temp_store
dan9e1ab1a2017-01-05 19:32:48 +0000208 FLAG: Result0 NoColumns1
drh9ccd8652013-09-13 16:36:46 +0000209 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
210
211 NAME: temp_store_directory
dan9e1ab1a2017-01-05 19:32:48 +0000212 FLAG: NoColumns1
drh9ccd8652013-09-13 16:36:46 +0000213 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
214
215 NAME: data_store_directory
dan9e1ab1a2017-01-05 19:32:48 +0000216 FLAG: NoColumns1
drh9ccd8652013-09-13 16:36:46 +0000217 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS) && SQLITE_OS_WIN
218
219 NAME: lock_proxy_file
dan9e1ab1a2017-01-05 19:32:48 +0000220 FLAG: NoColumns1
drh9ccd8652013-09-13 16:36:46 +0000221 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS) && SQLITE_ENABLE_LOCKING_STYLE
222
223 NAME: synchronous
dan9e1ab1a2017-01-05 19:32:48 +0000224 FLAG: NeedSchema Result0 SchemaReq NoColumns1
drh9ccd8652013-09-13 16:36:46 +0000225 IF: !defined(SQLITE_OMIT_PAGER_PRAGMAS)
226
227 NAME: table_info
drhc232aca2016-12-15 16:01:17 +0000228 FLAG: NeedSchema Result1 SchemaOpt
drh15fc9882018-09-29 19:38:42 +0000229 ARG: 0
drhc232aca2016-12-15 16:01:17 +0000230 COLS: cid name type notnull dflt_value pk
drh9ccd8652013-09-13 16:36:46 +0000231 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
232
drhbdc97442018-10-01 21:26:30 +0000233 NAME: table_xinfo
drh15fc9882018-09-29 19:38:42 +0000234 TYPE: TABLE_INFO
235 FLAG: NeedSchema Result1 SchemaOpt
236 ARG: 1
drhd7dc0a32018-10-01 18:28:42 +0000237 COLS: cid name type notnull dflt_value pk hidden
drh9ccd8652013-09-13 16:36:46 +0000238 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
239
drh2e50f672021-09-21 17:26:23 +0000240 NAME: table_list
241 TYPE: TABLE_LIST
drh253888c2021-10-04 13:30:22 +0000242 FLAG: NeedSchema Result1
drh2e50f672021-09-21 17:26:23 +0000243 COLS: schema name type ncol wr strict
244 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
245
drh3ef26152013-10-12 20:22:00 +0000246 NAME: stats
drhc232aca2016-12-15 16:01:17 +0000247 FLAG: NeedSchema Result0 SchemaReq
drha3928dd2017-02-17 15:26:36 +0000248 COLS: tbl idx wdth hght flgs
drh33bec3f2017-02-17 13:38:15 +0000249 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS) && defined(SQLITE_DEBUG)
drh3ef26152013-10-12 20:22:00 +0000250
drh9ccd8652013-09-13 16:36:46 +0000251 NAME: index_info
drhc228be52015-01-31 02:00:01 +0000252 TYPE: INDEX_INFO
253 ARG: 0
drhc232aca2016-12-15 16:01:17 +0000254 FLAG: NeedSchema Result1 SchemaOpt
255 COLS: seqno cid name
drhc228be52015-01-31 02:00:01 +0000256 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
257
258 NAME: index_xinfo
259 TYPE: INDEX_INFO
260 ARG: 1
drhc232aca2016-12-15 16:01:17 +0000261 FLAG: NeedSchema Result1 SchemaOpt
262 COLS: seqno cid name desc coll key
drh9ccd8652013-09-13 16:36:46 +0000263 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
264
265 NAME: index_list
drhc232aca2016-12-15 16:01:17 +0000266 FLAG: NeedSchema Result1 SchemaOpt
267 COLS: seq name unique origin partial
drh9ccd8652013-09-13 16:36:46 +0000268 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
269
270 NAME: database_list
drhf2a777f2022-02-22 20:29:31 +0000271 FLAG: Result0
drhc232aca2016-12-15 16:01:17 +0000272 COLS: seq name file
drh9ccd8652013-09-13 16:36:46 +0000273 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
274
drhab53bb62017-07-07 15:43:22 +0000275 NAME: function_list
276 FLAG: Result0
drh79d5bc82020-01-04 01:43:02 +0000277 COLS: name builtin type enc narg flags
drhab53bb62017-07-07 15:43:22 +0000278 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
drhcc3f3d12019-08-17 15:27:58 +0000279 IF: !defined(SQLITE_OMIT_INTROSPECTION_PRAGMAS)
drhab53bb62017-07-07 15:43:22 +0000280
281 NAME: module_list
282 FLAG: Result0
283 COLS: name
284 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
285 IF: !defined(SQLITE_OMIT_VIRTUALTABLE)
drhcc3f3d12019-08-17 15:27:58 +0000286 IF: !defined(SQLITE_OMIT_INTROSPECTION_PRAGMAS)
drh8ae11aa2017-07-07 17:33:07 +0000287
288 NAME: pragma_list
289 FLAG: Result0
290 COLS: name
drhcc3f3d12019-08-17 15:27:58 +0000291 IF: !defined(SQLITE_OMIT_INTROSPECTION_PRAGMAS)
drhab53bb62017-07-07 15:43:22 +0000292
drh9ccd8652013-09-13 16:36:46 +0000293 NAME: collation_list
drhc232aca2016-12-15 16:01:17 +0000294 FLAG: Result0
295 COLS: seq name
drh9ccd8652013-09-13 16:36:46 +0000296 IF: !defined(SQLITE_OMIT_SCHEMA_PRAGMAS)
297
298 NAME: foreign_key_list
drhc232aca2016-12-15 16:01:17 +0000299 FLAG: NeedSchema Result1 SchemaOpt
300 COLS: id seq table from to on_update on_delete match
drh9ccd8652013-09-13 16:36:46 +0000301 IF: !defined(SQLITE_OMIT_FOREIGN_KEY)
302
303 NAME: foreign_key_check
drh4b849b02020-07-03 12:32:04 +0000304 FLAG: NeedSchema Result0 Result1 SchemaOpt
drhc232aca2016-12-15 16:01:17 +0000305 COLS: table rowid parent fkid
drh9ccd8652013-09-13 16:36:46 +0000306 IF: !defined(SQLITE_OMIT_FOREIGN_KEY) && !defined(SQLITE_OMIT_TRIGGER)
307
308 NAME: parser_trace
drh9b747062019-01-31 01:39:01 +0000309 TYPE: FLAG
310 ARG: SQLITE_ParserTrace
311 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
312 IF: defined(SQLITE_DEBUG)
drh9ccd8652013-09-13 16:36:46 +0000313
314 NAME: case_sensitive_like
dane1ff3f52017-01-06 13:49:40 +0000315 FLAG: NoColumns
drh08652b52019-05-08 17:27:18 +0000316 IF: !defined(SQLITE_OMIT_CASE_SENSITIVE_LIKE_PRAGMA)
drh9ccd8652013-09-13 16:36:46 +0000317
318 NAME: integrity_check
drhb4d9b2b2021-07-20 07:35:07 +0000319 FLAG: NeedSchema Result0 Result1 SchemaOpt
drh9ccd8652013-09-13 16:36:46 +0000320 IF: !defined(SQLITE_OMIT_INTEGRITY_CHECK)
321
322 NAME: quick_check
323 TYPE: INTEGRITY_CHECK
drhb4d9b2b2021-07-20 07:35:07 +0000324 FLAG: NeedSchema Result0 Result1 SchemaOpt
drh9ccd8652013-09-13 16:36:46 +0000325 IF: !defined(SQLITE_OMIT_INTEGRITY_CHECK)
326
327 NAME: encoding
dan9e1ab1a2017-01-05 19:32:48 +0000328 FLAG: Result0 NoColumns1
drh9ccd8652013-09-13 16:36:46 +0000329 IF: !defined(SQLITE_OMIT_UTF16)
330
331 NAME: schema_version
332 TYPE: HEADER_VALUE
drh8e755e72014-12-19 18:49:55 +0000333 ARG: BTREE_SCHEMA_VERSION
dan9e1ab1a2017-01-05 19:32:48 +0000334 FLAG: NoColumns1 Result0
drh9ccd8652013-09-13 16:36:46 +0000335 IF: !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
336
337 NAME: user_version
338 TYPE: HEADER_VALUE
drh8e755e72014-12-19 18:49:55 +0000339 ARG: BTREE_USER_VERSION
dan9e1ab1a2017-01-05 19:32:48 +0000340 FLAG: NoColumns1 Result0
drh9ccd8652013-09-13 16:36:46 +0000341 IF: !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
342
drh91618562014-12-19 19:28:02 +0000343 NAME: data_version
344 TYPE: HEADER_VALUE
345 ARG: BTREE_DATA_VERSION
dan9e1ab1a2017-01-05 19:32:48 +0000346 FLAG: ReadOnly Result0
drh91618562014-12-19 19:28:02 +0000347 IF: !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
348
drh9ccd8652013-09-13 16:36:46 +0000349 NAME: freelist_count
350 TYPE: HEADER_VALUE
drh8e755e72014-12-19 18:49:55 +0000351 ARG: BTREE_FREE_PAGE_COUNT
dan9e1ab1a2017-01-05 19:32:48 +0000352 FLAG: ReadOnly Result0
drh9ccd8652013-09-13 16:36:46 +0000353 IF: !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
354
355 NAME: application_id
356 TYPE: HEADER_VALUE
drh8e755e72014-12-19 18:49:55 +0000357 ARG: BTREE_APPLICATION_ID
dan9e1ab1a2017-01-05 19:32:48 +0000358 FLAG: NoColumns1 Result0
drh9ccd8652013-09-13 16:36:46 +0000359 IF: !defined(SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS)
360
361 NAME: compile_options
drhc232aca2016-12-15 16:01:17 +0000362 FLAG: Result0
drh9ccd8652013-09-13 16:36:46 +0000363 IF: !defined(SQLITE_OMIT_COMPILEOPTION_DIAGS)
364
365 NAME: wal_checkpoint
drhf63936e2013-10-03 14:08:07 +0000366 FLAG: NeedSchema
drhc232aca2016-12-15 16:01:17 +0000367 COLS: busy log checkpointed
drh9ccd8652013-09-13 16:36:46 +0000368 IF: !defined(SQLITE_OMIT_WAL)
369
370 NAME: wal_autocheckpoint
371 IF: !defined(SQLITE_OMIT_WAL)
372
373 NAME: shrink_memory
dane1ff3f52017-01-06 13:49:40 +0000374 FLAG: NoColumns
drh9ccd8652013-09-13 16:36:46 +0000375
376 NAME: busy_timeout
drhc232aca2016-12-15 16:01:17 +0000377 FLAG: Result0
378 COLS: timeout
drh9ccd8652013-09-13 16:36:46 +0000379
380 NAME: lock_status
drhc232aca2016-12-15 16:01:17 +0000381 FLAG: Result0
382 COLS: database status
drh9ccd8652013-09-13 16:36:46 +0000383 IF: defined(SQLITE_DEBUG) || defined(SQLITE_TEST)
384
drh9ccd8652013-09-13 16:36:46 +0000385 NAME: activate_extensions
drhb48c0d52020-02-07 01:12:53 +0000386 IF: defined(SQLITE_ENABLE_CEROD)
drh55e85ca2013-09-13 21:01:56 +0000387
388 NAME: soft_heap_limit
drhc232aca2016-12-15 16:01:17 +0000389 FLAG: Result0
drh03459612014-08-25 15:13:22 +0000390
drh10c0e712019-04-25 18:15:38 +0000391 NAME: hard_heap_limit
392 FLAG: Result0
393
drh03459612014-08-25 15:13:22 +0000394 NAME: threads
drhc232aca2016-12-15 16:01:17 +0000395 FLAG: Result0
drh72052a72017-02-17 16:26:34 +0000396
drh49a76a82020-03-31 20:57:06 +0000397 NAME: analysis_limit
398 FLAG: Result0
399
drh2ead47c2017-02-22 20:24:10 +0000400 NAME: optimize
drh761f6912017-04-03 13:33:51 +0000401 FLAG: Result1 NeedSchema
dan674b8942018-09-20 08:28:01 +0000402
403 NAME: legacy_alter_table
404 TYPE: FLAG
405 ARG: SQLITE_LegacyAlter
406 IF: !defined(SQLITE_OMIT_FLAG_PRAGMAS)
drh9ccd8652013-09-13 16:36:46 +0000407}
drh67e65e52015-02-02 21:34:54 +0000408
409# Open the output file
410#
411set destfile "[file dir [file dir [file normal $argv0]]]/src/pragma.h"
412puts "Overwriting $destfile with new pragma table..."
413set fd [open $destfile wb]
414puts $fd {/* DO NOT EDIT!
415** This file is automatically generated by the script at
416** ../tool/mkpragmatab.tcl. To update the set of pragmas, edit
417** that script and rerun it.
418*/}
419
420# Parse the PRAGMA table above.
421#
drh9ccd8652013-09-13 16:36:46 +0000422set name {}
423set type {}
424set if {}
drhf63936e2013-10-03 14:08:07 +0000425set flags {}
drhc232aca2016-12-15 16:01:17 +0000426set cols {}
427set cols_list {}
drh9ccd8652013-09-13 16:36:46 +0000428set arg 0
429proc record_one {} {
drhbdc97442018-10-01 21:26:30 +0000430 global name type if arg allbyname typebyif flags cols all_cols
drhc232aca2016-12-15 16:01:17 +0000431 global cols_list colUsedBy
drh9ccd8652013-09-13 16:36:46 +0000432 if {$name==""} return
drhc232aca2016-12-15 16:01:17 +0000433 if {$cols!=""} {
drhbdc97442018-10-01 21:26:30 +0000434 if {![info exists all_cols($cols)]} {
435 set all_cols($cols) 1
drhc232aca2016-12-15 16:01:17 +0000436 lappend cols_list $cols
drhc232aca2016-12-15 16:01:17 +0000437 }
drhbdc97442018-10-01 21:26:30 +0000438 set cx $cols
drhc232aca2016-12-15 16:01:17 +0000439 lappend colUsedBy($cols) $name
440 } else {
441 set cx 0
442 }
drhbdc97442018-10-01 21:26:30 +0000443 set allbyname($name) [list $type $arg $if $flags $cols]
drh9ccd8652013-09-13 16:36:46 +0000444 set name {}
445 set type {}
446 set if {}
drhf63936e2013-10-03 14:08:07 +0000447 set flags {}
drhc232aca2016-12-15 16:01:17 +0000448 set cols {}
drh9ccd8652013-09-13 16:36:46 +0000449 set arg 0
450}
451foreach line [split $pragma_def \n] {
452 set line [string trim $line]
453 if {$line==""} continue
454 foreach {id val} [split $line :] break
455 set val [string trim $val]
456 if {$id=="NAME"} {
457 record_one
458 set name $val
459 set type [string toupper $val]
460 } elseif {$id=="TYPE"} {
461 set type $val
drhc232aca2016-12-15 16:01:17 +0000462 if {$type=="FLAG"} {
dan9e1ab1a2017-01-05 19:32:48 +0000463 lappend flags Result0 NoColumns1
drhc232aca2016-12-15 16:01:17 +0000464 }
drh9ccd8652013-09-13 16:36:46 +0000465 } elseif {$id=="ARG"} {
466 set arg $val
drhc232aca2016-12-15 16:01:17 +0000467 } elseif {$id=="COLS"} {
468 set cols $val
drh9ccd8652013-09-13 16:36:46 +0000469 } elseif {$id=="IF"} {
mistachkindd197832013-10-21 23:17:23 +0000470 lappend if $val
drhf63936e2013-10-03 14:08:07 +0000471 } elseif {$id=="FLAG"} {
472 foreach term [split $val] {
473 lappend flags $term
474 set allflags($term) 1
475 }
drh9ccd8652013-09-13 16:36:46 +0000476 } else {
477 error "bad pragma_def line: $line"
478 }
479}
480record_one
481set allnames [lsort [array names allbyname]]
482
483# Generate #defines for all pragma type names. Group the pragmas that are
drhb48c0d52020-02-07 01:12:53 +0000484# omit in default builds (ex: defined(SQLITE_DEBUG))
drh9ccd8652013-09-13 16:36:46 +0000485# at the end.
486#
drhc232aca2016-12-15 16:01:17 +0000487puts $fd "\n/* The various pragma types */"
drh9ccd8652013-09-13 16:36:46 +0000488set pnum 0
489foreach name $allnames {
490 set type [lindex $allbyname($name) 0]
491 if {[info exists seentype($type)]} continue
492 set if [lindex $allbyname($name) 2]
493 if {[regexp SQLITE_DEBUG $if] || [regexp SQLITE_HAS_CODEC $if]} continue
494 set seentype($type) 1
drh67e65e52015-02-02 21:34:54 +0000495 puts $fd [format {#define %-35s %4d} PragTyp_$type $pnum]
drh9ccd8652013-09-13 16:36:46 +0000496 incr pnum
497}
498foreach name $allnames {
499 set type [lindex $allbyname($name) 0]
500 if {[info exists seentype($type)]} continue
501 set if [lindex $allbyname($name) 2]
502 if {[regexp SQLITE_DEBUG $if]} continue
503 set seentype($type) 1
drh67e65e52015-02-02 21:34:54 +0000504 puts $fd [format {#define %-35s %4d} PragTyp_$type $pnum]
drh9ccd8652013-09-13 16:36:46 +0000505 incr pnum
506}
507foreach name $allnames {
508 set type [lindex $allbyname($name) 0]
509 if {[info exists seentype($type)]} continue
510 set seentype($type) 1
drh67e65e52015-02-02 21:34:54 +0000511 puts $fd [format {#define %-35s %4d} PragTyp_$type $pnum]
drh9ccd8652013-09-13 16:36:46 +0000512 incr pnum
513}
514
drhf63936e2013-10-03 14:08:07 +0000515# Generate #defines for flags
516#
drhc232aca2016-12-15 16:01:17 +0000517puts $fd "\n/* Property flags associated with various pragma. */"
drhf63936e2013-10-03 14:08:07 +0000518set fv 1
519foreach f [lsort [array names allflags]] {
drhc232aca2016-12-15 16:01:17 +0000520 puts $fd [format {#define PragFlg_%-10s 0x%02x /* %s */} \
521 $f $fv $flagMeaning($f)]
drhf63936e2013-10-03 14:08:07 +0000522 set fv [expr {$fv*2}]
523}
524
drhbdc97442018-10-01 21:26:30 +0000525# Sort the column lists so that longer column lists occur first
526#
527proc colscmp {a b} {
528 return [expr {[llength $b] - [llength $a]}]
529}
530set cols_list [lsort -command colscmp $cols_list]
531
drhc232aca2016-12-15 16:01:17 +0000532# Generate the array of column names used by pragmas that act like
533# queries.
534#
535puts $fd "\n/* Names of columns for pragmas that return multi-column result"
536puts $fd "** or that return single-column results where the name of the"
537puts $fd "** result column is different from the name of the pragma\n*/"
538puts $fd "static const char *const pragCName\[\] = {"
539set offset 0
drhbdc97442018-10-01 21:26:30 +0000540set allcollist {}
drhc232aca2016-12-15 16:01:17 +0000541foreach cols $cols_list {
drhbdc97442018-10-01 21:26:30 +0000542 set n [llength $cols]
543 set limit [expr {[llength $allcollist] - $n}]
544 for {set i 0} {$i<$limit} {incr i} {
545 set sublist [lrange $allcollist $i [expr {$i+$n-1}]]
546 if {$sublist==$cols} {
547 puts $fd [format "%27s/* $colUsedBy($cols) reuses $i */" ""]
548 set cols_offset($cols) $i
549 break
550 }
551 }
552 if {$i<$limit} continue
553 set cols_offset($cols) $offset
drhc232aca2016-12-15 16:01:17 +0000554 set ub " /* Used by: $colUsedBy($cols) */"
555 foreach c $cols {
drhbdc97442018-10-01 21:26:30 +0000556 lappend allcollist $c
drhc232aca2016-12-15 16:01:17 +0000557 puts $fd [format " /* %3d */ %-14s%s" $offset \"$c\", $ub]
558 set ub ""
559 incr offset
560 }
561}
562puts $fd "\175;"
563
drh9ccd8652013-09-13 16:36:46 +0000564# Generate the lookup table
565#
drhc232aca2016-12-15 16:01:17 +0000566puts $fd "\n/* Definitions of all built-in pragmas */"
drh2fcc1592016-12-15 20:59:03 +0000567puts $fd "typedef struct PragmaName \173"
drhc232aca2016-12-15 16:01:17 +0000568puts $fd " const char *const zName; /* Name of pragma */"
569puts $fd " u8 ePragTyp; /* PragTyp_XXX value */"
570puts $fd " u8 mPragFlg; /* Zero or more PragFlg_XXX values */"
571puts $fd { u8 iPragCName; /* Start of column names in pragCName[] */}
572puts $fd " u8 nPragCName; \
573/* Num of col names. 0 means use pragma name */"
drhfd748c62018-10-30 16:25:35 +0000574puts $fd " u64 iArg; /* Extra argument */"
drh2fcc1592016-12-15 20:59:03 +0000575puts $fd "\175 PragmaName;"
576puts $fd "static const PragmaName aPragmaName\[\] = \173"
drh9ccd8652013-09-13 16:36:46 +0000577
578set current_if {}
579set spacer [format { %26s } {}]
580foreach name $allnames {
drhc232aca2016-12-15 16:01:17 +0000581 foreach {type arg if flag cx} $allbyname($name) break
drhbdc97442018-10-01 21:26:30 +0000582 if {$cx==0 || $cx==""} {
drhc232aca2016-12-15 16:01:17 +0000583 set cy 0
584 set nx 0
585 } else {
586 set cy $cols_offset($cx)
drhbdc97442018-10-01 21:26:30 +0000587 set nx [llength $cx]
drhc232aca2016-12-15 16:01:17 +0000588 }
drh9ccd8652013-09-13 16:36:46 +0000589 if {$if!=$current_if} {
mistachkindd197832013-10-21 23:17:23 +0000590 if {$current_if!=""} {
591 foreach this_if $current_if {
drh67e65e52015-02-02 21:34:54 +0000592 puts $fd "#endif"
mistachkindd197832013-10-21 23:17:23 +0000593 }
594 }
drh9ccd8652013-09-13 16:36:46 +0000595 set current_if $if
mistachkindd197832013-10-21 23:17:23 +0000596 if {$current_if!=""} {
597 foreach this_if $current_if {
drh67e65e52015-02-02 21:34:54 +0000598 puts $fd "#if $this_if"
mistachkindd197832013-10-21 23:17:23 +0000599 }
600 }
drh9ccd8652013-09-13 16:36:46 +0000601 }
drh9ccd8652013-09-13 16:36:46 +0000602 set typex [format PragTyp_%-23s $type,]
drhf63936e2013-10-03 14:08:07 +0000603 if {$flag==""} {
604 set flagx "0"
drh9ccd8652013-09-13 16:36:46 +0000605 } else {
drhc232aca2016-12-15 16:01:17 +0000606 set flagx PragFlg_[join $flag {|PragFlg_}]
drh9ccd8652013-09-13 16:36:46 +0000607 }
drhc232aca2016-12-15 16:01:17 +0000608 puts $fd " \173/* zName: */ \"$name\","
609 puts $fd " /* ePragTyp: */ PragTyp_$type,"
610 puts $fd " /* ePragFlg: */ $flagx,"
611 puts $fd " /* ColNames: */ $cy, $nx,"
612 puts $fd " /* iArg: */ $arg \175,"
drh9ccd8652013-09-13 16:36:46 +0000613}
mistachkindd197832013-10-21 23:17:23 +0000614if {$current_if!=""} {
615 foreach this_if $current_if {
drh67e65e52015-02-02 21:34:54 +0000616 puts $fd "#endif"
mistachkindd197832013-10-21 23:17:23 +0000617 }
618}
drh67e65e52015-02-02 21:34:54 +0000619puts $fd "\175;"
drh6bb64f62013-09-13 16:56:17 +0000620
621# count the number of pragmas, for information purposes
622#
623set allcnt 0
624set dfltcnt 0
625foreach name $allnames {
626 incr allcnt
627 set if [lindex $allbyname($name) 2]
628 if {[regexp {^defined} $if] || [regexp {[^!]defined} $if]} continue
629 incr dfltcnt
630}
drh67e65e52015-02-02 21:34:54 +0000631puts $fd "/* Number of pragmas: $dfltcnt on by default, $allcnt total. */"