Github user fhueske commented on a diff in the pull request:
https://github.com/apache/flink/pull/1958#discussion_r62681359
--- Diff:
flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/aggregations.scala
---
@@ -36,41 +39,59 @@ abstract sealed class Aggregation extends
UnaryExpression { self: Product =>
}
case class Sum(child: Expression) extends Aggregation {
- override def toString = s"($child).sum"
+ override def toString = s"sum($child)"
override def toAggCall(name: String)(implicit relBuilder: RelBuilder):
AggCall = {
relBuilder.aggregateCall(SqlStdOperatorTable.SUM, false, null, name,
child.toRexNode)
}
+
+ override def dataType = child.dataType
+
+ override def validateInput =
TypeCheckUtils.assertNumericExpr(child.dataType, "sum")
}
case class Min(child: Expression) extends Aggregation {
- override def toString = s"($child).min"
+ override def toString = s"min($child)"
override def toAggCall(name: String)(implicit relBuilder: RelBuilder):
AggCall = {
relBuilder.aggregateCall(SqlStdOperatorTable.MIN, false, null, name,
child.toRexNode)
}
+
+ override def dataType = child.dataType
+
+ override def validateInput =
TypeCheckUtils.assertOrderableExpr(child.dataType, "min")
}
case class Max(child: Expression) extends Aggregation {
- override def toString = s"($child).max"
+ override def toString = s"max($child)"
override def toAggCall(name: String)(implicit relBuilder: RelBuilder):
AggCall = {
relBuilder.aggregateCall(SqlStdOperatorTable.MAX, false, null, name,
child.toRexNode)
}
+
+ override def dataType = child.dataType
+
+ override def validateInput =
TypeCheckUtils.assertOrderableExpr(child.dataType, "max")
}
case class Count(child: Expression) extends Aggregation {
- override def toString = s"($child).count"
+ override def toString = s"count($child)"
override def toAggCall(name: String)(implicit relBuilder: RelBuilder):
AggCall = {
relBuilder.aggregateCall(SqlStdOperatorTable.COUNT, false, null, name,
child.toRexNode)
}
+
+ override def dataType = BasicTypeInfo.LONG_TYPE_INFO
}
case class Avg(child: Expression) extends Aggregation {
- override def toString = s"($child).avg"
+ override def toString = s"avg($child)"
override def toAggCall(name: String)(implicit relBuilder: RelBuilder):
AggCall = {
relBuilder.aggregateCall(SqlStdOperatorTable.AVG, false, null, name,
child.toRexNode)
}
+
+ override def dataType = BasicTypeInfo.DOUBLE_TYPE_INFO
--- End diff --
Our current implementation returns avg aggregates as the input data type. I
think this should be changed to `child.dataType`.
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---