This is an automated email from the ASF dual-hosted git repository.
tuichenchuxin 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 0cd2ab9daba Optimize PostgreSQL and openGuass function parameters
parse and convert to SqlNode (#20242)
0cd2ab9daba is described below
commit 0cd2ab9dabad55676797f1360735a5ca143966c0
Author: Zhengqiang Duan <[email protected]>
AuthorDate: Thu Aug 18 11:01:25 2022 +0800
Optimize PostgreSQL and openGuass function parameters parse and convert to
SqlNode (#20242)
* Optimize PostgreSQL and openGuass function parameters parse and convert
to SqlNode
* Update sql parse test case
* fix checkstyle
---
.../segment/expression/impl/FunctionConverter.java | 13 ++++--
.../impl/AggregationProjectionConverter.java | 40 +++++++++---------
.../impl/OpenGaussStatementSQLVisitor.java | 21 ++++++----
.../impl/PostgreSQLStatementSQLVisitor.java | 21 ++++++----
.../SQLNodeConvertEngineParameterizedTest.java | 3 ++
.../src/main/resources/case/dml/select.xml | 48 ++--------------------
.../src/main/resources/case/dml/update.xml | 17 +-------
7 files changed, 62 insertions(+), 101 deletions(-)
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/FunctionConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/FunctionConverter.java
index 386779de22b..11839297f6d 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/FunctionConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/expression/impl/FunctionConverter.java
@@ -44,10 +44,10 @@ import java.util.Optional;
/**
* Function converter.
*/
-public final class FunctionConverter implements
SQLSegmentConverter<FunctionSegment, SqlBasicCall> {
+public final class FunctionConverter implements
SQLSegmentConverter<FunctionSegment, SqlNode> {
@Override
- public Optional<SqlBasicCall> convert(final FunctionSegment segment) {
+ public Optional<SqlNode> convert(final FunctionSegment segment) {
if ("POSITION".equalsIgnoreCase(segment.getFunctionName())) {
return Optional.of(new SqlBasicCall(new SqlPositionFunction(),
getSqlNodes(segment.getParameters()), SqlParserPos.ZERO));
}
@@ -55,9 +55,16 @@ public final class FunctionConverter implements
SQLSegmentConverter<FunctionSegm
return Optional.of(new SqlBasicCall(new SqlCastFunction(),
getSqlNodes(segment.getParameters()), SqlParserPos.ZERO));
}
if ("CONCAT".equalsIgnoreCase(segment.getFunctionName())) {
- return Optional.of(new SqlBasicCall(new SqlUnresolvedFunction(new
SqlIdentifier("CONCAT", SqlParserPos.ZERO),
+ return Optional.of(new SqlBasicCall(new SqlUnresolvedFunction(new
SqlIdentifier(segment.getFunctionName(), SqlParserPos.ZERO),
null, null, null, null,
SqlFunctionCategory.USER_DEFINED_FUNCTION),
getSqlNodes(segment.getParameters()), SqlParserPos.ZERO));
}
+ if ("DATABASE".equalsIgnoreCase(segment.getFunctionName())) {
+ return Optional.of(new SqlBasicCall(new SqlUnresolvedFunction(new
SqlIdentifier(segment.getFunctionName(), SqlParserPos.ZERO),
+ null, null, null, null,
SqlFunctionCategory.USER_DEFINED_FUNCTION),
getSqlNodes(segment.getParameters()), SqlParserPos.ZERO));
+ }
+ if ("CURRENT_USER".equalsIgnoreCase(segment.getFunctionName())) {
+ return Optional.of(new SqlIdentifier(segment.getFunctionName(),
SqlParserPos.ZERO));
+ }
return Optional.empty();
}
diff --git
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/impl/AggregationProjectionConverter.java
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/impl/AggregationProjectionConverter.java
index ee5628f83e8..cdb4059979b 100644
---
a/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/impl/AggregationProjectionConverter.java
+++
b/shardingsphere-infra/shardingsphere-infra-federation/shardingsphere-infra-federation-optimizer/src/main/java/org/apache/shardingsphere/infra/federation/optimizer/converter/segment/projection/impl/AggregationProjectionConverter.java
@@ -18,7 +18,6 @@
package
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.projection.impl;
import com.google.common.base.Preconditions;
-import com.google.common.base.Splitter;
import org.apache.calcite.sql.SqlAggFunction;
import org.apache.calcite.sql.SqlBasicCall;
import org.apache.calcite.sql.SqlIdentifier;
@@ -28,12 +27,15 @@ import org.apache.calcite.sql.SqlSelectKeyword;
import org.apache.calcite.sql.fun.SqlStdOperatorTable;
import org.apache.calcite.sql.parser.SqlParserPos;
import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.SQLSegmentConverter;
+import
org.apache.shardingsphere.infra.federation.optimizer.converter.segment.expression.ExpressionConverter;
+import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.AggregationDistinctProjectionSegment;
import
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.item.AggregationProjectionSegment;
-import org.apache.shardingsphere.sql.parser.sql.common.util.SQLUtil;
import java.util.Arrays;
+import java.util.Collection;
import java.util.Collections;
+import java.util.LinkedList;
import java.util.List;
import java.util.Map;
import java.util.Optional;
@@ -64,20 +66,15 @@ public final class AggregationProjectionConverter
implements SQLSegmentConverter
if (null == segment) {
return Optional.empty();
}
- SqlLiteral functionQuantifier = null;
- List<String> parameters = Splitter.on(",").trimResults().splitToList(
-
SQLUtil.getExactlyValue(SQLUtil.getExpressionWithoutOutsideParentheses(segment.getInnerExpression())));
- if (segment instanceof AggregationDistinctProjectionSegment) {
- parameters =
Collections.singletonList(((AggregationDistinctProjectionSegment)
segment).getDistinctExpression());
- functionQuantifier =
SqlLiteral.createSymbol(SqlSelectKeyword.DISTINCT, SqlParserPos.ZERO);
- }
+ SqlLiteral functionQuantifier = segment instanceof
AggregationDistinctProjectionSegment ?
SqlLiteral.createSymbol(SqlSelectKeyword.DISTINCT, SqlParserPos.ZERO) : null;
+ SqlAggFunction operator = convertOperator(segment.getType().name());
+ List<SqlNode> parameters = convertParameters(segment.getParameters(),
segment.getInnerExpression());
+ SqlBasicCall sqlBasicCall = new SqlBasicCall(operator, parameters,
SqlParserPos.ZERO, functionQuantifier);
if (segment.getAlias().isPresent()) {
- return Optional.of(new SqlBasicCall(SqlStdOperatorTable.AS,
Arrays.asList(new SqlBasicCall(convertOperator(segment.getType().name()),
-
Collections.singletonList(createParametersSqlNode(parameters)),
SqlParserPos.ZERO, functionQuantifier).withExpanded(false),
+ return Optional.of(new SqlBasicCall(SqlStdOperatorTable.AS,
Arrays.asList(sqlBasicCall,
SqlIdentifier.star(Collections.singletonList(segment.getAlias().get()),
SqlParserPos.ZERO, Collections.singletonList(SqlParserPos.ZERO))),
SqlParserPos.ZERO));
}
- return Optional.of((SqlBasicCall) new
SqlBasicCall(convertOperator(segment.getType().name()),
-
Collections.singletonList(createParametersSqlNode(parameters)),
SqlParserPos.ZERO, functionQuantifier).withExpanded(false));
+ return Optional.of(sqlBasicCall);
}
private SqlAggFunction convertOperator(final String operator) {
@@ -85,14 +82,15 @@ public final class AggregationProjectionConverter
implements SQLSegmentConverter
return REGISTRY.get(operator);
}
- private SqlNode createParametersSqlNode(final List<String> parameters) {
- if (1 == parameters.size()) {
- try {
- Long.parseLong(parameters.get(0));
- return SqlLiteral.createExactNumeric(parameters.get(0),
SqlParserPos.ZERO);
- } catch (NumberFormatException ignored) {
- }
+ private List<SqlNode> convertParameters(final
Collection<ExpressionSegment> parameters, final String innerExpression) {
+ if (innerExpression.contains("*")) {
+ return
Collections.singletonList(SqlIdentifier.star(SqlParserPos.ZERO));
+ }
+ List<SqlNode> result = new LinkedList<>();
+ ExpressionConverter expressionConverter = new ExpressionConverter();
+ for (ExpressionSegment each : parameters) {
+ expressionConverter.convert(each).ifPresent(result::add);
}
- return SqlIdentifier.star(parameters, SqlParserPos.ZERO,
Collections.singletonList(SqlParserPos.ZERO));
+ return result;
}
}
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussStatementSQLVisitor.java
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussStatementSQLVisitor.java
index 3015528f905..5a3e2665503 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussStatementSQLVisitor.java
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-opengauss/src/main/java/org/apache/shardingsphere/sql/parser/opengauss/visitor/statement/impl/OpenGaussStatementSQLVisitor.java
@@ -396,11 +396,11 @@ public abstract class OpenGaussStatementSQLVisitor
extends OpenGaussStatementBas
if (null != ctx.functionExprCommonSubexpr()) {
return visit(ctx.functionExprCommonSubexpr());
}
- Collection<ExpressionSegment> expressionSegments =
getExpressionSegments(getTargetRuleContextFromParseTree(ctx,
CExprContext.class));
+ Collection<ExpressionSegment> expressionSegments =
getExpressionSegments(getTargetRuleContextFromParseTree(ctx,
AExprContext.class));
// TODO replace aggregation segment
String aggregationType = ctx.funcApplication().funcName().getText();
if (AggregationType.isAggregationType(aggregationType)) {
- return createAggregationSegment(ctx.funcApplication(),
aggregationType);
+ return createAggregationSegment(ctx.funcApplication(),
aggregationType, expressionSegments);
}
FunctionSegment result = new
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(),
ctx.funcApplication().funcName().getText(), getOriginalText(ctx));
result.getParameters().addAll(expressionSegments);
@@ -410,7 +410,7 @@ public abstract class OpenGaussStatementSQLVisitor extends
OpenGaussStatementBas
@Override
public ASTNode visitFunctionExprCommonSubexpr(final
FunctionExprCommonSubexprContext ctx) {
FunctionSegment result = new
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(),
ctx.getChild(0).getText(), getOriginalText(ctx));
- Collection<ExpressionSegment> expressionSegments =
getExpressionSegments(getTargetRuleContextFromParseTree(ctx,
CExprContext.class));
+ Collection<ExpressionSegment> expressionSegments =
getExpressionSegments(getTargetRuleContextFromParseTree(ctx,
AExprContext.class));
result.getParameters().addAll(expressionSegments);
return result;
}
@@ -428,9 +428,9 @@ public abstract class OpenGaussStatementSQLVisitor extends
OpenGaussStatementBas
return result;
}
- private Collection<ExpressionSegment> getExpressionSegments(final
Collection<CExprContext> cexprContexts) {
+ private Collection<ExpressionSegment> getExpressionSegments(final
Collection<AExprContext> aExprContexts) {
Collection<ExpressionSegment> result = new LinkedList<>();
- for (CExprContext each : cexprContexts) {
+ for (AExprContext each : aExprContexts) {
result.add((ExpressionSegment) visit(each));
}
return result;
@@ -528,13 +528,18 @@ public abstract class OpenGaussStatementSQLVisitor
extends OpenGaussStatementBas
return new LiteralExpressionSegment(ctx.start.getStartIndex(),
ctx.stop.getStopIndex(), ctx.getText());
}
- private ProjectionSegment createAggregationSegment(final
FuncApplicationContext ctx, final String aggregationType) {
+ private ProjectionSegment createAggregationSegment(final
FuncApplicationContext ctx, final String aggregationType, final
Collection<ExpressionSegment> expressionSegments) {
AggregationType type =
AggregationType.valueOf(aggregationType.toUpperCase());
String innerExpression = ctx.start.getInputStream().getText(new
Interval(ctx.LP_().getSymbol().getStartIndex(), ctx.stop.getStopIndex()));
if (null == ctx.DISTINCT()) {
- return new
AggregationProjectionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), type, innerExpression);
+ AggregationProjectionSegment result = new
AggregationProjectionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), type, innerExpression);
+ result.getParameters().addAll(expressionSegments);
+ return result;
}
- return new
AggregationDistinctProjectionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), type, innerExpression,
getDistinctExpression(ctx));
+ AggregationDistinctProjectionSegment result =
+ new
AggregationDistinctProjectionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), type, innerExpression,
getDistinctExpression(ctx));
+ result.getParameters().addAll(expressionSegments);
+ return result;
}
private String getDistinctExpression(final FuncApplicationContext ctx) {
diff --git
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLStatementSQLVisitor.java
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLStatementSQLVisitor.java
index a60694050ec..623f1b9cc6e 100644
---
a/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLStatementSQLVisitor.java
+++
b/shardingsphere-sql-parser/shardingsphere-sql-parser-dialect/shardingsphere-sql-parser-postgresql/src/main/java/org/apache/shardingsphere/sql/parser/postgresql/visitor/statement/impl/PostgreSQLStatementSQLVisitor.java
@@ -394,11 +394,11 @@ public abstract class PostgreSQLStatementSQLVisitor
extends PostgreSQLStatementP
if (null != ctx.functionExprCommonSubexpr()) {
return visit(ctx.functionExprCommonSubexpr());
}
- Collection<ExpressionSegment> expressionSegments =
getExpressionSegments(getTargetRuleContextFromParseTree(ctx,
CExprContext.class));
+ Collection<ExpressionSegment> expressionSegments =
getExpressionSegments(getTargetRuleContextFromParseTree(ctx,
AExprContext.class));
// TODO replace aggregation segment
String aggregationType = ctx.funcApplication().funcName().getText();
if (AggregationType.isAggregationType(aggregationType)) {
- return createAggregationSegment(ctx.funcApplication(),
aggregationType);
+ return createAggregationSegment(ctx.funcApplication(),
aggregationType, expressionSegments);
}
FunctionSegment result = new
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(),
ctx.funcApplication().funcName().getText(), getOriginalText(ctx));
result.getParameters().addAll(expressionSegments);
@@ -408,7 +408,7 @@ public abstract class PostgreSQLStatementSQLVisitor extends
PostgreSQLStatementP
@Override
public ASTNode visitFunctionExprCommonSubexpr(final
FunctionExprCommonSubexprContext ctx) {
FunctionSegment result = new
FunctionSegment(ctx.getStart().getStartIndex(), ctx.getStop().getStopIndex(),
ctx.getChild(0).getText(), getOriginalText(ctx));
- Collection<ExpressionSegment> expressionSegments =
getExpressionSegments(getTargetRuleContextFromParseTree(ctx,
CExprContext.class));
+ Collection<ExpressionSegment> expressionSegments =
getExpressionSegments(getTargetRuleContextFromParseTree(ctx,
AExprContext.class));
result.getParameters().addAll(expressionSegments);
return result;
}
@@ -426,9 +426,9 @@ public abstract class PostgreSQLStatementSQLVisitor extends
PostgreSQLStatementP
return result;
}
- private Collection<ExpressionSegment> getExpressionSegments(final
Collection<CExprContext> cexprContexts) {
+ private Collection<ExpressionSegment> getExpressionSegments(final
Collection<AExprContext> aExprContexts) {
Collection<ExpressionSegment> result = new LinkedList<>();
- for (CExprContext each : cexprContexts) {
+ for (AExprContext each : aExprContexts) {
result.add((ExpressionSegment) visit(each));
}
return result;
@@ -526,13 +526,18 @@ public abstract class PostgreSQLStatementSQLVisitor
extends PostgreSQLStatementP
return new LiteralExpressionSegment(ctx.start.getStartIndex(),
ctx.stop.getStopIndex(), ctx.getText());
}
- private ProjectionSegment createAggregationSegment(final
FuncApplicationContext ctx, final String aggregationType) {
+ private ProjectionSegment createAggregationSegment(final
FuncApplicationContext ctx, final String aggregationType, final
Collection<ExpressionSegment> expressionSegments) {
AggregationType type =
AggregationType.valueOf(aggregationType.toUpperCase());
String innerExpression = ctx.start.getInputStream().getText(new
Interval(ctx.LP_().getSymbol().getStartIndex(), ctx.stop.getStopIndex()));
if (null == ctx.DISTINCT()) {
- return new
AggregationProjectionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), type, innerExpression);
+ AggregationProjectionSegment result = new
AggregationProjectionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), type, innerExpression);
+ result.getParameters().addAll(expressionSegments);
+ return result;
}
- return new
AggregationDistinctProjectionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), type, innerExpression,
getDistinctExpression(ctx));
+ AggregationDistinctProjectionSegment result =
+ new
AggregationDistinctProjectionSegment(ctx.getStart().getStartIndex(),
ctx.getStop().getStopIndex(), type, innerExpression,
getDistinctExpression(ctx));
+ result.getParameters().addAll(expressionSegments);
+ return result;
}
private String getDistinctExpression(final FuncApplicationContext ctx) {
diff --git
a/shardingsphere-test/shardingsphere-optimize-test/src/test/java/org/apache/shardingsphere/infra/federation/converter/parameterized/engine/SQLNodeConvertEngineParameterizedTest.java
b/shardingsphere-test/shardingsphere-optimize-test/src/test/java/org/apache/shardingsphere/infra/federation/converter/parameterized/engine/SQLNodeConvertEngineParameterizedTest.java
index 439973390a1..fd26d31174a 100644
---
a/shardingsphere-test/shardingsphere-optimize-test/src/test/java/org/apache/shardingsphere/infra/federation/converter/parameterized/engine/SQLNodeConvertEngineParameterizedTest.java
+++
b/shardingsphere-test/shardingsphere-optimize-test/src/test/java/org/apache/shardingsphere/infra/federation/converter/parameterized/engine/SQLNodeConvertEngineParameterizedTest.java
@@ -101,6 +101,9 @@ public final class SQLNodeConvertEngineParameterizedTest {
SUPPORTED_SQL_CASE_IDS.add("select_count_with_escape_character");
SUPPORTED_SQL_CASE_IDS.add("select_group_by_with_order_by_and_limit");
SUPPORTED_SQL_CASE_IDS.add("select_count_with_sub");
+ SUPPORTED_SQL_CASE_IDS.add("select_current_user");
+ SUPPORTED_SQL_CASE_IDS.add("select_database");
+ SUPPORTED_SQL_CASE_IDS.add("select_distinct_with_count_calculation");
}
private final String sqlCaseId;
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select.xml
index 6cd3bdec70b..cec26715a7b 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/select.xml
@@ -1975,21 +1975,7 @@
<right>
<function
function-name="ST_GeographyFromText"
text="ST_GeographyFromText('SRID=4326;POINT('||?||' '||?||')')"
literal-text="ST_GeographyFromText('SRID=4326;POINT('||100||' '||200||')')"
start-index="60" stop-index="115" literal-start-index="78"
literal-stop-index="137">
<parameter>
- <literal-expression
value="SRID=4326;POINT(" literal-start-index="99" start-index="81"
literal-stop-index="116" stop-index="98"/>
- </parameter>
- <parameter>
- <literal-expression
value="100" literal-start-index="119" literal-stop-index="121"/>
-
<parameter-marker-expression parameter-index="1" start-index="101"
stop-index="101"/>
- </parameter>
- <parameter>
- <literal-expression
value=" " literal-start-index="124" literal-stop-index="126" start-index="104"
stop-index="106"/>
- </parameter>
- <parameter>
- <literal-expression
value="200" literal-start-index="129" literal-stop-index="131"/>
-
<parameter-marker-expression parameter-index="2" start-index="109"
stop-index="109"/>
- </parameter>
- <parameter>
- <literal-expression
value=")" literal-start-index="134" literal-stop-index="136" start-index="112"
stop-index="114"/>
+ <common-expression
text="'SRID=4326;POINT('||?||' '||?||')'"
literal-text="'SRID=4326;POINT('||100||' '||200||')'" literal-start-index="99"
start-index="81" literal-stop-index="136" stop-index="114"/>
</parameter>
</function>
</right>
@@ -2074,21 +2060,7 @@
<right>
<function
function-name="ST_GeographyFromText"
text="ST_GeographyFromText('SRID=4326;POINT('||?||' '||?||')')"
literal-text="ST_GeographyFromText('SRID=4326;POINT('||100||' '||200||')')"
start-index="73" stop-index="128" literal-start-index="109"
literal-stop-index="168">
<parameter>
- <literal-expression
value="SRID=4326;POINT(" literal-start-index="130" start-index="94"
literal-stop-index="147" stop-index="111"/>
- </parameter>
- <parameter>
- <literal-expression
value="100" literal-start-index="150" literal-stop-index="152"/>
-
<parameter-marker-expression parameter-index="2" start-index="114"
stop-index="114"/>
- </parameter>
- <parameter>
- <literal-expression
value=" " literal-start-index="155" literal-stop-index="157" start-index="117"
stop-index="119"/>
- </parameter>
- <parameter>
- <literal-expression
value="200" literal-start-index="160" literal-stop-index="162"/>
-
<parameter-marker-expression parameter-index="3" start-index="122"
stop-index="122"/>
- </parameter>
- <parameter>
- <literal-expression
value=")" literal-start-index="165" literal-stop-index="167" start-index="125"
stop-index="127"/>
+ <common-expression
text="'SRID=4326;POINT('||?||' '||?||')'"
literal-text="'SRID=4326;POINT('||100||' '||200||')'" literal-start-index="130"
start-index="94" literal-stop-index="167" stop-index="127"/>
</parameter>
</function>
</right>
@@ -2175,21 +2147,7 @@
<right>
<function
function-name="ST_GeographyFromText"
literal-text="ST_GeographyFromText('SRID=4326;POINT('||100||' '||200||')')"
text="ST_GeographyFromText('SRID=4326;POINT('||?||' '||?||')')"
start-index="79" stop-index="134" literal-start-index="115"
literal-stop-index="174">
<parameter>
- <literal-expression
value="SRID=4326;POINT(" literal-start-index="136" start-index="100"
literal-stop-index="153" stop-index="117"/>
- </parameter>
- <parameter>
- <literal-expression
value="100" literal-start-index="156" literal-stop-index="158"/>
- <parameter-marker-expression
parameter-index="2" start-index="120" stop-index="120"/>
- </parameter>
- <parameter>
- <literal-expression value=" "
literal-start-index="161" literal-stop-index="163" start-index="123"
stop-index="125"/>
- </parameter>
- <parameter>
- <literal-expression
value="200" literal-start-index="166" literal-stop-index="168"/>
- <parameter-marker-expression
parameter-index="3" start-index="128" stop-index="128"/>
- </parameter>
- <parameter>
- <literal-expression value=")"
literal-start-index="171" literal-stop-index="173" start-index="131"
stop-index="133"/>
+ <common-expression
text="'SRID=4326;POINT('||?||' '||?||')'"
literal-text="'SRID=4326;POINT('||100||' '||200||')'" literal-start-index="136"
start-index="100" literal-stop-index="173" stop-index="133"/>
</parameter>
</function>
</right>
diff --git
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/update.xml
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/update.xml
index bb865bee585..a3ce4f0d7f8 100644
---
a/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/update.xml
+++
b/shardingsphere-test/shardingsphere-parser-test/src/main/resources/case/dml/update.xml
@@ -188,24 +188,9 @@
<assignment-value>
<function function-name="ST_GeographyFromText"
text="ST_GeographyFromText('SRID=4326;POINT('||?||' '||?||')')"
literal-text="ST_GeographyFromText('SRID=4326;POINT('||100||' '||200||')')"
start-index="61" stop-index="116" literal-start-index="72"
literal-stop-index="131">
<parameter>
- <literal-expression value="SRID=4326;POINT("
literal-start-index="93" start-index="82" literal-stop-index="110"
stop-index="99"/>
- </parameter>
- <parameter>
- <literal-expression value="100"
literal-start-index="113" literal-stop-index="115"/>
- <parameter-marker-expression parameter-index="1"
start-index="102" stop-index="102"/>
- </parameter>
- <parameter>
- <literal-expression value=" "
literal-start-index="118" literal-stop-index="120" start-index="105"
stop-index="107"/>
- </parameter>
- <parameter>
- <literal-expression value="200"
literal-start-index="123" literal-stop-index="125"/>
- <parameter-marker-expression parameter-index="2"
start-index="110" stop-index="110"/>
- </parameter>
- <parameter>
- <literal-expression value=")"
literal-start-index="128" literal-stop-index="130" start-index="113"
stop-index="115"/>
+ <common-expression text="'SRID=4326;POINT('||?||'
'||?||')'" literal-text="'SRID=4326;POINT('||100||' '||200||')'"
literal-start-index="93" start-index="82" literal-stop-index="130"
stop-index="115"/>
</parameter>
</function>
- <common-expression
text="ST_GeographyFromText('SRID=4326;POINT('||?||' '||?||')')"
literal-text="ST_GeographyFromText('SRID=4326;POINT('||100||' '||200||')')"
start-index="61" stop-index="116" literal-start-index="72"
literal-stop-index="131"/>
</assignment-value>
</assignment>
<assignment start-index="119" stop-index="133"
literal-start-index="134" literal-stop-index="166">