[
https://issues.apache.org/jira/browse/FLINK-3754?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15278172#comment-15278172
]
ASF GitHub Bot commented on FLINK-3754:
---------------------------------------
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`.
> Add a validation phase before construct RelNode using TableAPI
> --------------------------------------------------------------
>
> Key: FLINK-3754
> URL: https://issues.apache.org/jira/browse/FLINK-3754
> Project: Flink
> Issue Type: Improvement
> Components: Table API
> Affects Versions: 1.0.0
> Reporter: Yijie Shen
> Assignee: Yijie Shen
>
> Unlike sql string's execution, which have a separate validation phase before
> RelNode construction, Table API lacks the counterparts and the validation is
> scattered in many places.
> I suggest to add a single validation phase and detect problems as early as
> possible.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)