forked from github/dataease
fix: 修复join子查询下的sql变量无法识别的问题
This commit is contained in:
parent
35812f30ca
commit
80acd7be41
@ -1123,6 +1123,31 @@ public class DataSetTableService {
|
||||
}
|
||||
plainSelect.setFromItem(subSelect);
|
||||
}
|
||||
List<Join> joins = plainSelect.getJoins();
|
||||
if (joins != null) {
|
||||
for (Join join : joins) {
|
||||
FromItem rightItem = join.getRightItem();
|
||||
if (rightItem instanceof SubSelect) {
|
||||
SelectBody selectBody = ((SubSelect) rightItem).getSelectBody();
|
||||
SubSelect subSelect = new SubSelect();
|
||||
Select subSelectTmp = (Select) CCJSqlParserUtil.parse(removeVariables(selectBody.toString(), dsType));
|
||||
PlainSelect subPlainSelect = ((PlainSelect) subSelectTmp.getSelectBody());
|
||||
subSelect.setSelectBody(subPlainSelect);
|
||||
if (dsType.equals(DatasourceTypes.oracle.getType())) {
|
||||
subSelect.setAlias(new Alias(rightItem.getAlias().toString(), false));
|
||||
} else {
|
||||
if (rightItem.getAlias() == null) {
|
||||
throw new Exception("Failed to parse sql, Every derived table must have its own alias!");
|
||||
}
|
||||
subSelect.setAlias(new Alias(rightItem.getAlias().toString()));
|
||||
}
|
||||
List<Join> joinsList = new ArrayList<>();
|
||||
join.setRightItem(subSelect);
|
||||
joinsList.add(join);
|
||||
plainSelect.setJoins(joinsList);
|
||||
}
|
||||
}
|
||||
}
|
||||
Expression expr = plainSelect.getWhere();
|
||||
if (expr == null) {
|
||||
return handleWith(plainSelect, statementSelect, dsType);
|
||||
|
Loading…
Reference in New Issue
Block a user