This is an automated email from the ASF dual-hosted git repository. twalthr pushed a commit to branch release-1.8 in repository https://gitbox.apache.org/repos/asf/flink.git
commit e4f840b17161214206d5cbdf3782d6940b563543 Author: Timo Walther <twal...@apache.org> AuthorDate: Fri Mar 1 11:45:45 2019 +0100 [hotfix][table-api] Introduce an alternative for if-then-else in prefix notation This commit uncouples prefix if-then-else expressions from the `If` case class. The offically documented way is still using the `?` tenerary operator. But this commit adds a nice alternative that is available in the Scala DSL. --- .../flink/table/api/scala/expressionDsl.scala | 23 ++++++++++++++++++++++ .../org/apache/flink/table/expressions/logic.scala | 3 +++ .../flink/table/validate/FunctionCatalog.scala | 1 + .../table/expressions/ScalarOperatorsTest.scala | 4 ++-- 4 files changed, 29 insertions(+), 2 deletions(-) diff --git a/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/api/scala/expressionDsl.scala b/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/api/scala/expressionDsl.scala index 1100f0f..1001c0f 100644 --- a/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/api/scala/expressionDsl.scala +++ b/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/api/scala/expressionDsl.scala @@ -1451,4 +1451,27 @@ object log { } } +/** + * Ternary conditional operator that decides which of two other expressions should be evaluated + * based on a evaluated boolean condition. + * + * e.g. ifThenElse(42 > 5, "A", "B") leads to "A" + */ +object ifThenElse { + + /** + * Ternary conditional operator that decides which of two other expressions should be evaluated + * based on a evaluated boolean condition. + * + * e.g. ifThenElse(42 > 5, "A", "B") leads to "A" + * + * @param condition boolean condition + * @param ifTrue expression to be evaluated if condition holds + * @param ifFalse expression to be evaluated if condition does not hold + */ + def apply(condition: Expression, ifTrue: Expression, ifFalse: Expression): Expression = { + If(condition, ifTrue, ifFalse) + } +} + // scalastyle:on object.name diff --git a/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/expressions/logic.scala b/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/expressions/logic.scala index dfe00cc..f29ffb6 100644 --- a/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/expressions/logic.scala +++ b/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/expressions/logic.scala @@ -76,6 +76,9 @@ case class Or(left: Expression, right: Expression) extends BinaryPredicate { } } +@deprecated( + "Use ifThenElse(...) instead. It is available through the implicit Scala DSL.", + "1.8.0") case class If( condition: Expression, ifTrue: Expression, diff --git a/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/validate/FunctionCatalog.scala b/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/validate/FunctionCatalog.scala index 658d94c..9ee17ea 100644 --- a/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/validate/FunctionCatalog.scala +++ b/flink-table/flink-table-planner/src/main/scala/org/apache/flink/table/validate/FunctionCatalog.scala @@ -173,6 +173,7 @@ object FunctionCatalog { "if" -> classOf[If], "between" -> classOf[Between], "notBetween" -> classOf[NotBetween], + "ifThenElse" -> classOf[If], // aggregate functions "avg" -> classOf[Avg], diff --git a/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/expressions/ScalarOperatorsTest.scala b/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/expressions/ScalarOperatorsTest.scala index 088ba65..099d478 100644 --- a/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/expressions/ScalarOperatorsTest.scala +++ b/flink-table/flink-table-planner/src/test/scala/org/apache/flink/table/expressions/ScalarOperatorsTest.scala @@ -366,8 +366,8 @@ class ScalarOperatorsTest extends ScalarOperatorsTestBase { "10") testTableApi(true, "?((f6 && true), 'true', 'false')", "true") testTableApi( - If('f9 > 'f8, 'f9 - 1, 'f9), - "If(f9 > f8, f9 - 1, f9)", + ifThenElse('f9 > 'f8, 'f9 - 1, 'f9), + "ifThenElse(f9 > f8, f9 - 1, f9)", "9" ) testSqlApi("CASE 11 WHEN 1 THEN 'a' ELSE 'b' END", "b")