mirror of
https://github.com/tencentmusic/supersonic.git
synced 2025-12-14 05:43:51 +00:00
[fix][headless] Solve the problem of SQL execution error when alias is Chinese (#2039)
This commit is contained in:
@@ -0,0 +1,33 @@
|
||||
package com.tencent.supersonic.common.jsqlparser;
|
||||
|
||||
import net.sf.jsqlparser.expression.Alias;
|
||||
import net.sf.jsqlparser.statement.select.SelectItem;
|
||||
import net.sf.jsqlparser.statement.select.SelectItemVisitorAdapter;
|
||||
import org.apache.commons.lang3.StringUtils;
|
||||
|
||||
public class FieldAliasReplaceWithBackticksVisitor extends SelectItemVisitorAdapter {
|
||||
|
||||
@Override
|
||||
public void visit(SelectItem selectExpressionItem) {
|
||||
Alias alias = selectExpressionItem.getAlias();
|
||||
if (alias == null) {
|
||||
return;
|
||||
}
|
||||
String aliasName = alias.getName();
|
||||
String replaceValue = addBackticks(aliasName);
|
||||
if (StringUtils.isBlank(replaceValue)) {
|
||||
return;
|
||||
}
|
||||
alias.setName(replaceValue);
|
||||
}
|
||||
|
||||
private String addBackticks(String aliasName) {
|
||||
if (StringUtils.isBlank(aliasName)) {
|
||||
return "";
|
||||
}
|
||||
if (aliasName.startsWith("`") && aliasName.endsWith("`")) {
|
||||
return "";
|
||||
}
|
||||
return "`" + aliasName + "`";
|
||||
}
|
||||
}
|
||||
@@ -486,6 +486,19 @@ public class SqlReplaceHelper {
|
||||
return selectStatement.toString();
|
||||
}
|
||||
|
||||
public static String replaceAliasWithBackticks(String sql) {
|
||||
Select selectStatement = SqlSelectHelper.getSelect(sql);
|
||||
if (!(selectStatement instanceof PlainSelect)) {
|
||||
return sql;
|
||||
}
|
||||
PlainSelect plainSelect = (PlainSelect) selectStatement;
|
||||
FieldAliasReplaceWithBackticksVisitor visitor = new FieldAliasReplaceWithBackticksVisitor();
|
||||
for (SelectItem selectItem : plainSelect.getSelectItems()) {
|
||||
selectItem.accept(visitor);
|
||||
}
|
||||
return selectStatement.toString();
|
||||
}
|
||||
|
||||
public static String replaceAlias(String sql) {
|
||||
Select selectStatement = SqlSelectHelper.getSelect(sql);
|
||||
if (!(selectStatement instanceof PlainSelect)) {
|
||||
|
||||
Reference in New Issue
Block a user