Repository: flink Updated Branches: refs/heads/master e34fea53b -> 18995c8c7
[FLINK-4086] [tableAPI] Hide internal methods of Expressions from Table API. This closes #2126. Project: http://git-wip-us.apache.org/repos/asf/flink/repo Commit: http://git-wip-us.apache.org/repos/asf/flink/commit/429b8443 Tree: http://git-wip-us.apache.org/repos/asf/flink/tree/429b8443 Diff: http://git-wip-us.apache.org/repos/asf/flink/diff/429b8443 Branch: refs/heads/master Commit: 429b8443f6daf96d0b581a776c55deb393565915 Parents: bf6df12 Author: Fabian Hueske <fhue...@apache.org> Authored: Fri Jun 17 15:16:42 2016 +0200 Committer: twalthr <twal...@apache.org> Committed: Mon Jul 4 17:52:10 2016 +0200 ---------------------------------------------------------------------- .../api/table/expressions/Expression.scala | 24 +++---- .../api/table/expressions/InputTypeSpec.scala | 4 +- .../api/table/expressions/aggregations.scala | 36 +++++----- .../api/table/expressions/arithmetic.scala | 28 ++++---- .../flink/api/table/expressions/call.scala | 8 +-- .../flink/api/table/expressions/cast.scala | 6 +- .../api/table/expressions/comparison.scala | 73 ++++++++++--------- .../api/table/expressions/fieldExpression.scala | 35 ++++----- .../flink/api/table/expressions/literals.scala | 6 +- .../flink/api/table/expressions/logic.scala | 22 +++--- .../api/table/expressions/mathExpressions.scala | 57 +++++++-------- .../flink/api/table/expressions/ordering.scala | 10 +-- .../table/expressions/stringExpressions.scala | 76 ++++++++++---------- .../apache/flink/api/table/trees/TreeNode.scala | 10 +-- 14 files changed, 202 insertions(+), 193 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/flink/blob/429b8443/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/Expression.scala ---------------------------------------------------------------------- diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/Expression.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/Expression.scala index 14e464e..9a824e8 100644 --- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/Expression.scala +++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/Expression.scala @@ -29,14 +29,14 @@ abstract class Expression extends TreeNode[Expression] { * Returns the [[TypeInformation]] for evaluating this expression. * It is sometimes not available until the expression is valid. */ - def resultType: TypeInformation[_] + private[flink] def resultType: TypeInformation[_] /** * One pass validation of the expression tree in post order. */ - lazy val valid: Boolean = childrenValid && validateInput().isSuccess + private[flink] lazy val valid: Boolean = childrenValid && validateInput().isSuccess - def childrenValid: Boolean = children.forall(_.valid) + private[flink] def childrenValid: Boolean = children.forall(_.valid) /** * Check input data types, inputs number or other properties specified by this expression. @@ -44,17 +44,17 @@ abstract class Expression extends TreeNode[Expression] { * or `ValidationFailure` with supplement message explaining the error. * Note: we should only call this method until `childrenValid == true` */ - def validateInput(): ExprValidationResult = ValidationSuccess + private[flink] def validateInput(): ExprValidationResult = ValidationSuccess /** * Convert Expression to its counterpart in Calcite, i.e. RexNode */ - def toRexNode(implicit relBuilder: RelBuilder): RexNode = + private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = throw new UnsupportedOperationException( s"${this.getClass.getName} cannot be transformed to RexNode" ) - def checkEquals(other: Expression): Boolean = { + private[flink] def checkEquals(other: Expression): Boolean = { if (this.getClass != other.getClass) { false } else { @@ -73,16 +73,16 @@ abstract class Expression extends TreeNode[Expression] { } abstract class BinaryExpression extends Expression { - def left: Expression - def right: Expression - def children = Seq(left, right) + private[flink] def left: Expression + private[flink] def right: Expression + private[flink] def children = Seq(left, right) } abstract class UnaryExpression extends Expression { - def child: Expression - def children = Seq(child) + private[flink] def child: Expression + private[flink] def children = Seq(child) } abstract class LeafExpression extends Expression { - val children = Nil + private[flink] val children = Nil } http://git-wip-us.apache.org/repos/asf/flink/blob/429b8443/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/InputTypeSpec.scala ---------------------------------------------------------------------- diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/InputTypeSpec.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/InputTypeSpec.scala index 9cb52d5..7df46c2 100644 --- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/InputTypeSpec.scala +++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/InputTypeSpec.scala @@ -36,9 +36,9 @@ trait InputTypeSpec extends Expression { * def expectedTypes: Seq[TypeInformation[_]] = DOUBLE_TYPE_INFO :: DOUBLE_TYPE_INFO :: Nil * }}} */ - def expectedTypes: Seq[TypeInformation[_]] + private[flink] def expectedTypes: Seq[TypeInformation[_]] - override def validateInput(): ExprValidationResult = { + override private[flink] def validateInput(): ExprValidationResult = { val typeMismatches = mutable.ArrayBuffer.empty[String] children.zip(expectedTypes).zipWithIndex.foreach { case ((e, tpe), i) => if (e.resultType != tpe) { http://git-wip-us.apache.org/repos/asf/flink/blob/429b8443/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/aggregations.scala ---------------------------------------------------------------------- diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/aggregations.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/aggregations.scala index 24ce85f..8cc56d8 100644 --- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/aggregations.scala +++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/aggregations.scala @@ -29,69 +29,73 @@ abstract sealed class Aggregation extends UnaryExpression { override def toString = s"Aggregate($child)" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = throw new UnsupportedOperationException("Aggregate cannot be transformed to RexNode") /** * Convert Aggregate to its counterpart in Calcite, i.e. AggCall */ - def toAggCall(name: String)(implicit relBuilder: RelBuilder): AggCall + private[flink] def toAggCall(name: String)(implicit relBuilder: RelBuilder): AggCall } case class Sum(child: Expression) extends Aggregation { override def toString = s"sum($child)" - override def toAggCall(name: String)(implicit relBuilder: RelBuilder): AggCall = { + override private[flink] def toAggCall(name: String)(implicit relBuilder: RelBuilder): AggCall = { relBuilder.aggregateCall(SqlStdOperatorTable.SUM, false, null, name, child.toRexNode) } - override def resultType = child.resultType + override private[flink] def resultType = child.resultType - override def validateInput = TypeCheckUtils.assertNumericExpr(child.resultType, "sum") + override private[flink] def validateInput = + TypeCheckUtils.assertNumericExpr(child.resultType, "sum") } case class Min(child: Expression) extends Aggregation { override def toString = s"min($child)" - override def toAggCall(name: String)(implicit relBuilder: RelBuilder): AggCall = { + override private[flink] def toAggCall(name: String)(implicit relBuilder: RelBuilder): AggCall = { relBuilder.aggregateCall(SqlStdOperatorTable.MIN, false, null, name, child.toRexNode) } - override def resultType = child.resultType + override private[flink] def resultType = child.resultType - override def validateInput = TypeCheckUtils.assertOrderableExpr(child.resultType, "min") + override private[flink] def validateInput = + TypeCheckUtils.assertOrderableExpr(child.resultType, "min") } case class Max(child: Expression) extends Aggregation { override def toString = s"max($child)" - override def toAggCall(name: String)(implicit relBuilder: RelBuilder): AggCall = { + override private[flink] def toAggCall(name: String)(implicit relBuilder: RelBuilder): AggCall = { relBuilder.aggregateCall(SqlStdOperatorTable.MAX, false, null, name, child.toRexNode) } - override def resultType = child.resultType + override private[flink] def resultType = child.resultType - override def validateInput = TypeCheckUtils.assertOrderableExpr(child.resultType, "max") + override private[flink] def validateInput = + TypeCheckUtils.assertOrderableExpr(child.resultType, "max") } case class Count(child: Expression) extends Aggregation { override def toString = s"count($child)" - override def toAggCall(name: String)(implicit relBuilder: RelBuilder): AggCall = { + override private[flink] def toAggCall(name: String)(implicit relBuilder: RelBuilder): AggCall = { relBuilder.aggregateCall(SqlStdOperatorTable.COUNT, false, null, name, child.toRexNode) } - override def resultType = BasicTypeInfo.LONG_TYPE_INFO + override private[flink] def resultType = BasicTypeInfo.LONG_TYPE_INFO } case class Avg(child: Expression) extends Aggregation { override def toString = s"avg($child)" - override def toAggCall(name: String)(implicit relBuilder: RelBuilder): AggCall = { + override private[flink] def toAggCall(name: String)(implicit relBuilder: RelBuilder): AggCall = { relBuilder.aggregateCall(SqlStdOperatorTable.AVG, false, null, name, child.toRexNode) } - override def resultType = child.resultType + override private[flink] def resultType = child.resultType - override def validateInput = TypeCheckUtils.assertNumericExpr(child.resultType, "avg") + override private[flink] def validateInput = + TypeCheckUtils.assertNumericExpr(child.resultType, "avg") } http://git-wip-us.apache.org/repos/asf/flink/blob/429b8443/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/arithmetic.scala ---------------------------------------------------------------------- diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/arithmetic.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/arithmetic.scala index 4fa5a71..e17a011 100644 --- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/arithmetic.scala +++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/arithmetic.scala @@ -29,13 +29,13 @@ import org.apache.flink.api.table.validate._ import scala.collection.JavaConversions._ abstract class BinaryArithmetic extends BinaryExpression { - def sqlOperator: SqlOperator + private[flink] def sqlOperator: SqlOperator - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { relBuilder.call(sqlOperator, children.map(_.toRexNode)) } - override def resultType: TypeInformation[_] = + override private[flink] def resultType: TypeInformation[_] = TypeCoercion.widerTypeOf(left.resultType, right.resultType) match { case Some(t) => t case None => @@ -43,7 +43,7 @@ abstract class BinaryArithmetic extends BinaryExpression { } // TODO: tighten this rule once we implemented type coercion rules during validation - override def validateInput(): ExprValidationResult = { + override private[flink] def validateInput(): ExprValidationResult = { if (!isNumeric(left.resultType) || !isNumeric(right.resultType)) { ValidationFailure(s"$this requires both operands Numeric, got " + s"${left.resultType} and ${right.resultType}") @@ -56,9 +56,9 @@ abstract class BinaryArithmetic extends BinaryExpression { case class Plus(left: Expression, right: Expression) extends BinaryArithmetic { override def toString = s"($left + $right)" - val sqlOperator = SqlStdOperatorTable.PLUS + private[flink] val sqlOperator = SqlStdOperatorTable.PLUS - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { if(isString(left.resultType)) { val castedRight = Cast(right, BasicTypeInfo.STRING_TYPE_INFO) relBuilder.call(SqlStdOperatorTable.PLUS, left.toRexNode, castedRight.toRexNode) @@ -73,7 +73,7 @@ case class Plus(left: Expression, right: Expression) extends BinaryArithmetic { } // TODO: tighten this rule once we implemented type coercion rules during validation - override def validateInput(): ExprValidationResult = { + override private[flink] def validateInput(): ExprValidationResult = { if (isString(left.resultType) || isString(right.resultType)) { ValidationSuccess } else if (!isNumeric(left.resultType) || !isNumeric(right.resultType)) { @@ -88,36 +88,36 @@ case class Plus(left: Expression, right: Expression) extends BinaryArithmetic { case class UnaryMinus(child: Expression) extends UnaryExpression { override def toString = s"-($child)" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { relBuilder.call(SqlStdOperatorTable.UNARY_MINUS, child.toRexNode) } - override def resultType = child.resultType + override private[flink] def resultType = child.resultType - override def validateInput(): ExprValidationResult = + override private[flink] def validateInput(): ExprValidationResult = TypeCheckUtils.assertNumericExpr(child.resultType, "unary minus") } case class Minus(left: Expression, right: Expression) extends BinaryArithmetic { override def toString = s"($left - $right)" - val sqlOperator = SqlStdOperatorTable.MINUS + private[flink] val sqlOperator = SqlStdOperatorTable.MINUS } case class Div(left: Expression, right: Expression) extends BinaryArithmetic { override def toString = s"($left / $right)" - val sqlOperator = SqlStdOperatorTable.DIVIDE + private[flink] val sqlOperator = SqlStdOperatorTable.DIVIDE } case class Mul(left: Expression, right: Expression) extends BinaryArithmetic { override def toString = s"($left * $right)" - val sqlOperator = SqlStdOperatorTable.MULTIPLY + private[flink] val sqlOperator = SqlStdOperatorTable.MULTIPLY } case class Mod(left: Expression, right: Expression) extends BinaryArithmetic { override def toString = s"($left % $right)" - val sqlOperator = SqlStdOperatorTable.MOD + private[flink] val sqlOperator = SqlStdOperatorTable.MOD } http://git-wip-us.apache.org/repos/asf/flink/blob/429b8443/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/call.scala ---------------------------------------------------------------------- diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/call.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/call.scala index bf2e6ba..1f51bc7 100644 --- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/call.scala +++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/call.scala @@ -29,17 +29,17 @@ import org.apache.flink.api.table.validate.{ExprValidationResult, ValidationFail */ case class Call(functionName: String, args: Seq[Expression]) extends Expression { - override def children: Seq[Expression] = args + override private[flink] def children: Seq[Expression] = args - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { throw new UnresolvedException(s"trying to convert UnresolvedFunction $functionName to RexNode") } override def toString = s"\\$functionName(${args.mkString(", ")})" - override def resultType = + override private[flink] def resultType = throw new UnresolvedException(s"calling resultType on UnresolvedFunction $functionName") - override def validateInput(): ExprValidationResult = + override private[flink] def validateInput(): ExprValidationResult = ValidationFailure(s"Unresolved function call: $functionName") } http://git-wip-us.apache.org/repos/asf/flink/blob/429b8443/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/cast.scala ---------------------------------------------------------------------- diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/cast.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/cast.scala index 3b8b0e7..7059424 100644 --- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/cast.scala +++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/cast.scala @@ -28,16 +28,16 @@ case class Cast(child: Expression, resultType: TypeInformation[_]) extends Unary override def toString = s"$child.cast($resultType)" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { relBuilder.cast(child.toRexNode, TypeConverter.typeInfoToSqlType(resultType)) } - override def makeCopy(anyRefs: Array[AnyRef]): this.type = { + override private[flink] def makeCopy(anyRefs: Array[AnyRef]): this.type = { val child: Expression = anyRefs.head.asInstanceOf[Expression] copy(child, resultType).asInstanceOf[this.type] } - override def validateInput(): ExprValidationResult = { + override private[flink] def validateInput(): ExprValidationResult = { if (TypeCoercion.canCast(child.resultType, resultType)) { ValidationSuccess } else { http://git-wip-us.apache.org/repos/asf/flink/blob/429b8443/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/comparison.scala ---------------------------------------------------------------------- diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/comparison.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/comparison.scala index 36d2782..0acfbf1 100644 --- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/comparison.scala +++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/comparison.scala @@ -28,93 +28,96 @@ import org.apache.flink.api.table.validate._ import scala.collection.JavaConversions._ abstract class BinaryComparison extends BinaryExpression { - def sqlOperator: SqlOperator + private[flink] def sqlOperator: SqlOperator - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { relBuilder.call(sqlOperator, children.map(_.toRexNode)) } - override def resultType = BOOLEAN_TYPE_INFO + override private[flink] def resultType = BOOLEAN_TYPE_INFO // TODO: tighten this rule once we implemented type coercion rules during validation - override def validateInput(): ExprValidationResult = (left.resultType, right.resultType) match { - case (lType, rType) if isNumeric(lType) && isNumeric(rType) => ValidationSuccess - case (lType, rType) if isComparable(lType) && lType == rType => ValidationSuccess - case (lType, rType) => - ValidationFailure( - s"Comparison is only supported for numeric types and " + - s"comparable types of same type, got $lType and $rType") - } + override private[flink] def validateInput(): ExprValidationResult = + (left.resultType, right.resultType) match { + case (lType, rType) if isNumeric(lType) && isNumeric(rType) => ValidationSuccess + case (lType, rType) if isComparable(lType) && lType == rType => ValidationSuccess + case (lType, rType) => + ValidationFailure( + s"Comparison is only supported for numeric types and " + + s"comparable types of same type, got $lType and $rType") + } } case class EqualTo(left: Expression, right: Expression) extends BinaryComparison { override def toString = s"$left === $right" - val sqlOperator: SqlOperator = SqlStdOperatorTable.EQUALS + private[flink] val sqlOperator: SqlOperator = SqlStdOperatorTable.EQUALS - override def validateInput(): ExprValidationResult = (left.resultType, right.resultType) match { - case (lType, rType) if isNumeric(lType) && isNumeric(rType) => ValidationSuccess - // TODO widen this rule once we support custom objects as types (FLINK-3916) - case (lType, rType) if lType == rType => ValidationSuccess - case (lType, rType) => - ValidationFailure(s"Equality predicate on incompatible types: $lType and $rType") - } + override private[flink] def validateInput(): ExprValidationResult = + (left.resultType, right.resultType) match { + case (lType, rType) if isNumeric(lType) && isNumeric(rType) => ValidationSuccess + // TODO widen this rule once we support custom objects as types (FLINK-3916) + case (lType, rType) if lType == rType => ValidationSuccess + case (lType, rType) => + ValidationFailure(s"Equality predicate on incompatible types: $lType and $rType") + } } case class NotEqualTo(left: Expression, right: Expression) extends BinaryComparison { override def toString = s"$left !== $right" - val sqlOperator: SqlOperator = SqlStdOperatorTable.NOT_EQUALS + private[flink] val sqlOperator: SqlOperator = SqlStdOperatorTable.NOT_EQUALS - override def validateInput(): ExprValidationResult = (left.resultType, right.resultType) match { - case (lType, rType) if isNumeric(lType) && isNumeric(rType) => ValidationSuccess - // TODO widen this rule once we support custom objects as types (FLINK-3916) - case (lType, rType) if lType == rType => ValidationSuccess - case (lType, rType) => - ValidationFailure(s"Inequality predicate on incompatible types: $lType and $rType") - } + override private[flink] def validateInput(): ExprValidationResult = + (left.resultType, right.resultType) match { + case (lType, rType) if isNumeric(lType) && isNumeric(rType) => ValidationSuccess + // TODO widen this rule once we support custom objects as types (FLINK-3916) + case (lType, rType) if lType == rType => ValidationSuccess + case (lType, rType) => + ValidationFailure(s"Inequality predicate on incompatible types: $lType and $rType") + } } case class GreaterThan(left: Expression, right: Expression) extends BinaryComparison { override def toString = s"$left > $right" - val sqlOperator: SqlOperator = SqlStdOperatorTable.GREATER_THAN + private[flink] val sqlOperator: SqlOperator = SqlStdOperatorTable.GREATER_THAN } case class GreaterThanOrEqual(left: Expression, right: Expression) extends BinaryComparison { override def toString = s"$left >= $right" - val sqlOperator: SqlOperator = SqlStdOperatorTable.GREATER_THAN_OR_EQUAL + private[flink] val sqlOperator: SqlOperator = SqlStdOperatorTable.GREATER_THAN_OR_EQUAL } case class LessThan(left: Expression, right: Expression) extends BinaryComparison { override def toString = s"$left < $right" - val sqlOperator: SqlOperator = SqlStdOperatorTable.LESS_THAN + private[flink] val sqlOperator: SqlOperator = SqlStdOperatorTable.LESS_THAN } case class LessThanOrEqual(left: Expression, right: Expression) extends BinaryComparison { override def toString = s"$left <= $right" - val sqlOperator: SqlOperator = SqlStdOperatorTable.LESS_THAN_OR_EQUAL + private[flink] val sqlOperator: SqlOperator = SqlStdOperatorTable.LESS_THAN_OR_EQUAL } case class IsNull(child: Expression) extends UnaryExpression { override def toString = s"($child).isNull" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { relBuilder.isNull(child.toRexNode) } - override def resultType = BOOLEAN_TYPE_INFO + override private[flink] def resultType = BOOLEAN_TYPE_INFO } case class IsNotNull(child: Expression) extends UnaryExpression { override def toString = s"($child).isNotNull" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { relBuilder.isNotNull(child.toRexNode) } - override def resultType = BOOLEAN_TYPE_INFO + override private[flink] def resultType = BOOLEAN_TYPE_INFO } http://git-wip-us.apache.org/repos/asf/flink/blob/429b8443/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/fieldExpression.scala ---------------------------------------------------------------------- diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/fieldExpression.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/fieldExpression.scala index 24283d0..0219d38 100644 --- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/fieldExpression.scala +++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/fieldExpression.scala @@ -25,26 +25,27 @@ import org.apache.flink.api.table.UnresolvedException import org.apache.flink.api.table.validate.{ExprValidationResult, ValidationFailure} trait NamedExpression extends Expression { - def name: String - def toAttribute: Attribute + private[flink] def name: String + private[flink] def toAttribute: Attribute } abstract class Attribute extends LeafExpression with NamedExpression { - override def toAttribute: Attribute = this + override private[flink] def toAttribute: Attribute = this - def withName(newName: String): Attribute + private[flink] def withName(newName: String): Attribute } case class UnresolvedFieldReference(name: String) extends Attribute { override def toString = "\"" + name - override def withName(newName: String): Attribute = UnresolvedFieldReference(newName) + override private[flink] def withName(newName: String): Attribute = + UnresolvedFieldReference(newName) - override def resultType: TypeInformation[_] = + override private[flink] def resultType: TypeInformation[_] = throw new UnresolvedException(s"calling resultType on ${this.getClass}") - override def validateInput(): ExprValidationResult = + override private[flink] def validateInput(): ExprValidationResult = ValidationFailure(s"Unresolved reference $name") } @@ -54,11 +55,11 @@ case class ResolvedFieldReference( override def toString = s"'$name" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { relBuilder.field(name) } - override def withName(newName: String): Attribute = { + override private[flink] def withName(newName: String): Attribute = { if (newName == name) { this } else { @@ -72,18 +73,18 @@ case class Alias(child: Expression, name: String) override def toString = s"$child as '$name" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { relBuilder.alias(child.toRexNode, name) } - override def resultType: TypeInformation[_] = child.resultType + override private[flink] def resultType: TypeInformation[_] = child.resultType - override def makeCopy(anyRefs: Array[AnyRef]): this.type = { + override private[flink] def makeCopy(anyRefs: Array[AnyRef]): this.type = { val child: Expression = anyRefs.head.asInstanceOf[Expression] copy(child, name).asInstanceOf[this.type] } - override def toAttribute: Attribute = { + override private[flink] def toAttribute: Attribute = { if (valid) { ResolvedFieldReference(name, child.resultType) } else { @@ -94,14 +95,14 @@ case class Alias(child: Expression, name: String) case class UnresolvedAlias(child: Expression) extends UnaryExpression with NamedExpression { - override def name: String = + override private[flink] def name: String = throw new UnresolvedException("Invalid call to name on UnresolvedAlias") - override def toAttribute: Attribute = + override private[flink] def toAttribute: Attribute = throw new UnresolvedException("Invalid call to toAttribute on UnresolvedAlias") - override def resultType: TypeInformation[_] = + override private[flink] def resultType: TypeInformation[_] = throw new UnresolvedException("Invalid call to resultType on UnresolvedAlias") - override lazy val valid = false + override private[flink] lazy val valid = false } http://git-wip-us.apache.org/repos/asf/flink/blob/429b8443/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/literals.scala ---------------------------------------------------------------------- diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/literals.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/literals.scala index f5d81f6..e697d0c 100644 --- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/literals.scala +++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/literals.scala @@ -27,7 +27,7 @@ import org.apache.flink.api.common.typeinfo.{SqlTimeTypeInfo, BasicTypeInfo, Typ import org.apache.flink.api.table.typeutils.TypeConverter object Literal { - def apply(l: Any): Literal = l match { + private[flink] def apply(l: Any): Literal = l match { case i: Int => Literal(i, BasicTypeInfo.INT_TYPE_INFO) case s: Short => Literal(s, BasicTypeInfo.SHORT_TYPE_INFO) case b: Byte => Literal(b, BasicTypeInfo.BYTE_TYPE_INFO) @@ -48,7 +48,7 @@ object Literal { case class Literal(value: Any, resultType: TypeInformation[_]) extends LeafExpression { override def toString = s"$value" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { resultType match { case BasicTypeInfo.BIG_DEC_TYPE_INFO => val bigDecValue = value.asInstanceOf[java.math.BigDecimal] @@ -80,7 +80,7 @@ case class Literal(value: Any, resultType: TypeInformation[_]) extends LeafExpre case class Null(resultType: TypeInformation[_]) extends LeafExpression { override def toString = s"null" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { relBuilder.getRexBuilder.makeNullLiteral(TypeConverter.typeInfoToSqlType(resultType)) } } http://git-wip-us.apache.org/repos/asf/flink/blob/429b8443/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/logic.scala ---------------------------------------------------------------------- diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/logic.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/logic.scala index 332a8c5..3282643 100644 --- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/logic.scala +++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/logic.scala @@ -25,9 +25,9 @@ import org.apache.flink.api.common.typeinfo.BasicTypeInfo import org.apache.flink.api.table.validate._ abstract class BinaryPredicate extends BinaryExpression { - override def resultType = BasicTypeInfo.BOOLEAN_TYPE_INFO + override private[flink] def resultType = BasicTypeInfo.BOOLEAN_TYPE_INFO - override def validateInput(): ExprValidationResult = { + override private[flink] def validateInput(): ExprValidationResult = { if (left.resultType == BasicTypeInfo.BOOLEAN_TYPE_INFO && right.resultType == BasicTypeInfo.BOOLEAN_TYPE_INFO) { ValidationSuccess @@ -42,13 +42,13 @@ case class Not(child: Expression) extends UnaryExpression { override def toString = s"!($child)" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { relBuilder.not(child.toRexNode) } - override def resultType = BasicTypeInfo.BOOLEAN_TYPE_INFO + override private[flink] def resultType = BasicTypeInfo.BOOLEAN_TYPE_INFO - override def validateInput(): ExprValidationResult = { + override private[flink] def validateInput(): ExprValidationResult = { if (child.resultType == BasicTypeInfo.BOOLEAN_TYPE_INFO) { ValidationSuccess } else { @@ -62,7 +62,7 @@ case class And(left: Expression, right: Expression) extends BinaryPredicate { override def toString = s"$left && $right" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { relBuilder.and(left.toRexNode, right.toRexNode) } } @@ -71,7 +71,7 @@ case class Or(left: Expression, right: Expression) extends BinaryPredicate { override def toString = s"$left || $right" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { relBuilder.or(left.toRexNode, right.toRexNode) } } @@ -81,20 +81,20 @@ case class If( ifTrue: Expression, ifFalse: Expression) extends Expression { - def children = Seq(condition, ifTrue, ifFalse) + private[flink] def children = Seq(condition, ifTrue, ifFalse) - override def resultType = ifTrue.resultType + override private[flink] def resultType = ifTrue.resultType override def toString = s"($condition)? $ifTrue : $ifFalse" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { val c = condition.toRexNode val t = ifTrue.toRexNode val f = ifFalse.toRexNode relBuilder.call(SqlStdOperatorTable.CASE, c, t, f) } - override def validateInput(): ExprValidationResult = { + override private[flink] def validateInput(): ExprValidationResult = { if (condition.resultType == BasicTypeInfo.BOOLEAN_TYPE_INFO && ifTrue.resultType == ifFalse.resultType) { ValidationSuccess http://git-wip-us.apache.org/repos/asf/flink/blob/429b8443/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/mathExpressions.scala ---------------------------------------------------------------------- diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/mathExpressions.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/mathExpressions.scala index cf734f0..5f0acdf 100644 --- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/mathExpressions.scala +++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/mathExpressions.scala @@ -27,89 +27,90 @@ import org.apache.flink.api.table.typeutils.TypeCheckUtils import org.apache.flink.api.table.validate._ case class Abs(child: Expression) extends UnaryExpression { - override def resultType: TypeInformation[_] = child.resultType + override private[flink] def resultType: TypeInformation[_] = child.resultType - override def validateInput(): ExprValidationResult = + override private[flink] def validateInput(): ExprValidationResult = TypeCheckUtils.assertNumericExpr(child.resultType, "Abs") - override def toString(): String = s"abs($child)" + override def toString: String = s"abs($child)" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { relBuilder.call(SqlStdOperatorTable.ABS, child.toRexNode) } } case class Ceil(child: Expression) extends UnaryExpression { - override def resultType: TypeInformation[_] = LONG_TYPE_INFO + override private[flink] def resultType: TypeInformation[_] = LONG_TYPE_INFO - override def validateInput(): ExprValidationResult = + override private[flink] def validateInput(): ExprValidationResult = TypeCheckUtils.assertNumericExpr(child.resultType, "Ceil") - override def toString(): String = s"ceil($child)" + override def toString: String = s"ceil($child)" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { relBuilder.call(SqlStdOperatorTable.CEIL, child.toRexNode) } } case class Exp(child: Expression) extends UnaryExpression with InputTypeSpec { - override def resultType: TypeInformation[_] = DOUBLE_TYPE_INFO + override private[flink] def resultType: TypeInformation[_] = DOUBLE_TYPE_INFO - override def expectedTypes: Seq[TypeInformation[_]] = DOUBLE_TYPE_INFO :: Nil + override private[flink] def expectedTypes: Seq[TypeInformation[_]] = DOUBLE_TYPE_INFO :: Nil - override def toString(): String = s"exp($child)" + override def toString: String = s"exp($child)" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { relBuilder.call(SqlStdOperatorTable.EXP, child.toRexNode) } } case class Floor(child: Expression) extends UnaryExpression { - override def resultType: TypeInformation[_] = LONG_TYPE_INFO + override private[flink] def resultType: TypeInformation[_] = LONG_TYPE_INFO - override def validateInput(): ExprValidationResult = + override private[flink] def validateInput(): ExprValidationResult = TypeCheckUtils.assertNumericExpr(child.resultType, "Floor") - override def toString(): String = s"floor($child)" + override def toString: String = s"floor($child)" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { relBuilder.call(SqlStdOperatorTable.FLOOR, child.toRexNode) } } case class Log10(child: Expression) extends UnaryExpression with InputTypeSpec { - override def resultType: TypeInformation[_] = DOUBLE_TYPE_INFO + override private[flink] def resultType: TypeInformation[_] = DOUBLE_TYPE_INFO - override def expectedTypes: Seq[TypeInformation[_]] = DOUBLE_TYPE_INFO :: Nil + override private[flink] def expectedTypes: Seq[TypeInformation[_]] = DOUBLE_TYPE_INFO :: Nil - override def toString(): String = s"log10($child)" + override def toString: String = s"log10($child)" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { relBuilder.call(SqlStdOperatorTable.LOG10, child.toRexNode) } } case class Ln(child: Expression) extends UnaryExpression with InputTypeSpec { - override def resultType: TypeInformation[_] = DOUBLE_TYPE_INFO + override private[flink] def resultType: TypeInformation[_] = DOUBLE_TYPE_INFO - override def expectedTypes: Seq[TypeInformation[_]] = DOUBLE_TYPE_INFO :: Nil + override private[flink] def expectedTypes: Seq[TypeInformation[_]] = DOUBLE_TYPE_INFO :: Nil - override def toString(): String = s"ln($child)" + override def toString: String = s"ln($child)" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { relBuilder.call(SqlStdOperatorTable.LN, child.toRexNode) } } case class Power(left: Expression, right: Expression) extends BinaryExpression with InputTypeSpec { - override def resultType: TypeInformation[_] = DOUBLE_TYPE_INFO + override private[flink] def resultType: TypeInformation[_] = DOUBLE_TYPE_INFO - override def expectedTypes: Seq[TypeInformation[_]] = DOUBLE_TYPE_INFO :: DOUBLE_TYPE_INFO :: Nil + override private[flink] def expectedTypes: Seq[TypeInformation[_]] = + DOUBLE_TYPE_INFO :: DOUBLE_TYPE_INFO :: Nil - override def toString(): String = s"pow($left, $right)" + override def toString: String = s"pow($left, $right)" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { relBuilder.call(SqlStdOperatorTable.POWER, left.toRexNode, right.toRexNode) } } http://git-wip-us.apache.org/repos/asf/flink/blob/429b8443/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/ordering.scala ---------------------------------------------------------------------- diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/ordering.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/ordering.scala index 887cf60..85da69c 100644 --- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/ordering.scala +++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/ordering.scala @@ -24,7 +24,7 @@ import org.apache.flink.api.common.typeinfo.TypeInformation import org.apache.flink.api.table.validate._ abstract class Ordering extends UnaryExpression { - override def validateInput(): ExprValidationResult = { + override private[flink] def validateInput(): ExprValidationResult = { if (!child.isInstanceOf[NamedExpression]) { ValidationFailure(s"Sort should only based on field reference") } else { @@ -36,19 +36,19 @@ abstract class Ordering extends UnaryExpression { case class Asc(child: Expression) extends Ordering { override def toString: String = s"($child).asc" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { child.toRexNode } - override def resultType: TypeInformation[_] = child.resultType + override private[flink] def resultType: TypeInformation[_] = child.resultType } case class Desc(child: Expression) extends Ordering { override def toString: String = s"($child).desc" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { relBuilder.desc(child.toRexNode) } - override def resultType: TypeInformation[_] = child.resultType + override private[flink] def resultType: TypeInformation[_] = child.resultType } http://git-wip-us.apache.org/repos/asf/flink/blob/429b8443/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/stringExpressions.scala ---------------------------------------------------------------------- diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/stringExpressions.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/stringExpressions.scala index 11825f7..2621bbc 100644 --- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/stringExpressions.scala +++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/expressions/stringExpressions.scala @@ -31,9 +31,9 @@ import org.apache.flink.api.table.validate._ * Returns the length of this `str`. */ case class CharLength(child: Expression) extends UnaryExpression { - override def resultType: TypeInformation[_] = INT_TYPE_INFO + override private[flink] def resultType: TypeInformation[_] = INT_TYPE_INFO - override def validateInput(): ExprValidationResult = { + override private[flink] def validateInput(): ExprValidationResult = { if (child.resultType == STRING_TYPE_INFO) { ValidationSuccess } else { @@ -41,9 +41,9 @@ case class CharLength(child: Expression) extends UnaryExpression { } } - override def toString(): String = s"($child).charLength()" + override def toString: String = s"($child).charLength()" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { relBuilder.call(SqlStdOperatorTable.CHAR_LENGTH, child.toRexNode) } } @@ -53,9 +53,9 @@ case class CharLength(child: Expression) extends UnaryExpression { * All other letters are in lowercase. Words are delimited by white space. */ case class InitCap(child: Expression) extends UnaryExpression { - override def resultType: TypeInformation[_] = STRING_TYPE_INFO + override private[flink] def resultType: TypeInformation[_] = STRING_TYPE_INFO - override def validateInput(): ExprValidationResult = { + override private[flink] def validateInput(): ExprValidationResult = { if (child.resultType == STRING_TYPE_INFO) { ValidationSuccess } else { @@ -63,9 +63,9 @@ case class InitCap(child: Expression) extends UnaryExpression { } } - override def toString(): String = s"($child).initCap()" + override def toString: String = s"($child).initCap()" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { relBuilder.call(SqlStdOperatorTable.INITCAP, child.toRexNode) } } @@ -74,12 +74,12 @@ case class InitCap(child: Expression) extends UnaryExpression { * Returns true if `str` matches `pattern`. */ case class Like(str: Expression, pattern: Expression) extends BinaryExpression { - def left: Expression = str - def right: Expression = pattern + private[flink] def left: Expression = str + private[flink] def right: Expression = pattern - override def resultType: TypeInformation[_] = BOOLEAN_TYPE_INFO + override private[flink] def resultType: TypeInformation[_] = BOOLEAN_TYPE_INFO - override def validateInput(): ExprValidationResult = { + override private[flink] def validateInput(): ExprValidationResult = { if (str.resultType == STRING_TYPE_INFO && pattern.resultType == STRING_TYPE_INFO) { ValidationSuccess } else { @@ -88,9 +88,9 @@ case class Like(str: Expression, pattern: Expression) extends BinaryExpression { } } - override def toString(): String = s"($str).like($pattern)" + override def toString: String = s"($str).like($pattern)" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { relBuilder.call(SqlStdOperatorTable.LIKE, children.map(_.toRexNode)) } } @@ -99,9 +99,9 @@ case class Like(str: Expression, pattern: Expression) extends BinaryExpression { * Returns str with all characters changed to lowercase. */ case class Lower(child: Expression) extends UnaryExpression { - override def resultType: TypeInformation[_] = STRING_TYPE_INFO + override private[flink] def resultType: TypeInformation[_] = STRING_TYPE_INFO - override def validateInput(): ExprValidationResult = { + override private[flink] def validateInput(): ExprValidationResult = { if (child.resultType == STRING_TYPE_INFO) { ValidationSuccess } else { @@ -109,9 +109,9 @@ case class Lower(child: Expression) extends UnaryExpression { } } - override def toString(): String = s"($child).toLowerCase()" + override def toString: String = s"($child).toLowerCase()" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { relBuilder.call(SqlStdOperatorTable.LOWER, child.toRexNode) } } @@ -120,12 +120,12 @@ case class Lower(child: Expression) extends UnaryExpression { * Returns true if `str` is similar to `pattern`. */ case class Similar(str: Expression, pattern: Expression) extends BinaryExpression { - def left: Expression = str - def right: Expression = pattern + private[flink] def left: Expression = str + private[flink] def right: Expression = pattern - override def resultType: TypeInformation[_] = BOOLEAN_TYPE_INFO + override private[flink] def resultType: TypeInformation[_] = BOOLEAN_TYPE_INFO - override def validateInput(): ExprValidationResult = { + override private[flink] def validateInput(): ExprValidationResult = { if (str.resultType == STRING_TYPE_INFO && pattern.resultType == STRING_TYPE_INFO) { ValidationSuccess } else { @@ -134,9 +134,9 @@ case class Similar(str: Expression, pattern: Expression) extends BinaryExpressio } } - override def toString(): String = s"($str).similarTo($pattern)" + override def toString: String = s"($str).similarTo($pattern)" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { relBuilder.call(SqlStdOperatorTable.SIMILAR_TO, children.map(_.toRexNode)) } } @@ -151,16 +151,16 @@ case class SubString( def this(str: Expression, begin: Expression) = this(str, begin, CharLength(str)) - override def children: Seq[Expression] = str :: begin :: end :: Nil + override private[flink] def children: Seq[Expression] = str :: begin :: end :: Nil - override def resultType: TypeInformation[_] = STRING_TYPE_INFO + override private[flink] def resultType: TypeInformation[_] = STRING_TYPE_INFO - override def expectedTypes: Seq[TypeInformation[_]] = + override private[flink] def expectedTypes: Seq[TypeInformation[_]] = Seq(STRING_TYPE_INFO, INT_TYPE_INFO, INT_TYPE_INFO) - override def toString(): String = s"$str.subString($begin, $end)" + override def toString: String = s"$str.subString($begin, $end)" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { relBuilder.call(SqlStdOperatorTable.SUBSTRING, children.map(_.toRexNode)) } } @@ -174,16 +174,16 @@ case class Trim( trimString: Expression, str: Expression) extends Expression with InputTypeSpec { - override def children: Seq[Expression] = trimFlag :: trimString :: str :: Nil + override private[flink] def children: Seq[Expression] = trimFlag :: trimString :: str :: Nil - override def resultType: TypeInformation[_] = STRING_TYPE_INFO + override private[flink] def resultType: TypeInformation[_] = STRING_TYPE_INFO - override def expectedTypes: Seq[TypeInformation[_]] = + override private[flink] def expectedTypes: Seq[TypeInformation[_]] = Seq(INT_TYPE_INFO, STRING_TYPE_INFO, STRING_TYPE_INFO) - override def toString(): String = s"trim($trimFlag, $trimString, $str)" + override def toString: String = s"trim($trimFlag, $trimString, $str)" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { relBuilder.call(SqlStdOperatorTable.TRIM, children.map(_.toRexNode)) } } @@ -202,9 +202,9 @@ object TrimConstants { * Returns str with all characters changed to uppercase. */ case class Upper(child: Expression) extends UnaryExpression { - override def resultType: TypeInformation[_] = STRING_TYPE_INFO + override private[flink] def resultType: TypeInformation[_] = STRING_TYPE_INFO - override def validateInput(): ExprValidationResult = { + override private[flink] def validateInput(): ExprValidationResult = { if (child.resultType == STRING_TYPE_INFO) { ValidationSuccess } else { @@ -212,9 +212,9 @@ case class Upper(child: Expression) extends UnaryExpression { } } - override def toString(): String = s"($child).toUpperCase()" + override def toString: String = s"($child).toUpperCase()" - override def toRexNode(implicit relBuilder: RelBuilder): RexNode = { + override private[flink] def toRexNode(implicit relBuilder: RelBuilder): RexNode = { relBuilder.call(SqlStdOperatorTable.UPPER, child.toRexNode) } } http://git-wip-us.apache.org/repos/asf/flink/blob/429b8443/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/trees/TreeNode.scala ---------------------------------------------------------------------- diff --git a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/trees/TreeNode.scala b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/trees/TreeNode.scala index 5d3ffef..8eecc74 100644 --- a/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/trees/TreeNode.scala +++ b/flink-libraries/flink-table/src/main/scala/org/apache/flink/api/table/trees/TreeNode.scala @@ -28,17 +28,17 @@ abstract class TreeNode[A <: TreeNode[A]] extends Product { self: A => * List of child nodes that should be considered when doing transformations. Other values * in the Product will not be transformed, only handed through. */ - def children: Seq[A] + private[flink] def children: Seq[A] /** * Tests for equality by first testing for reference equality. */ - def fastEquals(other: TreeNode[_]): Boolean = this.eq(other) || this == other + private[flink] def fastEquals(other: TreeNode[_]): Boolean = this.eq(other) || this == other /** * Do tree transformation in post order. */ - def postOrderTransform(rule: PartialFunction[A, A]): A = { + private[flink] def postOrderTransform(rule: PartialFunction[A, A]): A = { def childrenTransform(rule: PartialFunction[A, A]): A = { var changed = false val newArgs = productIterator.map { @@ -78,7 +78,7 @@ abstract class TreeNode[A <: TreeNode[A]] extends Product { self: A => /** * Runs the given function first on the node and then recursively on all its children. */ - def preOrderVisit(f: A => Unit): Unit = { + private[flink] def preOrderVisit(f: A => Unit): Unit = { f(this) children.foreach(_.preOrderVisit(f)) } @@ -87,7 +87,7 @@ abstract class TreeNode[A <: TreeNode[A]] extends Product { self: A => * Creates a new copy of this expression with new children. This is used during transformation * if children change. */ - def makeCopy(newArgs: Array[AnyRef]): A = { + private[flink] def makeCopy(newArgs: Array[AnyRef]): A = { val ctors = getClass.getConstructors.filter(_.getParameterTypes.size > 0) if (ctors.isEmpty) { throw new RuntimeException(s"No valid constructor for ${getClass.getSimpleName}")