// Code generated by tools/gen_settings.py. DO NOT EDIT.

///|
/// Data attributes of the Python `Dialect` class.
pub(all) struct DialectConfig {
  mut alias_post_tablesample : Bool
  mut alias_post_version : Bool
  mut alter_table_add_required_for_each_column : Bool
  mut alter_table_supports_cascade : Bool
  mut annotate_all_scopes : Bool
  mut array_agg_includes_nulls : Bool?
  mut array_funcs_propagates_nulls : Bool
  mut ascii_only_normalization : Bool
  mut bit_end : String?
  mut bit_start : String?
  mut byte_end : String?
  mut byte_start : String?
  mut byte_strings_support_escaped_sequences : Bool
  mut byte_string_is_bytes_type : Bool
  mut coalesce_comparison_non_standard : Bool
  mut concat_coalesce : Bool
  mut concat_ws_coalesce : Bool
  mut copy_params_are_csv : Bool
  mut creatable_kind_mapping : Map[String, String]
  mut dateint_format : String
  mut date_format : String
  mut date_part_mapping : Map[String, String]
  mut default_functions_column_names : Map[Kind, String]
  mut default_null_type : DType
  mut disables_alias_ref_expansion : Bool
  mut dpipe_is_string_concat : Bool
  mut escaped_sequences : Map[String, String]
  mut excludes_pseudocolumns_from_star : Bool
  mut expand_only_group_alias_ref : Bool
  mut force_early_alias_ref_expansion : Bool
  mut format_mapping : Map[String, String]
  mut has_distinct_array_constructors : Bool
  mut hex_end : String?
  mut hex_lowercase : Bool
  mut hex_start : String?
  mut hex_string_is_integer_type : Bool
  mut identifiers_can_start_with_digit : Bool
  mut identifier_end : String
  mut identifier_start : String
  mut index_offset : Int
  mut initcap_default_delimiter_chars : String
  mut initcap_supports_custom_delimiters : Bool
  mut inverse_creatable_kind_mapping : Map[String, String]
  mut inverse_format_mapping : Map[String, String]
  mut inverse_time_mapping : Map[String, String]
  mut inverse_vector_type_aliases : Map[String, String]
  mut json_extract_scalar_scalar_only : Bool
  mut json_path_single_dot_is_wildcard : Bool
  mut least_greatest_ignores_nulls : Bool
  mut log_base_first : Bool?
  mut normalization_strategy : NormalizationStrategy
  mut normalize_functions : StrOrBool
  mut normalize_not_null : Bool
  mut null_ordering : String
  mut numbers_can_be_underscore_separated : Bool
  mut on_condition_empty_before_error : Bool
  mut prefer_cte_alias_column : Bool
  mut preserve_original_names : Bool
  mut prioritize_non_literal_types : Bool
  mut projection_aliases_shadow_source_names : Bool
  mut promote_to_inferred_datetime_type : Bool
  mut pseudocolumns : @set.Set[String]
  mut query_results_are_structs : Bool
  mut quote_end : String
  mut quote_start : String
  mut regexp_extract_default_group : Int
  mut regexp_extract_position_overflow_returns_null : Bool
  mut requires_parenthesized_struct_access : Bool
  mut safe_division : Bool
  mut safe_to_eliminate_double_negation : Bool
  mut set_op_distinct_by_default : Map[Kind, Bool?]
  mut star_ilike_backslash_escape : Bool
  mut strict_json_path_syntax : Bool
  mut strict_string_concat : Bool
  mut strings_support_escaped_sequences : Bool
  mut supports_alias_refs_in_join_conditions : Bool
  mut supports_column_join_marks : Bool
  mut supports_fixed_size_arrays : Bool
  mut supports_limit_all : Bool
  mut supports_null_type : Bool
  mut supports_order_by_all : Bool
  mut supports_positional_column_refs : Bool
  mut supports_struct_star_expansion : Bool
  mut supports_user_defined_types : Bool
  mut supports_values_default : Bool
  mut tablesample_size_is_percent : Bool
  mut tables_referenceable_as_columns : Bool
  mut time_format : String
  mut time_mapping : Map[String, String]
  mut try_cast_requires_string : Bool?
  mut typed_division : Bool
  mut unescaped_sequences : Map[String, String]
  mut unicode_end : String?
  mut unicode_start : String?
  mut unnest_column_only : Bool
  mut uuid_is_string_type : Bool
  mut valid_interval_units : @set.Set[String]
  mut week_offset : Int
}

///|
pub fn DialectConfig::copy(self : DialectConfig) -> DialectConfig {
  {
    alias_post_tablesample: self.alias_post_tablesample,
    alias_post_version: self.alias_post_version,
    alter_table_add_required_for_each_column: self.alter_table_add_required_for_each_column,
    alter_table_supports_cascade: self.alter_table_supports_cascade,
    annotate_all_scopes: self.annotate_all_scopes,
    array_agg_includes_nulls: self.array_agg_includes_nulls,
    array_funcs_propagates_nulls: self.array_funcs_propagates_nulls,
    ascii_only_normalization: self.ascii_only_normalization,
    bit_end: self.bit_end,
    bit_start: self.bit_start,
    byte_end: self.byte_end,
    byte_start: self.byte_start,
    byte_strings_support_escaped_sequences: self.byte_strings_support_escaped_sequences,
    byte_string_is_bytes_type: self.byte_string_is_bytes_type,
    coalesce_comparison_non_standard: self.coalesce_comparison_non_standard,
    concat_coalesce: self.concat_coalesce,
    concat_ws_coalesce: self.concat_ws_coalesce,
    copy_params_are_csv: self.copy_params_are_csv,
    creatable_kind_mapping: self.creatable_kind_mapping.copy(),
    dateint_format: self.dateint_format,
    date_format: self.date_format,
    date_part_mapping: self.date_part_mapping.copy(),
    default_functions_column_names: self.default_functions_column_names.copy(),
    default_null_type: self.default_null_type,
    disables_alias_ref_expansion: self.disables_alias_ref_expansion,
    dpipe_is_string_concat: self.dpipe_is_string_concat,
    escaped_sequences: self.escaped_sequences.copy(),
    excludes_pseudocolumns_from_star: self.excludes_pseudocolumns_from_star,
    expand_only_group_alias_ref: self.expand_only_group_alias_ref,
    force_early_alias_ref_expansion: self.force_early_alias_ref_expansion,
    format_mapping: self.format_mapping.copy(),
    has_distinct_array_constructors: self.has_distinct_array_constructors,
    hex_end: self.hex_end,
    hex_lowercase: self.hex_lowercase,
    hex_start: self.hex_start,
    hex_string_is_integer_type: self.hex_string_is_integer_type,
    identifiers_can_start_with_digit: self.identifiers_can_start_with_digit,
    identifier_end: self.identifier_end,
    identifier_start: self.identifier_start,
    index_offset: self.index_offset,
    initcap_default_delimiter_chars: self.initcap_default_delimiter_chars,
    initcap_supports_custom_delimiters: self.initcap_supports_custom_delimiters,
    inverse_creatable_kind_mapping: self.inverse_creatable_kind_mapping.copy(),
    inverse_format_mapping: self.inverse_format_mapping.copy(),
    inverse_time_mapping: self.inverse_time_mapping.copy(),
    inverse_vector_type_aliases: self.inverse_vector_type_aliases.copy(),
    json_extract_scalar_scalar_only: self.json_extract_scalar_scalar_only,
    json_path_single_dot_is_wildcard: self.json_path_single_dot_is_wildcard,
    least_greatest_ignores_nulls: self.least_greatest_ignores_nulls,
    log_base_first: self.log_base_first,
    normalization_strategy: self.normalization_strategy,
    normalize_functions: self.normalize_functions,
    normalize_not_null: self.normalize_not_null,
    null_ordering: self.null_ordering,
    numbers_can_be_underscore_separated: self.numbers_can_be_underscore_separated,
    on_condition_empty_before_error: self.on_condition_empty_before_error,
    prefer_cte_alias_column: self.prefer_cte_alias_column,
    preserve_original_names: self.preserve_original_names,
    prioritize_non_literal_types: self.prioritize_non_literal_types,
    projection_aliases_shadow_source_names: self.projection_aliases_shadow_source_names,
    promote_to_inferred_datetime_type: self.promote_to_inferred_datetime_type,
    pseudocolumns: self.pseudocolumns.copy(),
    query_results_are_structs: self.query_results_are_structs,
    quote_end: self.quote_end,
    quote_start: self.quote_start,
    regexp_extract_default_group: self.regexp_extract_default_group,
    regexp_extract_position_overflow_returns_null: self.regexp_extract_position_overflow_returns_null,
    requires_parenthesized_struct_access: self.requires_parenthesized_struct_access,
    safe_division: self.safe_division,
    safe_to_eliminate_double_negation: self.safe_to_eliminate_double_negation,
    set_op_distinct_by_default: self.set_op_distinct_by_default.copy(),
    star_ilike_backslash_escape: self.star_ilike_backslash_escape,
    strict_json_path_syntax: self.strict_json_path_syntax,
    strict_string_concat: self.strict_string_concat,
    strings_support_escaped_sequences: self.strings_support_escaped_sequences,
    supports_alias_refs_in_join_conditions: self.supports_alias_refs_in_join_conditions,
    supports_column_join_marks: self.supports_column_join_marks,
    supports_fixed_size_arrays: self.supports_fixed_size_arrays,
    supports_limit_all: self.supports_limit_all,
    supports_null_type: self.supports_null_type,
    supports_order_by_all: self.supports_order_by_all,
    supports_positional_column_refs: self.supports_positional_column_refs,
    supports_struct_star_expansion: self.supports_struct_star_expansion,
    supports_user_defined_types: self.supports_user_defined_types,
    supports_values_default: self.supports_values_default,
    tablesample_size_is_percent: self.tablesample_size_is_percent,
    tables_referenceable_as_columns: self.tables_referenceable_as_columns,
    time_format: self.time_format,
    time_mapping: self.time_mapping.copy(),
    try_cast_requires_string: self.try_cast_requires_string,
    typed_division: self.typed_division,
    unescaped_sequences: self.unescaped_sequences.copy(),
    unicode_end: self.unicode_end,
    unicode_start: self.unicode_start,
    unnest_column_only: self.unnest_column_only,
    uuid_is_string_type: self.uuid_is_string_type,
    valid_interval_units: self.valid_interval_units.copy(),
    week_offset: self.week_offset,
  }
}

///|
pub fn base_dialect_config() -> DialectConfig {
  {
    alias_post_tablesample: false,
    alias_post_version: true,
    alter_table_add_required_for_each_column: true,
    alter_table_supports_cascade: false,
    annotate_all_scopes: false,
    array_agg_includes_nulls: Some(true),
    array_funcs_propagates_nulls: false,
    ascii_only_normalization: false,
    bit_end: None,
    bit_start: None,
    byte_end: None,
    byte_start: None,
    byte_strings_support_escaped_sequences: false,
    byte_string_is_bytes_type: false,
    coalesce_comparison_non_standard: false,
    concat_coalesce: false,
    concat_ws_coalesce: false,
    copy_params_are_csv: true,
    creatable_kind_mapping: Map([]),
    dateint_format: "'%Y%m%d'",
    date_format: "'%Y-%m-%d'",
    date_part_mapping: Map::from_array([
      ("Y", "YEAR"),
      ("YY", "YEAR"),
      ("YYY", "YEAR"),
      ("YYYY", "YEAR"),
      ("YR", "YEAR"),
      ("YEARS", "YEAR"),
      ("YRS", "YEAR"),
      ("MM", "MONTH"),
      ("MON", "MONTH"),
      ("MONS", "MONTH"),
      ("MONTHS", "MONTH"),
      ("D", "DAY"),
      ("DD", "DAY"),
      ("DAYS", "DAY"),
      ("DAYOFMONTH", "DAY"),
      ("DAY OF WEEK", "DAYOFWEEK"),
      ("WEEKDAY", "DAYOFWEEK"),
      ("DOW", "DAYOFWEEK"),
      ("DW", "DAYOFWEEK"),
      ("WEEKDAY_ISO", "DAYOFWEEKISO"),
      ("DOW_ISO", "DAYOFWEEKISO"),
      ("DW_ISO", "DAYOFWEEKISO"),
      ("DAYOFWEEK_ISO", "DAYOFWEEKISO"),
      ("DAY OF YEAR", "DAYOFYEAR"),
      ("DOY", "DAYOFYEAR"),
      ("DY", "DAYOFYEAR"),
      ("W", "WEEK"),
      ("WK", "WEEK"),
      ("WEEKOFYEAR", "WEEK"),
      ("WOY", "WEEK"),
      ("WY", "WEEK"),
      ("WEEK_ISO", "WEEKISO"),
      ("WEEKOFYEARISO", "WEEKISO"),
      ("WEEKOFYEAR_ISO", "WEEKISO"),
      ("Q", "QUARTER"),
      ("QTR", "QUARTER"),
      ("QTRS", "QUARTER"),
      ("QUARTERS", "QUARTER"),
      ("H", "HOUR"),
      ("HH", "HOUR"),
      ("HR", "HOUR"),
      ("HOURS", "HOUR"),
      ("HRS", "HOUR"),
      ("M", "MINUTE"),
      ("MI", "MINUTE"),
      ("MIN", "MINUTE"),
      ("MINUTES", "MINUTE"),
      ("MINS", "MINUTE"),
      ("S", "SECOND"),
      ("SEC", "SECOND"),
      ("SECONDS", "SECOND"),
      ("SECS", "SECOND"),
      ("MS", "MILLISECOND"),
      ("MSEC", "MILLISECOND"),
      ("MSECS", "MILLISECOND"),
      ("MSECOND", "MILLISECOND"),
      ("MSECONDS", "MILLISECOND"),
      ("MILLISEC", "MILLISECOND"),
      ("MILLISECS", "MILLISECOND"),
      ("MILLISECON", "MILLISECOND"),
      ("MILLISECONDS", "MILLISECOND"),
      ("US", "MICROSECOND"),
      ("USEC", "MICROSECOND"),
      ("USECS", "MICROSECOND"),
      ("MICROSEC", "MICROSECOND"),
      ("MICROSECS", "MICROSECOND"),
      ("USECOND", "MICROSECOND"),
      ("USECONDS", "MICROSECOND"),
      ("MICROSECONDS", "MICROSECOND"),
      ("NS", "NANOSECOND"),
      ("NSEC", "NANOSECOND"),
      ("NANOSEC", "NANOSECOND"),
      ("NSECOND", "NANOSECOND"),
      ("NSECONDS", "NANOSECOND"),
      ("NANOSECS", "NANOSECOND"),
      ("EPOCH_SECOND", "EPOCH"),
      ("EPOCH_SECONDS", "EPOCH"),
      ("EPOCH_MILLISECONDS", "EPOCH_MILLISECOND"),
      ("EPOCH_MICROSECONDS", "EPOCH_MICROSECOND"),
      ("EPOCH_NANOSECONDS", "EPOCH_NANOSECOND"),
      ("TZH", "TIMEZONE_HOUR"),
      ("TZM", "TIMEZONE_MINUTE"),
      ("DEC", "DECADE"),
      ("DECS", "DECADE"),
      ("DECADES", "DECADE"),
      ("MIL", "MILLENNIUM"),
      ("MILS", "MILLENNIUM"),
      ("MILLENIA", "MILLENNIUM"),
      ("C", "CENTURY"),
      ("CENT", "CENTURY"),
      ("CENTS", "CENTURY"),
      ("CENTURIES", "CENTURY"),
    ]),
    default_functions_column_names: Map([]),
    default_null_type: DType::UNKNOWN,
    disables_alias_ref_expansion: false,
    dpipe_is_string_concat: true,
    escaped_sequences: Map([]),
    excludes_pseudocolumns_from_star: false,
    expand_only_group_alias_ref: false,
    force_early_alias_ref_expansion: false,
    format_mapping: Map([]),
    has_distinct_array_constructors: false,
    hex_end: None,
    hex_lowercase: false,
    hex_start: None,
    hex_string_is_integer_type: false,
    identifiers_can_start_with_digit: false,
    identifier_end: "\"",
    identifier_start: "\"",
    index_offset: 0,
    initcap_default_delimiter_chars: " \t\n\r\u{c}\u{b}!\"#$%&'()*+,\\-./:;<=>?@\\[\\]^_`{|}~",
    initcap_supports_custom_delimiters: true,
    inverse_creatable_kind_mapping: Map([]),
    inverse_format_mapping: Map::from_array([
      ("%mstrict", "%m"),
      ("%dstrict", "%d"),
      ("%Hstrict", "%H"),
      ("%Istrict", "%I"),
      ("%Mstrict", "%M"),
      ("%Sstrict", "%S"),
    ]),
    inverse_time_mapping: Map::from_array([
      ("%mstrict", "%m"),
      ("%dstrict", "%d"),
      ("%Hstrict", "%H"),
      ("%Istrict", "%I"),
      ("%Mstrict", "%M"),
      ("%Sstrict", "%S"),
    ]),
    inverse_vector_type_aliases: Map([]),
    json_extract_scalar_scalar_only: false,
    json_path_single_dot_is_wildcard: false,
    least_greatest_ignores_nulls: true,
    log_base_first: Some(true),
    normalization_strategy: NormalizationStrategy::Lowercase,
    normalize_functions: StrOrBool::S("upper"),
    normalize_not_null: true,
    null_ordering: "nulls_are_small",
    numbers_can_be_underscore_separated: false,
    on_condition_empty_before_error: true,
    prefer_cte_alias_column: false,
    preserve_original_names: false,
    prioritize_non_literal_types: false,
    projection_aliases_shadow_source_names: false,
    promote_to_inferred_datetime_type: false,
    pseudocolumns: @set.Set::from_array([]),
    query_results_are_structs: false,
    quote_end: "'",
    quote_start: "'",
    regexp_extract_default_group: 0,
    regexp_extract_position_overflow_returns_null: true,
    requires_parenthesized_struct_access: false,
    safe_division: false,
    safe_to_eliminate_double_negation: true,
    set_op_distinct_by_default: Map::from_array([
      (Kind::Except, Some(true)),
      (Kind::Intersect, Some(true)),
      (Kind::Union, Some(true)),
    ]),
    star_ilike_backslash_escape: false,
    strict_json_path_syntax: true,
    strict_string_concat: false,
    strings_support_escaped_sequences: false,
    supports_alias_refs_in_join_conditions: false,
    supports_column_join_marks: false,
    supports_fixed_size_arrays: false,
    supports_limit_all: false,
    supports_null_type: false,
    supports_order_by_all: false,
    supports_positional_column_refs: false,
    supports_struct_star_expansion: false,
    supports_user_defined_types: true,
    supports_values_default: true,
    tablesample_size_is_percent: false,
    tables_referenceable_as_columns: false,
    time_format: "'%Y-%m-%d %H:%M:%S'",
    time_mapping: Map([]),
    try_cast_requires_string: None,
    typed_division: false,
    unescaped_sequences: Map([]),
    unicode_end: None,
    unicode_start: None,
    unnest_column_only: false,
    uuid_is_string_type: false,
    valid_interval_units: @set.Set::from_array([
      "C", "CENT", "CENTS", "CENTURIES", "CENTURY", "D", "DAY", "DAY OF WEEK", "DAY OF YEAR",
      "DAYOFMONTH", "DAYOFWEEK", "DAYOFWEEKISO", "DAYOFWEEK_ISO", "DAYOFYEAR", "DAYS",
      "DD", "DEC", "DECADE", "DECADES", "DECS", "DOW", "DOW_ISO", "DOY", "DW", "DW_ISO",
      "DY", "EPOCH", "EPOCH_MICROSECOND", "EPOCH_MICROSECONDS", "EPOCH_MILLISECOND",
      "EPOCH_MILLISECONDS", "EPOCH_NANOSECOND", "EPOCH_NANOSECONDS", "EPOCH_SECOND",
      "EPOCH_SECONDS", "H", "HH", "HOUR", "HOURS", "HR", "HRS", "M", "MI", "MICROSEC",
      "MICROSECOND", "MICROSECONDS", "MICROSECS", "MIL", "MILLENIA", "MILLENNIUM",
      "MILLISEC", "MILLISECON", "MILLISECOND", "MILLISECONDS", "MILLISECS", "MILS",
      "MIN", "MINS", "MINUTE", "MINUTES", "MM", "MON", "MONS", "MONTH", "MONTHS",
      "MS", "MSEC", "MSECOND", "MSECONDS", "MSECS", "NANOSEC", "NANOSECOND", "NANOSECS",
      "NS", "NSEC", "NSECOND", "NSECONDS", "Q", "QTR", "QTRS", "QUARTER", "QUARTERS",
      "S", "SEC", "SECOND", "SECONDS", "SECS", "TIMEZONE_HOUR", "TIMEZONE_MINUTE",
      "TZH", "TZM", "US", "USEC", "USECOND", "USECONDS", "USECS", "W", "WEEK", "WEEKDAY",
      "WEEKDAY_ISO", "WEEKISO", "WEEKOFYEAR", "WEEKOFYEARISO", "WEEKOFYEAR_ISO",
      "WEEK_ISO", "WK", "WOY", "WY", "Y", "YEAR", "YEARS", "YR", "YRS", "YY", "YYY",
      "YYYY",
    ]),
    week_offset: 0,
  }
}

