2025-02-13 14:53:05 +01:00
|
|
|
from __future__ import annotations
|
|
|
|
|
2025-02-13 06:15:54 +01:00
|
|
|
from sqlglot import exp
|
2025-02-13 21:33:25 +01:00
|
|
|
from sqlglot.dialects.dialect import merge_without_target_sql, trim_sql
|
2025-02-13 06:15:54 +01:00
|
|
|
from sqlglot.dialects.presto import Presto
|
|
|
|
|
|
|
|
|
|
|
|
class Trino(Presto):
|
2025-02-13 21:02:36 +01:00
|
|
|
SUPPORTS_USER_DEFINED_TYPES = False
|
2025-02-13 21:30:28 +01:00
|
|
|
LOG_BASE_FIRST = True
|
2025-02-13 21:02:36 +01:00
|
|
|
|
2025-02-13 21:33:25 +01:00
|
|
|
class Parser(Presto.Parser):
|
|
|
|
FUNCTION_PARSERS = {
|
|
|
|
**Presto.Parser.FUNCTION_PARSERS,
|
|
|
|
"TRIM": lambda self: self._parse_trim(),
|
|
|
|
}
|
|
|
|
|
2025-02-13 06:15:54 +01:00
|
|
|
class Generator(Presto.Generator):
|
|
|
|
TRANSFORMS = {
|
2025-02-13 15:57:23 +01:00
|
|
|
**Presto.Generator.TRANSFORMS,
|
2025-02-13 21:20:36 +01:00
|
|
|
exp.ArraySum: lambda self,
|
|
|
|
e: f"REDUCE({self.sql(e, 'this')}, 0, (acc, x) -> acc + x, acc -> acc)",
|
2025-02-13 21:19:14 +01:00
|
|
|
exp.Merge: merge_without_target_sql,
|
2025-02-13 21:33:25 +01:00
|
|
|
exp.Trim: trim_sql,
|
2025-02-13 06:15:54 +01:00
|
|
|
}
|
2025-02-13 08:04:41 +01:00
|
|
|
|
2025-02-13 21:20:36 +01:00
|
|
|
SUPPORTED_JSON_PATH_PARTS = {
|
|
|
|
exp.JSONPathKey,
|
|
|
|
exp.JSONPathRoot,
|
|
|
|
exp.JSONPathSubscript,
|
|
|
|
}
|
|
|
|
|
2025-02-13 08:04:41 +01:00
|
|
|
class Tokenizer(Presto.Tokenizer):
|
|
|
|
HEX_STRINGS = [("X'", "'")]
|