2020from bigframes .core import agg_expressions , bigframe_node , expression , nodes
2121from bigframes .core .rewrite import schema_binding
2222
23+ IGNORED_NODES = (
24+ nodes .SelectionNode ,
25+ nodes .ReadLocalNode ,
26+ nodes .ReadTableNode ,
27+ nodes .ConcatNode ,
28+ nodes .RandomSampleNode ,
29+ nodes .FromRangeNode ,
30+ nodes .PromoteOffsetsNode ,
31+ nodes .ReversedNode ,
32+ nodes .SliceNode ,
33+ nodes .ResultNode ,
34+ )
35+
2336
2437def encode_type_refs (root : bigframe_node .BigFrameNode ) -> str :
2538 return f"{ root .reduce_up (_encode_type_refs_from_node ):x} "
@@ -42,9 +55,6 @@ def _encode_type_refs_from_node(
4255 curr_result = curr_result | _encode_type_refs_from_expr (
4356 assignment [0 ], node .child
4457 )
45- elif isinstance (node , nodes .SelectionNode ):
46- # Do nothing
47- pass
4858 elif isinstance (node , nodes .OrderByNode ):
4959 for by in node .by :
5060 curr_result = curr_result | _encode_type_refs_from_expr (
@@ -75,6 +85,17 @@ def _encode_type_refs_from_node(
7585 curr_result = curr_result | _encode_type_refs_from_expr (
7686 col_def .expression , node .child
7787 )
88+ elif isinstance (node , nodes .ExplodeNode ):
89+ for col_id in node .column_ids :
90+ curr_result = curr_result | _encode_type_refs_from_expr (col_id , node .child )
91+ elif isinstance (node , IGNORED_NODES ):
92+ # Do nothing
93+ pass
94+ else :
95+ # For unseen nodes, do not raise errors as this is the logging path, but
96+ # we should cover those nodes either in the branches above, or place them
97+ # in the IGNORED_NODES collection.
98+ pass
7899
79100 return child_result | curr_result
80101
0 commit comments