///|
/// Data attributes of the Python `Parser` class.
pub(all) struct ParserConfig {
  mut add_constraint_tokens : TokenSet
  mut add_join_on_true : Bool
  mut adjacent_strings_cannot_be_connected : Bool
  mut aggregate_type_tokens : TokenSet
  mut alias_tokens : TokenSet
  mut alterables : TokenSet
  mut alter_rename_requires_column : Bool
  mut alter_table_partitions : Bool
  mut ambiguous_alias_tokens : Array[TokenType]
  mut analyze_styles : @set.Set[String]
  mut array_constructors : Map[String, Kind]
  mut assignment : Map[TokenType, Kind]
  mut bitwise : Map[TokenType, Kind]
  mut brackets : TokenSet
  mut cast_actions : Map[String, Array[Array[String]]]
  mut cast_column_operators : TokenSet
  mut clone_keywords : @set.Set[String]
  mut colon_chain_is_single_extract : Bool
  mut colon_is_variant_extract : Bool
  mut colon_placeholder_tokens : TokenSet
  mut column_postfix_tokens : TokenSet
  mut comment_table_alias_tokens : TokenSet
  mut comparison : Map[TokenType, Kind]
  mut conflict_actions : Map[String, Array[Array[String]]]
  mut conjunction : Map[TokenType, Kind]
  mut copy_into_varlen_options : @set.Set[String]
  mut creatables : TokenSet
  mut create_sequence : Map[String, Array[Array[String]]]
  mut db_creatables : TokenSet
  mut ddl_select_tokens : TokenSet
  mut default_sampling_method : String?
  mut describe_styles : @set.Set[String]
  mut disjunction : Map[TokenType, Kind]
  mut distinct_tokens : TokenSet
  mut enum_type_tokens : TokenSet
  mut equality : Map[TokenType, Kind]
  mut execute_as_options : Map[String, Array[Array[String]]]
  mut exponent : Map[TokenType, Kind]
  mut factor : Map[TokenType, Kind]
  mut fetch_tokens : TokenSet
  mut functions_with_aliased_args : @set.Set[String]
  mut func_tokens : TokenSet
  mut historical_data_kind : @set.Set[String]
  mut historical_data_prefix : @set.Set[String]
  mut identifier_tokens : TokenSet
  mut identify_pivot_strings : Bool
  mut id_var_tokens : TokenSet
  mut insert_alternatives : @set.Set[String]
  mut interval_spans : Bool
  mut invalid_func_name_tokens : TokenSet
  mut isolated_loading_options : Map[String, Array[Array[String]]]
  mut is_json_predicate_kind : @set.Set[String]
  mut joins_have_equal_precedence : Bool
  mut join_hints : @set.Set[String]
  mut join_kinds : TokenSet
  mut join_methods : TokenSet
  mut join_sides : TokenSet
  mut json_arrows_require_json_type : Bool
  mut json_extract_requires_json_expression : Bool
  mut json_key_value_separator_tokens : TokenSet
  mut key_constraint_options : Map[String, Array[Array[String]]]
  mut key_value_definitions : Array[Kind]
  mut lambda_arg_terminators : TokenSet
  mut log_defaults_to_ln : Bool
  mut map_keys_are_arbitrary_expressions : Bool
  mut modifiables : Array[Kind]
  mut modifiers_attached_to_set_op : Bool
  mut nested_type_tokens : TokenSet
  mut no_paren_functions : Map[TokenType, Kind]
  mut no_paren_if_commands : Bool
  mut odbc_datetime_literals : Map[String, Kind]
  mut on_condition_tokens : @set.Set[String]
  mut opclass_follow_keywords : @set.Set[String]
  mut operation_modifiers : @set.Set[String]
  mut optional_alias_token_cte : Bool
  mut optype_follow_tokens : TokenSet
  mut partition_keywords : @set.Set[String]
  mut pivot_column_naming : String
  mut prefixed_pivot_columns : Bool
  mut pre_volatile_tokens : TokenSet
  mut privilege_follow_tokens : TokenSet
  mut procedure_options : Map[String, Array[Array[String]]]
  mut query_modifier_tokens : TokenSet
  mut quoted_types_to_preserve : @set.Set[String]
  mut recursive_cte_search_kind : @set.Set[String]
  mut reserved_tokens : TokenSet
  mut schema_binding_options : Map[String, Array[Array[String]]]
  mut schema_unnamed_constraints : @set.Set[String]
  mut security_property_keywords : @set.Set[String]
  mut select_start_tokens : TokenSet
  mut set_assignment_delimiters : @set.Set[String]
  mut set_operations : TokenSet
  mut set_op_modifiers : @set.Set[String]
  mut set_requires_assignment_delimiter : Bool
  mut signed_to_unsigned_type_token : Map[TokenType, TokenType]
  mut strict_cast : Bool
  mut string_aliases : Bool
  mut struct_type_tokens : TokenSet
  mut subquery_predicates : Map[TokenType, Kind]
  mut subquery_tokens : TokenSet
  mut supports_digit_prefixed_field_names : Bool
  mut supports_implicit_unnest : Bool
  mut supports_nth_value_from_modifier : Bool
  mut supports_omitted_interval_span_unit : Bool
  mut supports_partition_selection : Bool
  mut tablesample_csv : Bool
  mut table_alias_tokens : TokenSet
  mut table_index_hint_tokens : TokenSet
  mut table_postfix_tokens : TokenSet
  mut table_terminators : TokenSet
  mut term : Map[TokenType, Kind]
  mut text_match_excluded_tokens : TokenSet
  mut times : TokenSet
  mut timestamps : TokenSet
  mut transaction_characteristics : Map[String, Array[Array[String]]]
  mut transaction_kind : @set.Set[String]
  mut trigger_deferrable : Map[String, Array[Array[String]]]
  mut trigger_events : TokenSet
  mut trigger_timing : Map[String, Array[Array[String]]]
  mut trim_pattern_first : Bool
  mut trim_types : @set.Set[String]
  mut typed_lambda_args : Bool
  mut type_tokens : TokenSet
  mut unnest_offset_alias_tokens : TokenSet
  mut unpivot_value_columns_first : Bool
  mut update_alias_tokens : TokenSet
  mut usables : Map[String, Array[Array[String]]]
  mut values_followed_by_paren : Bool
  mut version_phrases : Array[(Array[String], String)]
  mut view_attributes : @set.Set[String]
  mut window_alias_tokens : TokenSet
  mut window_before_paren_tokens : TokenSet
  mut window_exclude_options : Map[String, Array[Array[String]]]
  mut window_sides : @set.Set[String]
  mut wrapped_transform_column_constraint : Bool
  mut zone_aware_timestamp_constructor : Bool
}

///|
pub fn ParserConfig::copy(self : ParserConfig) -> ParserConfig {
  {
    add_constraint_tokens: self.add_constraint_tokens.copy(),
    add_join_on_true: self.add_join_on_true,
    adjacent_strings_cannot_be_connected: self.adjacent_strings_cannot_be_connected,
    aggregate_type_tokens: self.aggregate_type_tokens.copy(),
    alias_tokens: self.alias_tokens.copy(),
    alterables: self.alterables.copy(),
    alter_rename_requires_column: self.alter_rename_requires_column,
    alter_table_partitions: self.alter_table_partitions,
    ambiguous_alias_tokens: self.ambiguous_alias_tokens.copy(),
    analyze_styles: self.analyze_styles.copy(),
    array_constructors: self.array_constructors.copy(),
    assignment: self.assignment.copy(),
    bitwise: self.bitwise.copy(),
    brackets: self.brackets.copy(),
    cast_actions: self.cast_actions.copy(),
    cast_column_operators: self.cast_column_operators.copy(),
    clone_keywords: self.clone_keywords.copy(),
    colon_chain_is_single_extract: self.colon_chain_is_single_extract,
    colon_is_variant_extract: self.colon_is_variant_extract,
    colon_placeholder_tokens: self.colon_placeholder_tokens.copy(),
    column_postfix_tokens: self.column_postfix_tokens.copy(),
    comment_table_alias_tokens: self.comment_table_alias_tokens.copy(),
    comparison: self.comparison.copy(),
    conflict_actions: self.conflict_actions.copy(),
    conjunction: self.conjunction.copy(),
    copy_into_varlen_options: self.copy_into_varlen_options.copy(),
    creatables: self.creatables.copy(),
    create_sequence: self.create_sequence.copy(),
    db_creatables: self.db_creatables.copy(),
    ddl_select_tokens: self.ddl_select_tokens.copy(),
    default_sampling_method: self.default_sampling_method,
    describe_styles: self.describe_styles.copy(),
    disjunction: self.disjunction.copy(),
    distinct_tokens: self.distinct_tokens.copy(),
    enum_type_tokens: self.enum_type_tokens.copy(),
    equality: self.equality.copy(),
    execute_as_options: self.execute_as_options.copy(),
    exponent: self.exponent.copy(),
    factor: self.factor.copy(),
    fetch_tokens: self.fetch_tokens.copy(),
    functions_with_aliased_args: self.functions_with_aliased_args.copy(),
    func_tokens: self.func_tokens.copy(),
    historical_data_kind: self.historical_data_kind.copy(),
    historical_data_prefix: self.historical_data_prefix.copy(),
    identifier_tokens: self.identifier_tokens.copy(),
    identify_pivot_strings: self.identify_pivot_strings,
    id_var_tokens: self.id_var_tokens.copy(),
    insert_alternatives: self.insert_alternatives.copy(),
    interval_spans: self.interval_spans,
    invalid_func_name_tokens: self.invalid_func_name_tokens.copy(),
    isolated_loading_options: self.isolated_loading_options.copy(),
    is_json_predicate_kind: self.is_json_predicate_kind.copy(),
    joins_have_equal_precedence: self.joins_have_equal_precedence,
    join_hints: self.join_hints.copy(),
    join_kinds: self.join_kinds.copy(),
    join_methods: self.join_methods.copy(),
    join_sides: self.join_sides.copy(),
    json_arrows_require_json_type: self.json_arrows_require_json_type,
    json_extract_requires_json_expression: self.json_extract_requires_json_expression,
    json_key_value_separator_tokens: self.json_key_value_separator_tokens.copy(),
    key_constraint_options: self.key_constraint_options.copy(),
    key_value_definitions: self.key_value_definitions.copy(),
    lambda_arg_terminators: self.lambda_arg_terminators.copy(),
    log_defaults_to_ln: self.log_defaults_to_ln,
    map_keys_are_arbitrary_expressions: self.map_keys_are_arbitrary_expressions,
    modifiables: self.modifiables.copy(),
    modifiers_attached_to_set_op: self.modifiers_attached_to_set_op,
    nested_type_tokens: self.nested_type_tokens.copy(),
    no_paren_functions: self.no_paren_functions.copy(),
    no_paren_if_commands: self.no_paren_if_commands,
    odbc_datetime_literals: self.odbc_datetime_literals.copy(),
    on_condition_tokens: self.on_condition_tokens.copy(),
    opclass_follow_keywords: self.opclass_follow_keywords.copy(),
    operation_modifiers: self.operation_modifiers.copy(),
    optional_alias_token_cte: self.optional_alias_token_cte,
    optype_follow_tokens: self.optype_follow_tokens.copy(),
    partition_keywords: self.partition_keywords.copy(),
    pivot_column_naming: self.pivot_column_naming,
    prefixed_pivot_columns: self.prefixed_pivot_columns,
    pre_volatile_tokens: self.pre_volatile_tokens.copy(),
    privilege_follow_tokens: self.privilege_follow_tokens.copy(),
    procedure_options: self.procedure_options.copy(),
    query_modifier_tokens: self.query_modifier_tokens.copy(),
    quoted_types_to_preserve: self.quoted_types_to_preserve.copy(),
    recursive_cte_search_kind: self.recursive_cte_search_kind.copy(),
    reserved_tokens: self.reserved_tokens.copy(),
    schema_binding_options: self.schema_binding_options.copy(),
    schema_unnamed_constraints: self.schema_unnamed_constraints.copy(),
    security_property_keywords: self.security_property_keywords.copy(),
    select_start_tokens: self.select_start_tokens.copy(),
    set_assignment_delimiters: self.set_assignment_delimiters.copy(),
    set_operations: self.set_operations.copy(),
    set_op_modifiers: self.set_op_modifiers.copy(),
    set_requires_assignment_delimiter: self.set_requires_assignment_delimiter,
    signed_to_unsigned_type_token: self.signed_to_unsigned_type_token.copy(),
    strict_cast: self.strict_cast,
    string_aliases: self.string_aliases,
    struct_type_tokens: self.struct_type_tokens.copy(),
    subquery_predicates: self.subquery_predicates.copy(),
    subquery_tokens: self.subquery_tokens.copy(),
    supports_digit_prefixed_field_names: self.supports_digit_prefixed_field_names,
    supports_implicit_unnest: self.supports_implicit_unnest,
    supports_nth_value_from_modifier: self.supports_nth_value_from_modifier,
    supports_omitted_interval_span_unit: self.supports_omitted_interval_span_unit,
    supports_partition_selection: self.supports_partition_selection,
    tablesample_csv: self.tablesample_csv,
    table_alias_tokens: self.table_alias_tokens.copy(),
    table_index_hint_tokens: self.table_index_hint_tokens.copy(),
    table_postfix_tokens: self.table_postfix_tokens.copy(),
    table_terminators: self.table_terminators.copy(),
    term: self.term.copy(),
    text_match_excluded_tokens: self.text_match_excluded_tokens.copy(),
    times: self.times.copy(),
    timestamps: self.timestamps.copy(),
    transaction_characteristics: self.transaction_characteristics.copy(),
    transaction_kind: self.transaction_kind.copy(),
    trigger_deferrable: self.trigger_deferrable.copy(),
    trigger_events: self.trigger_events.copy(),
    trigger_timing: self.trigger_timing.copy(),
    trim_pattern_first: self.trim_pattern_first,
    trim_types: self.trim_types.copy(),
    typed_lambda_args: self.typed_lambda_args,
    type_tokens: self.type_tokens.copy(),
    unnest_offset_alias_tokens: self.unnest_offset_alias_tokens.copy(),
    unpivot_value_columns_first: self.unpivot_value_columns_first,
    update_alias_tokens: self.update_alias_tokens.copy(),
    usables: self.usables.copy(),
    values_followed_by_paren: self.values_followed_by_paren,
    version_phrases: self.version_phrases.copy(),
    view_attributes: self.view_attributes.copy(),
    window_alias_tokens: self.window_alias_tokens.copy(),
    window_before_paren_tokens: self.window_before_paren_tokens.copy(),
    window_exclude_options: self.window_exclude_options.copy(),
    window_sides: self.window_sides.copy(),
    wrapped_transform_column_constraint: self.wrapped_transform_column_constraint,
    zone_aware_timestamp_constructor: self.zone_aware_timestamp_constructor,
  }
}

