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/11 08:52:19 UTC
[shardingsphere] branch master updated: support for boolean primary SQL (#25564)
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 009002ae1fc support for boolean primary SQL (#25564)
009002ae1fc is described below
commit 009002ae1fc6b4c904700edb36b9859f43623c2d
Author: kanha gupta <92...@users.noreply.github.com>
AuthorDate: Thu May 11 14:22:10 2023 +0530
support for boolean primary SQL (#25564)
---
.../impl/BinaryOperationExpressionConverter.java | 32 ++++++++++++----------
.../test/it/optimize/SQLNodeConverterEngineIT.java | 2 ++
2 files changed, 20 insertions(+), 14 deletions(-)
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 82cb54e8b21..a9179c11e09 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
@@ -25,6 +25,7 @@ import org.apache.calcite.sql.SqlOperator;
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
import org.apache.calcite.sql.parser.SqlParserPos;
import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.BinaryOperationExpression;
+import org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.simple.LiteralExpressionSegment;
import org.apache.shardingsphere.sqlfederation.optimizer.converter.segment.SQLSegmentConverter;
import org.apache.shardingsphere.sqlfederation.optimizer.converter.segment.expression.ExpressionConverter;
@@ -63,6 +64,8 @@ public final class BinaryOperationExpressionConverter implements SQLSegmentConve
register(SqlStdOperatorTable.LIKE);
register(SqlStdOperatorTable.NOT_LIKE);
register(SqlStdOperatorTable.PERCENT_REMAINDER);
+ register(SqlStdOperatorTable.IS_NULL);
+ register(SqlStdOperatorTable.IS_NOT_NULL);
}
private static void register(final SqlOperator sqlOperator) {
@@ -79,22 +82,23 @@ public final class BinaryOperationExpressionConverter implements SQLSegmentConve
@Override
public Optional<SqlNode> convert(final BinaryOperationExpression segment) {
- SqlOperator operator = convertOperator(segment.getOperator());
- List<SqlNode> sqlNodes = convertSqlNodes(segment);
- return Optional.of(new SqlBasicCall(operator, sqlNodes, SqlParserPos.ZERO));
- }
-
- private List<SqlNode> convertSqlNodes(final BinaryOperationExpression segment) {
SqlNode left = new ExpressionConverter().convert(segment.getLeft()).orElseThrow(IllegalStateException::new);
SqlNode right = new ExpressionConverter().convert(segment.getRight()).orElseThrow(IllegalStateException::new);
- List<SqlNode> result = new LinkedList<>();
- result.add(left);
- result.addAll(right instanceof SqlNodeList ? ((SqlNodeList) right).getList() : Collections.singletonList(right));
- return result;
- }
-
- private SqlOperator convertOperator(final String operator) {
+ String operator = segment.getOperator();
+ List<SqlNode> sqlNodes = new LinkedList<>();
+ sqlNodes.add(left);
+ if ("IS".equals(operator)) {
+ right = null;
+ if (((LiteralExpressionSegment) segment.getRight()).getLiterals().equals("NULL")) {
+ operator = "IS NULL";
+ } else if (((LiteralExpressionSegment) segment.getRight()).getLiterals().equals("NOT NULL")) {
+ operator = "IS NOT NULL";
+ }
+ } else {
+ sqlNodes.addAll(right instanceof SqlNodeList ? ((SqlNodeList) right).getList() : Collections.singletonList(right));
+ }
Preconditions.checkState(REGISTRY.containsKey(operator), "Unsupported SQL operator: `%s`", operator);
- return REGISTRY.get(operator);
+ SqlOperator sqlOperator = REGISTRY.get(operator);
+ return Optional.of(new SqlBasicCall(sqlOperator, sqlNodes.toArray(new SqlNode[0]), SqlParserPos.ZERO));
}
}
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 117ca1004a7..3b2f88a0a44 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
@@ -206,6 +206,8 @@ class SQLNodeConverterEngineIT {
result.add("select_where_with_bit_expr_with_plus_interval");
result.add("select_where_with_bit_expr_with_minus_interval");
result.add("select_where_with_predicate_with_in_subquery");
+ result.add("select_where_with_boolean_primary_with_is");
+ result.add("select_where_with_boolean_primary_with_is_not");
return result;
}
// CHECKSTYLE:ON