(improvement)(semantic) If the field of the "AS" statement is equal to the alias, then do not replace the alias (#304)

This commit is contained in:
lexluo09
2023-10-31 21:12:47 +08:00
committed by GitHub
parent 438e8463f5
commit 8f37c3175f
4 changed files with 31 additions and 4 deletions

View File

@@ -15,7 +15,11 @@ public class FunctionAliasReplaceVisitor extends SelectItemVisitorAdapter {
public void visit(SelectExpressionItem selectExpressionItem) {
if (selectExpressionItem.getExpression() instanceof Function) {
Function function = (Function) selectExpressionItem.getExpression();
if (Objects.nonNull(selectExpressionItem.getAlias())) {
String columnName = SqlParserSelectHelper.getColumnName(function);
//1.exist alias. as
//2.alias's fieldName not equal. "sum(pv) as pv" cannot be replaced.
if (Objects.nonNull(selectExpressionItem.getAlias()) && !selectExpressionItem.getAlias().getName()
.equalsIgnoreCase(columnName)) {
aliasToActualExpression.put(selectExpressionItem.getAlias().getName(), function.toString());
selectExpressionItem.setAlias(null);
}

View File

@@ -203,6 +203,18 @@ class SqlParserAddHelperTest {
"SELECT department, sum(pv) FROM t_1 WHERE (sum(pv) > 1 AND department = 'HR') AND "
+ "sys_imp_date = '2023-09-11' GROUP BY department ORDER BY sum(pv) DESC LIMIT 10",
replaceSql);
sql = "select department, sum(pv) as pv from t_1 where sys_imp_date = '2023-09-11' GROUP BY "
+ "department order by pv desc limit 10";
replaceSql = SqlParserReplaceHelper.replaceAlias(sql);
replaceSql = SqlParserAddHelper.addAggregateToField(replaceSql, filedNameToAggregate);
replaceSql = SqlParserAddHelper.addGroupBy(replaceSql, groupByFields);
Assert.assertEquals(
"SELECT department, sum(pv) AS pv "
+ "FROM t_1 WHERE sys_imp_date = '2023-09-11' GROUP BY department "
+ "ORDER BY sum(pv) DESC LIMIT 10",
replaceSql);
}
@Test

View File

@@ -396,6 +396,16 @@ class SqlParserReplaceHelperTest {
+ "GROUP BY 部门 ORDER BY sum(访问次数) DESC LIMIT 10",
replaceSql);
sql = "select 部门, sum(访问次数) as 访问次数 from 超音数 where "
+ "(datediff('day', 数据日期, '2023-09-05') <= 3) and 数据日期 = '2023-10-10' "
+ "group by 部门 order by 访问次数 desc limit 10";
replaceSql = SqlParserReplaceHelper.replaceAlias(sql);
System.out.println(replaceSql);
Assert.assertEquals(
"SELECT 部门, sum(访问次数) AS 访问次数 FROM 超音数 WHERE (datediff('day', 数据日期, "
+ "'2023-09-05') <= 3) AND 数据日期 = '2023-10-10' GROUP BY 部门 ORDER BY 访问次数 DESC LIMIT 10",
replaceSql);
}
private Map<String, String> initParams() {