2013-09-13 16:36:46 +00:00
# !/usr/bin/tclsh
#
# Run this script to generate the pragma name lookup table C code.
#
# To add new pragmas, first add the name and other relevant attributes
# of the pragma to the "pragma_def" object below. Then run this script
2015-02-02 21:34:54 +00:00
# to generate the ../src/pragma.h header file that contains macros and
# the lookup table needed for pragma name lookup in the pragma.c module.
2013-09-13 16:36:46 +00:00
# Then add the extra "case PragTyp_XXXXX:" and subsequent code for the
2015-02-02 21:34:54 +00:00
# new pragma in ../src/pragma.c.
2013-09-13 16:36:46 +00:00
#
2016-12-15 16:01:17 +00:00
# Flag meanings:
set flagMeaning( NeedSchema ) { Force schema load before running}
set flagMeaning( ReadOnly ) { Read-only HEADER_VALUE}
set flagMeaning( Result0 ) { Acts as query when no argument}
set flagMeaning( Result1 ) { Acts as query when has one argument}
set flagMeaning( SchemaReq ) { Schema required - " m a i n " is default}
set flagMeaning( SchemaOpt ) { Schema restricts name search if present}
set flagMeaning( NoColumns ) { OP_ResultRow called with zero columns}
2017-01-05 19:32:48 +00:00
set flagMeaning( NoColumns1 ) { zero columns if RHS argument is present}
2016-12-15 16:01:17 +00:00
2013-09-13 16:36:46 +00:00
set pragma_def {
NAME : full_column_names
TYPE : FLAG
ARG : SQLITE_FullColNames
2013-10-21 23:17:23 +00:00
IF : ! defined( SQLITE_OMIT_FLAG_PRAGMAS )
2013-09-13 16:36:46 +00:00
NAME : short_column_names
TYPE : FLAG
ARG : SQLITE_ShortColNames
2013-10-21 23:17:23 +00:00
IF : ! defined( SQLITE_OMIT_FLAG_PRAGMAS )
2013-09-13 16:36:46 +00:00
NAME : count_changes
TYPE : FLAG
ARG : SQLITE_CountRows
2013-10-21 23:17:23 +00:00
IF : ! defined( SQLITE_OMIT_FLAG_PRAGMAS )
2013-09-13 16:36:46 +00:00
NAME : empty_result_callbacks
TYPE : FLAG
ARG : SQLITE_NullCallback
2013-10-21 23:17:23 +00:00
IF : ! defined( SQLITE_OMIT_FLAG_PRAGMAS )
2013-09-13 16:36:46 +00:00
NAME : fullfsync
TYPE : FLAG
ARG : SQLITE_FullFSync
2013-10-21 23:17:23 +00:00
IF : ! defined( SQLITE_OMIT_FLAG_PRAGMAS )
2013-09-13 16:36:46 +00:00
NAME : checkpoint_fullfsync
TYPE : FLAG
ARG : SQLITE_CkptFullFSync
2013-10-21 23:17:23 +00:00
IF : ! defined( SQLITE_OMIT_FLAG_PRAGMAS )
2013-09-13 16:36:46 +00:00
NAME : cache_spill
2017-01-05 19:32:48 +00:00
FLAG : Result0 SchemaReq NoColumns1
2013-10-21 23:17:23 +00:00
IF : ! defined( SQLITE_OMIT_FLAG_PRAGMAS )
2013-09-13 16:36:46 +00:00
NAME : reverse_unordered_selects
TYPE : FLAG
ARG : SQLITE_ReverseOrder
2013-10-21 23:17:23 +00:00
IF : ! defined( SQLITE_OMIT_FLAG_PRAGMAS )
2013-09-13 16:36:46 +00:00
NAME : query_only
TYPE : FLAG
ARG : SQLITE_QueryOnly
2013-10-21 23:17:23 +00:00
IF : ! defined( SQLITE_OMIT_FLAG_PRAGMAS )
2013-09-13 16:36:46 +00:00
NAME : automatic_index
TYPE : FLAG
ARG : SQLITE_AutoIndex
2013-10-21 23:17:23 +00:00
IF : ! defined( SQLITE_OMIT_FLAG_PRAGMAS )
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_AUTOMATIC_INDEX )
NAME : sql_trace
TYPE : FLAG
ARG : SQLITE_SqlTrace
2013-10-21 23:17:23 +00:00
IF : ! defined( SQLITE_OMIT_FLAG_PRAGMAS )
2013-09-13 16:36:46 +00:00
IF : defined( SQLITE_DEBUG )
NAME : vdbe_listing
TYPE : FLAG
ARG : SQLITE_VdbeListing
2013-10-21 23:17:23 +00:00
IF : ! defined( SQLITE_OMIT_FLAG_PRAGMAS )
2013-09-13 16:36:46 +00:00
IF : defined( SQLITE_DEBUG )
NAME : vdbe_trace
TYPE : FLAG
ARG : SQLITE_VdbeTrace
2013-10-21 23:17:23 +00:00
IF : ! defined( SQLITE_OMIT_FLAG_PRAGMAS )
2013-09-13 16:36:46 +00:00
IF : defined( SQLITE_DEBUG )
NAME : vdbe_addoptrace
TYPE : FLAG
ARG : SQLITE_VdbeAddopTrace
2013-10-21 23:17:23 +00:00
IF : ! defined( SQLITE_OMIT_FLAG_PRAGMAS )
2013-09-13 16:36:46 +00:00
IF : defined( SQLITE_DEBUG )
NAME : vdbe_debug
TYPE : FLAG
ARG : SQLITE_SqlTrace| SQLITE_VdbeListing| SQLITE_VdbeTrace
2013-10-21 23:17:23 +00:00
IF : ! defined( SQLITE_OMIT_FLAG_PRAGMAS )
2013-09-13 16:36:46 +00:00
IF : defined( SQLITE_DEBUG )
2013-11-13 17:58:23 +00:00
NAME : vdbe_eqp
TYPE : FLAG
ARG : SQLITE_VdbeEQP
IF : ! defined( SQLITE_OMIT_FLAG_PRAGMAS )
IF : defined( SQLITE_DEBUG )
2013-09-13 16:36:46 +00:00
NAME : ignore_check_constraints
TYPE : FLAG
ARG : SQLITE_IgnoreChecks
2013-10-21 23:17:23 +00:00
IF : ! defined( SQLITE_OMIT_FLAG_PRAGMAS )
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_CHECK )
NAME : writable_schema
TYPE : FLAG
2018-10-30 16:25:35 +00:00
ARG : SQLITE_WriteSchema| SQLITE_NoSchemaError
2013-10-21 23:17:23 +00:00
IF : ! defined( SQLITE_OMIT_FLAG_PRAGMAS )
2013-09-13 16:36:46 +00:00
NAME : read_uncommitted
TYPE : FLAG
2017-06-26 13:57:49 +00:00
ARG : SQLITE_ReadUncommit
2013-10-21 23:17:23 +00:00
IF : ! defined( SQLITE_OMIT_FLAG_PRAGMAS )
2013-09-13 16:36:46 +00:00
NAME : recursive_triggers
TYPE : FLAG
ARG : SQLITE_RecTriggers
2013-10-21 23:17:23 +00:00
IF : ! defined( SQLITE_OMIT_FLAG_PRAGMAS )
2013-09-13 16:36:46 +00:00
2020-01-07 19:45:40 +00:00
NAME : trusted_schema
TYPE : FLAG
ARG : SQLITE_TrustedSchema
IF : ! defined( SQLITE_OMIT_FLAG_PRAGMAS )
2013-09-13 16:36:46 +00:00
NAME : foreign_keys
TYPE : FLAG
ARG : SQLITE_ForeignKeys
2013-10-21 23:17:23 +00:00
IF : ! defined( SQLITE_OMIT_FLAG_PRAGMAS )
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_FOREIGN_KEY ) && ! defined( SQLITE_OMIT_TRIGGER )
NAME : defer_foreign_keys
TYPE : FLAG
ARG : SQLITE_DeferFKs
2013-10-21 23:17:23 +00:00
IF : ! defined( SQLITE_OMIT_FLAG_PRAGMAS )
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_FOREIGN_KEY ) && ! defined( SQLITE_OMIT_TRIGGER )
2015-05-27 03:46:18 +00:00
NAME : cell_size_check
TYPE : FLAG
ARG : SQLITE_CellSizeCk
2013-09-13 16:36:46 +00:00
NAME : default_cache_size
2017-01-05 19:32:48 +00:00
FLAG : NeedSchema Result0 SchemaReq NoColumns1
2016-12-15 16:01:17 +00:00
COLS : cache_size
2019-02-06 00:11:13 +00:00
IF : ! defined( SQLITE_OMIT_PAGER_PRAGMAS ) && ! defined( SQLITE_OMIT_DEPRECATED )
2013-09-13 16:36:46 +00:00
NAME : page_size
2017-01-05 19:32:48 +00:00
FLAG : Result0 SchemaReq NoColumns1
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_PAGER_PRAGMAS )
NAME : secure_delete
2016-12-15 16:01:17 +00:00
FLAG : Result0
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_PAGER_PRAGMAS )
NAME : page_count
2016-12-15 16:01:17 +00:00
FLAG : NeedSchema Result0 SchemaReq
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_PAGER_PRAGMAS )
NAME : max_page_count
TYPE : PAGE_COUNT
2016-12-15 16:01:17 +00:00
FLAG : NeedSchema Result0 SchemaReq
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_PAGER_PRAGMAS )
NAME : locking_mode
2016-12-15 16:01:17 +00:00
FLAG : Result0 SchemaReq
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_PAGER_PRAGMAS )
NAME : journal_mode
2016-12-15 16:01:17 +00:00
FLAG : NeedSchema Result0 SchemaReq
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_PAGER_PRAGMAS )
NAME : journal_size_limit
2016-12-15 16:01:17 +00:00
FLAG : Result0 SchemaReq
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_PAGER_PRAGMAS )
NAME : cache_size
2017-01-05 19:32:48 +00:00
FLAG : NeedSchema Result0 SchemaReq NoColumns1
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_PAGER_PRAGMAS )
NAME : mmap_size
IF : ! defined( SQLITE_OMIT_PAGER_PRAGMAS )
NAME : auto_vacuum
2017-01-05 19:32:48 +00:00
FLAG : NeedSchema Result0 SchemaReq NoColumns1
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_AUTOVACUUM )
NAME : incremental_vacuum
2016-12-15 16:01:17 +00:00
FLAG : NeedSchema NoColumns
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_AUTOVACUUM )
NAME : temp_store
2017-01-05 19:32:48 +00:00
FLAG : Result0 NoColumns1
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_PAGER_PRAGMAS )
NAME : temp_store_directory
2017-01-05 19:32:48 +00:00
FLAG : NoColumns1
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_PAGER_PRAGMAS )
NAME : data_store_directory
2017-01-05 19:32:48 +00:00
FLAG : NoColumns1
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_PAGER_PRAGMAS ) && SQLITE_OS_WIN
NAME : lock_proxy_file
2017-01-05 19:32:48 +00:00
FLAG : NoColumns1
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_PAGER_PRAGMAS ) && SQLITE_ENABLE_LOCKING_STYLE
NAME : synchronous
2017-01-05 19:32:48 +00:00
FLAG : NeedSchema Result0 SchemaReq NoColumns1
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_PAGER_PRAGMAS )
NAME : table_info
2016-12-15 16:01:17 +00:00
FLAG : NeedSchema Result1 SchemaOpt
2018-09-29 19:38:42 +00:00
ARG : 0
COLS : cid name type notnull dflt_value pk
IF : ! defined( SQLITE_OMIT_SCHEMA_PRAGMAS )
2018-10-01 21:26:30 +00:00
NAME : table_xinfo
2018-09-29 19:38:42 +00:00
TYPE : TABLE_INFO
FLAG : NeedSchema Result1 SchemaOpt
ARG : 1
2018-10-01 18:28:42 +00:00
COLS : cid name type notnull dflt_value pk hidden
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_SCHEMA_PRAGMAS )
2021-09-21 17:26:23 +00:00
NAME : table_list
TYPE : TABLE_LIST
2021-10-04 13:30:22 +00:00
FLAG : NeedSchema Result1
2021-09-21 17:26:23 +00:00
COLS : schema name type ncol wr strict
IF : ! defined( SQLITE_OMIT_SCHEMA_PRAGMAS )
2013-10-12 20:22:00 +00:00
NAME : stats
2016-12-15 16:01:17 +00:00
FLAG : NeedSchema Result0 SchemaReq
2017-02-17 15:26:36 +00:00
COLS : tbl idx wdth hght flgs
2017-02-17 13:38:15 +00:00
IF : ! defined( SQLITE_OMIT_SCHEMA_PRAGMAS ) && defined( SQLITE_DEBUG )
2013-10-12 20:22:00 +00:00
2013-09-13 16:36:46 +00:00
NAME : index_info
2015-01-31 02:00:01 +00:00
TYPE : INDEX_INFO
ARG : 0
2016-12-15 16:01:17 +00:00
FLAG : NeedSchema Result1 SchemaOpt
COLS : seqno cid name
2015-01-31 02:00:01 +00:00
IF : ! defined( SQLITE_OMIT_SCHEMA_PRAGMAS )
NAME : index_xinfo
TYPE : INDEX_INFO
ARG : 1
2016-12-15 16:01:17 +00:00
FLAG : NeedSchema Result1 SchemaOpt
COLS : seqno cid name desc coll key
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_SCHEMA_PRAGMAS )
NAME : index_list
2016-12-15 16:01:17 +00:00
FLAG : NeedSchema Result1 SchemaOpt
COLS : seq name unique origin partial
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_SCHEMA_PRAGMAS )
NAME : database_list
2022-02-22 20:29:31 +00:00
FLAG : Result0
2016-12-15 16:01:17 +00:00
COLS : seq name file
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_SCHEMA_PRAGMAS )
2017-07-07 15:43:22 +00:00
NAME : function_list
FLAG : Result0
2020-01-04 01:43:02 +00:00
COLS : name builtin type enc narg flags
2017-07-07 15:43:22 +00:00
IF : ! defined( SQLITE_OMIT_SCHEMA_PRAGMAS )
2019-08-17 15:27:58 +00:00
IF : ! defined( SQLITE_OMIT_INTROSPECTION_PRAGMAS )
2017-07-07 15:43:22 +00:00
NAME : module_list
FLAG : Result0
COLS : name
IF : ! defined( SQLITE_OMIT_SCHEMA_PRAGMAS )
IF : ! defined( SQLITE_OMIT_VIRTUALTABLE )
2019-08-17 15:27:58 +00:00
IF : ! defined( SQLITE_OMIT_INTROSPECTION_PRAGMAS )
2017-07-07 17:33:07 +00:00
NAME : pragma_list
FLAG : Result0
COLS : name
2019-08-17 15:27:58 +00:00
IF : ! defined( SQLITE_OMIT_INTROSPECTION_PRAGMAS )
2017-07-07 15:43:22 +00:00
2013-09-13 16:36:46 +00:00
NAME : collation_list
2016-12-15 16:01:17 +00:00
FLAG : Result0
COLS : seq name
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_SCHEMA_PRAGMAS )
NAME : foreign_key_list
2016-12-15 16:01:17 +00:00
FLAG : NeedSchema Result1 SchemaOpt
COLS : id seq table from to on_update on_delete match
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_FOREIGN_KEY )
NAME : foreign_key_check
2020-07-03 12:32:04 +00:00
FLAG : NeedSchema Result0 Result1 SchemaOpt
2016-12-15 16:01:17 +00:00
COLS : table rowid parent fkid
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_FOREIGN_KEY ) && ! defined( SQLITE_OMIT_TRIGGER )
NAME : parser_trace
2019-01-31 01:39:01 +00:00
TYPE : FLAG
ARG : SQLITE_ParserTrace
IF : ! defined( SQLITE_OMIT_FLAG_PRAGMAS )
IF : defined( SQLITE_DEBUG )
2013-09-13 16:36:46 +00:00
NAME : case_sensitive_like
2017-01-06 13:49:40 +00:00
FLAG : NoColumns
2019-05-08 17:27:18 +00:00
IF : ! defined( SQLITE_OMIT_CASE_SENSITIVE_LIKE_PRAGMA )
2013-09-13 16:36:46 +00:00
NAME : integrity_check
2021-07-20 07:35:07 +00:00
FLAG : NeedSchema Result0 Result1 SchemaOpt
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_INTEGRITY_CHECK )
NAME : quick_check
TYPE : INTEGRITY_CHECK
2021-07-20 07:35:07 +00:00
FLAG : NeedSchema Result0 Result1 SchemaOpt
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_INTEGRITY_CHECK )
NAME : encoding
2017-01-05 19:32:48 +00:00
FLAG : Result0 NoColumns1
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_UTF16 )
NAME : schema_version
TYPE : HEADER_VALUE
2014-12-19 18:49:55 +00:00
ARG : BTREE_SCHEMA_VERSION
2017-01-05 19:32:48 +00:00
FLAG : NoColumns1 Result0
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS )
NAME : user_version
TYPE : HEADER_VALUE
2014-12-19 18:49:55 +00:00
ARG : BTREE_USER_VERSION
2017-01-05 19:32:48 +00:00
FLAG : NoColumns1 Result0
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS )
2014-12-19 19:28:02 +00:00
NAME : data_version
TYPE : HEADER_VALUE
ARG : BTREE_DATA_VERSION
2017-01-05 19:32:48 +00:00
FLAG : ReadOnly Result0
2014-12-19 19:28:02 +00:00
IF : ! defined( SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS )
2013-09-13 16:36:46 +00:00
NAME : freelist_count
TYPE : HEADER_VALUE
2014-12-19 18:49:55 +00:00
ARG : BTREE_FREE_PAGE_COUNT
2017-01-05 19:32:48 +00:00
FLAG : ReadOnly Result0
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS )
NAME : application_id
TYPE : HEADER_VALUE
2014-12-19 18:49:55 +00:00
ARG : BTREE_APPLICATION_ID
2017-01-05 19:32:48 +00:00
FLAG : NoColumns1 Result0
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_SCHEMA_VERSION_PRAGMAS )
NAME : compile_options
2016-12-15 16:01:17 +00:00
FLAG : Result0
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_COMPILEOPTION_DIAGS )
NAME : wal_checkpoint
2013-10-03 14:08:07 +00:00
FLAG : NeedSchema
2016-12-15 16:01:17 +00:00
COLS : busy log checkpointed
2013-09-13 16:36:46 +00:00
IF : ! defined( SQLITE_OMIT_WAL )
NAME : wal_autocheckpoint
IF : ! defined( SQLITE_OMIT_WAL )
NAME : shrink_memory
2017-01-06 13:49:40 +00:00
FLAG : NoColumns
2013-09-13 16:36:46 +00:00
NAME : busy_timeout
2016-12-15 16:01:17 +00:00
FLAG : Result0
COLS : timeout
2013-09-13 16:36:46 +00:00
NAME : lock_status
2016-12-15 16:01:17 +00:00
FLAG : Result0
COLS : database status
2013-09-13 16:36:46 +00:00
IF : defined( SQLITE_DEBUG ) || defined( SQLITE_TEST )
NAME : activate_extensions
2020-02-07 01:12:53 +00:00
IF : defined( SQLITE_ENABLE_CEROD )
2013-09-13 21:01:56 +00:00
NAME : soft_heap_limit
2016-12-15 16:01:17 +00:00
FLAG : Result0
2014-08-25 15:13:22 +00:00
2019-04-25 18:15:38 +00:00
NAME : hard_heap_limit
FLAG : Result0
2014-08-25 15:13:22 +00:00
NAME : threads
2016-12-15 16:01:17 +00:00
FLAG : Result0
2017-02-17 16:26:34 +00:00
2020-03-31 20:57:06 +00:00
NAME : analysis_limit
FLAG : Result0
2017-02-22 20:24:10 +00:00
NAME : optimize
2017-04-03 13:33:51 +00:00
FLAG : Result1 NeedSchema
2018-09-20 08:28:01 +00:00
NAME : legacy_alter_table
TYPE : FLAG
ARG : SQLITE_LegacyAlter
IF : ! defined( SQLITE_OMIT_FLAG_PRAGMAS )
2013-09-13 16:36:46 +00:00
}
2015-02-02 21:34:54 +00:00
# Open the output file
#
set destfile " [ f i l e d i r [ f i l e d i r [ f i l e n o r m a l $ a r g v 0 ] ] ] / s r c / p r a g m a . h "
puts " O v e r w r i t i n g $ d e s t f i l e w i t h n e w p r a g m a t a b l e . . . "
set fd [ open $destfile wb]
puts $fd { / * DO NOT EDIT!
** This file is automatically generated by the script at
** .. / tool/ mkpragmatab.tcl. To update the set of pragmas, edit
** that script and rerun it.
* / }
# Parse the PRAGMA table above.
#
2013-09-13 16:36:46 +00:00
set name { }
set type { }
set if { }
2013-10-03 14:08:07 +00:00
set flags { }
2016-12-15 16:01:17 +00:00
set cols { }
set cols_list { }
2013-09-13 16:36:46 +00:00
set arg 0
proc record_one { } {
2018-10-01 21:26:30 +00:00
global name type if arg allbyname typebyif flags cols all_cols
2016-12-15 16:01:17 +00:00
global cols_list colUsedBy
2013-09-13 16:36:46 +00:00
if { $name == " " } return
2016-12-15 16:01:17 +00:00
if { $cols != " " } {
2018-10-01 21:26:30 +00:00
if { ! [ info exists all_cols( $cols ) ] } {
set all_cols( $cols ) 1
2016-12-15 16:01:17 +00:00
lappend cols_list $cols
}
2018-10-01 21:26:30 +00:00
set cx $cols
2016-12-15 16:01:17 +00:00
lappend colUsedBy( $cols ) $name
} else {
set cx 0
}
2018-10-01 21:26:30 +00:00
set allbyname( $name ) [ list $type $arg $if $flags $cols ]
2013-09-13 16:36:46 +00:00
set name { }
set type { }
set if { }
2013-10-03 14:08:07 +00:00
set flags { }
2016-12-15 16:01:17 +00:00
set cols { }
2013-09-13 16:36:46 +00:00
set arg 0
}
foreach line [ split $pragma_def \ n] {
set line [ string trim $line ]
if { $line == " " } continue
foreach { id val} [ split $line : ] break
set val [ string trim $val ]
if { $id == " N A M E " } {
record_one
set name $val
set type [ string toupper $val ]
} elseif { $id == " T Y P E " } {
set type $val
2016-12-15 16:01:17 +00:00
if { $type == " F L A G " } {
2017-01-05 19:32:48 +00:00
lappend flags Result0 NoColumns1
2016-12-15 16:01:17 +00:00
}
2013-09-13 16:36:46 +00:00
} elseif { $id == " A R G " } {
set arg $val
2016-12-15 16:01:17 +00:00
} elseif { $id == " C O L S " } {
set cols $val
2013-09-13 16:36:46 +00:00
} elseif { $id == " I F " } {
2013-10-21 23:17:23 +00:00
lappend if $val
2013-10-03 14:08:07 +00:00
} elseif { $id == " F L A G " } {
foreach term [ split $val ] {
lappend flags $term
set allflags( $term ) 1
}
2013-09-13 16:36:46 +00:00
} else {
error " b a d p r a g m a _ d e f l i n e : $ l i n e "
}
}
record_one
set allnames [ lsort [ array names allbyname] ]
# Generate #defines for all pragma type names. Group the pragmas that are
2020-02-07 01:12:53 +00:00
# omit in default builds (ex: defined(SQLITE_DEBUG))
2013-09-13 16:36:46 +00:00
# at the end.
#
2016-12-15 16:01:17 +00:00
puts $fd " \n / * T h e v a r i o u s p r a g m a t y p e s * / "
2013-09-13 16:36:46 +00:00
set pnum 0
foreach name $allnames {
set type [ lindex $allbyname ( $name ) 0 ]
if { [ info exists seentype( $type ) ] } continue
set if [ lindex $allbyname ( $name ) 2 ]
if { [ regexp SQLITE_DEBUG $if ] || [ regexp SQLITE_HAS_CODEC $if ] } continue
set seentype( $type ) 1
2015-02-02 21:34:54 +00:00
puts $fd [ format { # define %-35s %4d} PragTyp_$type $pnum]
2013-09-13 16:36:46 +00:00
incr pnum
}
foreach name $allnames {
set type [ lindex $allbyname ( $name ) 0 ]
if { [ info exists seentype( $type ) ] } continue
set if [ lindex $allbyname ( $name ) 2 ]
if { [ regexp SQLITE_DEBUG $if ] } continue
set seentype( $type ) 1
2015-02-02 21:34:54 +00:00
puts $fd [ format { # define %-35s %4d} PragTyp_$type $pnum]
2013-09-13 16:36:46 +00:00
incr pnum
}
foreach name $allnames {
set type [ lindex $allbyname ( $name ) 0 ]
if { [ info exists seentype( $type ) ] } continue
set seentype( $type ) 1
2015-02-02 21:34:54 +00:00
puts $fd [ format { # define %-35s %4d} PragTyp_$type $pnum]
2013-09-13 16:36:46 +00:00
incr pnum
}
2013-10-03 14:08:07 +00:00
# Generate #defines for flags
#
2016-12-15 16:01:17 +00:00
puts $fd " \n / * P r o p e r t y f l a g s a s s o c i a t e d w i t h v a r i o u s p r a g m a . * / "
2013-10-03 14:08:07 +00:00
set fv 1
foreach f [ lsort [ array names allflags] ] {
2016-12-15 16:01:17 +00:00
puts $fd [ format { # define PragFlg_%-10s 0x%02x /* %s */} \
$f $fv $flagMeaning ( $f ) ]
2013-10-03 14:08:07 +00:00
set fv [ expr { $fv * 2 } ]
}
2018-10-01 21:26:30 +00:00
# Sort the column lists so that longer column lists occur first
#
proc colscmp { a b} {
return [ expr { [ llength $b ] - [ llength $a ] } ]
}
set cols_list [ lsort - command colscmp $cols_list ]
2016-12-15 16:01:17 +00:00
# Generate the array of column names used by pragmas that act like
# queries.
#
puts $fd " \n / * N a m e s o f c o l u m n s f o r p r a g m a s t h a t r e t u r n m u l t i - c o l u m n r e s u l t "
puts $fd " * * o r t h a t r e t u r n s i n g l e - c o l u m n r e s u l t s w h e r e t h e n a m e o f t h e "
puts $fd " * * r e s u l t c o l u m n i s d i f f e r e n t f r o m t h e n a m e o f t h e p r a g m a \n * / "
puts $fd " s t a t i c c o n s t c h a r * c o n s t p r a g C N a m e \[ \] = { "
set offset 0
2018-10-01 21:26:30 +00:00
set allcollist { }
2016-12-15 16:01:17 +00:00
foreach cols $cols_list {
2018-10-01 21:26:30 +00:00
set n [ llength $cols ]
set limit [ expr { [ llength $allcollist ] - $n } ]
for { set i 0 } { $i < $limit } { incr i} {
set sublist [ lrange $allcollist $i [ expr { $i + $n-1 } ] ]
if { $sublist == $cols } {
puts $fd [ format " % 2 7 s / * $ c o l U s e d B y ( $ c o l s ) r e u s e s $ i * / " " " ]
set cols_offset( $cols ) $i
break
}
}
if { $i < $limit } continue
set cols_offset( $cols ) $offset
2016-12-15 16:01:17 +00:00
set ub " / * U s e d b y : $ c o l U s e d B y ( $ c o l s ) * / "
foreach c $cols {
2018-10-01 21:26:30 +00:00
lappend allcollist $c
2016-12-15 16:01:17 +00:00
puts $fd [ format " / * % 3 d * / % - 1 4 s % s " $offset \ " $ c \" , $ u b ]
set ub " "
incr offset
}
}
puts $fd " \175 ; "
2013-09-13 16:36:46 +00:00
# Generate the lookup table
#
2016-12-15 16:01:17 +00:00
puts $fd " \n / * D e f i n i t i o n s o f a l l b u i l t - i n p r a g m a s * / "
2016-12-15 20:59:03 +00:00
puts $fd " t y p e d e f s t r u c t P r a g m a N a m e \173 "
2016-12-15 16:01:17 +00:00
puts $fd " c o n s t c h a r * c o n s t z N a m e ; / * N a m e o f p r a g m a * / "
puts $fd " u 8 e P r a g T y p ; / * P r a g T y p _ X X X v a l u e * / "
puts $fd " u 8 m P r a g F l g ; / * Z e r o o r m o r e P r a g F l g _ X X X v a l u e s * / "
puts $fd { u8 iPragCName; / * Start of column names in pragCName[ ] * / }
puts $fd " u 8 n P r a g C N a m e ; \
/ * Num of col names. 0 means use pragma name * / "
2018-10-30 16:25:35 +00:00
puts $fd " u 6 4 i A r g ; / * E x t r a a r g u m e n t * / "
2016-12-15 20:59:03 +00:00
puts $fd " \175 P r a g m a N a m e ; "
puts $fd " s t a t i c c o n s t P r a g m a N a m e a P r a g m a N a m e \[ \] = \173 "
2013-09-13 16:36:46 +00:00
set current_if { }
set spacer [ format { % 26s } { } ]
foreach name $allnames {
2016-12-15 16:01:17 +00:00
foreach { type arg if flag cx} $allbyname ( $name ) break
2018-10-01 21:26:30 +00:00
if { $cx == 0 || $cx == " " } {
2016-12-15 16:01:17 +00:00
set cy 0
set nx 0
} else {
set cy $cols_offset ( $cx )
2018-10-01 21:26:30 +00:00
set nx [ llength $cx ]
2016-12-15 16:01:17 +00:00
}
2013-09-13 16:36:46 +00:00
if { $if != $current_if } {
2013-10-21 23:17:23 +00:00
if { $current_if != " " } {
foreach this_if $current_if {
2015-02-02 21:34:54 +00:00
puts $fd " # e n d i f "
2013-10-21 23:17:23 +00:00
}
}
2013-09-13 16:36:46 +00:00
set current_if $if
2013-10-21 23:17:23 +00:00
if { $current_if != " " } {
foreach this_if $current_if {
2015-02-02 21:34:54 +00:00
puts $fd " # i f $ t h i s _ i f "
2013-10-21 23:17:23 +00:00
}
}
2013-09-13 16:36:46 +00:00
}
set typex [ format PragTyp_% - 23 s $type , ]
2013-10-03 14:08:07 +00:00
if { $flag == " " } {
set flagx " 0 "
2013-09-13 16:36:46 +00:00
} else {
2016-12-15 16:01:17 +00:00
set flagx PragFlg_[ join $flag { | PragFlg_ } ]
2013-09-13 16:36:46 +00:00
}
2016-12-15 16:01:17 +00:00
puts $fd " \173 / * z N a m e : * / \" $ n a m e \" , "
puts $fd " / * e P r a g T y p : * / P r a g T y p _ $ t y p e , "
puts $fd " / * e P r a g F l g : * / $ f l a g x , "
puts $fd " / * C o l N a m e s : * / $ c y , $ n x , "
puts $fd " / * i A r g : * / $ a r g \175 , "
2013-09-13 16:36:46 +00:00
}
2013-10-21 23:17:23 +00:00
if { $current_if != " " } {
foreach this_if $current_if {
2015-02-02 21:34:54 +00:00
puts $fd " # e n d i f "
2013-10-21 23:17:23 +00:00
}
}
2015-02-02 21:34:54 +00:00
puts $fd " \175 ; "
2013-09-13 16:56:17 +00:00
# count the number of pragmas, for information purposes
#
set allcnt 0
set dfltcnt 0
foreach name $allnames {
incr allcnt
set if [ lindex $allbyname ( $name ) 2 ]
if { [ regexp { ^ defined } $if ] || [ regexp { [ ^ ! ] defined } $if ] } continue
incr dfltcnt
}
2015-02-02 21:34:54 +00:00
puts $fd " / * N u m b e r o f p r a g m a s : $ d f l t c n t o n b y d e f a u l t , $ a l l c n t t o t a l . * / "