///|
pub fn base_parser_config() -> ParserConfig {
  {
    add_constraint_tokens: TokenSet::new([
      TokenType::CONSTRAINT,
      TokenType::FOREIGN_KEY,
      TokenType::INDEX,
      TokenType::KEY,
      TokenType::PRIMARY_KEY,
      TokenType::UNIQUE,
    ]),
    add_join_on_true: false,
    adjacent_strings_cannot_be_connected: false,
    aggregate_type_tokens: TokenSet::new([
      TokenType::AGGREGATEFUNCTION,
      TokenType::SIMPLEAGGREGATEFUNCTION,
    ]),
    alias_tokens: TokenSet::new([
      TokenType::AGGREGATEFUNCTION,
      TokenType::ALL,
      TokenType::ANALYZE,
      TokenType::ANTI,
      TokenType::ANY,
      TokenType::APPLY,
      TokenType::ARRAY,
      TokenType::ASC,
      TokenType::ASOF,
      TokenType::ATTACH,
      TokenType::AUTO_INCREMENT,
      TokenType::BEGIN,
      TokenType::BIGDECIMAL,
      TokenType::BIGINT,
      TokenType::BIGNUM,
      TokenType::BIGSERIAL,
      TokenType::BINARY,
      TokenType::BIT,
      TokenType::BLOB,
      TokenType::BOOLEAN,
      TokenType::BPCHAR,
      TokenType::CACHE,
      TokenType::CASE,
      TokenType::CHAR,
      TokenType::COLLATE,
      TokenType::COLUMN,
      TokenType::COMMAND,
      TokenType::COMMENT,
      TokenType::COMMIT,
      TokenType::CONSTRAINT,
      TokenType::COPY,
      TokenType::CUBE,
      TokenType::CURRENT_CATALOG,
      TokenType::CURRENT_DATE,
      TokenType::CURRENT_DATETIME,
      TokenType::CURRENT_ROLE,
      TokenType::CURRENT_SCHEMA,
      TokenType::CURRENT_TIME,
      TokenType::CURRENT_TIMESTAMP,
      TokenType::CURRENT_USER,
      TokenType::DATABASE,
      TokenType::DATE,
      TokenType::DATE32,
      TokenType::DATEMULTIRANGE,
      TokenType::DATERANGE,
      TokenType::DATETIME,
      TokenType::DATETIME2,
      TokenType::DATETIME64,
      TokenType::DECFLOAT,
      TokenType::DECIMAL,
      TokenType::DECIMAL128,
      TokenType::DECIMAL256,
      TokenType::DECIMAL32,
      TokenType::DECIMAL64,
      TokenType::DECLARE,
      TokenType::DEFAULT,
      TokenType::DELETE,
      TokenType::DESC,
      TokenType::DESCRIBE,
      TokenType::DETACH,
      TokenType::DICTIONARY,
      TokenType::DIV,
      TokenType::DOUBLE,
      TokenType::DYNAMIC,
      TokenType::END,
      TokenType::ENUM,
      TokenType::ENUM16,
      TokenType::ENUM8,
      TokenType::ESCAPE,
      TokenType::EXECUTE,
      TokenType::EXISTS,
      TokenType::EXPORT,
      TokenType::FALSE,
      TokenType::FILE,
      TokenType::FILE_FORMAT,
      TokenType::FILTER,
      TokenType::FINAL,
      TokenType::FIRST,
      TokenType::FIXEDSTRING,
      TokenType::FLOAT,
      TokenType::FOREIGN_KEY,
      TokenType::FORMAT,
      TokenType::FULL,
      TokenType::FUNCTION,
      TokenType::GEOGRAPHY,
      TokenType::GEOGRAPHYPOINT,
      TokenType::GEOMETRY,
      TokenType::GET,
      TokenType::HLLSKETCH,
      TokenType::HSTORE,
      TokenType::IDENTIFIER,
      TokenType::IMAGE,
      TokenType::INDEX,
      TokenType::INET,
      TokenType::INOUT,
      TokenType::INT,
      TokenType::INT128,
      TokenType::INT256,
      TokenType::INT4MULTIRANGE,
      TokenType::INT4RANGE,
      TokenType::INT8MULTIRANGE,
      TokenType::INT8RANGE,
      TokenType::INTERVAL,
      TokenType::IPADDRESS,
      TokenType::IPPREFIX,
      TokenType::IPV4,
      TokenType::IPV6,
      TokenType::IS,
      TokenType::ISNULL,
      TokenType::JSON,
      TokenType::JSONB,
      TokenType::KEEP,
      TokenType::KILL,
      TokenType::LEFT,
      TokenType::LIMIT,
      TokenType::LINESTRING,
      TokenType::LIST,
      TokenType::LOAD,
      TokenType::LOCALTIME,
      TokenType::LOCALTIMESTAMP,
      TokenType::LOCK,
      TokenType::LONGBLOB,
      TokenType::LONGTEXT,
      TokenType::LOWCARDINALITY,
      TokenType::MAP,
      TokenType::MATCH,
      TokenType::MEDIUMBLOB,
      TokenType::MEDIUMINT,
      TokenType::MEDIUMTEXT,
      TokenType::MERGE,
      TokenType::MODEL,
      TokenType::MONEY,
      TokenType::MULTILINESTRING,
      TokenType::MULTIPOLYGON,
      TokenType::NAME,
      TokenType::NAMESPACE,
      TokenType::NATURAL,
      TokenType::NCHAR,
      TokenType::NESTED,
      TokenType::NEXT,
      TokenType::NOTHING,
      TokenType::NULL,
      TokenType::NULLABLE,
      TokenType::NUMMULTIRANGE,
      TokenType::NUMRANGE,
      TokenType::NVARCHAR,
      TokenType::OBJECT,
      TokenType::OBJECT_IDENTIFIER,
      TokenType::OFFSET,
      TokenType::OPERATOR,
      TokenType::ORDINALITY,
      TokenType::OUT,
      TokenType::OVER,
      TokenType::OVERLAPS,
      TokenType::OVERWRITE,
      TokenType::PARTITION,
      TokenType::PERCENT,
      TokenType::PIVOT,
      TokenType::POINT,
      TokenType::POLYGON,
      TokenType::PRAGMA,
      TokenType::PROCEDURE,
      TokenType::PROJECTION,
      TokenType::PSEUDO_TYPE,
      TokenType::PUT,
      TokenType::RANGE,
      TokenType::RECURSIVE,
      TokenType::REFERENCES,
      TokenType::REFRESH,
      TokenType::RENAME,
      TokenType::REPLACE,
      TokenType::RIGHT,
      TokenType::RING,
      TokenType::ROLLUP,
      TokenType::ROW,
      TokenType::ROWS,
      TokenType::ROWVERSION,
      TokenType::SCHEMA,
      TokenType::SEMANTIC_VIEW,
      TokenType::SEMI,
      TokenType::SEQUENCE,
      TokenType::SERIAL,
      TokenType::SESSION,
      TokenType::SESSION_USER,
      TokenType::SET,
      TokenType::SETTINGS,
      TokenType::SHOW,
      TokenType::SIMPLEAGGREGATEFUNCTION,
      TokenType::SINK,
      TokenType::SMALLDATETIME,
      TokenType::SMALLINT,
      TokenType::SMALLMONEY,
      TokenType::SMALLSERIAL,
      TokenType::SOME,
      TokenType::SOURCE,
      TokenType::STAGE,
      TokenType::STORAGE_INTEGRATION,
      TokenType::STRAIGHT_JOIN,
      TokenType::STREAM,
      TokenType::STREAMLIT,
      TokenType::STRUCT,
      TokenType::SUPER,
      TokenType::TABLE,
      TokenType::TAG,
      TokenType::TDIGEST,
      TokenType::TEMPORARY,
      TokenType::TEXT,
      TokenType::TIME,
      TokenType::TIMESTAMP,
      TokenType::TIMESTAMPLTZ,
      TokenType::TIMESTAMPNTZ,
      TokenType::TIMESTAMPTZ,
      TokenType::TIMESTAMP_MS,
      TokenType::TIMESTAMP_NS,
      TokenType::TIMESTAMP_S,
      TokenType::TIMETZ,
      TokenType::TIME_NS,
      TokenType::TINYBLOB,
      TokenType::TINYINT,
      TokenType::TINYTEXT,
      TokenType::TOP,
      TokenType::TRIGGER,
      TokenType::TRUE,
      TokenType::TRUNCATE,
      TokenType::TSMULTIRANGE,
      TokenType::TSRANGE,
      TokenType::TSTZMULTIRANGE,
      TokenType::TSTZRANGE,
      TokenType::TYPE,
      TokenType::UBIGINT,
      TokenType::UDECIMAL,
      TokenType::UDOUBLE,
      TokenType::UINT,
      TokenType::UINT128,
      TokenType::UINT256,
      TokenType::UMEDIUMINT,
      TokenType::UNIQUE,
      TokenType::UNKNOWN,
      TokenType::UNNEST,
      TokenType::UNPIVOT,
      TokenType::UPDATE,
      TokenType::USE,
      TokenType::USERDEFINED,
      TokenType::USMALLINT,
      TokenType::UTINYINT,
      TokenType::UUID,
      TokenType::VAR,
      TokenType::VARBINARY,
      TokenType::VARCHAR,
      TokenType::VARIANT,
      TokenType::VECTOR,
      TokenType::VIEW,
      TokenType::VOID,
      TokenType::VOLATILE,
      TokenType::WAREHOUSE,
      TokenType::WINDOW,
      TokenType::XML,
      TokenType::YEAR,
    ]),
    alterables: TokenSet::new([
      TokenType::INDEX,
      TokenType::SESSION,
      TokenType::TABLE,
      TokenType::VIEW,
    ]),
    alter_rename_requires_column: true,
    alter_table_partitions: false,
    ambiguous_alias_tokens: [TokenType::LIMIT, TokenType::OFFSET],
    analyze_styles: @set.Set::from_array([
      "BUFFER_USAGE_LIMIT", "FULL", "LOCAL", "NO_WRITE_TO_BINLOG", "SAMPLE", "SKIP_LOCKED",
      "VERBOSE",
    ]),
    array_constructors: Map::from_array([
      ("ARRAY", Kind::Array),
      ("LIST", Kind::List),
    ]),
    assignment: Map::from_array([(TokenType::COLON_EQ, Kind::PropertyEQ)]),
    bitwise: Map::from_array([
      (TokenType::AMP, Kind::BitwiseAnd),
      (TokenType::CARET, Kind::BitwiseXor),
      (TokenType::PIPE, Kind::BitwiseOr),
    ]),
    brackets: TokenSet::new([TokenType::L_BRACE, TokenType::L_BRACKET]),
    cast_actions: Map::from_array([
      ("RENAME", [["FIELDS"]]),
      ("ADD", [["FIELDS"]]),
    ]),
    cast_column_operators: TokenSet::new([
      TokenType::DCOLON,
      TokenType::DOTCOLON,
    ]),
    clone_keywords: @set.Set::from_array(["CLONE", "COPY"]),
    colon_chain_is_single_extract: true,
    colon_is_variant_extract: false,
    colon_placeholder_tokens: TokenSet::new([
      TokenType::AGGREGATEFUNCTION,
      TokenType::ALL,
      TokenType::ANALYZE,
      TokenType::ANTI,
      TokenType::ANY,
      TokenType::APPLY,
      TokenType::ARRAY,
      TokenType::ASC,
      TokenType::ASOF,
      TokenType::ATTACH,
      TokenType::AUTO_INCREMENT,
      TokenType::BEGIN,
      TokenType::BIGDECIMAL,
      TokenType::BIGINT,
      TokenType::BIGNUM,
      TokenType::BIGSERIAL,
      TokenType::BINARY,
      TokenType::BIT,
      TokenType::BLOB,
      TokenType::BOOLEAN,
      TokenType::BPCHAR,
      TokenType::CACHE,
      TokenType::CASE,
      TokenType::CHAR,
      TokenType::COLLATE,
      TokenType::COLUMN,
      TokenType::COMMAND,
      TokenType::COMMENT,
      TokenType::COMMIT,
      TokenType::CONSTRAINT,
      TokenType::COPY,
      TokenType::CUBE,
      TokenType::CURRENT_CATALOG,
      TokenType::CURRENT_DATE,
      TokenType::CURRENT_DATETIME,
      TokenType::CURRENT_ROLE,
      TokenType::CURRENT_SCHEMA,
      TokenType::CURRENT_TIME,
      TokenType::CURRENT_TIMESTAMP,
      TokenType::CURRENT_USER,
      TokenType::DATABASE,
      TokenType::DATE,
      TokenType::DATE32,
      TokenType::DATEMULTIRANGE,
      TokenType::DATERANGE,
      TokenType::DATETIME,
      TokenType::DATETIME2,
      TokenType::DATETIME64,
      TokenType::DECFLOAT,
      TokenType::DECIMAL,
      TokenType::DECIMAL128,
      TokenType::DECIMAL256,
      TokenType::DECIMAL32,
      TokenType::DECIMAL64,
      TokenType::DECLARE,
      TokenType::DEFAULT,
      TokenType::DELETE,
      TokenType::DESC,
      TokenType::DESCRIBE,
      TokenType::DETACH,
      TokenType::DICTIONARY,
      TokenType::DIV,
      TokenType::DOUBLE,
      TokenType::DYNAMIC,
      TokenType::END,
      TokenType::ENUM,
      TokenType::ENUM16,
      TokenType::ENUM8,
      TokenType::ESCAPE,
      TokenType::EXECUTE,
      TokenType::EXISTS,
      TokenType::EXPORT,
      TokenType::FALSE,
      TokenType::FILE,
      TokenType::FILE_FORMAT,
      TokenType::FILTER,
      TokenType::FINAL,
      TokenType::FIRST,
      TokenType::FIXEDSTRING,
      TokenType::FLOAT,
      TokenType::FOREIGN_KEY,
      TokenType::FORMAT,
      TokenType::FULL,
      TokenType::FUNCTION,
      TokenType::GEOGRAPHY,
      TokenType::GEOGRAPHYPOINT,
      TokenType::GEOMETRY,
      TokenType::GET,
      TokenType::HLLSKETCH,
      TokenType::HSTORE,
      TokenType::IDENTIFIER,
      TokenType::IMAGE,
      TokenType::INDEX,
      TokenType::INET,
      TokenType::INOUT,
      TokenType::INT,
      TokenType::INT128,
      TokenType::INT256,
      TokenType::INT4MULTIRANGE,
      TokenType::INT4RANGE,
      TokenType::INT8MULTIRANGE,
      TokenType::INT8RANGE,
      TokenType::INTERVAL,
      TokenType::IPADDRESS,
      TokenType::IPPREFIX,
      TokenType::IPV4,
      TokenType::IPV6,
      TokenType::IS,
      TokenType::ISNULL,
      TokenType::JSON,
      TokenType::JSONB,
      TokenType::KEEP,
      TokenType::KILL,
      TokenType::LEFT,
      TokenType::LIMIT,
      TokenType::LINESTRING,
      TokenType::LIST,
      TokenType::LOAD,
      TokenType::LOCALTIME,
      TokenType::LOCALTIMESTAMP,
      TokenType::LOCK,
      TokenType::LONGBLOB,
      TokenType::LONGTEXT,
      TokenType::LOWCARDINALITY,
      TokenType::MAP,
      TokenType::MATCH,
      TokenType::MEDIUMBLOB,
      TokenType::MEDIUMINT,
      TokenType::MEDIUMTEXT,
      TokenType::MERGE,
      TokenType::MODEL,
      TokenType::MONEY,
      TokenType::MULTILINESTRING,
      TokenType::MULTIPOLYGON,
      TokenType::NAME,
      TokenType::NAMESPACE,
      TokenType::NATURAL,
      TokenType::NCHAR,
      TokenType::NESTED,
      TokenType::NEXT,
      TokenType::NOTHING,
      TokenType::NULL,
      TokenType::NULLABLE,
      TokenType::NUMMULTIRANGE,
      TokenType::NUMRANGE,
      TokenType::NVARCHAR,
      TokenType::OBJECT,
      TokenType::OBJECT_IDENTIFIER,
      TokenType::OFFSET,
      TokenType::OPERATOR,
      TokenType::ORDINALITY,
      TokenType::OUT,
      TokenType::OVER,
      TokenType::OVERLAPS,
      TokenType::OVERWRITE,
      TokenType::PARTITION,
      TokenType::PERCENT,
      TokenType::PIVOT,
      TokenType::POINT,
      TokenType::POLYGON,
      TokenType::PRAGMA,
      TokenType::PROCEDURE,
      TokenType::PROJECTION,
      TokenType::PSEUDO_TYPE,
      TokenType::PUT,
      TokenType::RANGE,
      TokenType::RECURSIVE,
      TokenType::REFERENCES,
      TokenType::REFRESH,
      TokenType::RENAME,
      TokenType::REPLACE,
      TokenType::RIGHT,
      TokenType::RING,
      TokenType::ROLLUP,
      TokenType::ROW,
      TokenType::ROWS,
      TokenType::ROWVERSION,
      TokenType::SCHEMA,
      TokenType::SEMANTIC_VIEW,
      TokenType::SEMI,
      TokenType::SEQUENCE,
      TokenType::SERIAL,
      TokenType::SESSION,
      TokenType::SESSION_USER,
      TokenType::SET,
      TokenType::SETTINGS,
      TokenType::SHOW,
      TokenType::SIMPLEAGGREGATEFUNCTION,
      TokenType::SINK,
      TokenType::SMALLDATETIME,
      TokenType::SMALLINT,
      TokenType::SMALLMONEY,
      TokenType::SMALLSERIAL,
      TokenType::SOME,
      TokenType::SOURCE,
      TokenType::STAGE,
      TokenType::STORAGE_INTEGRATION,
      TokenType::STRAIGHT_JOIN,
      TokenType::STREAM,
      TokenType::STREAMLIT,
      TokenType::STRUCT,
      TokenType::SUPER,
      TokenType::TABLE,
      TokenType::TAG,
      TokenType::TDIGEST,
      TokenType::TEMPORARY,
      TokenType::TEXT,
      TokenType::TIME,
      TokenType::TIMESTAMP,
      TokenType::TIMESTAMPLTZ,
      TokenType::TIMESTAMPNTZ,
      TokenType::TIMESTAMPTZ,
      TokenType::TIMESTAMP_MS,
      TokenType::TIMESTAMP_NS,
      TokenType::TIMESTAMP_S,
      TokenType::TIMETZ,
      TokenType::TIME_NS,
      TokenType::TINYBLOB,
      TokenType::TINYINT,
      TokenType::TINYTEXT,
      TokenType::TOP,
      TokenType::TRIGGER,
      TokenType::TRUE,
      TokenType::TRUNCATE,
      TokenType::TSMULTIRANGE,
      TokenType::TSRANGE,
      TokenType::TSTZMULTIRANGE,
      TokenType::TSTZRANGE,
      TokenType::TYPE,
      TokenType::UBIGINT,
      TokenType::UDECIMAL,
      TokenType::UDOUBLE,
      TokenType::UINT,
      TokenType::UINT128,
      TokenType::UINT256,
      TokenType::UMEDIUMINT,
      TokenType::UNIQUE,
      TokenType::UNKNOWN,
      TokenType::UNNEST,
      TokenType::UNPIVOT,
      TokenType::UPDATE,
      TokenType::USE,
      TokenType::USERDEFINED,
      TokenType::USMALLINT,
      TokenType::UTINYINT,
      TokenType::UUID,
      TokenType::VAR,
      TokenType::VARBINARY,
      TokenType::VARCHAR,
      TokenType::VARIANT,
      TokenType::VECTOR,
      TokenType::VIEW,
      TokenType::VOID,
      TokenType::VOLATILE,
      TokenType::WAREHOUSE,
      TokenType::WINDOW,
      TokenType::XML,
      TokenType::YEAR,
    ]),
    column_postfix_tokens: TokenSet::new([
      TokenType::COLON,
      TokenType::JOIN_MARKER,
      TokenType::L_BRACE,
      TokenType::L_BRACKET,
      TokenType::L_PAREN,
    ]),
    comment_table_alias_tokens: TokenSet::new([
      TokenType::AGGREGATEFUNCTION,
      TokenType::ALL,
      TokenType::ANALYZE,
      TokenType::ANY,
      TokenType::APPLY,
      TokenType::ARRAY,
      TokenType::ASC,
      TokenType::ATTACH,
      TokenType::AUTO_INCREMENT,
      TokenType::BEGIN,
      TokenType::BIGDECIMAL,
      TokenType::BIGINT,
      TokenType::BIGNUM,
      TokenType::BIGSERIAL,
      TokenType::BINARY,
      TokenType::BIT,
      TokenType::BLOB,
      TokenType::BOOLEAN,
      TokenType::BPCHAR,
      TokenType::CACHE,
      TokenType::CASE,
      TokenType::CHAR,
      TokenType::COLLATE,
      TokenType::COLUMN,
      TokenType::COMMAND,
      TokenType::COMMENT,
      TokenType::COMMIT,
      TokenType::CONSTRAINT,
      TokenType::COPY,
      TokenType::CUBE,
      TokenType::CURRENT_CATALOG,
      TokenType::CURRENT_DATE,
      TokenType::CURRENT_DATETIME,
      TokenType::CURRENT_ROLE,
      TokenType::CURRENT_SCHEMA,
      TokenType::CURRENT_TIME,
      TokenType::CURRENT_TIMESTAMP,
      TokenType::CURRENT_USER,
      TokenType::DATABASE,
      TokenType::DATE,
      TokenType::DATE32,
      TokenType::DATEMULTIRANGE,
      TokenType::DATERANGE,
      TokenType::DATETIME,
      TokenType::DATETIME2,
      TokenType::DATETIME64,
      TokenType::DECFLOAT,
      TokenType::DECIMAL,
      TokenType::DECIMAL128,
      TokenType::DECIMAL256,
      TokenType::DECIMAL32,
      TokenType::DECIMAL64,
      TokenType::DECLARE,
      TokenType::DEFAULT,
      TokenType::DELETE,
      TokenType::DESC,
      TokenType::DESCRIBE,
      TokenType::DETACH,
      TokenType::DICTIONARY,
      TokenType::DIV,
      TokenType::DOUBLE,
      TokenType::DYNAMIC,
      TokenType::END,
      TokenType::ENUM,
      TokenType::ENUM16,
      TokenType::ENUM8,
      TokenType::ESCAPE,
      TokenType::EXECUTE,
      TokenType::EXISTS,
      TokenType::EXPORT,
      TokenType::FALSE,
      TokenType::FILE,
      TokenType::FILE_FORMAT,
      TokenType::FILTER,
      TokenType::FINAL,
      TokenType::FIRST,
      TokenType::FIXEDSTRING,
      TokenType::FLOAT,
      TokenType::FOREIGN_KEY,
      TokenType::FORMAT,
      TokenType::FUNCTION,
      TokenType::GEOGRAPHY,
      TokenType::GEOGRAPHYPOINT,
      TokenType::GEOMETRY,
      TokenType::GET,
      TokenType::HLLSKETCH,
      TokenType::HSTORE,
      TokenType::IDENTIFIER,
      TokenType::IMAGE,
      TokenType::INDEX,
      TokenType::INET,
      TokenType::INOUT,
      TokenType::INT,
      TokenType::INT128,
      TokenType::INT256,
      TokenType::INT4MULTIRANGE,
      TokenType::INT4RANGE,
      TokenType::INT8MULTIRANGE,
      TokenType::INT8RANGE,
      TokenType::INTERVAL,
      TokenType::IPADDRESS,
      TokenType::IPPREFIX,
      TokenType::IPV4,
      TokenType::IPV6,
      TokenType::ISNULL,
      TokenType::JSON,
      TokenType::JSONB,
      TokenType::KEEP,
      TokenType::KILL,
      TokenType::LIMIT,
      TokenType::LINESTRING,
      TokenType::LIST,
      TokenType::LOAD,
      TokenType::LOCALTIME,
      TokenType::LOCALTIMESTAMP,
      TokenType::LONGBLOB,
      TokenType::LONGTEXT,
      TokenType::LOWCARDINALITY,
      TokenType::MAP,
      TokenType::MATCH,
      TokenType::MEDIUMBLOB,
      TokenType::MEDIUMINT,
      TokenType::MEDIUMTEXT,
      TokenType::MERGE,
      TokenType::MODEL,
      TokenType::MONEY,
      TokenType::MULTILINESTRING,
      TokenType::MULTIPOLYGON,
      TokenType::NAME,
      TokenType::NAMESPACE,
      TokenType::NCHAR,
      TokenType::NESTED,
      TokenType::NEXT,
      TokenType::NOTHING,
      TokenType::NULL,
      TokenType::NULLABLE,
      TokenType::NUMMULTIRANGE,
      TokenType::NUMRANGE,
      TokenType::NVARCHAR,
      TokenType::OBJECT,
      TokenType::OBJECT_IDENTIFIER,
      TokenType::OFFSET,
      TokenType::OPERATOR,
      TokenType::ORDINALITY,
      TokenType::OUT,
      TokenType::OVER,
      TokenType::OVERLAPS,
      TokenType::OVERWRITE,
      TokenType::PARTITION,
      TokenType::PERCENT,
      TokenType::PIVOT,
      TokenType::POINT,
      TokenType::POLYGON,
      TokenType::PRAGMA,
      TokenType::PROCEDURE,
      TokenType::PROJECTION,
      TokenType::PSEUDO_TYPE,
      TokenType::PUT,
      TokenType::RANGE,
      TokenType::RECURSIVE,
      TokenType::REFERENCES,
      TokenType::REFRESH,
      TokenType::RENAME,
      TokenType::REPLACE,
      TokenType::RING,
      TokenType::ROLLUP,
      TokenType::ROW,
      TokenType::ROWS,
      TokenType::ROWVERSION,
      TokenType::SCHEMA,
      TokenType::SEMANTIC_VIEW,
      TokenType::SEQUENCE,
      TokenType::SERIAL,
      TokenType::SESSION,
      TokenType::SESSION_USER,
      TokenType::SET,
      TokenType::SETTINGS,
      TokenType::SHOW,
      TokenType::SIMPLEAGGREGATEFUNCTION,
      TokenType::SINK,
      TokenType::SMALLDATETIME,
      TokenType::SMALLINT,
      TokenType::SMALLMONEY,
      TokenType::SMALLSERIAL,
      TokenType::SOME,
      TokenType::SOURCE,
      TokenType::STAGE,
      TokenType::STORAGE_INTEGRATION,
      TokenType::STRAIGHT_JOIN,
      TokenType::STREAM,
      TokenType::STREAMLIT,
      TokenType::STRUCT,
      TokenType::SUPER,
      TokenType::TABLE,
      TokenType::TAG,
      TokenType::TDIGEST,
      TokenType::TEMPORARY,
      TokenType::TEXT,
      TokenType::TIME,
      TokenType::TIMESTAMP,
      TokenType::TIMESTAMPLTZ,
      TokenType::TIMESTAMPNTZ,
      TokenType::TIMESTAMPTZ,
      TokenType::TIMESTAMP_MS,
      TokenType::TIMESTAMP_NS,
      TokenType::TIMESTAMP_S,
      TokenType::TIMETZ,
      TokenType::TIME_NS,
      TokenType::TINYBLOB,
      TokenType::TINYINT,
      TokenType::TINYTEXT,
      TokenType::TOP,
      TokenType::TRIGGER,
      TokenType::TRUE,
      TokenType::TRUNCATE,
      TokenType::TSMULTIRANGE,
      TokenType::TSRANGE,
      TokenType::TSTZMULTIRANGE,
      TokenType::TSTZRANGE,
      TokenType::TYPE,
      TokenType::UBIGINT,
      TokenType::UDECIMAL,
      TokenType::UDOUBLE,
      TokenType::UINT,
      TokenType::UINT128,
      TokenType::UINT256,
      TokenType::UMEDIUMINT,
      TokenType::UNIQUE,
      TokenType::UNKNOWN,
      TokenType::UNNEST,
      TokenType::UNPIVOT,
      TokenType::UPDATE,
      TokenType::USE,
      TokenType::USERDEFINED,
      TokenType::USMALLINT,
      TokenType::UTINYINT,
      TokenType::UUID,
      TokenType::VAR,
      TokenType::VARBINARY,
      TokenType::VARCHAR,
      TokenType::VARIANT,
      TokenType::VECTOR,
      TokenType::VIEW,
      TokenType::VOID,
      TokenType::VOLATILE,
      TokenType::WAREHOUSE,
      TokenType::XML,
      TokenType::YEAR,
    ]),
    comparison: Map::from_array([
      (TokenType::GT, Kind::GT),
      (TokenType::GTE, Kind::GTE),
      (TokenType::LT, Kind::LT),
      (TokenType::LTE, Kind::LTE),
    ]),
    conflict_actions: Map::from_array([
      ("ABORT", []),
      ("FAIL", []),
      ("IGNORE", []),
      ("REPLACE", []),
      ("ROLLBACK", []),
      ("UPDATE", []),
      ("DO", [["NOTHING"], ["UPDATE"]]),
    ]),
    conjunction: Map::from_array([(TokenType::AND, Kind::And)]),
    copy_into_varlen_options: @set.Set::from_array([
      "COPY_OPTIONS", "CREDENTIAL", "FILE_FORMAT", "FORMAT_OPTIONS",
    ]),
    creatables: TokenSet::new([
      TokenType::COLUMN,
      TokenType::CONSTRAINT,
      TokenType::DATABASE,
      TokenType::DICTIONARY,
      TokenType::FILE_FORMAT,
      TokenType::FOREIGN_KEY,
      TokenType::FUNCTION,
      TokenType::INDEX,
      TokenType::MODEL,
      TokenType::NAMESPACE,
      TokenType::PROCEDURE,
      TokenType::SCHEMA,
      TokenType::SEMANTIC_VIEW,
      TokenType::SEQUENCE,
      TokenType::SINK,
      TokenType::SOURCE,
      TokenType::STAGE,
      TokenType::STORAGE_INTEGRATION,
      TokenType::STREAMLIT,
      TokenType::TABLE,
      TokenType::TAG,
      TokenType::TRIGGER,
      TokenType::TYPE,
      TokenType::VIEW,
      TokenType::WAREHOUSE,
    ]),
    create_sequence: Map::from_array([
      ("SCALE", [["EXTEND"], ["NOEXTEND"]]),
      ("SHARD", [["EXTEND"], ["NOEXTEND"]]),
      ("NO", [["CYCLE"], ["CACHE"], ["MAXVALUE"], ["MINVALUE"]]),
      ("SESSION", []),
      ("GLOBAL", []),
      ("KEEP", []),
      ("NOKEEP", []),
      ("ORDER", []),
      ("NOORDER", []),
      ("NOCACHE", []),
      ("CYCLE", []),
      ("NOCYCLE", []),
      ("NOMINVALUE", []),
      ("NOMAXVALUE", []),
      ("NOSCALE", []),
      ("NOSHARD", []),
    ]),
    db_creatables: TokenSet::new([
      TokenType::DATABASE,
      TokenType::DICTIONARY,
      TokenType::FILE_FORMAT,
      TokenType::MODEL,
      TokenType::NAMESPACE,
      TokenType::SCHEMA,
      TokenType::SEMANTIC_VIEW,
      TokenType::SEQUENCE,
      TokenType::SINK,
      TokenType::SOURCE,
      TokenType::STAGE,
      TokenType::STORAGE_INTEGRATION,
      TokenType::STREAMLIT,
      TokenType::TABLE,
      TokenType::TAG,
      TokenType::VIEW,
      TokenType::WAREHOUSE,
    ]),
    ddl_select_tokens: TokenSet::new([
      TokenType::L_PAREN,
      TokenType::SELECT,
      TokenType::WITH,
    ]),
    default_sampling_method: None,
    describe_styles: @set.Set::from_array([
      "ANALYZE", "EXTENDED", "FORMATTED", "HISTORY",
    ]),
    disjunction: Map::from_array([(TokenType::OR, Kind::Or)]),
    distinct_tokens: TokenSet::new([TokenType::DISTINCT]),
    enum_type_tokens: TokenSet::new([
      TokenType::DYNAMIC,
      TokenType::ENUM,
      TokenType::ENUM16,
      TokenType::ENUM8,
    ]),
    equality: Map::from_array([
      (TokenType::EQ, Kind::EQ),
      (TokenType::NEQ, Kind::NEQ),
      (TokenType::NULLSAFE_EQ, Kind::NullSafeEQ),
    ]),
    execute_as_options: Map::from_array([
      ("CALLER", []),
      ("SELF", []),
      ("OWNER", []),
    ]),
    exponent: Map([]),
    factor: Map::from_array([
      (TokenType::DIV, Kind::IntDiv),
      (TokenType::LR_ARROW, Kind::Distance),
      (TokenType::LLRR_ARROW, Kind::DistanceNd),
      (TokenType::MOD, Kind::Mod),
      (TokenType::SLASH, Kind::Div),
      (TokenType::STAR, Kind::Mul),
    ]),
    fetch_tokens: TokenSet::new([
      TokenType::AGGREGATEFUNCTION,
      TokenType::ALL,
      TokenType::ANALYZE,
      TokenType::ANTI,
      TokenType::ANY,
      TokenType::APPLY,
      TokenType::ARRAY,
      TokenType::ASC,
      TokenType::ASOF,
      TokenType::ATTACH,
      TokenType::AUTO_INCREMENT,
      TokenType::BEGIN,
      TokenType::BIGDECIMAL,
      TokenType::BIGINT,
      TokenType::BIGNUM,
      TokenType::BIGSERIAL,
      TokenType::BINARY,
      TokenType::BIT,
      TokenType::BLOB,
      TokenType::BOOLEAN,
      TokenType::BPCHAR,
      TokenType::CACHE,
      TokenType::CASE,
      TokenType::CHAR,
      TokenType::COLLATE,
      TokenType::COLUMN,
      TokenType::COMMAND,
      TokenType::COMMENT,
      TokenType::COMMIT,
      TokenType::CONSTRAINT,
      TokenType::COPY,
      TokenType::CUBE,
      TokenType::CURRENT_CATALOG,
      TokenType::CURRENT_DATE,
      TokenType::CURRENT_DATETIME,
      TokenType::CURRENT_ROLE,
      TokenType::CURRENT_SCHEMA,
      TokenType::CURRENT_TIME,
      TokenType::CURRENT_TIMESTAMP,
      TokenType::CURRENT_USER,
      TokenType::DATABASE,
      TokenType::DATE,
      TokenType::DATE32,
      TokenType::DATEMULTIRANGE,
      TokenType::DATERANGE,
      TokenType::DATETIME,
      TokenType::DATETIME2,
      TokenType::DATETIME64,
      TokenType::DECFLOAT,
      TokenType::DECIMAL,
      TokenType::DECIMAL128,
      TokenType::DECIMAL256,
      TokenType::DECIMAL32,
      TokenType::DECIMAL64,
      TokenType::DECLARE,
      TokenType::DEFAULT,
      TokenType::DELETE,
      TokenType::DESC,
      TokenType::DESCRIBE,
      TokenType::DETACH,
      TokenType::DICTIONARY,
      TokenType::DIV,
      TokenType::DOUBLE,
      TokenType::DYNAMIC,
      TokenType::END,
      TokenType::ENUM,
      TokenType::ENUM16,
      TokenType::ENUM8,
      TokenType::ESCAPE,
      TokenType::EXECUTE,
      TokenType::EXISTS,
      TokenType::EXPORT,
      TokenType::FALSE,
      TokenType::FILE,
      TokenType::FILE_FORMAT,
      TokenType::FILTER,
      TokenType::FINAL,
      TokenType::FIRST,
      TokenType::FIXEDSTRING,
      TokenType::FLOAT,
      TokenType::FOREIGN_KEY,
      TokenType::FORMAT,
      TokenType::FULL,
      TokenType::FUNCTION,
      TokenType::GEOGRAPHY,
      TokenType::GEOGRAPHYPOINT,
      TokenType::GEOMETRY,
      TokenType::GET,
      TokenType::HLLSKETCH,
      TokenType::HSTORE,
      TokenType::IDENTIFIER,
      TokenType::IMAGE,
      TokenType::INDEX,
      TokenType::INET,
      TokenType::INOUT,
      TokenType::INT,
      TokenType::INT128,
      TokenType::INT256,
      TokenType::INT4MULTIRANGE,
      TokenType::INT4RANGE,
      TokenType::INT8MULTIRANGE,
      TokenType::INT8RANGE,
      TokenType::INTERVAL,
      TokenType::IPADDRESS,
      TokenType::IPPREFIX,
      TokenType::IPV4,
      TokenType::IPV6,
      TokenType::IS,
      TokenType::ISNULL,
      TokenType::JSON,
      TokenType::JSONB,
      TokenType::KEEP,
      TokenType::KILL,
      TokenType::LEFT,
      TokenType::LIMIT,
      TokenType::LINESTRING,
      TokenType::LIST,
      TokenType::LOAD,
      TokenType::LOCALTIME,
      TokenType::LOCALTIMESTAMP,
      TokenType::LOCK,
      TokenType::LONGBLOB,
      TokenType::LONGTEXT,
      TokenType::LOWCARDINALITY,
      TokenType::MAP,
      TokenType::MATCH,
      TokenType::MEDIUMBLOB,
      TokenType::MEDIUMINT,
      TokenType::MEDIUMTEXT,
      TokenType::MERGE,
      TokenType::MODEL,
      TokenType::MONEY,
      TokenType::MULTILINESTRING,
      TokenType::MULTIPOLYGON,
      TokenType::NAME,
      TokenType::NAMESPACE,
      TokenType::NATURAL,
      TokenType::NCHAR,
      TokenType::NESTED,
      TokenType::NEXT,
      TokenType::NOTHING,
      TokenType::NULL,
      TokenType::NULLABLE,
      TokenType::NUMMULTIRANGE,
      TokenType::NUMRANGE,
      TokenType::NVARCHAR,
      TokenType::OBJECT,
      TokenType::OBJECT_IDENTIFIER,
      TokenType::OFFSET,
      TokenType::OPERATOR,
      TokenType::ORDINALITY,
      TokenType::OUT,
      TokenType::OVER,
      TokenType::OVERLAPS,
      TokenType::OVERWRITE,
      TokenType::PARTITION,
      TokenType::PIVOT,
      TokenType::POINT,
      TokenType::POLYGON,
      TokenType::PRAGMA,
      TokenType::PROCEDURE,
      TokenType::PROJECTION,
      TokenType::PSEUDO_TYPE,
      TokenType::PUT,
      TokenType::RANGE,
      TokenType::RECURSIVE,
      TokenType::REFERENCES,
      TokenType::REFRESH,
      TokenType::RENAME,
      TokenType::REPLACE,
      TokenType::RIGHT,
      TokenType::RING,
      TokenType::ROLLUP,
      TokenType::ROWVERSION,
      TokenType::SCHEMA,
      TokenType::SEMANTIC_VIEW,
      TokenType::SEMI,
      TokenType::SEQUENCE,
      TokenType::SERIAL,
      TokenType::SESSION,
      TokenType::SESSION_USER,
      TokenType::SET,
      TokenType::SETTINGS,
      TokenType::SHOW,
      TokenType::SIMPLEAGGREGATEFUNCTION,
      TokenType::SINK,
      TokenType::SMALLDATETIME,
      TokenType::SMALLINT,
      TokenType::SMALLMONEY,
      TokenType::SMALLSERIAL,
      TokenType::SOME,
      TokenType::SOURCE,
      TokenType::STAGE,
      TokenType::STORAGE_INTEGRATION,
      TokenType::STRAIGHT_JOIN,
      TokenType::STREAM,
      TokenType::STREAMLIT,
      TokenType::STRUCT,
      TokenType::SUPER,
      TokenType::TABLE,
      TokenType::TAG,
      TokenType::TDIGEST,
      TokenType::TEMPORARY,
      TokenType::TEXT,
      TokenType::TIME,
      TokenType::TIMESTAMP,
      TokenType::TIMESTAMPLTZ,
      TokenType::TIMESTAMPNTZ,
      TokenType::TIMESTAMPTZ,
      TokenType::TIMESTAMP_MS,
      TokenType::TIMESTAMP_NS,
      TokenType::TIMESTAMP_S,
      TokenType::TIMETZ,
      TokenType::TIME_NS,
      TokenType::TINYBLOB,
      TokenType::TINYINT,
      TokenType::TINYTEXT,
      TokenType::TOP,
      TokenType::TRIGGER,
      TokenType::TRUE,
      TokenType::TRUNCATE,
      TokenType::TSMULTIRANGE,
      TokenType::TSRANGE,
      TokenType::TSTZMULTIRANGE,
      TokenType::TSTZRANGE,
      TokenType::TYPE,
      TokenType::UBIGINT,
      TokenType::UDECIMAL,
      TokenType::UDOUBLE,
      TokenType::UINT,
      TokenType::UINT128,
      TokenType::UINT256,
      TokenType::UMEDIUMINT,
      TokenType::UNIQUE,
      TokenType::UNKNOWN,
      TokenType::UNNEST,
      TokenType::UNPIVOT,
      TokenType::UPDATE,
      TokenType::USE,
      TokenType::USERDEFINED,
      TokenType::USMALLINT,
      TokenType::UTINYINT,
      TokenType::UUID,
      TokenType::VAR,
      TokenType::VARBINARY,
      TokenType::VARCHAR,
      TokenType::VARIANT,
      TokenType::VECTOR,
      TokenType::VIEW,
      TokenType::VOID,
      TokenType::VOLATILE,
      TokenType::WAREHOUSE,
      TokenType::WINDOW,
      TokenType::XML,
      TokenType::YEAR,
    ]),
    functions_with_aliased_args: @set.Set::from_array(["STRUCT"]),
    func_tokens: TokenSet::new([
      TokenType::AGGREGATEFUNCTION,
      TokenType::ALL,
      TokenType::ANY,
      TokenType::ARRAY,
      TokenType::BIGDECIMAL,
      TokenType::BIGINT,
      TokenType::BIGNUM,
      TokenType::BIGSERIAL,
      TokenType::BINARY,
      TokenType::BIT,
      TokenType::BLOB,
      TokenType::BOOLEAN,
      TokenType::BPCHAR,
      TokenType::CHAR,
      TokenType::COLLATE,
      TokenType::COMMAND,
      TokenType::CURRENT_CATALOG,
      TokenType::CURRENT_DATE,
      TokenType::CURRENT_DATETIME,
      TokenType::CURRENT_SCHEMA,
      TokenType::CURRENT_TIME,
      TokenType::CURRENT_TIMESTAMP,
      TokenType::CURRENT_USER,
      TokenType::DATE,
      TokenType::DATE32,
      TokenType::DATEMULTIRANGE,
      TokenType::DATERANGE,
      TokenType::DATETIME,
      TokenType::DATETIME2,
      TokenType::DATETIME64,
      TokenType::DECFLOAT,
      TokenType::DECIMAL,
      TokenType::DECIMAL128,
      TokenType::DECIMAL256,
      TokenType::DECIMAL32,
      TokenType::DECIMAL64,
      TokenType::DECLARE,
      TokenType::DOUBLE,
      TokenType::DYNAMIC,
      TokenType::ENUM,
      TokenType::ENUM16,
      TokenType::ENUM8,
      TokenType::EXISTS,
      TokenType::FILTER,
      TokenType::FIRST,
      TokenType::FIXEDSTRING,
      TokenType::FLOAT,
      TokenType::FORMAT,
      TokenType::GEOGRAPHY,
      TokenType::GEOGRAPHYPOINT,
      TokenType::GEOMETRY,
      TokenType::GET,
      TokenType::GLOB,
      TokenType::HLLSKETCH,
      TokenType::HSTORE,
      TokenType::IDENTIFIER,
      TokenType::ILIKE,
      TokenType::IMAGE,
      TokenType::INDEX,
      TokenType::INET,
      TokenType::INSERT,
      TokenType::INT,
      TokenType::INT128,
      TokenType::INT256,
      TokenType::INT4MULTIRANGE,
      TokenType::INT4RANGE,
      TokenType::INT8MULTIRANGE,
      TokenType::INT8RANGE,
      TokenType::INTERVAL,
      TokenType::IPADDRESS,
      TokenType::IPPREFIX,
      TokenType::IPV4,
      TokenType::IPV6,
      TokenType::ISNULL,
      TokenType::JSON,
      TokenType::JSONB,
      TokenType::LEFT,
      TokenType::LIKE,
      TokenType::LINESTRING,
      TokenType::LIST,
      TokenType::LOCALTIME,
      TokenType::LOCALTIMESTAMP,
      TokenType::LONGBLOB,
      TokenType::LONGTEXT,
      TokenType::LOWCARDINALITY,
      TokenType::MAP,
      TokenType::MEDIUMBLOB,
      TokenType::MEDIUMINT,
      TokenType::MEDIUMTEXT,
      TokenType::MERGE,
      TokenType::MONEY,
      TokenType::MULTILINESTRING,
      TokenType::MULTIPOLYGON,
      TokenType::NAME,
      TokenType::NCHAR,
      TokenType::NESTED,
      TokenType::NEXT,
      TokenType::NOTHING,
      TokenType::NULL,
      TokenType::NULLABLE,
      TokenType::NUMMULTIRANGE,
      TokenType::NUMRANGE,
      TokenType::NVARCHAR,
      TokenType::OBJECT,
      TokenType::OBJECT_IDENTIFIER,
      TokenType::OFFSET,
      TokenType::POINT,
      TokenType::POLYGON,
      TokenType::PRIMARY_KEY,
      TokenType::PSEUDO_TYPE,
      TokenType::RANGE,
      TokenType::REPLACE,
      TokenType::RIGHT,
      TokenType::RING,
      TokenType::RLIKE,
      TokenType::ROW,
      TokenType::ROWVERSION,
      TokenType::SEQUENCE,
      TokenType::SERIAL,
      TokenType::SESSION_USER,
      TokenType::SIMPLEAGGREGATEFUNCTION,
      TokenType::SMALLDATETIME,
      TokenType::SMALLINT,
      TokenType::SMALLMONEY,
      TokenType::SMALLSERIAL,
      TokenType::SOME,
      TokenType::STRUCT,
      TokenType::SUPER,
      TokenType::TABLE,
      TokenType::TDIGEST,
      TokenType::TEXT,
      TokenType::TIME,
      TokenType::TIMESTAMP,
      TokenType::TIMESTAMPLTZ,
      TokenType::TIMESTAMPNTZ,
      TokenType::TIMESTAMPTZ,
      TokenType::TIMESTAMP_MS,
      TokenType::TIMESTAMP_NS,
      TokenType::TIMESTAMP_S,
      TokenType::TIMETZ,
      TokenType::TIME_NS,
      TokenType::TINYBLOB,
      TokenType::TINYINT,
      TokenType::TINYTEXT,
      TokenType::TRUNCATE,
      TokenType::TSMULTIRANGE,
      TokenType::TSRANGE,
      TokenType::TSTZMULTIRANGE,
      TokenType::TSTZRANGE,
      TokenType::UBIGINT,
      TokenType::UDECIMAL,
      TokenType::UDOUBLE,
      TokenType::UINT,
      TokenType::UINT128,
      TokenType::UINT256,
      TokenType::UMEDIUMINT,
      TokenType::UNION,
      TokenType::UNKNOWN,
      TokenType::UNNEST,
      TokenType::USERDEFINED,
      TokenType::USMALLINT,
      TokenType::UTC_DATE,
      TokenType::UTC_TIME,
      TokenType::UTC_TIMESTAMP,
      TokenType::UTINYINT,
      TokenType::UUID,
      TokenType::VAR,
      TokenType::VARBINARY,
      TokenType::VARCHAR,
      TokenType::VARIANT,
      TokenType::VECTOR,
      TokenType::VOID,
      TokenType::WINDOW,
      TokenType::XML,
      TokenType::XOR,
      TokenType::YEAR,
    ]),
    historical_data_kind: @set.Set::from_array([
      "OFFSET", "STATEMENT", "STREAM", "TIMESTAMP", "VERSION",
    ]),
    historical_data_prefix: @set.Set::from_array(["AT", "BEFORE", "END"]),
    identifier_tokens: TokenSet::new([TokenType::IDENTIFIER, TokenType::VAR]),
    identify_pivot_strings: false,
    id_var_tokens: TokenSet::new([
      TokenType::AGGREGATEFUNCTION,
      TokenType::ALL,
      TokenType::ANALYZE,
      TokenType::ANTI,
      TokenType::ANY,
      TokenType::APPLY,
      TokenType::ARRAY,
      TokenType::ASC,
      TokenType::ASOF,
      TokenType::ATTACH,
      TokenType::AUTO_INCREMENT,
      TokenType::BEGIN,
      TokenType::BIGDECIMAL,
      TokenType::BIGINT,
      TokenType::BIGNUM,
      TokenType::BIGSERIAL,
      TokenType::BINARY,
      TokenType::BIT,
      TokenType::BLOB,
      TokenType::BOOLEAN,
      TokenType::BPCHAR,
      TokenType::CACHE,
      TokenType::CASE,
      TokenType::CHAR,
      TokenType::COLLATE,
      TokenType::COLUMN,
      TokenType::COMMAND,
      TokenType::COMMENT,
      TokenType::COMMIT,
      TokenType::CONSTRAINT,
      TokenType::COPY,
      TokenType::CUBE,
      TokenType::CURRENT_CATALOG,
      TokenType::CURRENT_DATE,
      TokenType::CURRENT_DATETIME,
      TokenType::CURRENT_ROLE,
      TokenType::CURRENT_SCHEMA,
      TokenType::CURRENT_TIME,
      TokenType::CURRENT_TIMESTAMP,
      TokenType::CURRENT_USER,
      TokenType::DATABASE,
      TokenType::DATE,
      TokenType::DATE32,
      TokenType::DATEMULTIRANGE,
      TokenType::DATERANGE,
      TokenType::DATETIME,
      TokenType::DATETIME2,
      TokenType::DATETIME64,
      TokenType::DECFLOAT,
      TokenType::DECIMAL,
      TokenType::DECIMAL128,
      TokenType::DECIMAL256,
      TokenType::DECIMAL32,
      TokenType::DECIMAL64,
      TokenType::DECLARE,
      TokenType::DEFAULT,
      TokenType::DELETE,
      TokenType::DESC,
      TokenType::DESCRIBE,
      TokenType::DETACH,
      TokenType::DICTIONARY,
      TokenType::DIV,
      TokenType::DOUBLE,
      TokenType::DYNAMIC,
      TokenType::END,
      TokenType::ENUM,
      TokenType::ENUM16,
      TokenType::ENUM8,
      TokenType::ESCAPE,
      TokenType::EXECUTE,
      TokenType::EXISTS,
      TokenType::EXPORT,
      TokenType::FALSE,
      TokenType::FILE,
      TokenType::FILE_FORMAT,
      TokenType::FILTER,
      TokenType::FINAL,
      TokenType::FIRST,
      TokenType::FIXEDSTRING,
      TokenType::FLOAT,
      TokenType::FOREIGN_KEY,
      TokenType::FORMAT,
      TokenType::FULL,
      TokenType::FUNCTION,
      TokenType::GEOGRAPHY,
      TokenType::GEOGRAPHYPOINT,
      TokenType::GEOMETRY,
      TokenType::GET,
      TokenType::HLLSKETCH,
      TokenType::HSTORE,
      TokenType::IDENTIFIER,
      TokenType::IMAGE,
      TokenType::INDEX,
      TokenType::INET,
      TokenType::INOUT,
      TokenType::INT,
      TokenType::INT128,
      TokenType::INT256,
      TokenType::INT4MULTIRANGE,
      TokenType::INT4RANGE,
      TokenType::INT8MULTIRANGE,
      TokenType::INT8RANGE,
      TokenType::INTERVAL,
      TokenType::IPADDRESS,
      TokenType::IPPREFIX,
      TokenType::IPV4,
      TokenType::IPV6,
      TokenType::IS,
      TokenType::ISNULL,
      TokenType::JSON,
      TokenType::JSONB,
      TokenType::KEEP,
      TokenType::KILL,
      TokenType::LEFT,
      TokenType::LIMIT,
      TokenType::LINESTRING,
      TokenType::LIST,
      TokenType::LOAD,
      TokenType::LOCALTIME,
      TokenType::LOCALTIMESTAMP,
      TokenType::LOCK,
      TokenType::LONGBLOB,
      TokenType::LONGTEXT,
      TokenType::LOWCARDINALITY,
      TokenType::MAP,
      TokenType::MATCH,
      TokenType::MEDIUMBLOB,
      TokenType::MEDIUMINT,
      TokenType::MEDIUMTEXT,
      TokenType::MERGE,
      TokenType::MODEL,
      TokenType::MONEY,
      TokenType::MULTILINESTRING,
      TokenType::MULTIPOLYGON,
      TokenType::NAME,
      TokenType::NAMESPACE,
      TokenType::NATURAL,
      TokenType::NCHAR,
      TokenType::NESTED,
      TokenType::NEXT,
      TokenType::NOTHING,
      TokenType::NULL,
      TokenType::NULLABLE,
      TokenType::NUMMULTIRANGE,
      TokenType::NUMRANGE,
      TokenType::NVARCHAR,
      TokenType::OBJECT,
      TokenType::OBJECT_IDENTIFIER,
      TokenType::OFFSET,
      TokenType::OPERATOR,
      TokenType::ORDINALITY,
      TokenType::OUT,
      TokenType::OVER,
      TokenType::OVERLAPS,
      TokenType::OVERWRITE,
      TokenType::PARTITION,
      TokenType::PERCENT,
      TokenType::PIVOT,
      TokenType::POINT,
      TokenType::POLYGON,
      TokenType::PRAGMA,
      TokenType::PROCEDURE,
      TokenType::PROJECTION,
      TokenType::PSEUDO_TYPE,
      TokenType::PUT,
      TokenType::RANGE,
      TokenType::RECURSIVE,
      TokenType::REFERENCES,
      TokenType::REFRESH,
      TokenType::RENAME,
      TokenType::REPLACE,
      TokenType::RIGHT,
      TokenType::RING,
      TokenType::ROLLUP,
      TokenType::ROW,
      TokenType::ROWS,
      TokenType::ROWVERSION,
      TokenType::SCHEMA,
      TokenType::SEMANTIC_VIEW,
      TokenType::SEMI,
      TokenType::SEQUENCE,
      TokenType::SERIAL,
      TokenType::SESSION,
      TokenType::SESSION_USER,
      TokenType::SET,
      TokenType::SETTINGS,
      TokenType::SHOW,
      TokenType::SIMPLEAGGREGATEFUNCTION,
      TokenType::SINK,
      TokenType::SMALLDATETIME,
      TokenType::SMALLINT,
      TokenType::SMALLMONEY,
      TokenType::SMALLSERIAL,
      TokenType::SOME,
      TokenType::SOURCE,
      TokenType::STAGE,
      TokenType::STORAGE_INTEGRATION,
      TokenType::STREAM,
      TokenType::STREAMLIT,
      TokenType::STRUCT,
      TokenType::SUPER,
      TokenType::TABLE,
      TokenType::TAG,
      TokenType::TDIGEST,
      TokenType::TEMPORARY,
      TokenType::TEXT,
      TokenType::TIME,
      TokenType::TIMESTAMP,
      TokenType::TIMESTAMPLTZ,
      TokenType::TIMESTAMPNTZ,
      TokenType::TIMESTAMPTZ,
      TokenType::TIMESTAMP_MS,
      TokenType::TIMESTAMP_NS,
      TokenType::TIMESTAMP_S,
      TokenType::TIMETZ,
      TokenType::TIME_NS,
      TokenType::TINYBLOB,
      TokenType::TINYINT,
      TokenType::TINYTEXT,
      TokenType::TOP,
      TokenType::TRIGGER,
      TokenType::TRUE,
      TokenType::TRUNCATE,
      TokenType::TSMULTIRANGE,
      TokenType::TSRANGE,
      TokenType::TSTZMULTIRANGE,
      TokenType::TSTZRANGE,
      TokenType::TYPE,
      TokenType::UBIGINT,
      TokenType::UDECIMAL,
      TokenType::UDOUBLE,
      TokenType::UINT,
      TokenType::UINT128,
      TokenType::UINT256,
      TokenType::UMEDIUMINT,
      TokenType::UNIQUE,
      TokenType::UNKNOWN,
      TokenType::UNNEST,
      TokenType::UNPIVOT,
      TokenType::UPDATE,
      TokenType::USE,
      TokenType::USERDEFINED,
      TokenType::USMALLINT,
      TokenType::UTINYINT,
      TokenType::UUID,
      TokenType::VAR,
      TokenType::VARBINARY,
      TokenType::VARCHAR,
      TokenType::VARIANT,
      TokenType::VECTOR,
      TokenType::VIEW,
      TokenType::VOID,
      TokenType::VOLATILE,
      TokenType::WAREHOUSE,
      TokenType::WINDOW,
      TokenType::XML,
      TokenType::YEAR,
    ]),
    insert_alternatives: @set.Set::from_array([
      "ABORT", "FAIL", "IGNORE", "REPLACE", "ROLLBACK",
    ]),
    interval_spans: true,
    invalid_func_name_tokens: TokenSet::new([
      TokenType::IDENTIFIER,
      TokenType::STRING,
    ]),
    isolated_loading_options: Map::from_array([
      ("FOR", [["ALL"], ["INSERT"], ["NONE"]]),
    ]),
    is_json_predicate_kind: @set.Set::from_array([
      "ARRAY", "OBJECT", "SCALAR", "VALUE",
    ]),
    joins_have_equal_precedence: false,
    join_hints: @set.Set::from_array([]),
    join_kinds: TokenSet::new([
      TokenType::ANTI,
      TokenType::CROSS,
      TokenType::INNER,
      TokenType::OUTER,
      TokenType::SEMI,
      TokenType::STRAIGHT_JOIN,
    ]),
    join_methods: TokenSet::new([
      TokenType::ASOF,
      TokenType::NATURAL,
      TokenType::POSITIONAL,
    ]),
    join_sides: TokenSet::new([
      TokenType::FULL,
      TokenType::LEFT,
      TokenType::RIGHT,
    ]),
    json_arrows_require_json_type: false,
    json_extract_requires_json_expression: false,
    json_key_value_separator_tokens: TokenSet::new([
      TokenType::COLON,
      TokenType::COMMA,
      TokenType::IS,
    ]),
    key_constraint_options: Map::from_array([
      ("NOT", [["ENFORCED"]]),
      ("MATCH", [["FULL"], ["PARTIAL"], ["SIMPLE"]]),
      ("INITIALLY", [["DEFERRED"], ["IMMEDIATE"]]),
      ("USING", [["BTREE"], ["HASH"]]),
      ("DEFERRABLE", []),
      ("NORELY", []),
      ("RELY", []),
    ]),
    key_value_definitions: [
      Kind::Alias,
      Kind::EQ,
      Kind::PropertyEQ,
      Kind::Slice,
    ],
    lambda_arg_terminators: TokenSet::new([TokenType::COMMA, TokenType::R_PAREN]),
    log_defaults_to_ln: false,
    map_keys_are_arbitrary_expressions: false,
    modifiables: [Kind::Query, Kind::Table, Kind::TableFromRows, Kind::Values],
    modifiers_attached_to_set_op: true,
    nested_type_tokens: TokenSet::new([
      TokenType::ARRAY,
      TokenType::LIST,
      TokenType::LOWCARDINALITY,
      TokenType::MAP,
      TokenType::NESTED,
      TokenType::NULLABLE,
      TokenType::OBJECT,
      TokenType::RANGE,
      TokenType::STRUCT,
      TokenType::UNION,
    ]),
    no_paren_functions: Map::from_array([
      (TokenType::CURRENT_DATE, Kind::CurrentDate),
      (TokenType::CURRENT_DATETIME, Kind::CurrentDate),
      (TokenType::CURRENT_TIME, Kind::CurrentTime),
      (TokenType::CURRENT_TIMESTAMP, Kind::CurrentTimestamp),
      (TokenType::CURRENT_USER, Kind::CurrentUser),
      (TokenType::CURRENT_ROLE, Kind::CurrentRole),
      (TokenType::LOCALTIME, Kind::Localtime),
      (TokenType::LOCALTIMESTAMP, Kind::Localtimestamp),
      (TokenType::CURRENT_CATALOG, Kind::CurrentCatalog),
      (TokenType::SESSION_USER, Kind::SessionUser),
    ]),
    no_paren_if_commands: true,
    odbc_datetime_literals: Map([]),
    on_condition_tokens: @set.Set::from_array([
      "EMPTY", "ERROR", "FALSE", "NULL", "TRUE",
    ]),
    opclass_follow_keywords: @set.Set::from_array([
      "ASC", "DESC", "NULLS", "WITH",
    ]),
    operation_modifiers: @set.Set::from_array([]),
    optional_alias_token_cte: true,
    optype_follow_tokens: TokenSet::new([TokenType::COMMA, TokenType::R_PAREN]),
    partition_keywords: @set.Set::from_array(["PARTITION", "SUBPARTITION"]),
    pivot_column_naming: "agg_name_if_aliased",
    prefixed_pivot_columns: false,
    pre_volatile_tokens: TokenSet::new([
      TokenType::CREATE,
      TokenType::REPLACE,
      TokenType::UNIQUE,
    ]),
    privilege_follow_tokens: TokenSet::new([
      TokenType::COMMA,
      TokenType::L_PAREN,
      TokenType::ON,
    ]),
    procedure_options: Map([]),
    query_modifier_tokens: TokenSet::new([
      TokenType::CLUSTER_BY,
      TokenType::CONNECT_BY,
      TokenType::DISTRIBUTE_BY,
      TokenType::FETCH,
      TokenType::FOR,
      TokenType::GROUP_BY,
      TokenType::HAVING,
      TokenType::LIMIT,
      TokenType::LOCK,
      TokenType::MATCH_RECOGNIZE,
      TokenType::OFFSET,
      TokenType::ORDER_BY,
      TokenType::PREWHERE,
      TokenType::QUALIFY,
      TokenType::SORT_BY,
      TokenType::TABLE_SAMPLE,
      TokenType::USING,
      TokenType::WHERE,
      TokenType::WINDOW,
    ]),
    quoted_types_to_preserve: @set.Set::from_array([]),
    recursive_cte_search_kind: @set.Set::from_array([
      "BREADTH", "CYCLE", "DEPTH",
    ]),
    reserved_tokens: TokenSet::new([
      TokenType::AMP,
      TokenType::BACKSLASH,
      TokenType::CARET,
      TokenType::COLON,
      TokenType::COMMA,
      TokenType::DASH,
      TokenType::DOT,
      TokenType::EQ,
      TokenType::GT,
      TokenType::HASH,
      TokenType::LT,
      TokenType::L_BRACE,
      TokenType::L_BRACKET,
      TokenType::L_PAREN,
      TokenType::MOD,
      TokenType::NOT,
      TokenType::PARAMETER,
      TokenType::PIPE,
      TokenType::PLACEHOLDER,
      TokenType::PLUS,
      TokenType::R_BRACE,
      TokenType::R_BRACKET,
      TokenType::R_PAREN,
      TokenType::SELECT,
      TokenType::SEMICOLON,
      TokenType::SLASH,
      TokenType::STAR,
      TokenType::TILDE,
      TokenType::UNKNOWN,
    ]),
    schema_binding_options: Map::from_array([
      ("TYPE", [["EVOLUTION"]]),
      ("BINDING", []),
      ("COMPENSATION", []),
      ("EVOLUTION", []),
    ]),
    schema_unnamed_constraints: @set.Set::from_array([
      "BUCKET", "CHECK", "EXCLUDE", "FOREIGN KEY", "LIKE", "PERIOD", "PRIMARY KEY",
      "TRUNCATE", "UNIQUE",
    ]),
    security_property_keywords: @set.Set::from_array([
      "DEFINER", "INVOKER", "NONE",
    ]),
    select_start_tokens: TokenSet::new([
      TokenType::L_PAREN,
      TokenType::SELECT,
      TokenType::WITH,
    ]),
    set_assignment_delimiters: @set.Set::from_array([":=", "=", "TO"]),
    set_operations: TokenSet::new([
      TokenType::EXCEPT,
      TokenType::INTERSECT,
      TokenType::UNION,
    ]),
    set_op_modifiers: @set.Set::from_array([
      "cluster", "distribute", "limit", "offset", "order", "sort",
    ]),
    set_requires_assignment_delimiter: true,
    signed_to_unsigned_type_token: Map::from_array([
      (TokenType::BIGINT, TokenType::UBIGINT),
      (TokenType::INT, TokenType::UINT),
      (TokenType::MEDIUMINT, TokenType::UMEDIUMINT),
      (TokenType::SMALLINT, TokenType::USMALLINT),
      (TokenType::TINYINT, TokenType::UTINYINT),
      (TokenType::DECIMAL, TokenType::UDECIMAL),
      (TokenType::DOUBLE, TokenType::UDOUBLE),
    ]),
    strict_cast: true,
    string_aliases: false,
    struct_type_tokens: TokenSet::new([
      TokenType::NESTED,
      TokenType::OBJECT,
      TokenType::STRUCT,
      TokenType::UNION,
    ]),
    subquery_predicates: Map::from_array([
      (TokenType::ANY, Kind::Any),
      (TokenType::ALL, Kind::All),
      (TokenType::EXISTS, Kind::Exists),
      (TokenType::SOME, Kind::Any),
    ]),
    subquery_tokens: TokenSet::new([
      TokenType::FROM,
      TokenType::SELECT,
      TokenType::WITH,
    ]),
    supports_digit_prefixed_field_names: false,
    supports_implicit_unnest: false,
    supports_nth_value_from_modifier: false,
    supports_omitted_interval_span_unit: false,
    supports_partition_selection: false,
    tablesample_csv: false,
    table_alias_tokens: TokenSet::new([
      TokenType::AGGREGATEFUNCTION,
      TokenType::ALL,
      TokenType::ANALYZE,
      TokenType::ANY,
      TokenType::APPLY,
      TokenType::ARRAY,
      TokenType::ASC,
      TokenType::ATTACH,
      TokenType::AUTO_INCREMENT,
      TokenType::BEGIN,
      TokenType::BIGDECIMAL,
      TokenType::BIGINT,
      TokenType::BIGNUM,
      TokenType::BIGSERIAL,
      TokenType::BINARY,
      TokenType::BIT,
      TokenType::BLOB,
      TokenType::BOOLEAN,
      TokenType::BPCHAR,
      TokenType::CACHE,
      TokenType::CASE,
      TokenType::CHAR,
      TokenType::COLLATE,
      TokenType::COLUMN,
      TokenType::COMMAND,
      TokenType::COMMENT,
      TokenType::COMMIT,
      TokenType::CONSTRAINT,
      TokenType::COPY,
      TokenType::CUBE,
      TokenType::CURRENT_CATALOG,
      TokenType::CURRENT_DATE,
      TokenType::CURRENT_DATETIME,
      TokenType::CURRENT_ROLE,
      TokenType::CURRENT_SCHEMA,
      TokenType::CURRENT_TIME,
      TokenType::CURRENT_TIMESTAMP,
      TokenType::CURRENT_USER,
      TokenType::DATABASE,
      TokenType::DATE,
      TokenType::DATE32,
      TokenType::DATEMULTIRANGE,
      TokenType::DATERANGE,
      TokenType::DATETIME,
      TokenType::DATETIME2,
      TokenType::DATETIME64,
      TokenType::DECFLOAT,
      TokenType::DECIMAL,
      TokenType::DECIMAL128,
      TokenType::DECIMAL256,
      TokenType::DECIMAL32,
      TokenType::DECIMAL64,
      TokenType::DECLARE,
      TokenType::DEFAULT,
      TokenType::DELETE,
      TokenType::DESC,
      TokenType::DESCRIBE,
      TokenType::DETACH,
      TokenType::DICTIONARY,
      TokenType::DIV,
      TokenType::DOUBLE,
      TokenType::DYNAMIC,
      TokenType::END,
      TokenType::ENUM,
      TokenType::ENUM16,
      TokenType::ENUM8,
      TokenType::ESCAPE,
      TokenType::EXECUTE,
      TokenType::EXISTS,
      TokenType::EXPORT,
      TokenType::FALSE,
      TokenType::FILE,
      TokenType::FILE_FORMAT,
      TokenType::FILTER,
      TokenType::FINAL,
      TokenType::FIRST,
      TokenType::FIXEDSTRING,
      TokenType::FLOAT,
      TokenType::FOREIGN_KEY,
      TokenType::FORMAT,
      TokenType::FUNCTION,
      TokenType::GEOGRAPHY,
      TokenType::GEOGRAPHYPOINT,
      TokenType::GEOMETRY,
      TokenType::GET,
      TokenType::HLLSKETCH,
      TokenType::HSTORE,
      TokenType::IDENTIFIER,
      TokenType::IMAGE,
      TokenType::INDEX,
      TokenType::INET,
      TokenType::INOUT,
      TokenType::INT,
      TokenType::INT128,
      TokenType::INT256,
      TokenType::INT4MULTIRANGE,
      TokenType::INT4RANGE,
      TokenType::INT8MULTIRANGE,
      TokenType::INT8RANGE,
      TokenType::INTERVAL,
      TokenType::IPADDRESS,
      TokenType::IPPREFIX,
      TokenType::IPV4,
      TokenType::IPV6,
      TokenType::IS,
      TokenType::ISNULL,
      TokenType::JSON,
      TokenType::JSONB,
      TokenType::KEEP,
      TokenType::KILL,
      TokenType::LIMIT,
      TokenType::LINESTRING,
      TokenType::LIST,
      TokenType::LOAD,
      TokenType::LOCALTIME,
      TokenType::LOCALTIMESTAMP,
      TokenType::LONGBLOB,
      TokenType::LONGTEXT,
      TokenType::LOWCARDINALITY,
      TokenType::MAP,
      TokenType::MATCH,
      TokenType::MEDIUMBLOB,
      TokenType::MEDIUMINT,
      TokenType::MEDIUMTEXT,
      TokenType::MERGE,
      TokenType::MODEL,
      TokenType::MONEY,
      TokenType::MULTILINESTRING,
      TokenType::MULTIPOLYGON,
      TokenType::NAME,
      TokenType::NAMESPACE,
      TokenType::NCHAR,
      TokenType::NESTED,
      TokenType::NEXT,
      TokenType::NOTHING,
      TokenType::NULL,
      TokenType::NULLABLE,
      TokenType::NUMMULTIRANGE,
      TokenType::NUMRANGE,
      TokenType::NVARCHAR,
      TokenType::OBJECT,
      TokenType::OBJECT_IDENTIFIER,
      TokenType::OFFSET,
      TokenType::OPERATOR,
      TokenType::ORDINALITY,
      TokenType::OUT,
      TokenType::OVER,
      TokenType::OVERLAPS,
      TokenType::OVERWRITE,
      TokenType::PARTITION,
      TokenType::PERCENT,
      TokenType::PIVOT,
      TokenType::POINT,
      TokenType::POLYGON,
      TokenType::PRAGMA,
      TokenType::PROCEDURE,
      TokenType::PROJECTION,
      TokenType::PSEUDO_TYPE,
      TokenType::PUT,
      TokenType::RANGE,
      TokenType::RECURSIVE,
      TokenType::REFERENCES,
      TokenType::REFRESH,
      TokenType::RENAME,
      TokenType::REPLACE,
      TokenType::RING,
      TokenType::ROLLUP,
      TokenType::ROW,
      TokenType::ROWS,
      TokenType::ROWVERSION,
      TokenType::SCHEMA,
      TokenType::SEMANTIC_VIEW,
      TokenType::SEQUENCE,
      TokenType::SERIAL,
      TokenType::SESSION,
      TokenType::SESSION_USER,
      TokenType::SET,
      TokenType::SETTINGS,
      TokenType::SHOW,
      TokenType::SIMPLEAGGREGATEFUNCTION,
      TokenType::SINK,
      TokenType::SMALLDATETIME,
      TokenType::SMALLINT,
      TokenType::SMALLMONEY,
      TokenType::SMALLSERIAL,
      TokenType::SOME,
      TokenType::SOURCE,
      TokenType::STAGE,
      TokenType::STORAGE_INTEGRATION,
      TokenType::STREAM,
      TokenType::STREAMLIT,
      TokenType::STRUCT,
      TokenType::SUPER,
      TokenType::TABLE,
      TokenType::TAG,
      TokenType::TDIGEST,
      TokenType::TEMPORARY,
      TokenType::TEXT,
      TokenType::TIME,
      TokenType::TIMESTAMP,
      TokenType::TIMESTAMPLTZ,
      TokenType::TIMESTAMPNTZ,
      TokenType::TIMESTAMPTZ,
      TokenType::TIMESTAMP_MS,
      TokenType::TIMESTAMP_NS,
      TokenType::TIMESTAMP_S,
      TokenType::TIMETZ,
      TokenType::TIME_NS,
      TokenType::TINYBLOB,
      TokenType::TINYINT,
      TokenType::TINYTEXT,
      TokenType::TOP,
      TokenType::TRIGGER,
      TokenType::TRUE,
      TokenType::TRUNCATE,
      TokenType::TSMULTIRANGE,
      TokenType::TSRANGE,
      TokenType::TSTZMULTIRANGE,
      TokenType::TSTZRANGE,
      TokenType::TYPE,
      TokenType::UBIGINT,
      TokenType::UDECIMAL,
      TokenType::UDOUBLE,
      TokenType::UINT,
      TokenType::UINT128,
      TokenType::UINT256,
      TokenType::UMEDIUMINT,
      TokenType::UNIQUE,
      TokenType::UNKNOWN,
      TokenType::UNNEST,
      TokenType::UNPIVOT,
      TokenType::UPDATE,
      TokenType::USE,
      TokenType::USERDEFINED,
      TokenType::USMALLINT,
      TokenType::UTINYINT,
      TokenType::UUID,
      TokenType::VAR,
      TokenType::VARBINARY,
      TokenType::VARCHAR,
      TokenType::VARIANT,
      TokenType::VECTOR,
      TokenType::VIEW,
      TokenType::VOID,
      TokenType::VOLATILE,
      TokenType::WAREHOUSE,
      TokenType::XML,
      TokenType::YEAR,
    ]),
    table_index_hint_tokens: TokenSet::new([
      TokenType::FORCE,
      TokenType::IGNORE,
      TokenType::USE,
    ]),
    table_postfix_tokens: TokenSet::new([
      TokenType::L_BRACE,
      TokenType::L_BRACKET,
      TokenType::L_PAREN,
      TokenType::PIVOT,
      TokenType::TABLE_SAMPLE,
      TokenType::UNPIVOT,
    ]),
    table_terminators: TokenSet::new([
      TokenType::ANTI,
      TokenType::ASOF,
      TokenType::COMMA,
      TokenType::CROSS,
      TokenType::EXCEPT,
      TokenType::FULL,
      TokenType::GROUP_BY,
      TokenType::HAVING,
      TokenType::INNER,
      TokenType::INTERSECT,
      TokenType::JOIN,
      TokenType::LEFT,
      TokenType::LIMIT,
      TokenType::NATURAL,
      TokenType::ON,
      TokenType::ORDER_BY,
      TokenType::OUTER,
      TokenType::POSITIONAL,
      TokenType::RIGHT,
      TokenType::R_PAREN,
      TokenType::SEMI,
      TokenType::SEMICOLON,
      TokenType::SENTINEL,
      TokenType::STRAIGHT_JOIN,
      TokenType::UNION,
      TokenType::WHERE,
    ]),
    term: Map::from_array([
      (TokenType::DASH, Kind::Sub),
      (TokenType::PLUS, Kind::Add),
      (TokenType::COLLATE, Kind::Collate),
    ]),
    text_match_excluded_tokens: TokenSet::new([
      TokenType::BIT_STRING,
      TokenType::BYTE_STRING,
      TokenType::HEREDOC_STRING,
      TokenType::HEX_STRING,
      TokenType::IDENTIFIER,
      TokenType::NATIONAL_STRING,
      TokenType::RAW_STRING,
      TokenType::STRING,
      TokenType::UNICODE_STRING,
    ]),
    times: TokenSet::new([TokenType::TIME, TokenType::TIMETZ]),
    timestamps: TokenSet::new([
      TokenType::TIME,
      TokenType::TIMESTAMP,
      TokenType::TIMESTAMPLTZ,
      TokenType::TIMESTAMPNTZ,
      TokenType::TIMESTAMPTZ,
      TokenType::TIMETZ,
    ]),
    transaction_characteristics: Map::from_array([
      (
        "ISOLATION",
        [
          ["LEVEL", "REPEATABLE", "READ"],
          ["LEVEL", "READ", "COMMITTED"],
          ["LEVEL", "READ", "UNCOMITTED"],
          ["LEVEL", "SERIALIZABLE"],
        ],
      ),
      ("READ", [["WRITE"], ["ONLY"]]),
    ]),
    transaction_kind: @set.Set::from_array([
      "DEFERRED", "EXCLUSIVE", "IMMEDIATE",
    ]),
    trigger_deferrable: Map::from_array([
      ("NOT", [["DEFERRABLE"]]),
      ("DEFERRABLE", []),
    ]),
    trigger_events: TokenSet::new([
      TokenType::DELETE,
      TokenType::INSERT,
      TokenType::TRUNCATE,
      TokenType::UPDATE,
    ]),
    trigger_timing: Map::from_array([
      ("INSTEAD", [["OF"]]),
      ("BEFORE", []),
      ("AFTER", []),
    ]),
    trim_pattern_first: false,
    trim_types: @set.Set::from_array(["BOTH", "LEADING", "TRAILING"]),
    typed_lambda_args: false,
    type_tokens: TokenSet::new([
      TokenType::AGGREGATEFUNCTION,
      TokenType::ARRAY,
      TokenType::BIGDECIMAL,
      TokenType::BIGINT,
      TokenType::BIGNUM,
      TokenType::BIGSERIAL,
      TokenType::BINARY,
      TokenType::BIT,
      TokenType::BLOB,
      TokenType::BOOLEAN,
      TokenType::BPCHAR,
      TokenType::CHAR,
      TokenType::DATE,
      TokenType::DATE32,
      TokenType::DATEMULTIRANGE,
      TokenType::DATERANGE,
      TokenType::DATETIME,
      TokenType::DATETIME2,
      TokenType::DATETIME64,
      TokenType::DECFLOAT,
      TokenType::DECIMAL,
      TokenType::DECIMAL128,
      TokenType::DECIMAL256,
      TokenType::DECIMAL32,
      TokenType::DECIMAL64,
      TokenType::DOUBLE,
      TokenType::DYNAMIC,
      TokenType::ENUM,
      TokenType::ENUM16,
      TokenType::ENUM8,
      TokenType::FIXEDSTRING,
      TokenType::FLOAT,
      TokenType::GEOGRAPHY,
      TokenType::GEOGRAPHYPOINT,
      TokenType::GEOMETRY,
      TokenType::HLLSKETCH,
      TokenType::HSTORE,
      TokenType::IMAGE,
      TokenType::INET,
      TokenType::INT,
      TokenType::INT128,
      TokenType::INT256,
      TokenType::INT4MULTIRANGE,
      TokenType::INT4RANGE,
      TokenType::INT8MULTIRANGE,
      TokenType::INT8RANGE,
      TokenType::INTERVAL,
      TokenType::IPADDRESS,
      TokenType::IPPREFIX,
      TokenType::IPV4,
      TokenType::IPV6,
      TokenType::JSON,
      TokenType::JSONB,
      TokenType::LINESTRING,
      TokenType::LIST,
      TokenType::LONGBLOB,
      TokenType::LONGTEXT,
      TokenType::LOWCARDINALITY,
      TokenType::MAP,
      TokenType::MEDIUMBLOB,
      TokenType::MEDIUMINT,
      TokenType::MEDIUMTEXT,
      TokenType::MONEY,
      TokenType::MULTILINESTRING,
      TokenType::MULTIPOLYGON,
      TokenType::NAME,
      TokenType::NCHAR,
      TokenType::NESTED,
      TokenType::NOTHING,
      TokenType::NULL,
      TokenType::NULLABLE,
      TokenType::NUMMULTIRANGE,
      TokenType::NUMRANGE,
      TokenType::NVARCHAR,
      TokenType::OBJECT,
      TokenType::OBJECT_IDENTIFIER,
      TokenType::POINT,
      TokenType::POLYGON,
      TokenType::PSEUDO_TYPE,
      TokenType::RANGE,
      TokenType::RING,
      TokenType::ROWVERSION,
      TokenType::SERIAL,
      TokenType::SIMPLEAGGREGATEFUNCTION,
      TokenType::SMALLDATETIME,
      TokenType::SMALLINT,
      TokenType::SMALLMONEY,
      TokenType::SMALLSERIAL,
      TokenType::STRUCT,
      TokenType::SUPER,
      TokenType::TDIGEST,
      TokenType::TEXT,
      TokenType::TIME,
      TokenType::TIMESTAMP,
      TokenType::TIMESTAMPLTZ,
      TokenType::TIMESTAMPNTZ,
      TokenType::TIMESTAMPTZ,
      TokenType::TIMESTAMP_MS,
      TokenType::TIMESTAMP_NS,
      TokenType::TIMESTAMP_S,
      TokenType::TIMETZ,
      TokenType::TIME_NS,
      TokenType::TINYBLOB,
      TokenType::TINYINT,
      TokenType::TINYTEXT,
      TokenType::TSMULTIRANGE,
      TokenType::TSRANGE,
      TokenType::TSTZMULTIRANGE,
      TokenType::TSTZRANGE,
      TokenType::UBIGINT,
      TokenType::UDECIMAL,
      TokenType::UDOUBLE,
      TokenType::UINT,
      TokenType::UINT128,
      TokenType::UINT256,
      TokenType::UMEDIUMINT,
      TokenType::UNION,
      TokenType::UNKNOWN,
      TokenType::USERDEFINED,
      TokenType::USMALLINT,
      TokenType::UTINYINT,
      TokenType::UUID,
      TokenType::VARBINARY,
      TokenType::VARCHAR,
      TokenType::VARIANT,
      TokenType::VECTOR,
      TokenType::VOID,
      TokenType::XML,
      TokenType::YEAR,
    ]),
    unnest_offset_alias_tokens: TokenSet::new([
      TokenType::AGGREGATEFUNCTION,
      TokenType::ALL,
      TokenType::ANALYZE,
      TokenType::ANY,
      TokenType::APPLY,
      TokenType::ARRAY,
      TokenType::ASC,
      TokenType::ATTACH,
      TokenType::AUTO_INCREMENT,
      TokenType::BEGIN,
      TokenType::BIGDECIMAL,
      TokenType::BIGINT,
      TokenType::BIGNUM,
      TokenType::BIGSERIAL,
      TokenType::BINARY,
      TokenType::BIT,
      TokenType::BLOB,
      TokenType::BOOLEAN,
      TokenType::BPCHAR,
      TokenType::CACHE,
      TokenType::CASE,
      TokenType::CHAR,
      TokenType::COLLATE,
      TokenType::COLUMN,
      TokenType::COMMAND,
      TokenType::COMMENT,
      TokenType::COMMIT,
      TokenType::CONSTRAINT,
      TokenType::COPY,
      TokenType::CUBE,
      TokenType::CURRENT_CATALOG,
      TokenType::CURRENT_DATE,
      TokenType::CURRENT_DATETIME,
      TokenType::CURRENT_ROLE,
      TokenType::CURRENT_SCHEMA,
      TokenType::CURRENT_TIME,
      TokenType::CURRENT_TIMESTAMP,
      TokenType::CURRENT_USER,
      TokenType::DATABASE,
      TokenType::DATE,
      TokenType::DATE32,
      TokenType::DATEMULTIRANGE,
      TokenType::DATERANGE,
      TokenType::DATETIME,
      TokenType::DATETIME2,
      TokenType::DATETIME64,
      TokenType::DECFLOAT,
      TokenType::DECIMAL,
      TokenType::DECIMAL128,
      TokenType::DECIMAL256,
      TokenType::DECIMAL32,
      TokenType::DECIMAL64,
      TokenType::DECLARE,
      TokenType::DEFAULT,
      TokenType::DELETE,
      TokenType::DESC,
      TokenType::DESCRIBE,
      TokenType::DETACH,
      TokenType::DICTIONARY,
      TokenType::DIV,
      TokenType::DOUBLE,
      TokenType::DYNAMIC,
      TokenType::END,
      TokenType::ENUM,
      TokenType::ENUM16,
      TokenType::ENUM8,
      TokenType::ESCAPE,
      TokenType::EXECUTE,
      TokenType::EXISTS,
      TokenType::EXPORT,
      TokenType::FALSE,
      TokenType::FILE,
      TokenType::FILE_FORMAT,
      TokenType::FILTER,
      TokenType::FINAL,
      TokenType::FIRST,
      TokenType::FIXEDSTRING,
      TokenType::FLOAT,
      TokenType::FOREIGN_KEY,
      TokenType::FORMAT,
      TokenType::FUNCTION,
      TokenType::GEOGRAPHY,
      TokenType::GEOGRAPHYPOINT,
      TokenType::GEOMETRY,
      TokenType::GET,
      TokenType::HLLSKETCH,
      TokenType::HSTORE,
      TokenType::IDENTIFIER,
      TokenType::IMAGE,
      TokenType::INDEX,
      TokenType::INET,
      TokenType::INOUT,
      TokenType::INT,
      TokenType::INT128,
      TokenType::INT256,
      TokenType::INT4MULTIRANGE,
      TokenType::INT4RANGE,
      TokenType::INT8MULTIRANGE,
      TokenType::INT8RANGE,
      TokenType::INTERVAL,
      TokenType::IPADDRESS,
      TokenType::IPPREFIX,
      TokenType::IPV4,
      TokenType::IPV6,
      TokenType::IS,
      TokenType::ISNULL,
      TokenType::JSON,
      TokenType::JSONB,
      TokenType::KEEP,
      TokenType::KILL,
      TokenType::LIMIT,
      TokenType::LINESTRING,
      TokenType::LIST,
      TokenType::LOAD,
      TokenType::LOCALTIME,
      TokenType::LOCALTIMESTAMP,
      TokenType::LONGBLOB,
      TokenType::LONGTEXT,
      TokenType::LOWCARDINALITY,
      TokenType::MAP,
      TokenType::MATCH,
      TokenType::MEDIUMBLOB,
      TokenType::MEDIUMINT,
      TokenType::MEDIUMTEXT,
      TokenType::MERGE,
      TokenType::MODEL,
      TokenType::MONEY,
      TokenType::MULTILINESTRING,
      TokenType::MULTIPOLYGON,
      TokenType::NAME,
      TokenType::NAMESPACE,
      TokenType::NCHAR,
      TokenType::NESTED,
      TokenType::NEXT,
      TokenType::NOTHING,
      TokenType::NULL,
      TokenType::NULLABLE,
      TokenType::NUMMULTIRANGE,
      TokenType::NUMRANGE,
      TokenType::NVARCHAR,
      TokenType::OBJECT,
      TokenType::OBJECT_IDENTIFIER,
      TokenType::OFFSET,
      TokenType::OPERATOR,
      TokenType::ORDINALITY,
      TokenType::OUT,
      TokenType::OVER,
      TokenType::OVERLAPS,
      TokenType::OVERWRITE,
      TokenType::PARTITION,
      TokenType::PERCENT,
      TokenType::PIVOT,
      TokenType::POINT,
      TokenType::POLYGON,
      TokenType::PRAGMA,
      TokenType::PROCEDURE,
      TokenType::PROJECTION,
      TokenType::PSEUDO_TYPE,
      TokenType::PUT,
      TokenType::RANGE,
      TokenType::RECURSIVE,
      TokenType::REFERENCES,
      TokenType::REFRESH,
      TokenType::RENAME,
      TokenType::REPLACE,
      TokenType::RING,
      TokenType::ROLLUP,
      TokenType::ROW,
      TokenType::ROWS,
      TokenType::ROWVERSION,
      TokenType::SCHEMA,
      TokenType::SEMANTIC_VIEW,
      TokenType::SEQUENCE,
      TokenType::SERIAL,
      TokenType::SESSION,
      TokenType::SESSION_USER,
      TokenType::SET,
      TokenType::SETTINGS,
      TokenType::SHOW,
      TokenType::SIMPLEAGGREGATEFUNCTION,
      TokenType::SINK,
      TokenType::SMALLDATETIME,
      TokenType::SMALLINT,
      TokenType::SMALLMONEY,
      TokenType::SMALLSERIAL,
      TokenType::SOME,
      TokenType::SOURCE,
      TokenType::STAGE,
      TokenType::STORAGE_INTEGRATION,
      TokenType::STRAIGHT_JOIN,
      TokenType::STREAM,
      TokenType::STREAMLIT,
      TokenType::STRUCT,
      TokenType::SUPER,
      TokenType::TABLE,
      TokenType::TAG,
      TokenType::TDIGEST,
      TokenType::TEMPORARY,
      TokenType::TEXT,
      TokenType::TIME,
      TokenType::TIMESTAMP,
      TokenType::TIMESTAMPLTZ,
      TokenType::TIMESTAMPNTZ,
      TokenType::TIMESTAMPTZ,
      TokenType::TIMESTAMP_MS,
      TokenType::TIMESTAMP_NS,
      TokenType::TIMESTAMP_S,
      TokenType::TIMETZ,
      TokenType::TIME_NS,
      TokenType::TINYBLOB,
      TokenType::TINYINT,
      TokenType::TINYTEXT,
      TokenType::TOP,
      TokenType::TRIGGER,
      TokenType::TRUE,
      TokenType::TRUNCATE,
      TokenType::TSMULTIRANGE,
      TokenType::TSRANGE,
      TokenType::TSTZMULTIRANGE,
      TokenType::TSTZRANGE,
      TokenType::TYPE,
      TokenType::UBIGINT,
      TokenType::UDECIMAL,
      TokenType::UDOUBLE,
      TokenType::UINT,
      TokenType::UINT128,
      TokenType::UINT256,
      TokenType::UMEDIUMINT,
      TokenType::UNIQUE,
      TokenType::UNKNOWN,
      TokenType::UNNEST,
      TokenType::UNPIVOT,
      TokenType::UPDATE,
      TokenType::USE,
      TokenType::USERDEFINED,
      TokenType::USMALLINT,
      TokenType::UTINYINT,
      TokenType::UUID,
      TokenType::VAR,
      TokenType::VARBINARY,
      TokenType::VARCHAR,
      TokenType::VARIANT,
      TokenType::VECTOR,
      TokenType::VIEW,
      TokenType::VOID,
      TokenType::VOLATILE,
      TokenType::WAREHOUSE,
      TokenType::XML,
      TokenType::YEAR,
    ]),
    unpivot_value_columns_first: false,
    update_alias_tokens: TokenSet::new([
      TokenType::AGGREGATEFUNCTION,
      TokenType::ALL,
      TokenType::ANALYZE,
      TokenType::ANY,
      TokenType::APPLY,
      TokenType::ARRAY,
      TokenType::ASC,
      TokenType::ATTACH,
      TokenType::AUTO_INCREMENT,
      TokenType::BEGIN,
      TokenType::BIGDECIMAL,
      TokenType::BIGINT,
      TokenType::BIGNUM,
      TokenType::BIGSERIAL,
      TokenType::BINARY,
      TokenType::BIT,
      TokenType::BLOB,
      TokenType::BOOLEAN,
      TokenType::BPCHAR,
      TokenType::CACHE,
      TokenType::CASE,
      TokenType::CHAR,
      TokenType::COLLATE,
      TokenType::COLUMN,
      TokenType::COMMAND,
      TokenType::COMMENT,
      TokenType::COMMIT,
      TokenType::CONSTRAINT,
      TokenType::COPY,
      TokenType::CUBE,
      TokenType::CURRENT_CATALOG,
      TokenType::CURRENT_DATE,
      TokenType::CURRENT_DATETIME,
      TokenType::CURRENT_ROLE,
      TokenType::CURRENT_SCHEMA,
      TokenType::CURRENT_TIME,
      TokenType::CURRENT_TIMESTAMP,
      TokenType::CURRENT_USER,
      TokenType::DATABASE,
      TokenType::DATE,
      TokenType::DATE32,
      TokenType::DATEMULTIRANGE,
      TokenType::DATERANGE,
      TokenType::DATETIME,
      TokenType::DATETIME2,
      TokenType::DATETIME64,
      TokenType::DECFLOAT,
      TokenType::DECIMAL,
      TokenType::DECIMAL128,
      TokenType::DECIMAL256,
      TokenType::DECIMAL32,
      TokenType::DECIMAL64,
      TokenType::DECLARE,
      TokenType::DEFAULT,
      TokenType::DELETE,
      TokenType::DESC,
      TokenType::DESCRIBE,
      TokenType::DETACH,
      TokenType::DICTIONARY,
      TokenType::DIV,
      TokenType::DOUBLE,
      TokenType::DYNAMIC,
      TokenType::END,
      TokenType::ENUM,
      TokenType::ENUM16,
      TokenType::ENUM8,
      TokenType::ESCAPE,
      TokenType::EXECUTE,
      TokenType::EXISTS,
      TokenType::EXPORT,
      TokenType::FALSE,
      TokenType::FILE,
      TokenType::FILE_FORMAT,
      TokenType::FILTER,
      TokenType::FINAL,
      TokenType::FIRST,
      TokenType::FIXEDSTRING,
      TokenType::FLOAT,
      TokenType::FOREIGN_KEY,
      TokenType::FORMAT,
      TokenType::FUNCTION,
      TokenType::GEOGRAPHY,
      TokenType::GEOGRAPHYPOINT,
      TokenType::GEOMETRY,
      TokenType::GET,
      TokenType::HLLSKETCH,
      TokenType::HSTORE,
      TokenType::IDENTIFIER,
      TokenType::IMAGE,
      TokenType::INDEX,
      TokenType::INET,
      TokenType::INOUT,
      TokenType::INT,
      TokenType::INT128,
      TokenType::INT256,
      TokenType::INT4MULTIRANGE,
      TokenType::INT4RANGE,
      TokenType::INT8MULTIRANGE,
      TokenType::INT8RANGE,
      TokenType::INTERVAL,
      TokenType::IPADDRESS,
      TokenType::IPPREFIX,
      TokenType::IPV4,
      TokenType::IPV6,
      TokenType::IS,
      TokenType::ISNULL,
      TokenType::JSON,
      TokenType::JSONB,
      TokenType::KEEP,
      TokenType::KILL,
      TokenType::LIMIT,
      TokenType::LINESTRING,
      TokenType::LIST,
      TokenType::LOAD,
      TokenType::LOCALTIME,
      TokenType::LOCALTIMESTAMP,
      TokenType::LONGBLOB,
      TokenType::LONGTEXT,
      TokenType::LOWCARDINALITY,
      TokenType::MAP,
      TokenType::MATCH,
      TokenType::MEDIUMBLOB,
      TokenType::MEDIUMINT,
      TokenType::MEDIUMTEXT,
      TokenType::MERGE,
      TokenType::MODEL,
      TokenType::MONEY,
      TokenType::MULTILINESTRING,
      TokenType::MULTIPOLYGON,
      TokenType::NAME,
      TokenType::NAMESPACE,
      TokenType::NCHAR,
      TokenType::NESTED,
      TokenType::NEXT,
      TokenType::NOTHING,
      TokenType::NULL,
      TokenType::NULLABLE,
      TokenType::NUMMULTIRANGE,
      TokenType::NUMRANGE,
      TokenType::NVARCHAR,
      TokenType::OBJECT,
      TokenType::OBJECT_IDENTIFIER,
      TokenType::OFFSET,
      TokenType::OPERATOR,
      TokenType::ORDINALITY,
      TokenType::OUT,
      TokenType::OVER,
      TokenType::OVERLAPS,
      TokenType::OVERWRITE,
      TokenType::PARTITION,
      TokenType::PERCENT,
      TokenType::PIVOT,
      TokenType::POINT,
      TokenType::POLYGON,
      TokenType::PRAGMA,
      TokenType::PROCEDURE,
      TokenType::PROJECTION,
      TokenType::PSEUDO_TYPE,
      TokenType::PUT,
      TokenType::RANGE,
      TokenType::RECURSIVE,
      TokenType::REFERENCES,
      TokenType::REFRESH,
      TokenType::RENAME,
      TokenType::REPLACE,
      TokenType::RING,
      TokenType::ROLLUP,
      TokenType::ROW,
      TokenType::ROWS,
      TokenType::ROWVERSION,
      TokenType::SCHEMA,
      TokenType::SEMANTIC_VIEW,
      TokenType::SEQUENCE,
      TokenType::SERIAL,
      TokenType::SESSION,
      TokenType::SESSION_USER,
      TokenType::SETTINGS,
      TokenType::SHOW,
      TokenType::SIMPLEAGGREGATEFUNCTION,
      TokenType::SINK,
      TokenType::SMALLDATETIME,
      TokenType::SMALLINT,
      TokenType::SMALLMONEY,
      TokenType::SMALLSERIAL,
      TokenType::SOME,
      TokenType::SOURCE,
      TokenType::STAGE,
      TokenType::STORAGE_INTEGRATION,
      TokenType::STRAIGHT_JOIN,
      TokenType::STREAM,
      TokenType::STREAMLIT,
      TokenType::STRUCT,
      TokenType::SUPER,
      TokenType::TABLE,
      TokenType::TAG,
      TokenType::TDIGEST,
      TokenType::TEMPORARY,
      TokenType::TEXT,
      TokenType::TIME,
      TokenType::TIMESTAMP,
      TokenType::TIMESTAMPLTZ,
      TokenType::TIMESTAMPNTZ,
      TokenType::TIMESTAMPTZ,
      TokenType::TIMESTAMP_MS,
      TokenType::TIMESTAMP_NS,
      TokenType::TIMESTAMP_S,
      TokenType::TIMETZ,
      TokenType::TIME_NS,
      TokenType::TINYBLOB,
      TokenType::TINYINT,
      TokenType::TINYTEXT,
      TokenType::TOP,
      TokenType::TRIGGER,
      TokenType::TRUE,
      TokenType::TRUNCATE,
      TokenType::TSMULTIRANGE,
      TokenType::TSRANGE,
      TokenType::TSTZMULTIRANGE,
      TokenType::TSTZRANGE,
      TokenType::TYPE,
      TokenType::UBIGINT,
      TokenType::UDECIMAL,
      TokenType::UDOUBLE,
      TokenType::UINT,
      TokenType::UINT128,
      TokenType::UINT256,
      TokenType::UMEDIUMINT,
      TokenType::UNIQUE,
      TokenType::UNKNOWN,
      TokenType::UNNEST,
      TokenType::UNPIVOT,
      TokenType::UPDATE,
      TokenType::USE,
      TokenType::USERDEFINED,
      TokenType::USMALLINT,
      TokenType::UTINYINT,
      TokenType::UUID,
      TokenType::VAR,
      TokenType::VARBINARY,
      TokenType::VARCHAR,
      TokenType::VARIANT,
      TokenType::VECTOR,
      TokenType::VIEW,
      TokenType::VOID,
      TokenType::VOLATILE,
      TokenType::WAREHOUSE,
      TokenType::XML,
      TokenType::YEAR,
    ]),
    usables: Map::from_array([
      ("ROLE", []),
      ("WAREHOUSE", []),
      ("DATABASE", []),
      ("SCHEMA", []),
      ("CATALOG", []),
    ]),
    values_followed_by_paren: true,
    version_phrases: [
      (["FOR", "SYSTEM_TIME"], "TIMESTAMP"),
      (["FOR", "SYSTEM", "TIME"], "TIMESTAMP"),
      (["FOR", "TIMESTAMP"], "TIMESTAMP"),
      (["FOR", "VERSION"], "VERSION"),
      (["TIMESTAMP", "AS", "OF"], "TIMESTAMP"),
      (["VERSION", "AS", "OF"], "VERSION"),
    ],
    view_attributes: @set.Set::from_array([
      "ENCRYPTION", "SCHEMABINDING", "VIEW_METADATA",
    ]),
    window_alias_tokens: TokenSet::new([
      TokenType::AGGREGATEFUNCTION,
      TokenType::ALL,
      TokenType::ANALYZE,
      TokenType::ANTI,
      TokenType::ANY,
      TokenType::APPLY,
      TokenType::ARRAY,
      TokenType::ASC,
      TokenType::ASOF,
      TokenType::ATTACH,
      TokenType::AUTO_INCREMENT,
      TokenType::BEGIN,
      TokenType::BIGDECIMAL,
      TokenType::BIGINT,
      TokenType::BIGNUM,
      TokenType::BIGSERIAL,
      TokenType::BINARY,
      TokenType::BIT,
      TokenType::BLOB,
      TokenType::BOOLEAN,
      TokenType::BPCHAR,
      TokenType::CACHE,
      TokenType::CASE,
      TokenType::CHAR,
      TokenType::COLLATE,
      TokenType::COLUMN,
      TokenType::COMMAND,
      TokenType::COMMENT,
      TokenType::COMMIT,
      TokenType::CONSTRAINT,
      TokenType::COPY,
      TokenType::CUBE,
      TokenType::CURRENT_CATALOG,
      TokenType::CURRENT_DATE,
      TokenType::CURRENT_DATETIME,
      TokenType::CURRENT_ROLE,
      TokenType::CURRENT_SCHEMA,
      TokenType::CURRENT_TIME,
      TokenType::CURRENT_TIMESTAMP,
      TokenType::CURRENT_USER,
      TokenType::DATABASE,
      TokenType::DATE,
      TokenType::DATE32,
      TokenType::DATEMULTIRANGE,
      TokenType::DATERANGE,
      TokenType::DATETIME,
      TokenType::DATETIME2,
      TokenType::DATETIME64,
      TokenType::DECFLOAT,
      TokenType::DECIMAL,
      TokenType::DECIMAL128,
      TokenType::DECIMAL256,
      TokenType::DECIMAL32,
      TokenType::DECIMAL64,
      TokenType::DECLARE,
      TokenType::DEFAULT,
      TokenType::DELETE,
      TokenType::DESC,
      TokenType::DESCRIBE,
      TokenType::DETACH,
      TokenType::DICTIONARY,
      TokenType::DIV,
      TokenType::DOUBLE,
      TokenType::DYNAMIC,
      TokenType::END,
      TokenType::ENUM,
      TokenType::ENUM16,
      TokenType::ENUM8,
      TokenType::ESCAPE,
      TokenType::EXECUTE,
      TokenType::EXISTS,
      TokenType::EXPORT,
      TokenType::FALSE,
      TokenType::FILE,
      TokenType::FILE_FORMAT,
      TokenType::FILTER,
      TokenType::FINAL,
      TokenType::FIRST,
      TokenType::FIXEDSTRING,
      TokenType::FLOAT,
      TokenType::FOREIGN_KEY,
      TokenType::FORMAT,
      TokenType::FULL,
      TokenType::FUNCTION,
      TokenType::GEOGRAPHY,
      TokenType::GEOGRAPHYPOINT,
      TokenType::GEOMETRY,
      TokenType::GET,
      TokenType::HLLSKETCH,
      TokenType::HSTORE,
      TokenType::IDENTIFIER,
      TokenType::IMAGE,
      TokenType::INDEX,
      TokenType::INET,
      TokenType::INOUT,
      TokenType::INT,
      TokenType::INT128,
      TokenType::INT256,
      TokenType::INT4MULTIRANGE,
      TokenType::INT4RANGE,
      TokenType::INT8MULTIRANGE,
      TokenType::INT8RANGE,
      TokenType::INTERVAL,
      TokenType::IPADDRESS,
      TokenType::IPPREFIX,
      TokenType::IPV4,
      TokenType::IPV6,
      TokenType::IS,
      TokenType::ISNULL,
      TokenType::JSON,
      TokenType::JSONB,
      TokenType::KEEP,
      TokenType::KILL,
      TokenType::LEFT,
      TokenType::LIMIT,
      TokenType::LINESTRING,
      TokenType::LIST,
      TokenType::LOAD,
      TokenType::LOCALTIME,
      TokenType::LOCALTIMESTAMP,
      TokenType::LOCK,
      TokenType::LONGBLOB,
      TokenType::LONGTEXT,
      TokenType::LOWCARDINALITY,
      TokenType::MAP,
      TokenType::MATCH,
      TokenType::MEDIUMBLOB,
      TokenType::MEDIUMINT,
      TokenType::MEDIUMTEXT,
      TokenType::MERGE,
      TokenType::MODEL,
      TokenType::MONEY,
      TokenType::MULTILINESTRING,
      TokenType::MULTIPOLYGON,
      TokenType::NAME,
      TokenType::NAMESPACE,
      TokenType::NATURAL,
      TokenType::NCHAR,
      TokenType::NESTED,
      TokenType::NEXT,
      TokenType::NOTHING,
      TokenType::NULL,
      TokenType::NULLABLE,
      TokenType::NUMMULTIRANGE,
      TokenType::NUMRANGE,
      TokenType::NVARCHAR,
      TokenType::OBJECT,
      TokenType::OBJECT_IDENTIFIER,
      TokenType::OFFSET,
      TokenType::OPERATOR,
      TokenType::ORDINALITY,
      TokenType::OUT,
      TokenType::OVER,
      TokenType::OVERLAPS,
      TokenType::OVERWRITE,
      TokenType::PARTITION,
      TokenType::PERCENT,
      TokenType::PIVOT,
      TokenType::POINT,
      TokenType::POLYGON,
      TokenType::PRAGMA,
      TokenType::PROCEDURE,
      TokenType::PROJECTION,
      TokenType::PSEUDO_TYPE,
      TokenType::PUT,
      TokenType::RECURSIVE,
      TokenType::REFERENCES,
      TokenType::REFRESH,
      TokenType::RENAME,
      TokenType::REPLACE,
      TokenType::RIGHT,
      TokenType::RING,
      TokenType::ROLLUP,
      TokenType::ROW,
      TokenType::ROWVERSION,
      TokenType::SCHEMA,
      TokenType::SEMANTIC_VIEW,
      TokenType::SEMI,
      TokenType::SEQUENCE,
      TokenType::SERIAL,
      TokenType::SESSION,
      TokenType::SESSION_USER,
      TokenType::SET,
      TokenType::SETTINGS,
      TokenType::SHOW,
      TokenType::SIMPLEAGGREGATEFUNCTION,
      TokenType::SINK,
      TokenType::SMALLDATETIME,
      TokenType::SMALLINT,
      TokenType::SMALLMONEY,
      TokenType::SMALLSERIAL,
      TokenType::SOME,
      TokenType::SOURCE,
      TokenType::STAGE,
      TokenType::STORAGE_INTEGRATION,
      TokenType::STRAIGHT_JOIN,
      TokenType::STREAM,
      TokenType::STREAMLIT,
      TokenType::STRUCT,
      TokenType::SUPER,
      TokenType::TABLE,
      TokenType::TAG,
      TokenType::TDIGEST,
      TokenType::TEMPORARY,
      TokenType::TEXT,
      TokenType::TIME,
      TokenType::TIMESTAMP,
      TokenType::TIMESTAMPLTZ,
      TokenType::TIMESTAMPNTZ,
      TokenType::TIMESTAMPTZ,
      TokenType::TIMESTAMP_MS,
      TokenType::TIMESTAMP_NS,
      TokenType::TIMESTAMP_S,
      TokenType::TIMETZ,
      TokenType::TIME_NS,
      TokenType::TINYBLOB,
      TokenType::TINYINT,
      TokenType::TINYTEXT,
      TokenType::TOP,
      TokenType::TRIGGER,
      TokenType::TRUE,
      TokenType::TRUNCATE,
      TokenType::TSMULTIRANGE,
      TokenType::TSRANGE,
      TokenType::TSTZMULTIRANGE,
      TokenType::TSTZRANGE,
      TokenType::TYPE,
      TokenType::UBIGINT,
      TokenType::UDECIMAL,
      TokenType::UDOUBLE,
      TokenType::UINT,
      TokenType::UINT128,
      TokenType::UINT256,
      TokenType::UMEDIUMINT,
      TokenType::UNIQUE,
      TokenType::UNKNOWN,
      TokenType::UNNEST,
      TokenType::UNPIVOT,
      TokenType::UPDATE,
      TokenType::USE,
      TokenType::USERDEFINED,
      TokenType::USMALLINT,
      TokenType::UTINYINT,
      TokenType::UUID,
      TokenType::VAR,
      TokenType::VARBINARY,
      TokenType::VARCHAR,
      TokenType::VARIANT,
      TokenType::VECTOR,
      TokenType::VIEW,
      TokenType::VOID,
      TokenType::VOLATILE,
      TokenType::WAREHOUSE,
      TokenType::WINDOW,
      TokenType::XML,
      TokenType::YEAR,
    ]),
    window_before_paren_tokens: TokenSet::new([TokenType::OVER]),
    window_exclude_options: Map::from_array([
      ("NO", [["OTHERS"]]),
      ("CURRENT", [["ROW"]]),
      ("GROUP", []),
      ("TIES", []),
    ]),
    window_sides: @set.Set::from_array(["FOLLOWING", "PRECEDING"]),
    wrapped_transform_column_constraint: true,
    zone_aware_timestamp_constructor: false,
  }
}

