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/04/19 08:43:03 UTC
[shardingsphere] branch master updated: Support for Extract, BitExpr Mod (#25228)
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 3de3f161bc0 Support for Extract, BitExpr Mod (#25228)
3de3f161bc0 is described below
commit 3de3f161bc01d7f2e9d4a09f07730812d1f27292
Author: kanha gupta <92...@users.noreply.github.com>
AuthorDate: Wed Apr 19 14:12:51 2023 +0530
Support for Extract, BitExpr Mod (#25228)
* support for Char function
* support for Weight string SQL
* Support for Char & weight string Function
* null
* Revert "Support for Substring function"
This reverts commit 9af038be0f4be54affd801c9ac2f6750db883377.
* Support for Extract, bitExpr mod
---
.../expression/impl/BinaryOperationExpressionConverter.java | 1 +
.../segment/expression/impl/LiteralExpressionConverter.java | 5 +++++
.../mysql/visitor/statement/impl/MySQLStatementSQLVisitor.java | 5 ++++-
.../test/it/optimize/SQLNodeConverterEngineIT.java | 2 ++
.../src/main/resources/case/dml/select-special-function.xml | 9 ++++++++-
5 files changed, 20 insertions(+), 2 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 cc3a511df25..82cb54e8b21 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
@@ -62,6 +62,7 @@ public final class BinaryOperationExpressionConverter implements SQLSegmentConve
register(SqlStdOperatorTable.DIVIDE);
register(SqlStdOperatorTable.LIKE);
register(SqlStdOperatorTable.NOT_LIKE);
+ register(SqlStdOperatorTable.PERCENT_REMAINDER);
}
private static void register(final SqlOperator sqlOperator) {
diff --git a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/segment/expression/impl/LiteralExpressionConverter.java b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/segment/expression/impl/LiteralExpressionConverter.java
index 83feed36a80..bc3692ce121 100644
--- a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/segment/expression/impl/LiteralExpressionConverter.java
+++ b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/segment/expression/impl/LiteralExpressionConverter.java
@@ -17,6 +17,8 @@
package org.apache.shardingsphere.sqlfederation.optimizer.converter.segment.expression.impl;
+import org.apache.calcite.avatica.util.TimeUnit;
+import org.apache.calcite.sql.SqlIntervalQualifier;
import org.apache.calcite.sql.SqlLiteral;
import org.apache.calcite.sql.SqlNode;
import org.apache.calcite.sql.fun.SqlTrimFunction.Flag;
@@ -46,6 +48,9 @@ public final class LiteralExpressionConverter implements SQLSegmentConverter<Lit
if (null == segment.getLiterals()) {
return Optional.of(SqlLiteral.createNull(SqlParserPos.ZERO));
}
+ if (segment.getLiterals().equals("YEAR")) {
+ return Optional.of(new SqlIntervalQualifier(TimeUnit.YEAR, null, SqlParserPos.ZERO));
+ }
if (segment.getLiterals() instanceof Integer) {
return Optional.of(SqlLiteral.createExactNumeric(String.valueOf(segment.getLiterals()), SqlParserPos.ZERO));
}
diff --git a/sql-parser/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLStatementSQLVisitor.java b/sql-parser/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLStatementSQLVisitor.java
index 551813c0a63..30bc2ecdacb 100644
--- a/sql-parser/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLStatementSQLVisitor.java
+++ b/sql-parser/dialect/mysql/src/main/java/org/apache/shardingsphere/sql/parser/mysql/visitor/statement/impl/MySQLStatementSQLVisitor.java
@@ -952,7 +952,10 @@ public abstract class MySQLStatementSQLVisitor extends MySQLStatementBaseVisitor
@Override
public final ASTNode visitExtractFunction(final ExtractFunctionContext ctx) {
calculateParameterCount(Collections.singleton(ctx.expr()));
- return new FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), ctx.EXTRACT().getText(), getOriginalText(ctx));
+ FunctionSegment result = new FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(), ctx.EXTRACT().getText(), getOriginalText(ctx));
+ result.getParameters().add(new LiteralExpressionSegment(ctx.identifier().getStart().getStartIndex(), ctx.identifier().getStop().getStopIndex(), ctx.identifier().getText()));
+ result.getParameters().add((LiteralExpressionSegment) visit(ctx.expr()));
+ return result;
}
@Override
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 fc29e59cbcf..8e04601fe7c 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
@@ -198,6 +198,8 @@ class SQLNodeConverterEngineIT {
result.add("select_with_trim_expr_and_both");
result.add("select_with_trim_expr_from_expr");
result.add("select_with_trim_expr_from_expr_and_both");
+ result.add("select_extract");
+ result.add("select_where_with_bit_expr_with_mod_sign");
return result;
}
// CHECKSTYLE:ON
diff --git a/test/it/parser/src/main/resources/case/dml/select-special-function.xml b/test/it/parser/src/main/resources/case/dml/select-special-function.xml
index 53ab83f1d11..daa3b4a3dce 100644
--- a/test/it/parser/src/main/resources/case/dml/select-special-function.xml
+++ b/test/it/parser/src/main/resources/case/dml/select-special-function.xml
@@ -119,7 +119,14 @@
<projections start-index="7" stop-index="37">
<expression-projection text="EXTRACT(YEAR FROM '2019-07-02')" start-index="7" stop-index="37">
<expr>
- <function function-name="EXTRACT" start-index="7" stop-index="37" text="EXTRACT(YEAR FROM '2019-07-02')" />
+ <function function-name="EXTRACT" start-index="7" stop-index="37" text="EXTRACT(YEAR FROM '2019-07-02')" >
+ <parameter>
+ <literal-expression value="YEAR" start-index="15" stop-index="18" />
+ </parameter>
+ <parameter>
+ <literal-expression value="2019-07-02" start-index="25" stop-index="36" />
+ </parameter>
+ </function>
</expr>
</expression-projection>
</projections>