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")

Reply via email to