Edit on GitHub

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))))
class MaterializeParser(sqlglot.parsers.postgres.PostgresParser):
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.
TYPED_LAMBDA_ARGS = True
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
sqlglot.parsers.postgres.PostgresParser
SUPPORTS_OMITTED_INTERVAL_SPAN_UNIT
PROPERTY_PARSERS
PLACEHOLDER_PARSERS
FUNCTIONS
NO_PAREN_FUNCTIONS
FUNCTION_PARSERS
BITWISE
EXPONENT
RANGE_PARSERS
STATEMENT_PARSERS
UNARY_PARSERS
JSON_ARROWS_REQUIRE_JSON_TYPE
COLUMN_OPERATORS
ARG_MODE_TOKENS