sqlglot.dialects.fabric
1from __future__ import annotations 2 3from sqlglot import exp 4from sqlglot.dialects.dialect import NormalizationStrategy 5from sqlglot.dialects.tsql import TSQL 6 7 8class Fabric(TSQL): 9 """ 10 Microsoft Fabric Data Warehouse dialect that inherits from T-SQL. 11 12 Microsoft Fabric is a cloud-based analytics platform that provides a unified 13 data warehouse experience. While it shares much of T-SQL's syntax, it has 14 specific differences and limitations that this dialect addresses. 15 16 Key differences from T-SQL: 17 - Case-sensitive identifiers (unlike T-SQL which is case-insensitive) 18 - Limited data type support with mappings to supported alternatives 19 - Temporal types (DATETIME2, DATETIMEOFFSET, TIME) limited to 6 digits precision 20 - Certain legacy types (MONEY, SMALLMONEY, etc.) are not supported 21 - Unicode types (NCHAR, NVARCHAR) are mapped to non-unicode equivalents 22 23 References: 24 - Data Types: https://learn.microsoft.com/en-us/fabric/data-warehouse/data-types 25 - T-SQL Surface Area: https://learn.microsoft.com/en-us/fabric/data-warehouse/tsql-surface-area 26 """ 27 28 # Fabric is case-sensitive unlike T-SQL which is case-insensitive 29 NORMALIZATION_STRATEGY = NormalizationStrategy.CASE_SENSITIVE 30 31 class Generator(TSQL.Generator): 32 # Fabric-specific type mappings - override T-SQL types that aren't supported 33 # Reference: https://learn.microsoft.com/en-us/fabric/data-warehouse/data-types 34 TYPE_MAPPING = { 35 **TSQL.Generator.TYPE_MAPPING, 36 # Fabric doesn't support these types, map to alternatives 37 exp.DataType.Type.MONEY: "DECIMAL", 38 exp.DataType.Type.SMALLMONEY: "DECIMAL", 39 exp.DataType.Type.DATETIME: "DATETIME2(6)", 40 exp.DataType.Type.SMALLDATETIME: "DATETIME2(6)", 41 exp.DataType.Type.NCHAR: "CHAR", 42 exp.DataType.Type.NVARCHAR: "VARCHAR", 43 exp.DataType.Type.TEXT: "VARCHAR(MAX)", 44 exp.DataType.Type.IMAGE: "VARBINARY", 45 exp.DataType.Type.TINYINT: "SMALLINT", 46 exp.DataType.Type.UTINYINT: "SMALLINT", # T-SQL parses TINYINT as UTINYINT 47 exp.DataType.Type.JSON: "VARCHAR", 48 exp.DataType.Type.XML: "VARCHAR", 49 exp.DataType.Type.UUID: "VARBINARY(MAX)", # UNIQUEIDENTIFIER has limitations in Fabric 50 # Override T-SQL mappings that use different names in Fabric 51 exp.DataType.Type.DECIMAL: "DECIMAL", # T-SQL uses NUMERIC 52 exp.DataType.Type.DOUBLE: "FLOAT", 53 exp.DataType.Type.INT: "INT", # T-SQL uses INTEGER 54 } 55 56 def datatype_sql(self, expression: exp.DataType) -> str: 57 """ 58 Override datatype generation to handle Fabric-specific precision limitations. 59 60 Fabric limits temporal types (TIME, DATETIME2, DATETIMEOFFSET) to max 6 digits precision. 61 When no precision is specified, we default to 6 digits. 62 """ 63 if expression.is_type( 64 exp.DataType.Type.TIME, 65 exp.DataType.Type.DATETIME2, 66 exp.DataType.Type.TIMESTAMPTZ, # DATETIMEOFFSET in Fabric 67 ): 68 # Get the current precision (first expression if it exists) 69 precision = expression.find(exp.DataTypeParam) 70 71 # Determine the target precision 72 if precision is None: 73 # No precision specified, default to 6 74 target_precision = 6 75 elif precision.this.is_int: 76 # Cap precision at 6 77 current_precision = precision.this.to_py() 78 target_precision = min(current_precision, 6) 79 80 # Create a new expression with the target precision 81 new_expression = exp.DataType( 82 this=expression.this, 83 expressions=[exp.DataTypeParam(this=exp.Literal.number(target_precision))], 84 ) 85 86 return super().datatype_sql(new_expression) 87 88 return super().datatype_sql(expression)
9class Fabric(TSQL): 10 """ 11 Microsoft Fabric Data Warehouse dialect that inherits from T-SQL. 12 13 Microsoft Fabric is a cloud-based analytics platform that provides a unified 14 data warehouse experience. While it shares much of T-SQL's syntax, it has 15 specific differences and limitations that this dialect addresses. 16 17 Key differences from T-SQL: 18 - Case-sensitive identifiers (unlike T-SQL which is case-insensitive) 19 - Limited data type support with mappings to supported alternatives 20 - Temporal types (DATETIME2, DATETIMEOFFSET, TIME) limited to 6 digits precision 21 - Certain legacy types (MONEY, SMALLMONEY, etc.) are not supported 22 - Unicode types (NCHAR, NVARCHAR) are mapped to non-unicode equivalents 23 24 References: 25 - Data Types: https://learn.microsoft.com/en-us/fabric/data-warehouse/data-types 26 - T-SQL Surface Area: https://learn.microsoft.com/en-us/fabric/data-warehouse/tsql-surface-area 27 """ 28 29 # Fabric is case-sensitive unlike T-SQL which is case-insensitive 30 NORMALIZATION_STRATEGY = NormalizationStrategy.CASE_SENSITIVE 31 32 class Generator(TSQL.Generator): 33 # Fabric-specific type mappings - override T-SQL types that aren't supported 34 # Reference: https://learn.microsoft.com/en-us/fabric/data-warehouse/data-types 35 TYPE_MAPPING = { 36 **TSQL.Generator.TYPE_MAPPING, 37 # Fabric doesn't support these types, map to alternatives 38 exp.DataType.Type.MONEY: "DECIMAL", 39 exp.DataType.Type.SMALLMONEY: "DECIMAL", 40 exp.DataType.Type.DATETIME: "DATETIME2(6)", 41 exp.DataType.Type.SMALLDATETIME: "DATETIME2(6)", 42 exp.DataType.Type.NCHAR: "CHAR", 43 exp.DataType.Type.NVARCHAR: "VARCHAR", 44 exp.DataType.Type.TEXT: "VARCHAR(MAX)", 45 exp.DataType.Type.IMAGE: "VARBINARY", 46 exp.DataType.Type.TINYINT: "SMALLINT", 47 exp.DataType.Type.UTINYINT: "SMALLINT", # T-SQL parses TINYINT as UTINYINT 48 exp.DataType.Type.JSON: "VARCHAR", 49 exp.DataType.Type.XML: "VARCHAR", 50 exp.DataType.Type.UUID: "VARBINARY(MAX)", # UNIQUEIDENTIFIER has limitations in Fabric 51 # Override T-SQL mappings that use different names in Fabric 52 exp.DataType.Type.DECIMAL: "DECIMAL", # T-SQL uses NUMERIC 53 exp.DataType.Type.DOUBLE: "FLOAT", 54 exp.DataType.Type.INT: "INT", # T-SQL uses INTEGER 55 } 56 57 def datatype_sql(self, expression: exp.DataType) -> str: 58 """ 59 Override datatype generation to handle Fabric-specific precision limitations. 60 61 Fabric limits temporal types (TIME, DATETIME2, DATETIMEOFFSET) to max 6 digits precision. 62 When no precision is specified, we default to 6 digits. 63 """ 64 if expression.is_type( 65 exp.DataType.Type.TIME, 66 exp.DataType.Type.DATETIME2, 67 exp.DataType.Type.TIMESTAMPTZ, # DATETIMEOFFSET in Fabric 68 ): 69 # Get the current precision (first expression if it exists) 70 precision = expression.find(exp.DataTypeParam) 71 72 # Determine the target precision 73 if precision is None: 74 # No precision specified, default to 6 75 target_precision = 6 76 elif precision.this.is_int: 77 # Cap precision at 6 78 current_precision = precision.this.to_py() 79 target_precision = min(current_precision, 6) 80 81 # Create a new expression with the target precision 82 new_expression = exp.DataType( 83 this=expression.this, 84 expressions=[exp.DataTypeParam(this=exp.Literal.number(target_precision))], 85 ) 86 87 return super().datatype_sql(new_expression) 88 89 return super().datatype_sql(expression)
Microsoft Fabric Data Warehouse dialect that inherits from T-SQL.
Microsoft Fabric is a cloud-based analytics platform that provides a unified data warehouse experience. While it shares much of T-SQL's syntax, it has specific differences and limitations that this dialect addresses.
Key differences from T-SQL:
- Case-sensitive identifiers (unlike T-SQL which is case-insensitive)
- Limited data type support with mappings to supported alternatives
- Temporal types (DATETIME2, DATETIMEOFFSET, TIME) limited to 6 digits precision
- Certain legacy types (MONEY, SMALLMONEY, etc.) are not supported
- Unicode types (NCHAR, NVARCHAR) are mapped to non-unicode equivalents
References:
NORMALIZATION_STRATEGY =
<NormalizationStrategy.CASE_SENSITIVE: 'CASE_SENSITIVE'>
Specifies the strategy according to which identifiers should be normalized.
tokenizer_class =
<class 'sqlglot.tokens.Tokenizer'>
parser_class =
<class 'sqlglot.parser.Parser'>
generator_class =
<class 'Fabric.Generator'>
TIME_TRIE: Dict =
{'y': {'e': {'a': {'r': {0: True}}}, 0: True, 'y': {'y': {'y': {0: True}}, 0: True}}, 'd': {'a': {'y': {'o': {'f': {'y': {'e': {'a': {'r': {0: True}}}}}}, 0: True}}, 'y': {0: True}, 'w': {0: True}, 'd': {'d': {'d': {0: True}}, 0: True}, 0: True}, 'w': {'e': {'e': {'k': {0: True, 'd': {'a': {'y': {0: True}}}}}}, 'w': {0: True}, 'k': {0: True}}, 'h': {'o': {'u': {'r': {0: True}}}, 'h': {0: True}, 0: True}, 'm': {'i': {'n': {'u': {'t': {'e': {0: True}}}}, 0: True, 'l': {'l': {'i': {'s': {'e': {'c': {'o': {'n': {'d': {0: True}}}}}}}}}}, 's': {0: True}, 'o': {'n': {'t': {'h': {0: True}}}}, 'm': {0: True}, 0: True}, 'n': {0: True}, 's': {'e': {'c': {'o': {'n': {'d': {0: True}}}}}, 's': {0: True}, 0: True}, 'Y': {0: True, 'Y': {'Y': {'Y': {0: True}}, 0: True}}, 'M': {'M': {'M': {'M': {0: True}, 0: True}, 0: True}, 0: True}, 'H': {'H': {0: True}, 0: True}, 'f': {'f': {'f': {'f': {'f': {'f': {0: True}}}}}}}
FORMAT_TRIE: Dict =
{'y': {'e': {'a': {'r': {0: True}}}, 0: True, 'y': {'y': {'y': {0: True}}, 0: True}}, 'd': {'a': {'y': {'o': {'f': {'y': {'e': {'a': {'r': {0: True}}}}}}, 0: True}}, 'y': {0: True}, 'w': {0: True}, 'd': {'d': {'d': {0: True}}, 0: True}, 0: True}, 'w': {'e': {'e': {'k': {0: True, 'd': {'a': {'y': {0: True}}}}}}, 'w': {0: True}, 'k': {0: True}}, 'h': {'o': {'u': {'r': {0: True}}}, 'h': {0: True}, 0: True}, 'm': {'i': {'n': {'u': {'t': {'e': {0: True}}}}, 0: True, 'l': {'l': {'i': {'s': {'e': {'c': {'o': {'n': {'d': {0: True}}}}}}}}}}, 's': {0: True}, 'o': {'n': {'t': {'h': {0: True}}}}, 'm': {0: True}, 0: True}, 'n': {0: True}, 's': {'e': {'c': {'o': {'n': {'d': {0: True}}}}}, 's': {0: True}, 0: True}, 'Y': {0: True, 'Y': {'Y': {'Y': {0: True}}, 0: True}}, 'M': {'M': {'M': {'M': {0: True}, 0: True}, 0: True}, 0: True}, 'H': {'H': {0: True}, 0: True}, 'f': {'f': {'f': {'f': {'f': {'f': {0: True}}}}}}}
INVERSE_TIME_MAPPING: Dict[str, str] =
{'%Y': 'yyyy', '%j': 'dayofyear', '%d': 'dd', '%W': 'wk', '%h': 'hour', '%I': 'hh', '%M': 'mm', '%S': 'ss', '%-S': 's', '%f': 'ffffff', '%w': 'dw', '%m': 'MM', '%-M': 'm', '%y': 'yy', '%B': 'MMMM', '%b': 'MMM', '%-m': 'M', '%A': 'dddd', '%-d': 'd', '%H': 'HH', '%-H': 'H', '%-I': 'h'}
INVERSE_TIME_TRIE: Dict =
{'%': {'Y': {0: True}, 'j': {0: True}, 'd': {0: True}, 'W': {0: True}, 'h': {0: True}, 'I': {0: True}, 'M': {0: True}, 'S': {0: True}, '-': {'S': {0: True}, 'M': {0: True}, 'm': {0: True}, 'd': {0: True}, 'H': {0: True}, 'I': {0: True}}, 'f': {0: True}, 'w': {0: True}, 'm': {0: True}, 'y': {0: True}, 'B': {0: True}, 'b': {0: True}, 'A': {0: True}, 'H': {0: True}}}
32 class Generator(TSQL.Generator): 33 # Fabric-specific type mappings - override T-SQL types that aren't supported 34 # Reference: https://learn.microsoft.com/en-us/fabric/data-warehouse/data-types 35 TYPE_MAPPING = { 36 **TSQL.Generator.TYPE_MAPPING, 37 # Fabric doesn't support these types, map to alternatives 38 exp.DataType.Type.MONEY: "DECIMAL", 39 exp.DataType.Type.SMALLMONEY: "DECIMAL", 40 exp.DataType.Type.DATETIME: "DATETIME2(6)", 41 exp.DataType.Type.SMALLDATETIME: "DATETIME2(6)", 42 exp.DataType.Type.NCHAR: "CHAR", 43 exp.DataType.Type.NVARCHAR: "VARCHAR", 44 exp.DataType.Type.TEXT: "VARCHAR(MAX)", 45 exp.DataType.Type.IMAGE: "VARBINARY", 46 exp.DataType.Type.TINYINT: "SMALLINT", 47 exp.DataType.Type.UTINYINT: "SMALLINT", # T-SQL parses TINYINT as UTINYINT 48 exp.DataType.Type.JSON: "VARCHAR", 49 exp.DataType.Type.XML: "VARCHAR", 50 exp.DataType.Type.UUID: "VARBINARY(MAX)", # UNIQUEIDENTIFIER has limitations in Fabric 51 # Override T-SQL mappings that use different names in Fabric 52 exp.DataType.Type.DECIMAL: "DECIMAL", # T-SQL uses NUMERIC 53 exp.DataType.Type.DOUBLE: "FLOAT", 54 exp.DataType.Type.INT: "INT", # T-SQL uses INTEGER 55 } 56 57 def datatype_sql(self, expression: exp.DataType) -> str: 58 """ 59 Override datatype generation to handle Fabric-specific precision limitations. 60 61 Fabric limits temporal types (TIME, DATETIME2, DATETIMEOFFSET) to max 6 digits precision. 62 When no precision is specified, we default to 6 digits. 63 """ 64 if expression.is_type( 65 exp.DataType.Type.TIME, 66 exp.DataType.Type.DATETIME2, 67 exp.DataType.Type.TIMESTAMPTZ, # DATETIMEOFFSET in Fabric 68 ): 69 # Get the current precision (first expression if it exists) 70 precision = expression.find(exp.DataTypeParam) 71 72 # Determine the target precision 73 if precision is None: 74 # No precision specified, default to 6 75 target_precision = 6 76 elif precision.this.is_int: 77 # Cap precision at 6 78 current_precision = precision.this.to_py() 79 target_precision = min(current_precision, 6) 80 81 # Create a new expression with the target precision 82 new_expression = exp.DataType( 83 this=expression.this, 84 expressions=[exp.DataTypeParam(this=exp.Literal.number(target_precision))], 85 ) 86 87 return super().datatype_sql(new_expression) 88 89 return super().datatype_sql(expression)
Generator converts a given syntax tree to the corresponding SQL string.
Arguments:
- pretty: Whether to format the produced SQL string. Default: False.
- identify: Determines when an identifier should be quoted. Possible values are: False (default): Never quote, except in cases where it's mandatory by the dialect. True or 'always': Always quote. 'safe': Only quote identifiers that are case insensitive.
- normalize: Whether to normalize identifiers to lowercase. Default: False.
- pad: The pad size in a formatted string. For example, this affects the indentation of a projection in a query, relative to its nesting level. Default: 2.
- indent: The indentation size in a formatted string. For example, this affects the
indentation of subqueries and filters under a
WHERE
clause. Default: 2. - normalize_functions: How to normalize function names. Possible values are: "upper" or True (default): Convert names to uppercase. "lower": Convert names to lowercase. False: Disables function name normalization.
- unsupported_level: Determines the generator's behavior when it encounters unsupported expressions. Default ErrorLevel.WARN.
- max_unsupported: Maximum number of unsupported messages to include in a raised UnsupportedError. This is only relevant if unsupported_level is ErrorLevel.RAISE. Default: 3
- leading_comma: Whether the comma is leading or trailing in select expressions. This is only relevant when generating in pretty mode. Default: False
- max_text_width: The max number of characters in a segment before creating new lines in pretty mode. The default is on the smaller end because the length only represents a segment and not the true line length. Default: 80
- comments: Whether to preserve comments in the output SQL code. Default: True
TYPE_MAPPING =
{<Type.DATETIME2: 'DATETIME2'>: 'DATETIME2', <Type.MEDIUMTEXT: 'MEDIUMTEXT'>: 'TEXT', <Type.LONGTEXT: 'LONGTEXT'>: 'TEXT', <Type.TINYTEXT: 'TINYTEXT'>: 'TEXT', <Type.BLOB: 'BLOB'>: 'VARBINARY', <Type.MEDIUMBLOB: 'MEDIUMBLOB'>: 'BLOB', <Type.LONGBLOB: 'LONGBLOB'>: 'BLOB', <Type.TINYBLOB: 'TINYBLOB'>: 'BLOB', <Type.INET: 'INET'>: 'INET', <Type.ROWVERSION: 'ROWVERSION'>: 'ROWVERSION', <Type.SMALLDATETIME: 'SMALLDATETIME'>: 'DATETIME2(6)', <Type.BOOLEAN: 'BOOLEAN'>: 'BIT', <Type.DECIMAL: 'DECIMAL'>: 'DECIMAL', <Type.DOUBLE: 'DOUBLE'>: 'FLOAT', <Type.INT: 'INT'>: 'INT', <Type.TEXT: 'TEXT'>: 'VARCHAR(MAX)', <Type.TIMESTAMP: 'TIMESTAMP'>: 'DATETIME2', <Type.TIMESTAMPNTZ: 'TIMESTAMPNTZ'>: 'DATETIME2', <Type.TIMESTAMPTZ: 'TIMESTAMPTZ'>: 'DATETIMEOFFSET', <Type.UTINYINT: 'UTINYINT'>: 'SMALLINT', <Type.VARIANT: 'VARIANT'>: 'SQL_VARIANT', <Type.UUID: 'UUID'>: 'VARBINARY(MAX)', <Type.MONEY: 'MONEY'>: 'DECIMAL', <Type.SMALLMONEY: 'SMALLMONEY'>: 'DECIMAL', <Type.DATETIME: 'DATETIME'>: 'DATETIME2(6)', <Type.NCHAR: 'NCHAR'>: 'CHAR', <Type.NVARCHAR: 'NVARCHAR'>: 'VARCHAR', <Type.IMAGE: 'IMAGE'>: 'VARBINARY', <Type.TINYINT: 'TINYINT'>: 'SMALLINT', <Type.JSON: 'JSON'>: 'VARCHAR', <Type.XML: 'XML'>: 'VARCHAR'}
57 def datatype_sql(self, expression: exp.DataType) -> str: 58 """ 59 Override datatype generation to handle Fabric-specific precision limitations. 60 61 Fabric limits temporal types (TIME, DATETIME2, DATETIMEOFFSET) to max 6 digits precision. 62 When no precision is specified, we default to 6 digits. 63 """ 64 if expression.is_type( 65 exp.DataType.Type.TIME, 66 exp.DataType.Type.DATETIME2, 67 exp.DataType.Type.TIMESTAMPTZ, # DATETIMEOFFSET in Fabric 68 ): 69 # Get the current precision (first expression if it exists) 70 precision = expression.find(exp.DataTypeParam) 71 72 # Determine the target precision 73 if precision is None: 74 # No precision specified, default to 6 75 target_precision = 6 76 elif precision.this.is_int: 77 # Cap precision at 6 78 current_precision = precision.this.to_py() 79 target_precision = min(current_precision, 6) 80 81 # Create a new expression with the target precision 82 new_expression = exp.DataType( 83 this=expression.this, 84 expressions=[exp.DataTypeParam(this=exp.Literal.number(target_precision))], 85 ) 86 87 return super().datatype_sql(new_expression) 88 89 return super().datatype_sql(expression)
Override datatype generation to handle Fabric-specific precision limitations.
Fabric limits temporal types (TIME, DATETIME2, DATETIMEOFFSET) to max 6 digits precision. When no precision is specified, we default to 6 digits.
AFTER_HAVING_MODIFIER_TRANSFORMS =
{'windows': <function Generator.<lambda>>, 'qualify': <function Generator.<lambda>>}
Inherited Members
- sqlglot.generator.Generator
- Generator
- IGNORE_NULLS_IN_FUNC
- LOCKING_READS_SUPPORTED
- WRAP_DERIVED_VALUES
- CREATE_FUNCTION_RETURN_AS
- MATCHED_BY_SOURCE
- SINGLE_STRING_INTERVAL
- INTERVAL_ALLOWS_PLURAL_FORM
- LIMIT_ONLY_LITERALS
- RENAME_TABLE_WITH_DB
- GROUPINGS_SEP
- INDEX_ON
- JOIN_HINTS
- TABLE_HINTS
- QUERY_HINT_SEP
- IS_BOOL_ALLOWED
- DUPLICATE_KEY_UPDATE_WITH_SET
- EXTRACT_ALLOWS_QUOTES
- TZ_TO_WITH_TIME_ZONE
- VALUES_AS_TABLE
- UNNEST_WITH_ORDINALITY
- AGGREGATE_FILTER_SUPPORTED
- SEMI_ANTI_JOIN_WITH_SIDE
- SUPPORTS_TABLE_COPY
- TABLESAMPLE_REQUIRES_PARENS
- TABLESAMPLE_SIZE_IS_ROWS
- TABLESAMPLE_KEYWORDS
- TABLESAMPLE_WITH_METHOD
- COLLATE_IS_FUNC
- DATA_TYPE_SPECIFIERS_ALLOWED
- LAST_DAY_SUPPORTS_DATE_PART
- SUPPORTS_TABLE_ALIAS_COLUMNS
- UNPIVOT_ALIASES_ARE_IDENTIFIERS
- JSON_KEY_VALUE_PAIR_SEP
- INSERT_OVERWRITE
- SUPPORTS_UNLOGGED_TABLES
- SUPPORTS_CREATE_TABLE_LIKE
- LIKE_PROPERTY_INSIDE_SCHEMA
- MULTI_ARG_DISTINCT
- JSON_TYPE_REQUIRED_FOR_EXTRACTION
- JSON_PATH_SINGLE_QUOTE_ESCAPE
- CAN_IMPLEMENT_ARRAY_ANY
- SUPPORTS_WINDOW_EXCLUDE
- COPY_PARAMS_ARE_WRAPPED
- COPY_HAS_INTO_KEYWORD
- STAR_EXCEPT
- HEX_FUNC
- WITH_PROPERTIES_PREFIX
- QUOTE_JSON_PATH
- PAD_FILL_PATTERN_IS_REQUIRED
- SUPPORTS_EXPLODING_PROJECTIONS
- ARRAY_CONCAT_IS_VAR_LEN
- SUPPORTS_CONVERT_TIMEZONE
- SUPPORTS_MEDIAN
- SUPPORTS_UNIX_SECONDS
- NORMALIZE_EXTRACT_DATE_PARTS
- ARRAY_SIZE_NAME
- ARRAY_SIZE_DIM_REQUIRED
- TIME_PART_SINGULARS
- TOKEN_MAPPING
- STRUCT_DELIMITER
- PARAMETER_TOKEN
- NAMED_PLACEHOLDER_TOKEN
- EXPRESSION_PRECEDES_PROPERTIES_CREATABLES
- RESERVED_KEYWORDS
- WITH_SEPARATED_COMMENTS
- EXCLUDE_COMMENTS
- UNWRAPPED_INTERVAL_VALUES
- PARAMETERIZABLE_TEXT_TYPES
- RESPECT_IGNORE_NULLS_UNSUPPORTED_EXPRESSIONS
- SENTINEL_LINE_BREAK
- pretty
- identify
- normalize
- pad
- unsupported_level
- max_unsupported
- leading_comma
- max_text_width
- comments
- dialect
- normalize_functions
- unsupported_messages
- generate
- preprocess
- unsupported
- sep
- seg
- sanitize_comment
- maybe_comment
- wrap
- no_identify
- normalize_func
- indent
- sql
- uncache_sql
- cache_sql
- characterset_sql
- column_parts
- column_sql
- columnposition_sql
- columnconstraint_sql
- computedcolumnconstraint_sql
- autoincrementcolumnconstraint_sql
- compresscolumnconstraint_sql
- generatedasidentitycolumnconstraint_sql
- generatedasrowcolumnconstraint_sql
- periodforsystemtimeconstraint_sql
- notnullcolumnconstraint_sql
- primarykeycolumnconstraint_sql
- uniquecolumnconstraint_sql
- sequenceproperties_sql
- clone_sql
- describe_sql
- heredoc_sql
- prepend_ctes
- with_sql
- cte_sql
- tablealias_sql
- bitstring_sql
- hexstring_sql
- bytestring_sql
- unicodestring_sql
- rawstring_sql
- datatypeparam_sql
- directory_sql
- delete_sql
- set_operation
- set_operations
- fetch_sql
- limitoptions_sql
- filter_sql
- hint_sql
- indexparameters_sql
- index_sql
- hex_sql
- lowerhex_sql
- inputoutputformat_sql
- national_sql
- properties_sql
- root_properties
- properties
- with_properties
- locate_properties
- property_name
- property_sql
- likeproperty_sql
- fallbackproperty_sql
- journalproperty_sql
- freespaceproperty_sql
- checksumproperty_sql
- mergeblockratioproperty_sql
- datablocksizeproperty_sql
- blockcompressionproperty_sql
- isolatedloadingproperty_sql
- partitionboundspec_sql
- partitionedofproperty_sql
- lockingproperty_sql
- withdataproperty_sql
- withsystemversioningproperty_sql
- insert_sql
- introducer_sql
- kill_sql
- pseudotype_sql
- objectidentifier_sql
- onconflict_sql
- rowformatdelimitedproperty_sql
- withtablehint_sql
- indextablehint_sql
- historicaldata_sql
- table_parts
- table_sql
- tablefromrows_sql
- tablesample_sql
- pivot_sql
- tuple_sql
- update_sql
- values_sql
- var_sql
- from_sql
- groupingsets_sql
- rollup_sql
- cube_sql
- group_sql
- having_sql
- connect_sql
- prior_sql
- join_sql
- lambda_sql
- lateral_sql
- limit_sql
- set_sql
- pragma_sql
- lock_sql
- literal_sql
- escape_str
- loaddata_sql
- null_sql
- order_sql
- withfill_sql
- cluster_sql
- distribute_sql
- sort_sql
- ordered_sql
- matchrecognizemeasure_sql
- matchrecognize_sql
- query_modifiers
- for_modifiers
- offset_limit_modifiers
- after_limit_modifiers
- schema_sql
- schema_columns_sql
- star_sql
- parameter_sql
- sessionparameter_sql
- placeholder_sql
- subquery_sql
- qualify_sql
- unnest_sql
- prewhere_sql
- where_sql
- window_sql
- partition_by_sql
- windowspec_sql
- withingroup_sql
- between_sql
- bracket_offset_expressions
- bracket_sql
- all_sql
- any_sql
- exists_sql
- case_sql
- nextvaluefor_sql
- extract_sql
- trim_sql
- convert_concat_args
- concat_sql
- concatws_sql
- check_sql
- foreignkey_sql
- primarykey_sql
- if_sql
- matchagainst_sql
- jsonkeyvalue_sql
- jsonpath_sql
- json_path_part
- formatjson_sql
- jsonobject_sql
- jsonobjectagg_sql
- jsonarray_sql
- jsonarrayagg_sql
- jsoncolumndef_sql
- jsonschema_sql
- jsontable_sql
- openjsoncolumndef_sql
- openjson_sql
- in_sql
- in_unnest_op
- interval_sql
- return_sql
- reference_sql
- anonymous_sql
- paren_sql
- neg_sql
- not_sql
- alias_sql
- pivotalias_sql
- aliases_sql
- atindex_sql
- attimezone_sql
- fromtimezone_sql
- add_sql
- and_sql
- or_sql
- xor_sql
- connector_sql
- bitwiseand_sql
- bitwiseleftshift_sql
- bitwisenot_sql
- bitwiseor_sql
- bitwiserightshift_sql
- bitwisexor_sql
- cast_sql
- currentdate_sql
- collate_sql
- command_sql
- comment_sql
- mergetreettlaction_sql
- mergetreettl_sql
- altercolumn_sql
- alterindex_sql
- alterdiststyle_sql
- altersortkey_sql
- alterrename_sql
- renamecolumn_sql
- alterset_sql
- add_column_sql
- droppartition_sql
- addconstraint_sql
- addpartition_sql
- distinct_sql
- ignorenulls_sql
- respectnulls_sql
- havingmax_sql
- intdiv_sql
- div_sql
- safedivide_sql
- overlaps_sql
- distance_sql
- dot_sql
- eq_sql
- propertyeq_sql
- escape_sql
- glob_sql
- gt_sql
- gte_sql
- ilike_sql
- ilikeany_sql
- like_sql
- likeany_sql
- similarto_sql
- lt_sql
- lte_sql
- mod_sql
- mul_sql
- neq_sql
- nullsafeeq_sql
- nullsafeneq_sql
- slice_sql
- sub_sql
- trycast_sql
- jsoncast_sql
- try_sql
- log_sql
- use_sql
- binary
- ceil_floor
- function_fallback_sql
- func
- format_args
- too_wide
- format_time
- expressions
- op_expressions
- naked_property
- tag_sql
- token_sql
- userdefinedfunction_sql
- joinhint_sql
- kwarg_sql
- when_sql
- whens_sql
- merge_sql
- tochar_sql
- tonumber_sql
- dictproperty_sql
- dictrange_sql
- dictsubproperty_sql
- duplicatekeyproperty_sql
- uniquekeyproperty_sql
- distributedbyproperty_sql
- oncluster_sql
- clusteredbyproperty_sql
- anyvalue_sql
- querytransform_sql
- indexconstraintoption_sql
- checkcolumnconstraint_sql
- indexcolumnconstraint_sql
- nvl2_sql
- comprehension_sql
- columnprefix_sql
- opclass_sql
- predict_sql
- forin_sql
- refresh_sql
- toarray_sql
- tsordstotime_sql
- tsordstotimestamp_sql
- tsordstodatetime_sql
- tsordstodate_sql
- unixdate_sql
- lastday_sql
- dateadd_sql
- arrayany_sql
- struct_sql
- partitionrange_sql
- truncatetable_sql
- copyparameter_sql
- credentials_sql
- copy_sql
- semicolon_sql
- datadeletionproperty_sql
- maskingpolicycolumnconstraint_sql
- gapfill_sql
- scoperesolution_sql
- parsejson_sql
- rand_sql
- changes_sql
- pad_sql
- summarize_sql
- explodinggenerateseries_sql
- arrayconcat_sql
- converttimezone_sql
- json_sql
- jsonvalue_sql
- conditionalinsert_sql
- multitableinserts_sql
- oncondition_sql
- jsonextractquote_sql
- jsonexists_sql
- arrayagg_sql
- apply_sql
- grant_sql
- grantprivilege_sql
- grantprincipal_sql
- columns_sql
- overlay_sql
- todouble_sql
- string_sql
- median_sql
- overflowtruncatebehavior_sql
- unixseconds_sql
- arraysize_sql
- attach_sql
- detach_sql
- attachoption_sql
- featuresattime_sql
- watermarkcolumnconstraint_sql
- encodeproperty_sql
- includeproperty_sql
- xmlelement_sql
- xmlkeyvalueoption_sql
- partitionbyrangeproperty_sql
- partitionbyrangepropertydynamic_sql
- unpivotcolumns_sql
- analyzesample_sql
- analyzestatistics_sql
- analyzehistogram_sql
- analyzedelete_sql
- analyzelistchainedrows_sql
- analyzevalidate_sql
- analyze_sql
- xmltable_sql
- xmlnamespace_sql
- export_sql
- declare_sql
- declareitem_sql
- recursivewithsearch_sql
- parameterizedagg_sql
- anonymousaggfunc_sql
- combinedaggfunc_sql
- combinedparameterizedagg_sql
- show_sql
- get_put_sql
- translatecharacters_sql
- sqlglot.dialects.tsql.TSQL.Generator
- LIMIT_IS_TOP
- QUERY_HINTS
- RETURNING_END
- NVL2_SUPPORTED
- ALTER_TABLE_INCLUDE_COLUMN_KEYWORD
- LIMIT_FETCH
- COMPUTED_COLUMN_WITH_TYPE
- CTE_RECURSIVE_KEYWORD_REQUIRED
- ENSURE_BOOLS
- NULL_ORDERING_SUPPORTED
- SUPPORTS_SINGLE_ARG_CONCAT
- TABLESAMPLE_SEED_KEYWORD
- SUPPORTS_SELECT_INTO
- JSON_PATH_BRACKETED_KEY_SUPPORTED
- SUPPORTS_TO_NUMBER
- SET_OP_MODIFIERS
- COPY_PARAMS_EQ_REQUIRED
- PARSE_JSON_NAME
- EXCEPT_INTERSECT_SUPPORT_ALL_CLAUSE
- ALTER_SET_WRAPPED
- ALTER_SET_TYPE
- EXPRESSIONS_WITHOUT_NESTED_CTES
- SUPPORTED_JSON_PATH_PARTS
- TRANSFORMS
- PROPERTIES_LOCATION
- scope_resolution
- select_sql
- convert_sql
- queryoption_sql
- lateral_op
- splitpart_sql
- timefromparts_sql
- timestampfromparts_sql
- setitem_sql
- boolean_sql
- is_sql
- createable_sql
- create_sql
- into_sql
- count_sql
- offset_sql
- version_sql
- returnsproperty_sql
- returning_sql
- transaction_sql
- commit_sql
- rollback_sql
- identifier_sql
- constraint_sql
- length_sql
- right_sql
- left_sql
- partition_sql
- alter_sql
- drop_sql
- options_modifier
- dpipe_sql
- isascii_sql
- columndef_sql
- coalesce_sql