Edit on GitHub

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)
class Fabric(sqlglot.dialects.tsql.TSQL):
 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.

SUPPORTS_COLUMN_JOIN_MARKS = False

Whether the old-style outer join (+) syntax is supported.

tokenizer_class = <class 'sqlglot.tokens.Tokenizer'>
jsonpath_tokenizer_class = <class 'sqlglot.tokens.JSONPathTokenizer'>
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}}}
INVERSE_FORMAT_MAPPING: Dict[str, str] = {}
INVERSE_FORMAT_TRIE: Dict = {}
INVERSE_CREATABLE_KIND_MAPPING: dict[str, str] = {}
ESCAPED_SEQUENCES: Dict[str, str] = {}
QUOTE_START = "'"
QUOTE_END = "'"
IDENTIFIER_START = '['
IDENTIFIER_END = ']'
BIT_START: Optional[str] = None
BIT_END: Optional[str] = None
HEX_START: Optional[str] = '0x'
HEX_END: Optional[str] = ''
BYTE_START: Optional[str] = None
BYTE_END: Optional[str] = None
UNICODE_START: Optional[str] = None
UNICODE_END: Optional[str] = None
class Fabric.Generator(sqlglot.dialects.tsql.TSQL.Generator):
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'}
def datatype_sql(self, expression: sqlglot.expressions.DataType) -> str:
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.

SELECT_KINDS: Tuple[str, ...] = ()
TRY_SUPPORTED = False
SUPPORTS_UESCAPE = False
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