refactor(common): 优化SQL解析器中的类型转换和嵌套查询处理
Some checks failed
supersonic CentOS CI / build (21) (push) Has been cancelled
supersonic mac CI / build (21) (push) Has been cancelled
supersonic ubuntu CI / build (21) (push) Has been cancelled
supersonic windows CI / build (21) (push) Has been cancelled

- 使用模式匹配简化ParenthesedSelect类型的转换
- 改进SetOperationList中子查询的处理逻辑
- 增加对嵌套ParenthesedSelect的递归处理支持
- 优化字段替换功能以支持更复杂的查询结构
- 提高代码可读性和类型安全性
This commit is contained in:
jerryjzhang
2026-04-03 11:59:17 +08:00
parent 8a4bccab10
commit 4379af4bd4

View File

@@ -118,22 +118,26 @@ public class SqlReplaceHelper {
} }
public static void getFromSelect(FromItem fromItem, List<PlainSelect> plainSelectList) { public static void getFromSelect(FromItem fromItem, List<PlainSelect> plainSelectList) {
if (!(fromItem instanceof ParenthesedSelect)) { if (!(fromItem instanceof ParenthesedSelect parenthesedSelect)) {
return; return;
} }
ParenthesedSelect parenthesedSelect = (ParenthesedSelect) fromItem;
Select select = parenthesedSelect.getSelect(); Select select = parenthesedSelect.getSelect();
if (select instanceof PlainSelect) { if (select instanceof PlainSelect plainSelect) {
PlainSelect plainSelect = (PlainSelect) select;
plainSelectList.add(plainSelect); plainSelectList.add(plainSelect);
getFromSelect(plainSelect.getFromItem(), plainSelectList); getFromSelect(plainSelect.getFromItem(), plainSelectList);
} else if (select instanceof SetOperationList) { } else if (select instanceof SetOperationList setOperationList) {
SetOperationList setOperationList = (SetOperationList) select;
if (!CollectionUtils.isEmpty(setOperationList.getSelects())) { if (!CollectionUtils.isEmpty(setOperationList.getSelects())) {
setOperationList.getSelects().forEach(subSelectBody -> { setOperationList.getSelects().forEach(subSelectBody -> {
PlainSelect subPlainSelect = (PlainSelect) subSelectBody; if (subSelectBody instanceof PlainSelect subPlainSelect) {
plainSelectList.add(subPlainSelect); plainSelectList.add(subPlainSelect);
getFromSelect(subPlainSelect.getFromItem(), plainSelectList); getFromSelect(subPlainSelect.getFromItem(), plainSelectList);
} else if (subSelectBody instanceof ParenthesedSelect subParenthesedSelect) {
Select innerSelect = subParenthesedSelect.getSelect();
if (innerSelect instanceof PlainSelect innerPlainSelect) {
plainSelectList.add(innerPlainSelect);
getFromSelect(innerPlainSelect.getFromItem(), plainSelectList);
}
}
}); });
} }
} }
@@ -188,8 +192,13 @@ public class SqlReplaceHelper {
SetOperationList setOperationList = (SetOperationList) select; SetOperationList setOperationList = (SetOperationList) select;
if (!CollectionUtils.isEmpty(setOperationList.getSelects())) { if (!CollectionUtils.isEmpty(setOperationList.getSelects())) {
setOperationList.getSelects().forEach(subSelectBody -> { setOperationList.getSelects().forEach(subSelectBody -> {
PlainSelect subPlainSelect = (PlainSelect) subSelectBody; if (subSelectBody instanceof PlainSelect) {
replaceFieldsInPlainOneSelect(fieldNameMap, exactReplace, subPlainSelect); PlainSelect subPlainSelect = (PlainSelect) subSelectBody;
replaceFieldsInPlainOneSelect(fieldNameMap, exactReplace, subPlainSelect);
} else if (subSelectBody instanceof ParenthesedSelect) {
replaceFieldsInPlainOneSelect(fieldNameMap, exactReplace,
((ParenthesedSelect) subSelectBody).getPlainSelect());
}
}); });
} }
} }