///|
/// Data attributes of the Python `Generator` class.
pub(all) struct GeneratorConfig {
  mut alter_set_type : String
  mut alter_set_wrapped : Bool
  mut alter_table_include_column_keyword : Bool
  mut array_concat_is_var_len : Bool
  mut array_size_dim_required : Bool?
  mut array_size_name : String
  mut auto_refresh_bare_intervals : Bool
  mut can_implement_array_any : Bool
  mut collate_is_func : Bool
  mut computed_column_with_type : Bool
  mut copy_has_into_keyword : Bool
  mut copy_params_are_wrapped : Bool
  mut copy_params_eq_required : Bool
  mut create_function_return_as : Bool
  mut cte_recursive_keyword_required : Bool
  mut data_type_specifiers_allowed : Bool
  mut declare_default_assignment : String
  mut directed_joins : Bool
  mut duplicate_key_update_with_set : Bool
  mut ensure_bools : Bool
  mut except_intersect_support_all_clause : Bool
  mut exclude_comments : Array[Kind]
  mut expressions_without_nested_ctes : Array[Kind]
  mut expression_precedes_properties_creatables : @set.Set[String]
  mut extract_allows_quotes : Bool
  mut groupings_sep : String
  mut hex_func : String
  mut historical_data_post_alias : Bool
  mut ignore_nulls_before_order : Bool
  mut ignore_nulls_in_func : Bool
  mut index_on : String
  mut inout_separator : String
  mut insert_overwrite : String
  mut interval_allows_plural_form : Bool
  mut is_bool_allowed : Bool
  mut join_hints : Bool
  mut json_key_value_pair_sep : String
  mut json_path_bracketed_key_supported : Bool
  mut json_path_key_quoted_forces_brackets : Bool
  mut json_path_single_quote_escape : Bool
  mut json_type_required_for_extraction : Bool
  mut last_day_supports_date_part : Bool
  mut like_property_inside_schema : Bool
  mut limit_fetch : String
  mut limit_is_top : Bool
  mut limit_only_literals : Bool
  mut locking_reads_supported : Bool
  mut matched_by_source : Bool
  mut match_against_table_prefix : String?
  mut mod_operator : String
  mut mod_paren_parent_types : Array[Kind]
  mut multi_arg_distinct : Bool
  mut named_placeholder_token : String
  mut normalize_extract_date_parts : Bool
  mut null_ordering_supported : Bool?
  mut nvl2_supported : Bool
  mut pad_fill_pattern_is_required : Bool
  mut parameterizable_text_types : Array[DType]
  mut parameter_token : String
  mut parse_json_name : String?
  mut pivot_alias_with_as : Bool
  mut properties_location : Map[Kind, PropertiesLocation]
  mut query_hints : Bool
  mut query_hint_sep : String
  mut quote_json_path : Bool
  mut rename_table_with_db : Bool
  mut reserved_keywords : @set.Set[String]
  mut respect_ignore_nulls_unsupported_expressions : Array[Kind]
  mut returning_end : Bool
  mut select_kinds : Array[String]
  mut semi_anti_join_with_side : Bool
  mut sentinel_line_break : String
  mut set_assignment_requires_variable_keyword : Bool
  mut set_op_limits : Bool
  mut set_op_modifiers : Bool
  mut set_op_parenthesized_operands : Bool
  mut single_string_interval : Bool
  mut star_except : String
  mut star_exclude_requires_derived_table : Bool
  mut struct_delimiter : Array[String]
  mut supported_json_path_parts : Array[Kind]
  mut supports_alter_column_if_exists : Bool
  mut supports_alter_column_nullability : Bool
  mut supports_between_flags : Bool
  mut supports_change_column : Bool
  mut supports_convert_timezone : Bool
  mut supports_create_table_like : Bool
  mut supports_decode_case : Bool
  mut supports_drop_alter_iceberg_property : Bool
  mut supports_exploding_projections : Bool
  mut supports_grouping_sets_as_suffix : Bool
  mut supports_like_quantifiers : Bool
  mut supports_median : Bool
  mut supports_merge_where : Bool
  mut supports_modify_column : Bool
  mut supports_named_cte_columns : Bool
  mut supports_select_into : Bool
  mut supports_single_arg_concat : Bool
  mut supports_table_alias_columns : Bool
  mut supports_table_copy : Bool
  mut supports_to_number : Bool
  mut supports_uescape : Bool
  mut supports_unix_seconds : Bool
  mut supports_unlogged_tables : Bool
  mut supports_window_exclude : Bool
  mut tablesample_keywords : String
  mut tablesample_requires_parens : Bool
  mut tablesample_seed_keyword : String
  mut tablesample_size_is_rows : Bool
  mut tablesample_with_method : Bool
  mut table_hints : Bool
  mut time_part_singulars : Map[String, String]
  mut token_mapping : Map[TokenType, String]
  mut try_supported : Bool
  mut type_mapping : Map[DType, String]
  mut tz_to_with_time_zone : Bool
  mut unnest_with_ordinality : Bool
  mut unpivot_aliases_are_identifiers : Bool
  mut unsupported_types : Array[DType]
  mut unwrapped_interval_values : Array[Kind]
  mut update_statement_supports_from : Bool
  mut values_as_table : Bool
  mut window_funcs_with_null_ordering : Array[Kind]
  mut with_properties_prefix : String
  mut with_separated_comments : Array[Kind]
  mut wrap_derived_values : Bool
}

