sqlglot.parsers.materialize
1from __future__ import annotations 2 3 4from sqlglot import exp 5from sqlglot.helper import seq_get 6from sqlglot.parsers.postgres import PostgresParser 7from sqlglot.tokens import TokenType 8 9 10class MaterializeParser(PostgresParser): 11 TYPED_LAMBDA_ARGS = True 12 13 NO_PAREN_FUNCTION_PARSERS = { 14 **PostgresParser.NO_PAREN_FUNCTION_PARSERS, 15 "MAP": lambda self: self._parse_map(), 16 } 17 18 LAMBDAS = { 19 **PostgresParser.LAMBDAS, 20 TokenType.FARROW: lambda self, expressions: self.expression( 21 exp.Kwarg(this=seq_get(expressions, 0), expression=self._parse_assignment()) 22 ), 23 } 24 25 def _parse_lambda_arg(self) -> exp.Expr | None: 26 return self._parse_field() 27 28 def _parse_map(self) -> exp.ToMap: 29 if self._match(TokenType.L_PAREN): 30 to_map = self.expression(exp.ToMap(this=self._parse_select())) 31 self._match_r_paren() 32 return to_map 33 34 if not self._match(TokenType.L_BRACKET): 35 self.raise_error("Expecting [") 36 37 entries = [ 38 exp.PropertyEQ(this=e.this, expression=e.expression) 39 for e in self._parse_csv(self._parse_lambda) 40 ] 41 42 if not self._match(TokenType.R_BRACKET): 43 self.raise_error("Expecting ]") 44 45 return self.expression(exp.ToMap(this=self.expression(exp.Struct(expressions=entries))))
11class MaterializeParser(PostgresParser): 12 TYPED_LAMBDA_ARGS = True 13 14 NO_PAREN_FUNCTION_PARSERS = { 15 **PostgresParser.NO_PAREN_FUNCTION_PARSERS, 16 "MAP": lambda self: self._parse_map(), 17 } 18 19 LAMBDAS = { 20 **PostgresParser.LAMBDAS, 21 TokenType.FARROW: lambda self, expressions: self.expression( 22 exp.Kwarg(this=seq_get(expressions, 0), expression=self._parse_assignment()) 23 ), 24 } 25 26 def _parse_lambda_arg(self) -> exp.Expr | None: 27 return self._parse_field() 28 29 def _parse_map(self) -> exp.ToMap: 30 if self._match(TokenType.L_PAREN): 31 to_map = self.expression(exp.ToMap(this=self._parse_select())) 32 self._match_r_paren() 33 return to_map 34 35 if not self._match(TokenType.L_BRACKET): 36 self.raise_error("Expecting [") 37 38 entries = [ 39 exp.PropertyEQ(this=e.this, expression=e.expression) 40 for e in self._parse_csv(self._parse_lambda) 41 ] 42 43 if not self._match(TokenType.R_BRACKET): 44 self.raise_error("Expecting ]") 45 46 return self.expression(exp.ToMap(this=self.expression(exp.Struct(expressions=entries))))
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.
NO_PAREN_FUNCTION_PARSERS =
{'ANY': <function Parser.<lambda>>, 'CASE': <function Parser.<lambda>>, 'CONNECT_BY_ROOT': <function Parser.<lambda>>, 'IF': <function Parser.<lambda>>, 'VARIADIC': <function PostgresParser.<lambda>>, 'MAP': <function MaterializeParser.<lambda>>}
LAMBDAS =
{<TokenType.ARROW: 45>: <function Parser.<lambda>>, <TokenType.FARROW: 47>: <function MaterializeParser.<lambda>>}
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
- ID_VAR_TOKENS
- TABLE_ALIAS_TOKENS
- ALIAS_TOKENS
- COLON_PLACEHOLDER_TOKENS
- ARRAY_CONSTRUCTORS
- COMMENT_TABLE_ALIAS_TOKENS
- UPDATE_ALIAS_TOKENS
- TRIM_TYPES
- IDENTIFIER_TOKENS
- BRACKETS
- COLUMN_POSTFIX_TOKENS
- TABLE_POSTFIX_TOKENS
- FUNC_TOKENS
- CONJUNCTION
- ASSIGNMENT
- DISJUNCTION
- EQUALITY
- COMPARISON
- TERM
- FACTOR
- TIMES
- TIMESTAMPS
- SET_OPERATIONS
- JOIN_METHODS
- JOIN_SIDES
- JOIN_KINDS
- JOIN_HINTS
- TABLE_TERMINATORS
- LAMBDA_ARG_TERMINATORS
- CAST_COLUMN_OPERATORS
- EXPRESSION_PARSERS
- STRING_PARSERS
- NUMERIC_PARSERS
- PRIMARY_PARSERS
- PIPE_SYNTAX_TRANSFORM_PARSERS
- CONSTRAINT_PARSERS
- ALTER_PARSERS
- ALTER_ALTER_PARSERS
- SCHEMA_UNNAMED_CONSTRAINTS
- INVALID_FUNC_NAME_TOKENS
- FUNCTIONS_WITH_ALIASED_ARGS
- KEY_VALUE_DEFINITIONS
- QUERY_MODIFIER_PARSERS
- 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
- PROCEDURE_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
- ODBC_DATETIME_LITERALS
- 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
- LOG_DEFAULTS_TO_LN
- TABLESAMPLE_CSV
- DEFAULT_SAMPLING_METHOD
- SET_REQUIRES_ASSIGNMENT_DELIMITER
- TRIM_PATTERN_FIRST
- STRING_ALIASES
- MODIFIERS_ATTACHED_TO_SET_OP
- SET_OP_MODIFIERS
- NO_PAREN_IF_COMMANDS
- 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
- 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