From 7d44d7788bcb353f7423ac904a307c2d062d2de7 Mon Sep 17 00:00:00 2001 From: Gil Forsyth Date: Tue, 23 Jan 2024 17:15:17 -0500 Subject: [PATCH] refactor(oracle): simplify oracle timestamp overrides Also add a note about when it can be ripped out. Unrelated but small change, the stddev pop and samp remappings are unnecessary. --- ibis/backends/oracle/compiler.py | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/ibis/backends/oracle/compiler.py b/ibis/backends/oracle/compiler.py index 63b171458195..e0b3e711ebc1 100644 --- a/ibis/backends/oracle/compiler.py +++ b/ibis/backends/oracle/compiler.py @@ -40,31 +40,24 @@ def _create_sql(self, expression: sge.Create) -> str: return create_with_partitions_sql(self, expression) -def _datatype_sql(self: Oracle.Generator, expression: sge.DataType) -> str: - # Use this to handle correctly formatting timestamp precision - # e.g. TIMESTAMP (scale) WITH TIME ZONE vs. TIMESTAMP WITH TIME ZONE(scale) - if expression.is_type("timestamptz"): - for exp in expression.expressions: - if isinstance(exp, sge.DataTypeParam): - return f"TIMESTAMP ({self.sql(exp, 'this')}) WITH TIME ZONE" - return "TIMESTAMP WITH TIME ZONE" - return self.datatype_sql(expression) - - Oracle.Generator.TRANSFORMS |= { sge.LogicalOr: rename_func("max"), sge.LogicalAnd: rename_func("min"), sge.VariancePop: rename_func("var_pop"), sge.Variance: rename_func("var_samp"), sge.Stddev: rename_func("stddev_pop"), - sge.StddevPop: rename_func("stddev_pop"), - sge.StddevSamp: rename_func("stddev_samp"), sge.ApproxDistinct: rename_func("approx_count_distinct"), sge.Create: _create_sql, sge.Select: sg.transforms.preprocess([sg.transforms.eliminate_semi_and_anti_joins]), - sge.DataType: _datatype_sql, } +# TODO: can delete this after bumping sqlglot version > 20.9.0 +Oracle.Generator.TYPE_MAPPING |= { + sge.DataType.Type.TIMETZ: "TIME", + sge.DataType.Type.TIMESTAMPTZ: "TIMESTAMP", +} +Oracle.Generator.TZ_TO_WITH_TIME_ZONE = True + @replace(p.WindowFunction(p.First(x, y))) def rewrite_first(_, x, y):