///|
pub fn GeneratorConfig::copy(self : GeneratorConfig) -> GeneratorConfig {
  {
    alter_set_type: self.alter_set_type,
    alter_set_wrapped: self.alter_set_wrapped,
    alter_table_include_column_keyword: self.alter_table_include_column_keyword,
    array_concat_is_var_len: self.array_concat_is_var_len,
    array_size_dim_required: self.array_size_dim_required,
    array_size_name: self.array_size_name,
    auto_refresh_bare_intervals: self.auto_refresh_bare_intervals,
    can_implement_array_any: self.can_implement_array_any,
    collate_is_func: self.collate_is_func,
    computed_column_with_type: self.computed_column_with_type,
    copy_has_into_keyword: self.copy_has_into_keyword,
    copy_params_are_wrapped: self.copy_params_are_wrapped,
    copy_params_eq_required: self.copy_params_eq_required,
    create_function_return_as: self.create_function_return_as,
    cte_recursive_keyword_required: self.cte_recursive_keyword_required,
    data_type_specifiers_allowed: self.data_type_specifiers_allowed,
    declare_default_assignment: self.declare_default_assignment,
    directed_joins: self.directed_joins,
    duplicate_key_update_with_set: self.duplicate_key_update_with_set,
    ensure_bools: self.ensure_bools,
    except_intersect_support_all_clause: self.except_intersect_support_all_clause,
    exclude_comments: self.exclude_comments.copy(),
    expressions_without_nested_ctes: self.expressions_without_nested_ctes.copy(),
    expression_precedes_properties_creatables: self.expression_precedes_properties_creatables.copy(),
    extract_allows_quotes: self.extract_allows_quotes,
    groupings_sep: self.groupings_sep,
    hex_func: self.hex_func,
    historical_data_post_alias: self.historical_data_post_alias,
    ignore_nulls_before_order: self.ignore_nulls_before_order,
    ignore_nulls_in_func: self.ignore_nulls_in_func,
    index_on: self.index_on,
    inout_separator: self.inout_separator,
    insert_overwrite: self.insert_overwrite,
    interval_allows_plural_form: self.interval_allows_plural_form,
    is_bool_allowed: self.is_bool_allowed,
    join_hints: self.join_hints,
    json_key_value_pair_sep: self.json_key_value_pair_sep,
    json_path_bracketed_key_supported: self.json_path_bracketed_key_supported,
    json_path_key_quoted_forces_brackets: self.json_path_key_quoted_forces_brackets,
    json_path_single_quote_escape: self.json_path_single_quote_escape,
    json_type_required_for_extraction: self.json_type_required_for_extraction,
    last_day_supports_date_part: self.last_day_supports_date_part,
    like_property_inside_schema: self.like_property_inside_schema,
    limit_fetch: self.limit_fetch,
    limit_is_top: self.limit_is_top,
    limit_only_literals: self.limit_only_literals,
    locking_reads_supported: self.locking_reads_supported,
    matched_by_source: self.matched_by_source,
    match_against_table_prefix: self.match_against_table_prefix,
    mod_operator: self.mod_operator,
    mod_paren_parent_types: self.mod_paren_parent_types.copy(),
    multi_arg_distinct: self.multi_arg_distinct,
    named_placeholder_token: self.named_placeholder_token,
    normalize_extract_date_parts: self.normalize_extract_date_parts,
    null_ordering_supported: self.null_ordering_supported,
    nvl2_supported: self.nvl2_supported,
    pad_fill_pattern_is_required: self.pad_fill_pattern_is_required,
    parameterizable_text_types: self.parameterizable_text_types.copy(),
    parameter_token: self.parameter_token,
    parse_json_name: self.parse_json_name,
    pivot_alias_with_as: self.pivot_alias_with_as,
    properties_location: self.properties_location.copy(),
    query_hints: self.query_hints,
    query_hint_sep: self.query_hint_sep,
    quote_json_path: self.quote_json_path,
    rename_table_with_db: self.rename_table_with_db,
    reserved_keywords: self.reserved_keywords.copy(),
    respect_ignore_nulls_unsupported_expressions: self.respect_ignore_nulls_unsupported_expressions.copy(),
    returning_end: self.returning_end,
    select_kinds: self.select_kinds.copy(),
    semi_anti_join_with_side: self.semi_anti_join_with_side,
    sentinel_line_break: self.sentinel_line_break,
    set_assignment_requires_variable_keyword: self.set_assignment_requires_variable_keyword,
    set_op_limits: self.set_op_limits,
    set_op_modifiers: self.set_op_modifiers,
    set_op_parenthesized_operands: self.set_op_parenthesized_operands,
    single_string_interval: self.single_string_interval,
    star_except: self.star_except,
    star_exclude_requires_derived_table: self.star_exclude_requires_derived_table,
    struct_delimiter: self.struct_delimiter.copy(),
    supported_json_path_parts: self.supported_json_path_parts.copy(),
    supports_alter_column_if_exists: self.supports_alter_column_if_exists,
    supports_alter_column_nullability: self.supports_alter_column_nullability,
    supports_between_flags: self.supports_between_flags,
    supports_change_column: self.supports_change_column,
    supports_convert_timezone: self.supports_convert_timezone,
    supports_create_table_like: self.supports_create_table_like,
    supports_decode_case: self.supports_decode_case,
    supports_drop_alter_iceberg_property: self.supports_drop_alter_iceberg_property,
    supports_exploding_projections: self.supports_exploding_projections,
    supports_grouping_sets_as_suffix: self.supports_grouping_sets_as_suffix,
    supports_like_quantifiers: self.supports_like_quantifiers,
    supports_median: self.supports_median,
    supports_merge_where: self.supports_merge_where,
    supports_modify_column: self.supports_modify_column,
    supports_named_cte_columns: self.supports_named_cte_columns,
    supports_select_into: self.supports_select_into,
    supports_single_arg_concat: self.supports_single_arg_concat,
    supports_table_alias_columns: self.supports_table_alias_columns,
    supports_table_copy: self.supports_table_copy,
    supports_to_number: self.supports_to_number,
    supports_uescape: self.supports_uescape,
    supports_unix_seconds: self.supports_unix_seconds,
    supports_unlogged_tables: self.supports_unlogged_tables,
    supports_window_exclude: self.supports_window_exclude,
    tablesample_keywords: self.tablesample_keywords,
    tablesample_requires_parens: self.tablesample_requires_parens,
    tablesample_seed_keyword: self.tablesample_seed_keyword,
    tablesample_size_is_rows: self.tablesample_size_is_rows,
    tablesample_with_method: self.tablesample_with_method,
    table_hints: self.table_hints,
    time_part_singulars: self.time_part_singulars.copy(),
    token_mapping: self.token_mapping.copy(),
    try_supported: self.try_supported,
    type_mapping: self.type_mapping.copy(),
    tz_to_with_time_zone: self.tz_to_with_time_zone,
    unnest_with_ordinality: self.unnest_with_ordinality,
    unpivot_aliases_are_identifiers: self.unpivot_aliases_are_identifiers,
    unsupported_types: self.unsupported_types.copy(),
    unwrapped_interval_values: self.unwrapped_interval_values.copy(),
    update_statement_supports_from: self.update_statement_supports_from,
    values_as_table: self.values_as_table,
    window_funcs_with_null_ordering: self.window_funcs_with_null_ordering.copy(),
    with_properties_prefix: self.with_properties_prefix,
    with_separated_comments: self.with_separated_comments.copy(),
    wrap_derived_values: self.wrap_derived_values,
  }
}

