in src/main/scala/com/spotify/scio/BigQueryTypeInjector.scala [45:70]
private def bqAnnotation(sc: ScClass): Option[String] =
sc.annotations
.map(_.getText)
.find(t => BigQueryAnnotations.exists(t.contains))
private def bqQuerySignature(sc: ScClass): Option[String] = {
sc.annotations.iterator
.find(sa => sa.getText.contains(FromQuery))
.flatMap { sa =>
sa.annotationExpr.getAnnotationParameters.toList match {
case Nil => None // no args
case _ :: Nil => None // only a query
case _ :: tail =>
// query with args
val optResult = tail
.foldLeft(Option((0, List.empty[String]))) {
case (res @ None, _) => res
case (Some((idx, acc)), paramLiteral: ScLiteral) =>
val tpe = "_root_." + paramLiteral.getValue().getClass.getCanonicalName
Some((idx + 1, s"queryArg$$${idx}: ${tpe}" :: acc))
case _ => None
}
optResult.map { case (_, params) => params.reverse.mkString(", ") }
}
}
}