From 899d5e8406ecf78d154f00f2148ae2b74466ed77 Mon Sep 17 00:00:00 2001 From: Shuowei Li Date: Wed, 10 Jun 2026 22:28:11 +0000 Subject: [PATCH 1/5] fix: preserve aliases on cast columns in sqlglot --- .../bigframes/core/compile/sqlglot/sqlglot_ir.py | 5 ++++- packages/bigframes/bigframes/core/sql_nodes.py | 9 ++++++++- .../test_datetime_ops/test_to_datetime/out.sql | 6 +++--- .../test_generic_ops/test_astype_float/out.sql | 4 ++-- .../test_generic_ops/test_astype_string/out.sql | 4 ++-- .../test_compile_astype_aliases/out.sql | 5 +++++ .../core/compile/sqlglot/test_compile_readtable.py | 10 ++++++++++ 7 files changed, 34 insertions(+), 9 deletions(-) create mode 100644 packages/bigframes/tests/unit/core/compile/sqlglot/snapshots/test_compile_readtable/test_compile_astype_aliases/out.sql diff --git a/packages/bigframes/bigframes/core/compile/sqlglot/sqlglot_ir.py b/packages/bigframes/bigframes/core/compile/sqlglot/sqlglot_ir.py index 1e0b561e8c5b..752953015cdd 100644 --- a/packages/bigframes/bigframes/core/compile/sqlglot/sqlglot_ir.py +++ b/packages/bigframes/bigframes/core/compile/sqlglot/sqlglot_ir.py @@ -253,7 +253,10 @@ def select( this=expr, alias=sql.identifier(id), ) - if expr.alias_or_name != id + if not ( + (isinstance(expr, sge.Column) and expr.name == id) + or (isinstance(expr, sge.Alias) and expr.alias == id) + ) else expr for id, expr in selections ] diff --git a/packages/bigframes/bigframes/core/sql_nodes.py b/packages/bigframes/bigframes/core/sql_nodes.py index 4cb4b02f7b80..c7a05a082f29 100644 --- a/packages/bigframes/bigframes/core/sql_nodes.py +++ b/packages/bigframes/bigframes/core/sql_nodes.py @@ -276,7 +276,14 @@ def _node_expressions(self): @property def is_star_selection(self) -> bool: - return tuple(self.ids) == tuple(self.child.ids) + if tuple(self.ids) != tuple(self.child.ids): + return False + for cdef in self.selections: + if not isinstance(cdef.expression, ex.DerefOp): + return False + if cdef.expression.id != cdef.id: + return False + return True @functools.cache def get_id_mapping(self) -> dict[identifiers.ColumnId, ex.Expression]: diff --git a/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_datetime_ops/test_to_datetime/out.sql b/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_datetime_ops/test_to_datetime/out.sql index 9a2913e44beb..57ec17bf681a 100644 --- a/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_datetime_ops/test_to_datetime/out.sql +++ b/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_datetime_ops/test_to_datetime/out.sql @@ -1,7 +1,7 @@ SELECT CAST(TIMESTAMP_MICROS(CAST(TRUNC(`int64_col` * 0.001) AS INT64)) AS DATETIME) AS `int64_col`, - SAFE_CAST(`string_col` AS DATETIME), + SAFE_CAST(`string_col` AS DATETIME) AS `string_col`, CAST(TIMESTAMP_MICROS(CAST(TRUNC(`float64_col` * 0.001) AS INT64)) AS DATETIME) AS `float64_col`, - SAFE_CAST(`timestamp_col` AS DATETIME), + SAFE_CAST(`timestamp_col` AS DATETIME) AS `timestamp_col`, SAFE_CAST(`string_col` AS DATETIME) AS `string_col_fmt` -FROM `bigframes-dev`.`sqlglot_test`.`scalar_types` AS `bft_0` \ No newline at end of file +FROM `bigframes-dev`.`sqlglot_test`.`scalar_types` AS `bft_0` diff --git a/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_generic_ops/test_astype_float/out.sql b/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_generic_ops/test_astype_float/out.sql index 3d48001e77ad..7f7bd86084ea 100644 --- a/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_generic_ops/test_astype_float/out.sql +++ b/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_generic_ops/test_astype_float/out.sql @@ -1,5 +1,5 @@ SELECT - CAST(CAST(`bool_col` AS INT64) AS FLOAT64), + CAST(CAST(`bool_col` AS INT64) AS FLOAT64) AS `bool_col`, CAST('1.34235e4' AS FLOAT64) AS `str_const`, SAFE_CAST(SAFE_CAST(`bool_col` AS INT64) AS FLOAT64) AS `bool_w_safe` -FROM `bigframes-dev`.`sqlglot_test`.`scalar_types` AS `bft_0` \ No newline at end of file +FROM `bigframes-dev`.`sqlglot_test`.`scalar_types` AS `bft_0` diff --git a/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_generic_ops/test_astype_string/out.sql b/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_generic_ops/test_astype_string/out.sql index 3ea2299cc4f9..174f18d98233 100644 --- a/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_generic_ops/test_astype_string/out.sql +++ b/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_generic_ops/test_astype_string/out.sql @@ -1,5 +1,5 @@ SELECT - CAST(`int64_col` AS STRING), + CAST(`int64_col` AS STRING) AS `int64_col`, INITCAP(CAST(`bool_col` AS STRING)) AS `bool_col`, INITCAP(SAFE_CAST(`bool_col` AS STRING)) AS `bool_w_safe` -FROM `bigframes-dev`.`sqlglot_test`.`scalar_types` AS `bft_0` \ No newline at end of file +FROM `bigframes-dev`.`sqlglot_test`.`scalar_types` AS `bft_0` diff --git a/packages/bigframes/tests/unit/core/compile/sqlglot/snapshots/test_compile_readtable/test_compile_astype_aliases/out.sql b/packages/bigframes/tests/unit/core/compile/sqlglot/snapshots/test_compile_readtable/test_compile_astype_aliases/out.sql new file mode 100644 index 000000000000..cd056c650fd3 --- /dev/null +++ b/packages/bigframes/tests/unit/core/compile/sqlglot/snapshots/test_compile_readtable/test_compile_astype_aliases/out.sql @@ -0,0 +1,5 @@ +SELECT + `rowindex`, + CAST(`timestamp_col` AS STRING) AS `timestamp_col`, + CAST(`int64_col` AS FLOAT64) AS `int64_col` +FROM `bigframes-dev`.`sqlglot_test`.`scalar_types` AS `bft_0` diff --git a/packages/bigframes/tests/unit/core/compile/sqlglot/test_compile_readtable.py b/packages/bigframes/tests/unit/core/compile/sqlglot/test_compile_readtable.py index ea9875302a93..f955bbc40989 100644 --- a/packages/bigframes/tests/unit/core/compile/sqlglot/test_compile_readtable.py +++ b/packages/bigframes/tests/unit/core/compile/sqlglot/test_compile_readtable.py @@ -80,3 +80,13 @@ def test_compile_readtable_w_columns_filters(compiler_session, snapshot): filters=filters, ) snapshot.assert_match(bf_df.sql, "out.sql") + + +def test_compile_astype_aliases(scalar_types_df: bpd.DataFrame, snapshot): + # Test case for issue #17394 (CAST columns lose their aliases) + bf_df = scalar_types_df[["timestamp_col", "int64_col"]] + result = bf_df.astype({ + "timestamp_col": "string[pyarrow]", + "int64_col": "Float64", + }) + snapshot.assert_match(result.sql, "out.sql") From e03f408c731f0228b53e7958a2b019b21a232ae2 Mon Sep 17 00:00:00 2001 From: Shuowei Li Date: Fri, 12 Jun 2026 19:18:06 +0000 Subject: [PATCH 2/5] fix: snapshot newline mismatch --- .pre-commit-config.yaml | 2 ++ .../snapshots/test_datetime_ops/test_to_datetime/out.sql | 2 +- .../snapshots/test_generic_ops/test_astype_float/out.sql | 2 +- .../snapshots/test_generic_ops/test_astype_string/out.sql | 2 +- .../test_compile_readtable/test_compile_astype_aliases/out.sql | 2 +- 5 files changed, 6 insertions(+), 4 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index 2ffd4d6e87b6..d6c3d2001c1b 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -19,7 +19,9 @@ repos: rev: v6.0.0 hooks: - id: trailing-whitespace + exclude: /snapshots/ - id: end-of-file-fixer + exclude: /snapshots/ - repo: https://github.com/astral-sh/ruff-pre-commit # Ruff version. rev: v0.14.14 diff --git a/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_datetime_ops/test_to_datetime/out.sql b/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_datetime_ops/test_to_datetime/out.sql index 57ec17bf681a..e9cb87fdc26a 100644 --- a/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_datetime_ops/test_to_datetime/out.sql +++ b/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_datetime_ops/test_to_datetime/out.sql @@ -4,4 +4,4 @@ SELECT CAST(TIMESTAMP_MICROS(CAST(TRUNC(`float64_col` * 0.001) AS INT64)) AS DATETIME) AS `float64_col`, SAFE_CAST(`timestamp_col` AS DATETIME) AS `timestamp_col`, SAFE_CAST(`string_col` AS DATETIME) AS `string_col_fmt` -FROM `bigframes-dev`.`sqlglot_test`.`scalar_types` AS `bft_0` +FROM `bigframes-dev`.`sqlglot_test`.`scalar_types` AS `bft_0` \ No newline at end of file diff --git a/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_generic_ops/test_astype_float/out.sql b/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_generic_ops/test_astype_float/out.sql index 7f7bd86084ea..915a9db8c4f5 100644 --- a/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_generic_ops/test_astype_float/out.sql +++ b/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_generic_ops/test_astype_float/out.sql @@ -2,4 +2,4 @@ SELECT CAST(CAST(`bool_col` AS INT64) AS FLOAT64) AS `bool_col`, CAST('1.34235e4' AS FLOAT64) AS `str_const`, SAFE_CAST(SAFE_CAST(`bool_col` AS INT64) AS FLOAT64) AS `bool_w_safe` -FROM `bigframes-dev`.`sqlglot_test`.`scalar_types` AS `bft_0` +FROM `bigframes-dev`.`sqlglot_test`.`scalar_types` AS `bft_0` \ No newline at end of file diff --git a/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_generic_ops/test_astype_string/out.sql b/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_generic_ops/test_astype_string/out.sql index 174f18d98233..21c3df2fbec0 100644 --- a/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_generic_ops/test_astype_string/out.sql +++ b/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_generic_ops/test_astype_string/out.sql @@ -2,4 +2,4 @@ SELECT CAST(`int64_col` AS STRING) AS `int64_col`, INITCAP(CAST(`bool_col` AS STRING)) AS `bool_col`, INITCAP(SAFE_CAST(`bool_col` AS STRING)) AS `bool_w_safe` -FROM `bigframes-dev`.`sqlglot_test`.`scalar_types` AS `bft_0` +FROM `bigframes-dev`.`sqlglot_test`.`scalar_types` AS `bft_0` \ No newline at end of file diff --git a/packages/bigframes/tests/unit/core/compile/sqlglot/snapshots/test_compile_readtable/test_compile_astype_aliases/out.sql b/packages/bigframes/tests/unit/core/compile/sqlglot/snapshots/test_compile_readtable/test_compile_astype_aliases/out.sql index cd056c650fd3..97469fb300ba 100644 --- a/packages/bigframes/tests/unit/core/compile/sqlglot/snapshots/test_compile_readtable/test_compile_astype_aliases/out.sql +++ b/packages/bigframes/tests/unit/core/compile/sqlglot/snapshots/test_compile_readtable/test_compile_astype_aliases/out.sql @@ -2,4 +2,4 @@ SELECT `rowindex`, CAST(`timestamp_col` AS STRING) AS `timestamp_col`, CAST(`int64_col` AS FLOAT64) AS `int64_col` -FROM `bigframes-dev`.`sqlglot_test`.`scalar_types` AS `bft_0` +FROM `bigframes-dev`.`sqlglot_test`.`scalar_types` AS `bft_0` \ No newline at end of file From 3d92d4df2f5b79d31ae4750a9dbc8e354f80dac6 Mon Sep 17 00:00:00 2001 From: Shuowei Li Date: Fri, 12 Jun 2026 20:43:51 +0000 Subject: [PATCH 3/5] style: format test_compile_readtable --- .../core/compile/sqlglot/test_compile_readtable.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/bigframes/tests/unit/core/compile/sqlglot/test_compile_readtable.py b/packages/bigframes/tests/unit/core/compile/sqlglot/test_compile_readtable.py index f955bbc40989..1de4a451636b 100644 --- a/packages/bigframes/tests/unit/core/compile/sqlglot/test_compile_readtable.py +++ b/packages/bigframes/tests/unit/core/compile/sqlglot/test_compile_readtable.py @@ -85,8 +85,10 @@ def test_compile_readtable_w_columns_filters(compiler_session, snapshot): def test_compile_astype_aliases(scalar_types_df: bpd.DataFrame, snapshot): # Test case for issue #17394 (CAST columns lose their aliases) bf_df = scalar_types_df[["timestamp_col", "int64_col"]] - result = bf_df.astype({ - "timestamp_col": "string[pyarrow]", - "int64_col": "Float64", - }) + result = bf_df.astype( + { + "timestamp_col": "string[pyarrow]", + "int64_col": "Float64", + } + ) snapshot.assert_match(result.sql, "out.sql") From 5cb3f13a5bca5f42e198bed51efb82c617f202e0 Mon Sep 17 00:00:00 2001 From: Shuowei Li Date: Fri, 12 Jun 2026 21:32:25 +0000 Subject: [PATCH 4/5] fix: avoid nested aliases in sqlglot --- .../bigframes/core/compile/sqlglot/sqlglot_ir.py | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/packages/bigframes/bigframes/core/compile/sqlglot/sqlglot_ir.py b/packages/bigframes/bigframes/core/compile/sqlglot/sqlglot_ir.py index 752953015cdd..b29a23cd84b8 100644 --- a/packages/bigframes/bigframes/core/compile/sqlglot/sqlglot_ir.py +++ b/packages/bigframes/bigframes/core/compile/sqlglot/sqlglot_ir.py @@ -249,15 +249,13 @@ def select( # TODO: Explicitly insert CTEs into plan if len(selections) > 0: to_select = [ - sge.Alias( - this=expr, + expr + if (isinstance(expr, sge.Alias) and expr.alias == id) + or (isinstance(expr, sge.Column) and expr.name == id) + else sge.Alias( + this=expr.this if isinstance(expr, sge.Alias) else expr, alias=sql.identifier(id), ) - if not ( - (isinstance(expr, sge.Column) and expr.name == id) - or (isinstance(expr, sge.Alias) and expr.alias == id) - ) - else expr for id, expr in selections ] new_expr = self.expr.select(*to_select) From c04db27d6e0c1b50332858119967c19299c4fcf7 Mon Sep 17 00:00:00 2001 From: Shuowei Li Date: Fri, 12 Jun 2026 21:35:50 +0000 Subject: [PATCH 5/5] fix: revert pre-commit config changes and append newlines to test sql outputs --- .pre-commit-config.yaml | 2 -- .../snapshots/test_datetime_ops/test_to_datetime/out.sql | 2 +- .../snapshots/test_generic_ops/test_astype_float/out.sql | 2 +- .../snapshots/test_generic_ops/test_astype_string/out.sql | 2 +- .../core/compile/sqlglot/expressions/test_datetime_ops.py | 2 +- .../unit/core/compile/sqlglot/expressions/test_generic_ops.py | 4 ++-- .../test_compile_astype_aliases/out.sql | 2 +- .../tests/unit/core/compile/sqlglot/test_compile_readtable.py | 2 +- 8 files changed, 8 insertions(+), 10 deletions(-) diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index d6c3d2001c1b..2ffd4d6e87b6 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -19,9 +19,7 @@ repos: rev: v6.0.0 hooks: - id: trailing-whitespace - exclude: /snapshots/ - id: end-of-file-fixer - exclude: /snapshots/ - repo: https://github.com/astral-sh/ruff-pre-commit # Ruff version. rev: v0.14.14 diff --git a/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_datetime_ops/test_to_datetime/out.sql b/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_datetime_ops/test_to_datetime/out.sql index e9cb87fdc26a..57ec17bf681a 100644 --- a/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_datetime_ops/test_to_datetime/out.sql +++ b/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_datetime_ops/test_to_datetime/out.sql @@ -4,4 +4,4 @@ SELECT CAST(TIMESTAMP_MICROS(CAST(TRUNC(`float64_col` * 0.001) AS INT64)) AS DATETIME) AS `float64_col`, SAFE_CAST(`timestamp_col` AS DATETIME) AS `timestamp_col`, SAFE_CAST(`string_col` AS DATETIME) AS `string_col_fmt` -FROM `bigframes-dev`.`sqlglot_test`.`scalar_types` AS `bft_0` \ No newline at end of file +FROM `bigframes-dev`.`sqlglot_test`.`scalar_types` AS `bft_0` diff --git a/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_generic_ops/test_astype_float/out.sql b/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_generic_ops/test_astype_float/out.sql index 915a9db8c4f5..7f7bd86084ea 100644 --- a/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_generic_ops/test_astype_float/out.sql +++ b/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_generic_ops/test_astype_float/out.sql @@ -2,4 +2,4 @@ SELECT CAST(CAST(`bool_col` AS INT64) AS FLOAT64) AS `bool_col`, CAST('1.34235e4' AS FLOAT64) AS `str_const`, SAFE_CAST(SAFE_CAST(`bool_col` AS INT64) AS FLOAT64) AS `bool_w_safe` -FROM `bigframes-dev`.`sqlglot_test`.`scalar_types` AS `bft_0` \ No newline at end of file +FROM `bigframes-dev`.`sqlglot_test`.`scalar_types` AS `bft_0` diff --git a/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_generic_ops/test_astype_string/out.sql b/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_generic_ops/test_astype_string/out.sql index 21c3df2fbec0..174f18d98233 100644 --- a/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_generic_ops/test_astype_string/out.sql +++ b/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/snapshots/test_generic_ops/test_astype_string/out.sql @@ -2,4 +2,4 @@ SELECT CAST(`int64_col` AS STRING) AS `int64_col`, INITCAP(CAST(`bool_col` AS STRING)) AS `bool_col`, INITCAP(SAFE_CAST(`bool_col` AS STRING)) AS `bool_w_safe` -FROM `bigframes-dev`.`sqlglot_test`.`scalar_types` AS `bft_0` \ No newline at end of file +FROM `bigframes-dev`.`sqlglot_test`.`scalar_types` AS `bft_0` diff --git a/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/test_datetime_ops.py b/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/test_datetime_ops.py index fd3aacc7e271..e86059b160a8 100644 --- a/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/test_datetime_ops.py +++ b/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/test_datetime_ops.py @@ -217,7 +217,7 @@ def test_to_datetime(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") + snapshot.assert_match(sql + "\n", "out.sql") def test_to_timestamp(scalar_types_df: bpd.DataFrame, snapshot): diff --git a/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/test_generic_ops.py b/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/test_generic_ops.py index fb5a9fd7ce84..185a8df04509 100644 --- a/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/test_generic_ops.py +++ b/packages/bigframes/tests/unit/core/compile/sqlglot/expressions/test_generic_ops.py @@ -60,7 +60,7 @@ def test_astype_float(scalar_types_df: bpd.DataFrame, snapshot): "bool_w_safe": ops.AsTypeOp(to_type=to_type, safe=True).as_expr("bool_col"), } sql = utils._apply_ops_to_sql(bf_df, list(ops_map.values()), list(ops_map.keys())) - snapshot.assert_match(sql, "out.sql") + snapshot.assert_match(sql + "\n", "out.sql") def test_astype_bool(scalar_types_df: bpd.DataFrame, snapshot): @@ -107,7 +107,7 @@ def test_astype_string(scalar_types_df: bpd.DataFrame, snapshot): "bool_w_safe": ops.AsTypeOp(to_type=to_type, safe=True).as_expr("bool_col"), } sql = utils._apply_ops_to_sql(bf_df, list(ops_map.values()), list(ops_map.keys())) - snapshot.assert_match(sql, "out.sql") + snapshot.assert_match(sql + "\n", "out.sql") def test_astype_json(scalar_types_df: bpd.DataFrame, snapshot): diff --git a/packages/bigframes/tests/unit/core/compile/sqlglot/snapshots/test_compile_readtable/test_compile_astype_aliases/out.sql b/packages/bigframes/tests/unit/core/compile/sqlglot/snapshots/test_compile_readtable/test_compile_astype_aliases/out.sql index 97469fb300ba..cd056c650fd3 100644 --- a/packages/bigframes/tests/unit/core/compile/sqlglot/snapshots/test_compile_readtable/test_compile_astype_aliases/out.sql +++ b/packages/bigframes/tests/unit/core/compile/sqlglot/snapshots/test_compile_readtable/test_compile_astype_aliases/out.sql @@ -2,4 +2,4 @@ SELECT `rowindex`, CAST(`timestamp_col` AS STRING) AS `timestamp_col`, CAST(`int64_col` AS FLOAT64) AS `int64_col` -FROM `bigframes-dev`.`sqlglot_test`.`scalar_types` AS `bft_0` \ No newline at end of file +FROM `bigframes-dev`.`sqlglot_test`.`scalar_types` AS `bft_0` diff --git a/packages/bigframes/tests/unit/core/compile/sqlglot/test_compile_readtable.py b/packages/bigframes/tests/unit/core/compile/sqlglot/test_compile_readtable.py index 1de4a451636b..0f2058f21f68 100644 --- a/packages/bigframes/tests/unit/core/compile/sqlglot/test_compile_readtable.py +++ b/packages/bigframes/tests/unit/core/compile/sqlglot/test_compile_readtable.py @@ -91,4 +91,4 @@ def test_compile_astype_aliases(scalar_types_df: bpd.DataFrame, snapshot): "int64_col": "Float64", } ) - snapshot.assert_match(result.sql, "out.sql") + snapshot.assert_match(result.sql + "\n", "out.sql")