You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@shardingsphere.apache.org by du...@apache.org on 2023/05/15 00:10:25 UTC

[shardingsphere] branch master updated: support for EXPR with IS & Is not (#25650)

This is an automated email from the ASF dual-hosted git repository.

duanzhengqiang pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/shardingsphere.git


The following commit(s) were added to refs/heads/master by this push:
     new 12e3c7f72b5 support for EXPR with IS & Is not (#25650)
12e3c7f72b5 is described below

commit 12e3c7f72b591081721a98367f4690b66b0946b6
Author: kanha gupta <92...@users.noreply.github.com>
AuthorDate: Mon May 15 05:40:18 2023 +0530

    support for EXPR with IS & Is not (#25650)
---
 .../expression/impl/BinaryOperationExpressionConverter.java      | 9 ++++++++-
 .../test/it/optimize/SQLNodeConverterEngineIT.java               | 2 ++
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/segment/expression/impl/BinaryOperationExpressionConverter.java b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/segment/expression/impl/BinaryOperationExpressionConverter.java
index e9d167bea8b..7a623155dfe 100644
--- a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/segment/expression/impl/BinaryOperationExpressionConverter.java
+++ b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/segment/expression/impl/BinaryOperationExpressionConverter.java
@@ -67,6 +67,8 @@ public final class BinaryOperationExpressionConverter implements SQLSegmentConve
         register(SqlStdOperatorTable.IS_NULL);
         register(SqlStdOperatorTable.IS_NOT_NULL);
         register(SqlStdOperatorTable.ALL_GT);
+        register(SqlStdOperatorTable.IS_FALSE);
+        register(SqlStdOperatorTable.IS_NOT_FALSE);
     }
     
     private static void register(final SqlOperator sqlOperator) {
@@ -96,6 +98,10 @@ public final class BinaryOperationExpressionConverter implements SQLSegmentConve
                 operator = "IS NULL";
             } else if ("NOT NULL".equalsIgnoreCase(literals)) {
                 operator = "IS NOT NULL";
+            } else if ("FALSE".equalsIgnoreCase(literals)) {
+                operator = "IS FALSE";
+            } else if ("NOT FALSE".equalsIgnoreCase(literals)) {
+                operator = "IS NOT FALSE";
             }
         }
         Preconditions.checkState(REGISTRY.containsKey(operator), "Unsupported SQL operator: `%s`", operator);
@@ -106,7 +112,8 @@ public final class BinaryOperationExpressionConverter implements SQLSegmentConve
         SqlNode left = new ExpressionConverter().convert(segment.getLeft()).orElseThrow(IllegalStateException::new);
         List<SqlNode> result = new LinkedList<>();
         result.add(left);
-        if (!SqlStdOperatorTable.IS_NULL.equals(operator) && !SqlStdOperatorTable.IS_NOT_NULL.equals(operator)) {
+        if (!SqlStdOperatorTable.IS_NULL.equals(operator) && !SqlStdOperatorTable.IS_NOT_NULL.equals(operator) && !SqlStdOperatorTable.IS_FALSE.equals(operator)
+                && !SqlStdOperatorTable.IS_NOT_FALSE.equals(operator)) {
             SqlNode right = new ExpressionConverter().convert(segment.getRight()).orElseThrow(IllegalStateException::new);
             result.addAll(right instanceof SqlNodeList ? ((SqlNodeList) right).getList() : Collections.singletonList(right));
         }
diff --git a/test/it/optimizer/src/test/java/org/apache/shardingsphere/test/it/optimize/SQLNodeConverterEngineIT.java b/test/it/optimizer/src/test/java/org/apache/shardingsphere/test/it/optimize/SQLNodeConverterEngineIT.java
index 5bd77c4b252..2abfd705ddc 100644
--- a/test/it/optimizer/src/test/java/org/apache/shardingsphere/test/it/optimize/SQLNodeConverterEngineIT.java
+++ b/test/it/optimizer/src/test/java/org/apache/shardingsphere/test/it/optimize/SQLNodeConverterEngineIT.java
@@ -211,6 +211,8 @@ class SQLNodeConverterEngineIT {
             result.add("select_where_with_boolean_primary_with_comparison_subquery");
             result.add("select_not_between_with_single_table");
             result.add("select_not_in_with_single_table");
+            result.add("select_where_with_expr_with_is");
+            result.add("select_where_with_expr_with_is_not");
             return result;
         }
         // CHECKSTYLE:ON