Edit on GitHub

sqlglot.parsers.fabric

 1from __future__ import annotations
 2
 3from sqlglot import exp
 4from sqlglot.parsers.tsql import TSQLParser
 5
 6
 7class FabricParser(TSQLParser):
 8    def _parse_create(self) -> exp.Create | exp.Command:
 9        create = super()._parse_create()
10
11        if isinstance(create, exp.Create):
12            # Transform VARCHAR/CHAR without precision to VARCHAR(1)/CHAR(1)
13            if create.kind == "TABLE" and isinstance(create.this, exp.Schema):
14                for column in create.this.expressions:
15                    if isinstance(column, exp.ColumnDef):
16                        column_type = column.kind
17                        if (
18                            isinstance(column_type, exp.DataType)
19                            and column_type.this in (exp.DType.VARCHAR, exp.DType.CHAR)
20                            and not column_type.expressions
21                        ):
22                            # Add default precision of 1 to VARCHAR/CHAR without precision
23                            # When n isn't specified in a data definition or variable declaration statement, the default length is 1.
24                            # https://learn.microsoft.com/en-us/sql/t-sql/data-types/char-and-varchar-transact-sql?view=sql-server-ver17#remarks
25                            column_type.set("expressions", [exp.Literal.number("1")])
26
27        return create
class FabricParser(sqlglot.parsers.tsql.TSQLParser):
 8class FabricParser(TSQLParser):
 9    def _parse_create(self) -> exp.Create | exp.Command:
10        create = super()._parse_create()
11
12        if isinstance(create, exp.Create):
13            # Transform VARCHAR/CHAR without precision to VARCHAR(1)/CHAR(1)
14            if create.kind == "TABLE" and isinstance(create.this, exp.Schema):
15                for column in create.this.expressions:
16                    if isinstance(column, exp.ColumnDef):
17                        column_type = column.kind
18                        if (
19                            isinstance(column_type, exp.DataType)
20                            and column_type.this in (exp.DType.VARCHAR, exp.DType.CHAR)
21                            and not column_type.expressions
22                        ):
23                            # Add default precision of 1 to VARCHAR/CHAR without precision
24                            # When n isn't specified in a data definition or variable declaration statement, the default length is 1.
25                            # https://learn.microsoft.com/en-us/sql/t-sql/data-types/char-and-varchar-transact-sql?view=sql-server-ver17#remarks
26                            column_type.set("expressions", [exp.Literal.number("1")])
27
28        return create

Parser consumes a list of tokens produced by the Tokenizer and produces a parsed syntax tree.

Arguments:
  • error_level: The desired error level. Default: ErrorLevel.IMMEDIATE
  • error_message_context: The amount of context to capture from a query string when displaying the error message (in number of characters). Default: 100
  • max_errors: Maximum number of error messages to include in a raised ParseError. This is only relevant if error_level is ErrorLevel.RAISE. Default: 3
  • max_nodes: Maximum number of AST nodes to prevent memory exhaustion. Set to -1 (default) to disable the check.