///|
pub fn base_generator_config() -> GeneratorConfig {
  {
    alter_set_type: "SET DATA TYPE",
    alter_set_wrapped: false,
    alter_table_include_column_keyword: true,
    array_concat_is_var_len: true,
    array_size_dim_required: None,
    array_size_name: "ARRAY_LENGTH",
    auto_refresh_bare_intervals: false,
    can_implement_array_any: false,
    collate_is_func: false,
    computed_column_with_type: true,
    copy_has_into_keyword: true,
    copy_params_are_wrapped: true,
    copy_params_eq_required: false,
    create_function_return_as: true,
    cte_recursive_keyword_required: true,
    data_type_specifiers_allowed: false,
    declare_default_assignment: "=",
    directed_joins: false,
    duplicate_key_update_with_set: true,
    ensure_bools: false,
    except_intersect_support_all_clause: true,
    exclude_comments: [Kind::Binary, Kind::SetOperation],
    expressions_without_nested_ctes: [],
    expression_precedes_properties_creatables: @set.Set::from_array([]),
    extract_allows_quotes: true,
    groupings_sep: ",",
    hex_func: "HEX",
    historical_data_post_alias: false,
    ignore_nulls_before_order: true,
    ignore_nulls_in_func: false,
    index_on: "ON",
    inout_separator: " ",
    insert_overwrite: " OVERWRITE TABLE",
    interval_allows_plural_form: true,
    is_bool_allowed: true,
    join_hints: true,
    json_key_value_pair_sep: ":",
    json_path_bracketed_key_supported: true,
    json_path_key_quoted_forces_brackets: false,
    json_path_single_quote_escape: false,
    json_type_required_for_extraction: false,
    last_day_supports_date_part: true,
    like_property_inside_schema: false,
    limit_fetch: "ALL",
    limit_is_top: false,
    limit_only_literals: false,
    locking_reads_supported: false,
    matched_by_source: true,
    match_against_table_prefix: None,
    mod_operator: "%",
    mod_paren_parent_types: [Kind::Mul, Kind::Div, Kind::IntDiv, Kind::Mod],
    multi_arg_distinct: true,
    named_placeholder_token: ":",
    normalize_extract_date_parts: false,
    null_ordering_supported: Some(true),
    nvl2_supported: true,
    pad_fill_pattern_is_required: false,
    parameterizable_text_types: [
      DType::CHAR,
      DType::NCHAR,
      DType::NVARCHAR,
      DType::VARCHAR,
    ],
    parameter_token: "@",
    parse_json_name: Some("PARSE_JSON"),
    pivot_alias_with_as: true,
    properties_location: Map::from_array([
      (Kind::AllowedValuesProperty, PropertiesLocation::PostSchema),
      (Kind::AlgorithmProperty, PropertiesLocation::PostCreate),
      (Kind::ApiProperty, PropertiesLocation::PostCreate),
      (Kind::ApplicationProperty, PropertiesLocation::PostCreate),
      (Kind::AutoIncrementProperty, PropertiesLocation::PostSchema),
      (Kind::AutoRefreshProperty, PropertiesLocation::PostSchema),
      (Kind::BackupProperty, PropertiesLocation::PostSchema),
      (Kind::BlockCompressionProperty, PropertiesLocation::PostName),
      (Kind::CalledOnNullInputProperty, PropertiesLocation::PostSchema),
      (Kind::CatalogProperty, PropertiesLocation::PostCreate),
      (Kind::CharacterSetProperty, PropertiesLocation::PostSchema),
      (Kind::ChecksumProperty, PropertiesLocation::PostName),
      (Kind::CollateProperty, PropertiesLocation::PostSchema),
      (Kind::ComputeProperty, PropertiesLocation::PostCreate),
      (Kind::CopyGrantsProperty, PropertiesLocation::PostSchema),
      (Kind::Cluster, PropertiesLocation::PostSchema),
      (Kind::ClusteredByProperty, PropertiesLocation::PostSchema),
      (Kind::ClusterProperty, PropertiesLocation::PostSchema),
      (Kind::DistributedByProperty, PropertiesLocation::PostSchema),
      (Kind::DuplicateKeyProperty, PropertiesLocation::PostSchema),
      (Kind::DataBlocksizeProperty, PropertiesLocation::PostName),
      (Kind::DatabaseProperty, PropertiesLocation::PostCreate),
      (Kind::DataDeletionProperty, PropertiesLocation::PostSchema),
      (Kind::DefinerProperty, PropertiesLocation::PostCreate),
      (Kind::DictRange, PropertiesLocation::PostSchema),
      (Kind::DictProperty, PropertiesLocation::PostSchema),
      (Kind::DynamicProperty, PropertiesLocation::PostCreate),
      (Kind::DistKeyProperty, PropertiesLocation::PostSchema),
      (Kind::DistStyleProperty, PropertiesLocation::PostSchema),
      (Kind::EmptyProperty, PropertiesLocation::PostSchema),
      (Kind::EncodeProperty, PropertiesLocation::PostExpression),
      (Kind::EngineProperty, PropertiesLocation::PostSchema),
      (Kind::EnviromentProperty, PropertiesLocation::PostSchema),
      (Kind::HandlerProperty, PropertiesLocation::PostSchema),
      (Kind::ParameterStyleProperty, PropertiesLocation::PostSchema),
      (Kind::ExecuteAsProperty, PropertiesLocation::PostSchema),
      (Kind::ExternalProperty, PropertiesLocation::PostCreate),
      (Kind::FallbackProperty, PropertiesLocation::PostName),
      (Kind::FileFormatProperty, PropertiesLocation::PostWith),
      (Kind::FreespaceProperty, PropertiesLocation::PostName),
      (Kind::GlobalProperty, PropertiesLocation::PostCreate),
      (Kind::HeapProperty, PropertiesLocation::PostWith),
      (Kind::HybridProperty, PropertiesLocation::PostCreate),
      (Kind::InheritsProperty, PropertiesLocation::PostSchema),
      (Kind::IcebergProperty, PropertiesLocation::PostCreate),
      (Kind::IncludeProperty, PropertiesLocation::PostSchema),
      (Kind::InputModelProperty, PropertiesLocation::PostSchema),
      (Kind::IsolatedLoadingProperty, PropertiesLocation::PostName),
      (Kind::JournalProperty, PropertiesLocation::PostName),
      (Kind::LanguageProperty, PropertiesLocation::PostSchema),
      (Kind::LikeProperty, PropertiesLocation::PostSchema),
      (Kind::LocationProperty, PropertiesLocation::PostSchema),
      (Kind::LockProperty, PropertiesLocation::PostSchema),
      (Kind::LockingProperty, PropertiesLocation::PostAlias),
      (Kind::LogProperty, PropertiesLocation::PostName),
      (Kind::MaskingProperty, PropertiesLocation::PostCreate),
      (Kind::MaterializedProperty, PropertiesLocation::PostCreate),
      (Kind::MergeBlockRatioProperty, PropertiesLocation::PostName),
      (Kind::ModuleProperty, PropertiesLocation::PostSchema),
      (Kind::NetworkProperty, PropertiesLocation::PostCreate),
      (Kind::NoPrimaryIndexProperty, PropertiesLocation::PostExpression),
      (Kind::OnProperty, PropertiesLocation::PostSchema),
      (Kind::OnCommitProperty, PropertiesLocation::PostExpression),
      (Kind::Order, PropertiesLocation::PostSchema),
      (Kind::OutputModelProperty, PropertiesLocation::PostSchema),
      (Kind::PartitionedByProperty, PropertiesLocation::PostWith),
      (Kind::PartitionedOfProperty, PropertiesLocation::PostSchema),
      (Kind::PrimaryKey, PropertiesLocation::PostSchema),
      (Kind::Property, PropertiesLocation::PostWith),
      (Kind::RefreshTriggerProperty, PropertiesLocation::PostSchema),
      (Kind::RemoteWithConnectionModelProperty, PropertiesLocation::PostSchema),
      (Kind::ReturnsProperty, PropertiesLocation::PostSchema),
      (Kind::RollupProperty, PropertiesLocation::Unsupported),
      (Kind::RowAccessProperty, PropertiesLocation::Unsupported),
      (Kind::RowFormatProperty, PropertiesLocation::PostSchema),
      (Kind::RowFormatDelimitedProperty, PropertiesLocation::PostSchema),
      (Kind::RowFormatSerdeProperty, PropertiesLocation::PostSchema),
      (Kind::SampleProperty, PropertiesLocation::PostSchema),
      (Kind::SchemaCommentProperty, PropertiesLocation::PostSchema),
      (Kind::SecureProperty, PropertiesLocation::PostCreate),
      (Kind::SecurityIntegrationProperty, PropertiesLocation::PostCreate),
      (Kind::SerdeProperties, PropertiesLocation::PostSchema),
      (Kind::Set, PropertiesLocation::PostSchema),
      (Kind::SettingsProperty, PropertiesLocation::PostSchema),
      (Kind::SetProperty, PropertiesLocation::PostCreate),
      (Kind::SetConfigProperty, PropertiesLocation::PostSchema),
      (Kind::SharingProperty, PropertiesLocation::PostExpression),
      (Kind::SequenceProperties, PropertiesLocation::PostExpression),
      (Kind::TriggerProperties, PropertiesLocation::PostExpression),
      (Kind::SortKeyProperty, PropertiesLocation::PostSchema),
      (Kind::SqlReadWriteProperty, PropertiesLocation::PostSchema),
      (Kind::SqlSecurityProperty, PropertiesLocation::PostSchema),
      (Kind::StabilityProperty, PropertiesLocation::PostSchema),
      (Kind::StorageHandlerProperty, PropertiesLocation::PostSchema),
      (Kind::StreamingTableProperty, PropertiesLocation::PostCreate),
      (Kind::StrictProperty, PropertiesLocation::PostSchema),
      (Kind::Tags, PropertiesLocation::PostWith),
      (Kind::TemporaryProperty, PropertiesLocation::PostCreate),
      (Kind::ToTableProperty, PropertiesLocation::PostSchema),
      (Kind::TransientProperty, PropertiesLocation::PostCreate),
      (Kind::TransformModelProperty, PropertiesLocation::PostSchema),
      (Kind::MergeTreeTTL, PropertiesLocation::PostSchema),
      (Kind::UnloggedProperty, PropertiesLocation::PostCreate),
      (Kind::UsingProperty, PropertiesLocation::PostExpression),
      (Kind::UsingTemplateProperty, PropertiesLocation::PostSchema),
      (Kind::ViewAttributeProperty, PropertiesLocation::PostSchema),
      (Kind::VirtualProperty, PropertiesLocation::PostCreate),
      (Kind::VolatileProperty, PropertiesLocation::PostCreate),
      (Kind::WithDataProperty, PropertiesLocation::PostExpression),
      (Kind::WithJournalTableProperty, PropertiesLocation::PostName),
      (Kind::WithProcedureOptions, PropertiesLocation::PostSchema),
      (Kind::WithSchemaBindingProperty, PropertiesLocation::PostSchema),
      (Kind::WithSystemVersioningProperty, PropertiesLocation::PostSchema),
      (Kind::ForceProperty, PropertiesLocation::PostCreate),
    ]),
    query_hints: true,
    query_hint_sep: ", ",
    quote_json_path: true,
    rename_table_with_db: true,
    reserved_keywords: @set.Set::from_array([]),
    respect_ignore_nulls_unsupported_expressions: [],
    returning_end: true,
    select_kinds: ["STRUCT", "VALUE"],
    semi_anti_join_with_side: true,
    sentinel_line_break: "__SQLGLOT__LB__",
    set_assignment_requires_variable_keyword: false,
    set_op_limits: false,
    set_op_modifiers: true,
    set_op_parenthesized_operands: true,
    single_string_interval: false,
    star_except: "EXCEPT",
    star_exclude_requires_derived_table: true,
    struct_delimiter: ["<", ">"],
    supported_json_path_parts: [
      Kind::JSONPathFilter,
      Kind::JSONPathKey,
      Kind::JSONPathRecursive,
      Kind::JSONPathRoot,
      Kind::JSONPathScript,
      Kind::JSONPathSelector,
      Kind::JSONPathSlice,
      Kind::JSONPathSubscript,
      Kind::JSONPathUnion,
      Kind::JSONPathWildcard,
    ],
    supports_alter_column_if_exists: false,
    supports_alter_column_nullability: false,
    supports_between_flags: false,
    supports_change_column: false,
    supports_convert_timezone: false,
    supports_create_table_like: true,
    supports_decode_case: true,
    supports_drop_alter_iceberg_property: true,
    supports_exploding_projections: true,
    supports_grouping_sets_as_suffix: false,
    supports_like_quantifiers: true,
    supports_median: true,
    supports_merge_where: false,
    supports_modify_column: false,
    supports_named_cte_columns: true,
    supports_select_into: false,
    supports_single_arg_concat: true,
    supports_table_alias_columns: true,
    supports_table_copy: true,
    supports_to_number: true,
    supports_uescape: true,
    supports_unix_seconds: false,
    supports_unlogged_tables: false,
    supports_window_exclude: false,
    tablesample_keywords: "TABLESAMPLE",
    tablesample_requires_parens: true,
    tablesample_seed_keyword: "SEED",
    tablesample_size_is_rows: true,
    tablesample_with_method: true,
    table_hints: true,
    time_part_singulars: Map::from_array([
      ("MICROSECONDS", "MICROSECOND"),
      ("SECONDS", "SECOND"),
      ("MINUTES", "MINUTE"),
      ("HOURS", "HOUR"),
      ("DAYS", "DAY"),
      ("WEEKS", "WEEK"),
      ("MONTHS", "MONTH"),
      ("QUARTERS", "QUARTER"),
      ("YEARS", "YEAR"),
    ]),
    token_mapping: Map([]),
    try_supported: true,
    type_mapping: Map::from_array([
      (DType::DATETIME2, "TIMESTAMP"),
      (DType::NCHAR, "CHAR"),
      (DType::NVARCHAR, "VARCHAR"),
      (DType::MEDIUMTEXT, "TEXT"),
      (DType::LONGTEXT, "TEXT"),
      (DType::TINYTEXT, "TEXT"),
      (DType::BLOB, "VARBINARY"),
      (DType::MEDIUMBLOB, "BLOB"),
      (DType::LONGBLOB, "BLOB"),
      (DType::TINYBLOB, "BLOB"),
      (DType::INET, "INET"),
      (DType::ROWVERSION, "VARBINARY"),
      (DType::SMALLDATETIME, "TIMESTAMP"),
    ]),
    tz_to_with_time_zone: false,
    unnest_with_ordinality: true,
    unpivot_aliases_are_identifiers: true,
    unsupported_types: [],
    unwrapped_interval_values: [
      Kind::Column,
      Kind::Literal,
      Kind::Neg,
      Kind::Paren,
    ],
    update_statement_supports_from: true,
    values_as_table: true,
    window_funcs_with_null_ordering: [],
    with_properties_prefix: "WITH",
    with_separated_comments: [
      Kind::Command,
      Kind::Create,
      Kind::Describe,
      Kind::Delete,
      Kind::Drop,
      Kind::From,
      Kind::Insert,
      Kind::Join,
      Kind::MultitableInserts,
      Kind::Order,
      Kind::Group,
      Kind::Having,
      Kind::Select,
      Kind::SetOperation,
      Kind::Update,
      Kind::Where,
      Kind::With,
    ],
    wrap_derived_values: true,
  }
}