4141def compile_sql (request : configs .CompileRequest ) -> configs .CompileResult :
4242 """Compiles a BigFrameNode according to the request into SQL using SQLGlot."""
4343
44- # Generator for unique identifiers.
45- uid_gen = guid .SequentialUIDGenerator ()
4644 output_names = tuple ((expression .DerefOp (id ), id .sql ) for id in request .node .ids )
4745 result_node = nodes .ResultNode (
4846 request .node ,
@@ -61,22 +59,16 @@ def compile_sql(request: configs.CompileRequest) -> configs.CompileResult:
6159 )
6260 if request .sort_rows :
6361 result_node = typing .cast (nodes .ResultNode , rewrite .column_pruning (result_node ))
64- result_node = _remap_variables (result_node , uid_gen )
65- result_node = typing .cast (
66- nodes .ResultNode , rewrite .defer_selection (result_node )
67- )
68- sql = _compile_result_node (result_node , uid_gen )
62+ sql = _compile_result_node (result_node )
6963 return configs .CompileResult (
7064 sql , result_node .schema .to_bigquery (), result_node .order_by
7165 )
7266
7367 ordering : typing .Optional [bf_ordering .RowOrdering ] = result_node .order_by
7468 result_node = dataclasses .replace (result_node , order_by = None )
7569 result_node = typing .cast (nodes .ResultNode , rewrite .column_pruning (result_node ))
70+ sql = _compile_result_node (result_node )
7671
77- result_node = _remap_variables (result_node , uid_gen )
78- result_node = typing .cast (nodes .ResultNode , rewrite .defer_selection (result_node ))
79- sql = _compile_result_node (result_node , uid_gen )
8072 # Return the ordering iff no extra columns are needed to define the row order
8173 if ordering is not None :
8274 output_order = (
@@ -97,11 +89,16 @@ def _remap_variables(
9789 return typing .cast (nodes .ResultNode , result_node )
9890
9991
100- def _compile_result_node (
101- root : nodes .ResultNode , uid_gen : guid .SequentialUIDGenerator
102- ) -> str :
92+ def _compile_result_node (root : nodes .ResultNode ) -> str :
93+ # Create UIDs to standardize variable names and ensure consistent compilation
94+ # of nodes using the same generator.
95+ uid_gen = guid .SequentialUIDGenerator ()
96+ root = _remap_variables (root , uid_gen )
97+ root = typing .cast (nodes .ResultNode , rewrite .defer_selection (root ))
98+
10399 # Have to bind schema as the final step before compilation.
104100 root = typing .cast (nodes .ResultNode , schema_binding .bind_schema_to_tree (root ))
101+
105102 selected_cols : tuple [tuple [str , sge .Expression ], ...] = tuple (
106103 (name , scalar_compiler .scalar_op_compiler .compile_expression (ref ))
107104 for ref , name in root .output_cols
@@ -127,7 +124,6 @@ def _compile_result_node(
127124 return sqlglot_ir .sql
128125
129126
130- @functools .lru_cache (maxsize = 5000 )
131127def compile_node (
132128 node : nodes .BigFrameNode , uid_gen : guid .SequentialUIDGenerator
133129) -> ir .SQLGlotIR :
0 commit comments