You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ne...@apache.org on 2022/11/04 09:05:19 UTC
[iotdb] branch master updated: [IOTDB-4769] When modifying an alias, you need to add back quotes when the alias is a special character. (#7745)
This is an automated email from the ASF dual-hosted git repository.
neuyilan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 62edbd431a [IOTDB-4769] When modifying an alias, you need to add back quotes when the alias is a special character. (#7745)
62edbd431a is described below
commit 62edbd431aee6a848f84e6df98475446daf27d8b
Author: 23931017wu <71...@users.noreply.github.com>
AuthorDate: Fri Nov 4 17:05:14 2022 +0800
[IOTDB-4769] When modifying an alias, you need to add back quotes when the alias is a special character. (#7745)
---
.../it/IoTDBSyntaxConventionStringLiteralIT.java | 4 ++--
.../iotdb/db/mpp/plan/parser/ASTVisitor.java | 22 +++++++++++++++++++---
.../apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java | 21 ++++++++++++++++++---
3 files changed, 39 insertions(+), 8 deletions(-)
diff --git a/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBSyntaxConventionStringLiteralIT.java b/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBSyntaxConventionStringLiteralIT.java
index 0104ad8d4e..754b2b56e3 100644
--- a/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBSyntaxConventionStringLiteralIT.java
+++ b/integration-test/src/test/java/org/apache/iotdb/db/it/IoTDBSyntaxConventionStringLiteralIT.java
@@ -538,11 +538,11 @@ public class IoTDBSyntaxConventionStringLiteralIT {
@Test
public void testAliasInAlterClause() {
String[] alias = {
- "b", "test", "`test.1`", "`1``1`", "'test'", "\"test\"", "\"\\\\test\"",
+ "b", "test", "`test.1`", "`1``1`", "'test'", "\"test\"", "`\\\\test`",
};
String[] res = {
- "b", "test", "test.1", "1`1", "test", "test", "\\\\test",
+ "b", "test", "`test.1`", "`1``1`", "test", "test", "`\\\\test`",
};
try (Connection connection = EnvFactory.getEnv().getConnection();
Statement statement = connection.createStatement()) {
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java
index 9befc69ec7..a10c09e2c4 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/parser/ASTVisitor.java
@@ -532,7 +532,7 @@ public class ASTVisitor extends IoTDBSqlParserBaseVisitor<Statement> {
public void parseAliasClause(
IoTDBSqlParser.AliasClauseContext ctx, AlterTimeSeriesStatement alterTimeSeriesStatement) {
if (alterTimeSeriesStatement != null && ctx.ALIAS() != null) {
- alterTimeSeriesStatement.setAlias(parseAlias(ctx.alias()));
+ alterTimeSeriesStatement.setAlias(parseAliasNode(ctx.alias()));
}
}
@@ -1909,17 +1909,33 @@ public class ASTVisitor extends IoTDBSqlParserBaseVisitor<Statement> {
return src;
}
- /** function for parsing Alias. */
+ // alias
+
+ /** function for parsing Alias of ResultColumn . */
private String parseAlias(IoTDBSqlParser.AliasContext ctx) {
String alias;
if (ctx.constant() != null) {
- alias = parseStringLiteral(ctx.constant().getText());
+ alias = parseConstant(ctx.constant());
} else {
alias = parseIdentifier(ctx.identifier().getText());
}
return alias;
}
+ /** function for parsing AliasNode. */
+ private String parseAliasNode(IoTDBSqlParser.AliasContext ctx) {
+ String alias;
+ if (ctx.constant() != null) {
+ alias = parseConstant(ctx.constant());
+ if (PathUtils.isRealNumber(alias)
+ || !TsFileConstant.IDENTIFIER_PATTERN.matcher(alias).matches()) {
+ throw new SQLParserException("Not support for this alias, Please enclose in back quotes.");
+ }
+ } else {
+ alias = parseNodeString(ctx.identifier().getText());
+ }
+ return alias;
+ }
/** Data Control Language (DCL) */
// Create User
diff --git a/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java b/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
index 4944478532..d9dff8c219 100644
--- a/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/qp/sql/IoTDBSqlVisitor.java
@@ -866,7 +866,7 @@ public class IoTDBSqlVisitor extends IoTDBSqlParserBaseVisitor<Operator> {
public void parseAliasClause(
IoTDBSqlParser.AliasClauseContext ctx, AlterTimeSeriesOperator alterTimeSeriesOperator) {
if (alterTimeSeriesOperator != null && ctx.ALIAS() != null) {
- alterTimeSeriesOperator.setAlias(parseAlias(ctx.alias()));
+ alterTimeSeriesOperator.setAlias(parseAliasNode(ctx.alias()));
}
}
@@ -2714,17 +2714,32 @@ public class IoTDBSqlVisitor extends IoTDBSqlParserBaseVisitor<Operator> {
// alias
- /** function for parsing Alias. */
+ /** function for parsing Alias of ResultColumn . */
private String parseAlias(IoTDBSqlParser.AliasContext ctx) {
String alias;
if (ctx.constant() != null) {
- alias = parseStringLiteral(ctx.constant().getText());
+ alias = parseConstant(ctx.constant());
} else {
alias = parseIdentifier(ctx.identifier().getText());
}
return alias;
}
+ /** function for parsing AliasNode. */
+ private String parseAliasNode(IoTDBSqlParser.AliasContext ctx) {
+ String alias;
+ if (ctx.constant() != null) {
+ alias = parseConstant(ctx.constant());
+ if (PathUtils.isRealNumber(alias)
+ || !TsFileConstant.IDENTIFIER_PATTERN.matcher(alias).matches()) {
+ throw new SQLParserException("Not support for this alias, Please enclose in back quotes.");
+ }
+ } else {
+ alias = parseNodeString(ctx.identifier().getText());
+ }
+ return alias;
+ }
+
/** function for parsing datetime literal. */
public long parseDateFormat(String timestampStr) throws SQLParserException {
if (timestampStr == null || "".equals(timestampStr.trim())) {