Skip to content

Commit c8f6499

Browse files
committed
revert use of collect with referencing UDFS
1 parent ce705a0 commit c8f6499

File tree

4 files changed

+34
-7
lines changed

4 files changed

+34
-7
lines changed

core/src/main/scala/no/nrk/bigquery/BQSqlFrag.scala

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -106,8 +106,35 @@ sealed trait BQSqlFrag {
106106
case BQSqlFrag.FilledTableRef(fill) => fill.tableDef.unpartitioned.assertPartition
107107
}.distinct
108108

109-
final def allReferencedUDFs: Seq[UDF[UDF.UDFId]] =
110-
this.collect { case BQSqlFrag.Call(udf, _) => udf }.distinct
109+
final def allReferencedUDFs: Seq[UDF[UDF.UDFId]] = {
110+
def fromBody(body: UDF.Body) =
111+
body match {
112+
case UDF.Body.Sql(body) => body.allReferencedUDFs
113+
case _: UDF.Body.Js => Nil
114+
}
115+
116+
this match {
117+
case BQSqlFrag.Frag(_) => Nil
118+
case BQSqlFrag.Call(udf @ UDF.Temporary(_, _, body, _), args) =>
119+
(fromBody(body) ++ args.flatMap(
120+
_.allReferencedUDFs
121+
) ++ List(udf)).distinct
122+
case BQSqlFrag.Call(udf @ UDF.Persistent(_, _, body, _), args) =>
123+
(fromBody(body) ++ args.flatMap(
124+
_.allReferencedUDFs
125+
) ++ List(udf)).distinct
126+
case BQSqlFrag.Call(udf: UDF.Reference, args) =>
127+
(args.flatMap(
128+
_.allReferencedUDFs
129+
) ++ List(udf)).distinct
130+
131+
case BQSqlFrag.Combined(values) =>
132+
values.flatMap(_.allReferencedUDFs).distinct
133+
case BQSqlFrag.PartitionRef(_) => Nil
134+
case BQSqlFrag.FillRef(_) => Nil
135+
case BQSqlFrag.FilledTableRef(_) => Nil
136+
}
137+
}
111138

112139
override def toString: String = asString
113140
}
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
CREATE TEMP FUNCTION half_TMP(input INT64) RETURNS FLOAT64 AS ((double_TMP(input) / 2));
2-
CREATE TEMP FUNCTION double_TMP(input INT64) RETURNS INT64 AS ((input + input));
1+
CREATE TEMP FUNCTION xxdouble_TMP(input INT64) RETURNS INT64 AS ((input + input));
2+
CREATE TEMP FUNCTION half_TMP(input INT64) RETURNS FLOAT64 AS ((xxdouble_TMP(input) / 2));
33

44
select half_TMP(1)
Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
1-
CREATE TEMP FUNCTION half_TMP(input INT64) RETURNS FLOAT64 AS ((double_TMP(input) / 2));
1+
CREATE TEMP FUNCTION xxdouble_TMP(input INT64) RETURNS INT64 AS ((input + input));
22

3-
CREATE TEMP FUNCTION double_TMP(input INT64) RETURNS INT64 AS ((input + input));
3+
CREATE TEMP FUNCTION half_TMP(input INT64) RETURNS FLOAT64 AS ((xxdouble_TMP(input) / 2));
44

55
select half_TMP(1)

testing/src/test/scala/no/nrk/bigquery/LiveTempUdfTest.scala

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,7 @@ import no.nrk.bigquery.testing.{BQSmokeTest, BigQueryTestClient}
55

66
class LiveTempUdfTest extends BQSmokeTest(BigQueryTestClient.testClient) {
77
val udf1 = UDF.temporary(
8-
Ident("double_TMP"),
8+
Ident("xxdouble_TMP"),
99
List(UDF.Param("input", BQType.INT64)),
1010
UDF.Body.Sql(bqsql"(input + input)"),
1111
Some(BQType.INT64))

0 commit comments

Comments
 (0)