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 0104ad8d4e0f..754b2b56e398 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 void testAliasInResultColumn() { @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 d59943658074..6ee20047d46b 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 @@ -526,7 +526,7 @@ private void parseAlterClause( public void parseAliasClause( IoTDBSqlParser.AliasClauseContext ctx, AlterTimeSeriesStatement alterTimeSeriesStatement) { if (alterTimeSeriesStatement != null && ctx.ALIAS() != null) { - alterTimeSeriesStatement.setAlias(parseAlias(ctx.alias())); + alterTimeSeriesStatement.setAlias(parseAliasNode(ctx.alias())); } } @@ -1799,17 +1799,33 @@ private String parseIdentifier(String src) { 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 d6fa5100e16e..48b448f7841f 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 @@ -862,7 +862,7 @@ private void parseAlterClause( public void parseAliasClause( IoTDBSqlParser.AliasClauseContext ctx, AlterTimeSeriesOperator alterTimeSeriesOperator) { if (alterTimeSeriesOperator != null && ctx.ALIAS() != null) { - alterTimeSeriesOperator.setAlias(parseAlias(ctx.alias())); + alterTimeSeriesOperator.setAlias(parseAliasNode(ctx.alias())); } } @@ -2711,17 +2711,32 @@ private void checkIdentifier(String src) { // 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())) {