From 75e9e9062ad637c32b4f9917db88f4082241f3b2 Mon Sep 17 00:00:00 2001 From: jialuo Date: Mon, 3 Nov 2025 22:29:54 +0000 Subject: [PATCH] chore: Migrate maximum_op operator to SQLGlot Migrated the maximum_op and minimum_op operators to SQLGlot. --- .../compile/sqlglot/expressions/comparison_ops.py | 5 +++++ .../test_comparison_ops/test_maximum_op/out.sql | 14 ++++++++++++++ .../sqlglot/expressions/test_comparison_ops.py | 7 +++++++ 3 files changed, 26 insertions(+) create mode 100644 tests/unit/core/compile/sqlglot/expressions/snapshots/test_comparison_ops/test_maximum_op/out.sql diff --git a/bigframes/core/compile/sqlglot/expressions/comparison_ops.py b/bigframes/core/compile/sqlglot/expressions/comparison_ops.py index e77b8b50a5..89d3b4a682 100644 --- a/bigframes/core/compile/sqlglot/expressions/comparison_ops.py +++ b/bigframes/core/compile/sqlglot/expressions/comparison_ops.py @@ -109,6 +109,11 @@ def _(left: TypedExpr, right: TypedExpr) -> sge.Expression: return sge.LTE(this=left_expr, expression=right_expr) +@register_binary_op(ops.maximum_op) +def _(left: TypedExpr, right: TypedExpr) -> sge.Expression: + return sge.Greatest(expressions=[left.expr, right.expr]) + + @register_binary_op(ops.minimum_op) def _(left: TypedExpr, right: TypedExpr) -> sge.Expression: return sge.Least(this=left.expr, expressions=right.expr) diff --git a/tests/unit/core/compile/sqlglot/expressions/snapshots/test_comparison_ops/test_maximum_op/out.sql b/tests/unit/core/compile/sqlglot/expressions/snapshots/test_comparison_ops/test_maximum_op/out.sql new file mode 100644 index 0000000000..c0c0f5c97f --- /dev/null +++ b/tests/unit/core/compile/sqlglot/expressions/snapshots/test_comparison_ops/test_maximum_op/out.sql @@ -0,0 +1,14 @@ +WITH `bfcte_0` AS ( + SELECT + `int64_col` AS `bfcol_0`, + `float64_col` AS `bfcol_1` + FROM `bigframes-dev`.`sqlglot_test`.`scalar_types` +), `bfcte_1` AS ( + SELECT + *, + GREATEST(`bfcol_0`, `bfcol_1`) AS `bfcol_2` + FROM `bfcte_0` +) +SELECT + `bfcol_2` AS `int64_col` +FROM `bfcte_1` \ No newline at end of file diff --git a/tests/unit/core/compile/sqlglot/expressions/test_comparison_ops.py b/tests/unit/core/compile/sqlglot/expressions/test_comparison_ops.py index 52b57623b3..20dd6c5ca6 100644 --- a/tests/unit/core/compile/sqlglot/expressions/test_comparison_ops.py +++ b/tests/unit/core/compile/sqlglot/expressions/test_comparison_ops.py @@ -110,6 +110,13 @@ def test_le_numeric(scalar_types_df: bpd.DataFrame, snapshot): snapshot.assert_match(bf_df.sql, "out.sql") +def test_maximum_op(scalar_types_df: bpd.DataFrame, snapshot): + bf_df = scalar_types_df[["int64_col", "float64_col"]] + sql = utils._apply_binary_op(bf_df, ops.maximum_op, "int64_col", "float64_col") + + snapshot.assert_match(sql, "out.sql") + + def test_minimum_op(scalar_types_df: bpd.DataFrame, snapshot): bf_df = scalar_types_df[["int64_col", "float64_col"]] sql = utils._apply_binary_op(bf_df, ops.minimum_op, "int64_col", "float64_col")