Inherited Members
sqlglot.parser.Parser
Parser
STRUCT_TYPE_TOKENS
NESTED_TYPE_TOKENS
ENUM_TYPE_TOKENS
AGGREGATE_TYPE_TOKENS
TYPE_TOKENS
SIGNED_TO_UNSIGNED_TYPE_TOKEN
SUBQUERY_PREDICATES
SUBQUERY_TOKENS
RESERVED_TOKENS
DB_CREATABLES
CREATABLES
TRIGGER_EVENTS
ALTERABLES
COLON_PLACEHOLDER_TOKENS
ARRAY_CONSTRUCTORS
TRIM_TYPES
IDENTIFIER_TOKENS
BRACKETS
COLUMN_POSTFIX_TOKENS
TABLE_POSTFIX_TOKENS
FUNC_TOKENS
CONJUNCTION
ASSIGNMENT
DISJUNCTION
EQUALITY
COMPARISON
BITWISE
TERM
FACTOR
EXPONENT
TIMES
TIMESTAMPS
SET_OPERATIONS
JOIN_METHODS
JOIN_SIDES
JOIN_KINDS
TABLE_TERMINATORS
LAMBDAS
TYPED_LAMBDA_ARGS
LAMBDA_ARG_TERMINATORS
CAST_COLUMN_OPERATORS
EXPRESSION_PARSERS
UNARY_PARSERS
STRING_PARSERS
NUMERIC_PARSERS
PRIMARY_PARSERS
PLACEHOLDER_PARSERS
PIPE_SYNTAX_TRANSFORM_PARSERS
PROPERTY_PARSERS
CONSTRAINT_PARSERS
ALTER_PARSERS
ALTER_ALTER_PARSERS
SCHEMA_UNNAMED_CONSTRAINTS
INVALID_FUNC_NAME_TOKENS
FUNCTIONS_WITH_ALIASED_ARGS
KEY_VALUE_DEFINITIONS
QUERY_MODIFIER_TOKENS
SET_PARSERS
SHOW_PARSERS
TYPE_LITERAL_PARSERS
TYPE_CONVERTERS
DDL_SELECT_TOKENS
PRE_VOLATILE_TOKENS
TRANSACTION_KIND
TRANSACTION_CHARACTERISTICS
CONFLICT_ACTIONS
TRIGGER_TIMING
TRIGGER_DEFERRABLE
CREATE_SEQUENCE
ISOLATED_LOADING_OPTIONS
USABLES
CAST_ACTIONS
SCHEMA_BINDING_OPTIONS
EXECUTE_AS_OPTIONS
KEY_CONSTRAINT_OPTIONS
WINDOW_EXCLUDE_OPTIONS
INSERT_ALTERNATIVES
CLONE_KEYWORDS
HISTORICAL_DATA_PREFIX
HISTORICAL_DATA_KIND
OPCLASS_FOLLOW_KEYWORDS
OPTYPE_FOLLOW_TOKENS
TABLE_INDEX_HINT_TOKENS
VIEW_ATTRIBUTES
WINDOW_ALIAS_TOKENS
WINDOW_BEFORE_PAREN_TOKENS
WINDOW_SIDES
JSON_KEY_VALUE_SEPARATOR_TOKENS
FETCH_TOKENS
ADD_CONSTRAINT_TOKENS
DISTINCT_TOKENS
UNNEST_OFFSET_ALIAS_TOKENS
SELECT_START_TOKENS
COPY_INTO_VARLEN_OPTIONS
IS_JSON_PREDICATE_KIND
ON_CONDITION_TOKENS
PRIVILEGE_FOLLOW_TOKENS
DESCRIBE_STYLES
SET_ASSIGNMENT_DELIMITERS
ANALYZE_STYLES
ANALYZE_EXPRESSION_PARSERS
PARTITION_KEYWORDS
AMBIGUOUS_ALIAS_TOKENS
OPERATION_MODIFIERS
RECURSIVE_CTE_SEARCH_KIND
SECURITY_PROPERTY_KEYWORDS
MODIFIABLES
STRICT_CAST
PREFIXED_PIVOT_COLUMNS
IDENTIFY_PIVOT_STRINGS
TABLESAMPLE_CSV
DEFAULT_SAMPLING_METHOD
TRIM_PATTERN_FIRST
MODIFIERS_ATTACHED_TO_SET_OP
JSON_ARROWS_REQUIRE_JSON_TYPE
COLON_IS_VARIANT_EXTRACT
VALUES_FOLLOWED_BY_PAREN
SUPPORTS_IMPLICIT_UNNEST
INTERVAL_SPANS
SUPPORTS_PARTITION_SELECTION
WRAPPED_TRANSFORM_COLUMN_CONSTRAINT
OPTIONAL_ALIAS_TOKEN_CTE
ALTER_RENAME_REQUIRES_COLUMN
ALTER_TABLE_PARTITIONS
JOINS_HAVE_EQUAL_PRECEDENCE
ZONE_AWARE_TIMESTAMP_CONSTRUCTOR
MAP_KEYS_ARE_ARBITRARY_EXPRESSIONS
JSON_EXTRACT_REQUIRES_JSON_EXPRESSION
ADD_JOIN_ON_TRUE
SUPPORTS_OMITTED_INTERVAL_SPAN_UNIT
SHOW_TRIE
SET_TRIE
error_level
error_message_context
max_errors
max_nodes
dialect
sql
errors
reset
raise_error
validate_expression
parse
parse_into
check_errors
expression
parse_set_operation
build_cast
sqlglot.parsers.tsql.TSQLParser
SET_REQUIRES_ASSIGNMENT_DELIMITER
LOG_DEFAULTS_TO_LN
STRING_ALIASES
NO_PAREN_IF_COMMANDS
NO_PAREN_FUNCTIONS
QUERY_MODIFIER_PARSERS
ID_VAR_TOKENS
ALIAS_TOKENS
TABLE_ALIAS_TOKENS
COMMENT_TABLE_ALIAS_TOKENS
UPDATE_ALIAS_TOKENS
FUNCTIONS
JOIN_HINTS
PROCEDURE_OPTIONS
COLUMN_DEFINITION_MODES
RETURNS_TABLE_TOKENS
STATEMENT_PARSERS
RANGE_PARSERS
NO_PAREN_FUNCTION_PARSERS
FUNCTION_PARSERS
COLUMN_OPERATORS
SET_OP_MODIFIERS
ODBC_DATETIME_LITERALS