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 <[email protected]>
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

Reply via email to