Edit on GitHub

sqlglot.parsers.risingwave

 1from __future__ import annotations
 2
 3
 4from sqlglot import exp
 5from sqlglot.parsers.postgres import PostgresParser
 6from sqlglot.tokens import TokenType
 7
 8
 9class RisingWaveParser(PostgresParser):
10    WRAPPED_TRANSFORM_COLUMN_CONSTRAINT = False
11
12    PROPERTY_PARSERS = {
13        **PostgresParser.PROPERTY_PARSERS,
14        "ENCODE": lambda self: self._parse_encode_property(),
15        "INCLUDE": lambda self: self._parse_include_property(),
16        "KEY": lambda self: self._parse_encode_property(key=True),
17    }
18
19    CONSTRAINT_PARSERS = {
20        **PostgresParser.CONSTRAINT_PARSERS,
21        "WATERMARK": lambda self: self.expression(
22            exp.WatermarkColumnConstraint(
23                this=self._match(TokenType.FOR) and self._parse_column(),
24                expression=self._match(TokenType.ALIAS) and self._parse_disjunction(),
25            )
26        ),
27    }
28
29    SCHEMA_UNNAMED_CONSTRAINTS = {
30        *PostgresParser.SCHEMA_UNNAMED_CONSTRAINTS,
31        "WATERMARK",
32    }
33
34    def _parse_table_hints(self) -> list[exp.Expr] | None:
35        # There is no hint in risingwave.
36        # Do nothing here to avoid WITH keywords conflict in CREATE SINK statement.
37        return None
38
39    def _parse_include_property(self) -> exp.Expr | None:
40        header: exp.Expr | None = None
41        coldef: exp.Expr | None = None
42
43        this = self._parse_var_or_string()
44
45        if not self._match(TokenType.ALIAS):
46            header = self._parse_field()
47            if header:
48                coldef = self.expression(exp.ColumnDef(this=header, kind=self._parse_types()))
49
50        self._match(TokenType.ALIAS)
51        alias = self._parse_id_var(tokens=self.ALIAS_TOKENS)
52
53        return self.expression(exp.IncludeProperty(this=this, alias=alias, column_def=coldef))
54
55    def _parse_encode_property(self, key: bool | None = None) -> exp.EncodeProperty:
56        self._match_text_seq("ENCODE")
57        this = self._parse_var_or_string()
58
59        if self._match(TokenType.L_PAREN, advance=False):
60            properties = self.expression(
61                exp.Properties(expressions=self._parse_wrapped_properties())
62            )
63        else:
64            properties = None
65
66        return self.expression(exp.EncodeProperty(this=this, properties=properties, key=key))
class RisingWaveParser(sqlglot.parsers.postgres.PostgresParser):
10class RisingWaveParser(PostgresParser):
11    WRAPPED_TRANSFORM_COLUMN_CONSTRAINT = False
12
13    PROPERTY_PARSERS = {
14        **PostgresParser.PROPERTY_PARSERS,
15        "ENCODE": lambda self: self._parse_encode_property(),
16        "INCLUDE": lambda self: self._parse_include_property(),
17        "KEY": lambda self: self._parse_encode_property(key=True),
18    }
19
20    CONSTRAINT_PARSERS = {
21        **PostgresParser.CONSTRAINT_PARSERS,
22        "WATERMARK": lambda self: self.expression(
23            exp.WatermarkColumnConstraint(
24                this=self._match(TokenType.FOR) and self._parse_column(),
25                expression=self._match(TokenType.ALIAS) and self._parse_disjunction(),
26            )
27        ),
28    }
29
30    SCHEMA_UNNAMED_CONSTRAINTS = {
31        *PostgresParser.SCHEMA_UNNAMED_CONSTRAINTS,
32        "WATERMARK",
33    }
34
35    def _parse_table_hints(self) -> list[exp.Expr] | None:
36        # There is no hint in risingwave.
37        # Do nothing here to avoid WITH keywords conflict in CREATE SINK statement.
38        return None
39
40    def _parse_include_property(self) -> exp.Expr | None:
41        header: exp.Expr | None = None
42        coldef: exp.Expr | None = None
43
44        this = self._parse_var_or_string()
45
46        if not self._match(TokenType.ALIAS):
47            header = self._parse_field()
48            if header:
49                coldef = self.expression(exp.ColumnDef(this=header, kind=self._parse_types()))
50
51        self._match(TokenType.ALIAS)
52        alias = self._parse_id_var(tokens=self.ALIAS_TOKENS)
53
54        return self.expression(exp.IncludeProperty(this=this, alias=alias, column_def=coldef))
55
56    def _parse_encode_property(self, key: bool | None = None) -> exp.EncodeProperty:
57        self._match_text_seq("ENCODE")
58        this = self._parse_var_or_string()
59
60        if self._match(TokenType.L_PAREN, advance=False):
61            properties = self.expression(
62                exp.Properties(expressions=self._parse_wrapped_properties())
63            )
64        else:
65            properties = None
66
67        return self.expression(exp.EncodeProperty(this=this, properties=properties, key=key))

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.
WRAPPED_TRANSFORM_COLUMN_CONSTRAINT = False
PROPERTY_PARSERS = {'ALLOWED_VALUES': <function Parser.<lambda>>, 'ALGORITHM': <function Parser.<lambda>>, 'AUTO': <function Parser.<lambda>>, 'AUTO_INCREMENT': <function Parser.<lambda>>, 'BACKUP': <function Parser.<lambda>>, 'BLOCKCOMPRESSION': <function Parser.<lambda>>, 'CHARSET': <function Parser.<lambda>>, 'CHARACTER SET': <function Parser.<lambda>>, 'CHECKSUM': <function Parser.<lambda>>, 'CLUSTER BY': <function Parser.<lambda>>, 'CLUSTERED': <function Parser.<lambda>>, 'COLLATE': <function Parser.<lambda>>, 'COMMENT': <function Parser.<lambda>>, 'CONTAINS': <function Parser.<lambda>>, 'COPY': <function Parser.<lambda>>, 'DATABLOCKSIZE': <function Parser.<lambda>>, 'DATA_DELETION': <function Parser.<lambda>>, 'DEFINER': <function Parser.<lambda>>, 'DETERMINISTIC': <function Parser.<lambda>>, 'DISTRIBUTED': <function Parser.<lambda>>, 'DUPLICATE': <function Parser.<lambda>>, 'DYNAMIC': <function Parser.<lambda>>, 'DISTKEY': <function Parser.<lambda>>, 'DISTSTYLE': <function Parser.<lambda>>, 'EMPTY': <function Parser.<lambda>>, 'ENGINE': <function Parser.<lambda>>, 'ENVIRONMENT': <function Parser.<lambda>>, 'HANDLER': <function Parser.<lambda>>, 'EXECUTE': <function Parser.<lambda>>, 'EXTERNAL': <function Parser.<lambda>>, 'FALLBACK': <function Parser.<lambda>>, 'FORMAT': <function Parser.<lambda>>, 'FREESPACE': <function Parser.<lambda>>, 'GLOBAL': <function Parser.<lambda>>, 'HEAP': <function Parser.<lambda>>, 'ICEBERG': <function Parser.<lambda>>, 'IMMUTABLE': <function Parser.<lambda>>, 'INHERITS': <function Parser.<lambda>>, 'JOURNAL': <function Parser.<lambda>>, 'LANGUAGE': <function Parser.<lambda>>, 'LAYOUT': <function Parser.<lambda>>, 'LIFETIME': <function Parser.<lambda>>, 'LIKE': <function Parser.<lambda>>, 'LOCATION': <function Parser.<lambda>>, 'LOCK': <function Parser.<lambda>>, 'LOCKING': <function Parser.<lambda>>, 'LOG': <function Parser.<lambda>>, 'MATERIALIZED': <function Parser.<lambda>>, 'MERGEBLOCKRATIO': <function Parser.<lambda>>, 'MODIFIES': <function Parser.<lambda>>, 'MULTISET': <function Parser.<lambda>>, 'NO': <function Parser.<lambda>>, 'ON': <function Parser.<lambda>>, 'ORDER BY': <function Parser.<lambda>>, 'OUTPUT': <function Parser.<lambda>>, 'PARTITION': <function Parser.<lambda>>, 'PARTITION BY': <function Parser.<lambda>>, 'PARTITIONED BY': <function Parser.<lambda>>, 'PARTITIONED_BY': <function Parser.<lambda>>, 'PRIMARY KEY': <function Parser.<lambda>>, 'RANGE': <function Parser.<lambda>>, 'READS': <function Parser.<lambda>>, 'REMOTE': <function Parser.<lambda>>, 'RETURNS': <function Parser.<lambda>>, 'STRICT': <function Parser.<lambda>>, 'STREAMING': <function Parser.<lambda>>, 'ROW': <function Parser.<lambda>>, 'ROW_FORMAT': <function Parser.<lambda>>, 'SAMPLE': <function Parser.<lambda>>, 'SECURE': <function Parser.<lambda>>, 'SECURITY': <function Parser.<lambda>>, 'SQL SECURITY': <function Parser.<lambda>>, 'SET': <function PostgresParser.<lambda>>, 'SETTINGS': <function Parser.<lambda>>, 'SHARING': <function Parser.<lambda>>, 'SORTKEY': <function Parser.<lambda>>, 'SOURCE': <function Parser.<lambda>>, 'STABLE': <function Parser.<lambda>>, 'STORED': <function Parser.<lambda>>, 'SYSTEM_VERSIONING': <function Parser.<lambda>>, 'TBLPROPERTIES': <function Parser.<lambda>>, 'TEMP': <function Parser.<lambda>>, 'TEMPORARY': <function Parser.<lambda>>, 'TO': <function Parser.<lambda>>, 'TRANSIENT': <function Parser.<lambda>>, 'TRANSFORM': <function Parser.<lambda>>, 'TTL': <function Parser.<lambda>>, 'USING': <function Parser.<lambda>>, 'UNLOGGED': <function Parser.<lambda>>, 'VOLATILE': <function Parser.<lambda>>, 'WITH': <function Parser.<lambda>>, 'ENCODE': <function RisingWaveParser.<lambda>>, 'INCLUDE': <function RisingWaveParser.<lambda>>, 'KEY': <function RisingWaveParser.<lambda>>}
CONSTRAINT_PARSERS = {'AUTOINCREMENT': <function Parser.<lambda>>, 'AUTO_INCREMENT': <function Parser.<lambda>>, 'CASESPECIFIC': <function Parser.<lambda>>, 'CHARACTER SET': <function Parser.<lambda>>, 'CHECK': <function Parser.<lambda>>, 'COLLATE': <function Parser.<lambda>>, 'COMMENT': <function Parser.<lambda>>, 'COMPRESS': <function Parser.<lambda>>, 'CLUSTERED': <function Parser.<lambda>>, 'NONCLUSTERED': <function Parser.<lambda>>, 'DEFAULT': <function Parser.<lambda>>, 'ENCODE': <function Parser.<lambda>>, 'EPHEMERAL': <function Parser.<lambda>>, 'EXCLUDE': <function Parser.<lambda>>, 'FOREIGN KEY': <function Parser.<lambda>>, 'FORMAT': <function Parser.<lambda>>, 'GENERATED': <function Parser.<lambda>>, 'IDENTITY': <function Parser.<lambda>>, 'INLINE': <function Parser.<lambda>>, 'LIKE': <function Parser.<lambda>>, 'NOT': <function Parser.<lambda>>, 'NULL': <function Parser.<lambda>>, 'ON': <function Parser.<lambda>>, 'PATH': <function Parser.<lambda>>, 'PERIOD': <function Parser.<lambda>>, 'PRIMARY KEY': <function Parser.<lambda>>, 'REFERENCES': <function Parser.<lambda>>, 'TITLE': <function Parser.<lambda>>, 'TTL': <function Parser.<lambda>>, 'UNIQUE': <function Parser.<lambda>>, 'UPPERCASE': <function Parser.<lambda>>, 'WITH': <function Parser.<lambda>>, 'BUCKET': <function Parser.<lambda>>, 'TRUNCATE': <function Parser.<lambda>>, 'WATERMARK': <function RisingWaveParser.<lambda>>}
SCHEMA_UNNAMED_CONSTRAINTS = {'WATERMARK', 'FOREIGN KEY', 'PRIMARY KEY', 'LIKE', 'PERIOD', 'EXCLUDE', 'TRUNCATE', 'BUCKET', 'UNIQUE', '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
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
LAMBDAS
TYPED_LAMBDA_ARGS
LAMBDA_ARG_TERMINATORS
CAST_COLUMN_OPERATORS
EXPRESSION_PARSERS
STRING_PARSERS
NUMERIC_PARSERS
PRIMARY_PARSERS
PIPE_SYNTAX_TRANSFORM_PARSERS
ALTER_PARSERS
ALTER_ALTER_PARSERS
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
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
PLACEHOLDER_PARSERS
FUNCTIONS
NO_PAREN_FUNCTION_PARSERS
NO_PAREN_FUNCTIONS
FUNCTION_PARSERS
BITWISE
EXPONENT
RANGE_PARSERS
STATEMENT_PARSERS
UNARY_PARSERS
JSON_ARROWS_REQUIRE_JSON_TYPE
COLUMN_OPERATORS
ARG_MODE_TOKENS