Skip to content

Commit f3d2601

Browse files
committed
refactor: replace the googlesql module by sqlglot
1 parent fa97675 commit f3d2601

File tree

18 files changed

+90
-824
lines changed

18 files changed

+90
-824
lines changed

bigframes/core/compile/compiled.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -23,15 +23,16 @@
2323
import bigframes_vendored.ibis.expr.datatypes as ibis_dtypes
2424
import bigframes_vendored.ibis.expr.operations as ibis_ops
2525
import bigframes_vendored.ibis.expr.types as ibis_types
26+
import bigframes_vendored.sqlglot.expressions as sge
2627
from google.cloud import bigquery
2728
import pyarrow as pa
2829

2930
from bigframes.core import agg_expressions, rewrite
3031
import bigframes.core.agg_expressions as ex_types
31-
import bigframes.core.compile.googlesql
3232
import bigframes.core.compile.ibis_compiler.aggregate_compiler as agg_compiler
3333
import bigframes.core.compile.ibis_compiler.scalar_op_compiler as op_compilers
3434
import bigframes.core.compile.ibis_types
35+
import bigframes.core.compile.sqlglot.sqlglot_ir as sqlglot
3536
import bigframes.core.expression as ex
3637
from bigframes.core.ordering import OrderingExpression
3738
import bigframes.core.sql
@@ -82,13 +83,21 @@ def to_sql(
8283
)
8384

8485
if order_by or limit or not is_noop_selection:
85-
sql = ibis_bigquery.Backend().compile(ibis_table)
86-
sql = (
87-
bigframes.core.compile.googlesql.Select()
88-
.from_(sql)
89-
.select(selection_strings)
90-
.sql()
91-
)
86+
# selections are (ref.id.sql, name) where ref.id.sql is escaped identifier
87+
to_select = [
88+
sge.Alias(
89+
this=sge.to_identifier(src, quoted=False),
90+
alias=sge.to_identifier(alias, quoted=True),
91+
)
92+
if src != alias
93+
else sge.to_identifier(src, quoted=False)
94+
for src, alias in selection_strings
95+
]
96+
# Use string formatting for FROM clause to avoid re-parsing potentially complex SQL (like ARRAY<STRUCT<...>>)
97+
# that sqlglot might not handle perfectly when parsing BigQuery dialect strings.
98+
select_sql = sge.Select().select(*to_select).sql(dialect="bigquery")
99+
ibis_sql = ibis_bigquery.Backend().compile(ibis_table)
100+
sql = f"{select_sql} FROM ({ibis_sql}) AS `t`"
92101

93102
# Single row frames may not have any ordering columns
94103
if len(order_by) > 0:

bigframes/core/compile/googlesql/__init__.py

Lines changed: 0 additions & 61 deletions
This file was deleted.

bigframes/core/compile/googlesql/abc.py

Lines changed: 0 additions & 25 deletions
This file was deleted.

bigframes/core/compile/googlesql/datatype.py

Lines changed: 0 additions & 23 deletions
This file was deleted.

bigframes/core/compile/googlesql/expression.py

Lines changed: 0 additions & 124 deletions
This file was deleted.

bigframes/core/compile/googlesql/function.py

Lines changed: 0 additions & 32 deletions
This file was deleted.

0 commit comments

Comments
 (0)