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