From 25330d5a92aef4206ff1b980466990e36dc3af05 Mon Sep 17 00:00:00 2001 From: Shuowei Li Date: Tue, 14 Jul 2026 22:49:00 +0000 Subject: [PATCH 1/3] Fix SQLGlot BigQuery array syntax for subquery expressions --- .../bigframes_vendored/sqlglot/dialects/dialect.py | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/packages/bigframes/third_party/bigframes_vendored/sqlglot/dialects/dialect.py b/packages/bigframes/third_party/bigframes_vendored/sqlglot/dialects/dialect.py index 64d26775c86f..8e26b777abdc 100644 --- a/packages/bigframes/third_party/bigframes_vendored/sqlglot/dialects/dialect.py +++ b/packages/bigframes/third_party/bigframes_vendored/sqlglot/dialects/dialect.py @@ -1236,7 +1236,14 @@ def inline_array_sql(self: Generator, expression: exp.Expression) -> str: def inline_array_unless_query(self: Generator, expression: exp.Expression) -> str: elem = seq_get(expression.expressions, 0) - if isinstance(elem, exp.Expression) and elem.find(exp.Query): + if ( + len(expression.expressions) == 1 + and isinstance(elem, exp.Expression) + and ( + isinstance(elem, exp.Query) + or (isinstance(elem, exp.Subquery) and isinstance(elem.this, exp.Query)) + ) + ): return self.func("ARRAY", elem) return inline_array_sql(self, expression) From 2525d1a929e826efb22f98b70d14863f5a3d0521 Mon Sep 17 00:00:00 2001 From: Shuowei Li Date: Tue, 14 Jul 2026 22:52:21 +0000 Subject: [PATCH 2/3] Add unit test for ToArrayOp with scalar subquery expression --- .../test_to_array_with_subquery_expression/out.sql | 12 ++++++++++++ .../compile/sqlglot/expressions/test_array_ops.py | 11 +++++++++++ 2 files changed, 23 insertions(+) create mode 100644 packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_array_ops/test_to_array_with_subquery_expression/out.sql diff --git a/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_array_ops/test_to_array_with_subquery_expression/out.sql b/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_array_ops/test_to_array_with_subquery_expression/out.sql new file mode 100644 index 000000000000..9e0c87a39a1a --- /dev/null +++ b/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_array_ops/test_to_array_with_subquery_expression/out.sql @@ -0,0 +1,12 @@ +SELECT + [ + COALESCE( + ( + SELECT + COALESCE(SUM(bf_arr_reduce_uid), 0) + FROM UNNEST(`float_list_col`) AS bf_arr_reduce_uid + ), + 0.0 + ) + ] AS `arr_subquery_coalesce` +FROM `bigframes-dev`.`sqlglot_test`.`repeated_types` AS `bft_0` diff --git a/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/test_array_ops.py b/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/test_array_ops.py index e0bb1fd7377e..1b358b3a3b11 100644 --- a/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/test_array_ops.py +++ b/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/test_array_ops.py @@ -104,3 +104,14 @@ def test_to_array_op(scalar_types_df: bpd.DataFrame, snapshot): sql = utils._apply_ops_to_sql(bf_df, list(ops_map.values()), list(ops_map.keys())) snapshot.assert_match(sql, "out.sql") + + +def test_to_array_with_subquery_expression(repeated_types_df: bpd.DataFrame, snapshot): + reduced = ops.ArrayReduceOp(agg_ops.SumOp()).as_expr("float_list_col") + coalesced_reduced = ops.coalesce_op.as_expr(reduced, expression.const(0.0)) + array_expr = ops.ToArrayOp().as_expr(coalesced_reduced) + + sql = utils._apply_ops_to_sql( + repeated_types_df, [array_expr], ["arr_subquery_coalesce"] + ) + snapshot.assert_match(sql, "out.sql") From 40e1676d196ac114673169d7b62e05ab674e4aec Mon Sep 17 00:00:00 2001 From: Shuowei Li Date: Thu, 16 Jul 2026 00:45:43 +0000 Subject: [PATCH 3/3] update snapshots --- .../test_to_array_with_subquery_expression/out.sql | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_array_ops/test_to_array_with_subquery_expression/out.sql b/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_array_ops/test_to_array_with_subquery_expression/out.sql index 9e0c87a39a1a..63dfcec026b2 100644 --- a/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_array_ops/test_to_array_with_subquery_expression/out.sql +++ b/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_array_ops/test_to_array_with_subquery_expression/out.sql @@ -9,4 +9,4 @@ SELECT 0.0 ) ] AS `arr_subquery_coalesce` -FROM `bigframes-dev`.`sqlglot_test`.`repeated_types` AS `bft_0` +FROM `bigframes-dev`.`sqlglot_test`.`repeated_types` AS `bft_0` \ No newline at end of file