sqlglot.dialects.presto
1from __future__ import annotations 2 3import typing as t 4 5from sqlglot import tokens 6from sqlglot.dialects.dialect import ( 7 Dialect, 8 NormalizationStrategy, 9) 10from sqlglot.dialects.mysql import MySQL 11from sqlglot.generators.presto import PrestoGenerator 12from sqlglot.parsers.presto import PrestoParser 13from sqlglot.tokens import TokenType 14from sqlglot.typing.presto import EXPRESSION_METADATA 15 16 17class Presto(Dialect): 18 INDEX_OFFSET = 1 19 NULL_ORDERING = "nulls_are_last" 20 TIME_FORMAT = MySQL.TIME_FORMAT 21 STRICT_STRING_CONCAT = True 22 TYPED_DIVISION = True 23 TABLESAMPLE_SIZE_IS_PERCENT = True 24 LOG_BASE_FIRST: bool | None = None 25 SUPPORTS_VALUES_DEFAULT = False 26 LEAST_GREATEST_IGNORES_NULLS = False 27 UUID_IS_STRING_TYPE = False 28 29 TIME_MAPPING = MySQL.TIME_MAPPING 30 31 # https://github.com/trinodb/trino/issues/17 32 # https://github.com/trinodb/trino/issues/12289 33 # https://github.com/prestodb/presto/issues/2863 34 NORMALIZATION_STRATEGY = NormalizationStrategy.CASE_INSENSITIVE 35 36 EXPRESSION_METADATA = EXPRESSION_METADATA.copy() 37 38 SUPPORTED_SETTINGS = { 39 *Dialect.SUPPORTED_SETTINGS, 40 "variant_extract_is_json_extract", 41 } 42 43 class Tokenizer(tokens.Tokenizer): 44 HEX_STRINGS = [("x'", "'"), ("X'", "'")] 45 UNICODE_STRINGS = [ 46 (prefix + q, q) 47 for q in t.cast(list[str], tokens.Tokenizer.QUOTES) 48 for prefix in ("U&", "u&") 49 ] 50 51 NESTED_COMMENTS = False 52 53 KEYWORDS = { 54 **tokens.Tokenizer.KEYWORDS, 55 "DEALLOCATE PREPARE": TokenType.COMMAND, 56 "DESCRIBE INPUT": TokenType.COMMAND, 57 "DESCRIBE OUTPUT": TokenType.COMMAND, 58 "RESET SESSION": TokenType.COMMAND, 59 "START": TokenType.BEGIN, 60 "MATCH_RECOGNIZE": TokenType.MATCH_RECOGNIZE, 61 "ROW": TokenType.STRUCT, 62 "IPADDRESS": TokenType.IPADDRESS, 63 "IPPREFIX": TokenType.IPPREFIX, 64 "TDIGEST": TokenType.TDIGEST, 65 "HYPERLOGLOG": TokenType.HLLSKETCH, 66 } 67 KEYWORDS.pop("/*+") 68 KEYWORDS.pop("QUALIFY") 69 70 Parser = PrestoParser 71 72 Generator = PrestoGenerator
18class Presto(Dialect): 19 INDEX_OFFSET = 1 20 NULL_ORDERING = "nulls_are_last" 21 TIME_FORMAT = MySQL.TIME_FORMAT 22 STRICT_STRING_CONCAT = True 23 TYPED_DIVISION = True 24 TABLESAMPLE_SIZE_IS_PERCENT = True 25 LOG_BASE_FIRST: bool | None = None 26 SUPPORTS_VALUES_DEFAULT = False 27 LEAST_GREATEST_IGNORES_NULLS = False 28 UUID_IS_STRING_TYPE = False 29 30 TIME_MAPPING = MySQL.TIME_MAPPING 31 32 # https://github.com/trinodb/trino/issues/17 33 # https://github.com/trinodb/trino/issues/12289 34 # https://github.com/prestodb/presto/issues/2863 35 NORMALIZATION_STRATEGY = NormalizationStrategy.CASE_INSENSITIVE 36 37 EXPRESSION_METADATA = EXPRESSION_METADATA.copy() 38 39 SUPPORTED_SETTINGS = { 40 *Dialect.SUPPORTED_SETTINGS, 41 "variant_extract_is_json_extract", 42 } 43 44 class Tokenizer(tokens.Tokenizer): 45 HEX_STRINGS = [("x'", "'"), ("X'", "'")] 46 UNICODE_STRINGS = [ 47 (prefix + q, q) 48 for q in t.cast(list[str], tokens.Tokenizer.QUOTES) 49 for prefix in ("U&", "u&") 50 ] 51 52 NESTED_COMMENTS = False 53 54 KEYWORDS = { 55 **tokens.Tokenizer.KEYWORDS, 56 "DEALLOCATE PREPARE": TokenType.COMMAND, 57 "DESCRIBE INPUT": TokenType.COMMAND, 58 "DESCRIBE OUTPUT": TokenType.COMMAND, 59 "RESET SESSION": TokenType.COMMAND, 60 "START": TokenType.BEGIN, 61 "MATCH_RECOGNIZE": TokenType.MATCH_RECOGNIZE, 62 "ROW": TokenType.STRUCT, 63 "IPADDRESS": TokenType.IPADDRESS, 64 "IPPREFIX": TokenType.IPPREFIX, 65 "TDIGEST": TokenType.TDIGEST, 66 "HYPERLOGLOG": TokenType.HLLSKETCH, 67 } 68 KEYWORDS.pop("/*+") 69 KEYWORDS.pop("QUALIFY") 70 71 Parser = PrestoParser 72 73 Generator = PrestoGenerator
Default NULL ordering method to use if not explicitly set.
Possible values: "nulls_are_small", "nulls_are_large", "nulls_are_last"
Whether the behavior of a / b depends on the types of a and b.
False means a / b is always float division.
True means a / b is integer division if both a and b are integers.
Whether the base comes first in the LOG function.
Possible values: True, False, None (two arguments are not supported by LOG)
Whether LEAST/GREATEST functions ignore NULL values, e.g:
- BigQuery, Snowflake, MySQL, Presto/Trino: LEAST(1, NULL, 2) -> NULL
- Spark, Postgres, DuckDB, TSQL: LEAST(1, NULL, 2) -> 1
Associates this dialect's time formats with their equivalent Python strftime formats.
Specifies the strategy according to which identifiers should be normalized.
Whether string literals support escape sequences (e.g. \n). Set by the metaclass based on the tokenizer's STRING_ESCAPES.
Whether byte string literals support escape sequences. Set by the metaclass based on the tokenizer's BYTE_STRING_ESCAPES.
44 class Tokenizer(tokens.Tokenizer): 45 HEX_STRINGS = [("x'", "'"), ("X'", "'")] 46 UNICODE_STRINGS = [ 47 (prefix + q, q) 48 for q in t.cast(list[str], tokens.Tokenizer.QUOTES) 49 for prefix in ("U&", "u&") 50 ] 51 52 NESTED_COMMENTS = False 53 54 KEYWORDS = { 55 **tokens.Tokenizer.KEYWORDS, 56 "DEALLOCATE PREPARE": TokenType.COMMAND, 57 "DESCRIBE INPUT": TokenType.COMMAND, 58 "DESCRIBE OUTPUT": TokenType.COMMAND, 59 "RESET SESSION": TokenType.COMMAND, 60 "START": TokenType.BEGIN, 61 "MATCH_RECOGNIZE": TokenType.MATCH_RECOGNIZE, 62 "ROW": TokenType.STRUCT, 63 "IPADDRESS": TokenType.IPADDRESS, 64 "IPPREFIX": TokenType.IPPREFIX, 65 "TDIGEST": TokenType.TDIGEST, 66 "HYPERLOGLOG": TokenType.HLLSKETCH, 67 } 68 KEYWORDS.pop("/*+") 69 KEYWORDS.pop("QUALIFY")
Inherited Members
- sqlglot.tokens.Tokenizer
- Tokenizer
- SINGLE_TOKENS
- BIT_STRINGS
- BYTE_STRINGS
- RAW_STRINGS
- HEREDOC_STRINGS
- IDENTIFIERS
- QUOTES
- STRING_ESCAPES
- VAR_SINGLE_TOKENS
- ESCAPE_FOLLOW_CHARS
- IDENTIFIER_ESCAPES
- HEREDOC_TAG_IS_IDENTIFIER
- HEREDOC_STRING_ALTERNATIVE
- STRING_ESCAPES_ALLOWED_IN_RAW_STRINGS
- HINT_START
- TOKENS_PRECEDING_HINT
- COMMANDS
- COMMAND_PREFIX_TOKENS
- NUMERIC_LITERALS
- NUMBERS_CAN_HAVE_DECIMALS
- COMMENTS
- dialect
- tokenize
- sql
- size
- tokens