fix: 修复join子查询下的sql变量无法识别的问题

This commit is contained in:
marcus@micous.com 2023-01-04 16:53:15 +08:00
parent 35812f30ca
commit 80acd7be41

View File

@ -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);