diff --git a/core/core-backend/src/main/java/io/dataease/commons/utils/SqlparserUtils.java b/core/core-backend/src/main/java/io/dataease/commons/utils/SqlparserUtils.java index 0dc588fe92..8cf92cb2a9 100644 --- a/core/core-backend/src/main/java/io/dataease/commons/utils/SqlparserUtils.java +++ b/core/core-backend/src/main/java/io/dataease/commons/utils/SqlparserUtils.java @@ -157,10 +157,22 @@ public class SqlparserUtils { for (Join join : joins) { FromItem rightItem = join.getRightItem(); if (rightItem instanceof ParenthesedSelect) { - PlainSelect selectBody = ((ParenthesedSelect) rightItem).getPlainSelect(); - Select subSelectTmp = (Select) CCJSqlParserUtil.parse(removeVariables(selectBody.toString(), dsType)); - PlainSelect subPlainSelect = ((PlainSelect) subSelectTmp.getSelectBody()); - ((ParenthesedSelect) rightItem).setSelect(subPlainSelect); + try { + PlainSelect selectBody = ((ParenthesedSelect) rightItem).getPlainSelect(); + Select subSelectTmp = (Select) CCJSqlParserUtil.parse(removeVariables(selectBody.toString(), dsType)); + PlainSelect subPlainSelect = ((PlainSelect) subSelectTmp.getSelectBody()); + ((ParenthesedSelect) rightItem).setSelect(subPlainSelect); + }catch ( Exception e ){ + SetOperationList select = ((ParenthesedSelect) rightItem).getSetOperationList(); + SetOperationList setOperationList = new SetOperationList(); + setOperationList.setSelects(new ArrayList<>()); + setOperationList.setOperations(select.getOperations()); + for (Select selectSelect : select.getSelects()) { + Select subSelectTmp = (Select) CCJSqlParserUtil.parse(removeVariables(selectSelect.toString(), dsType)); + setOperationList.getSelects().add(subSelectTmp); + } + ((ParenthesedSelect) rightItem).setSelect(setOperationList); + } if (dsType.equals(DatasourceConfiguration.DatasourceType.oracle.getType())) { rightItem.setAlias(new Alias(rightItem.getAlias().toString(), false)); } else { diff --git a/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java b/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java index d1b4912d6f..7019a45686 100644 --- a/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java +++ b/core/core-backend/src/main/java/io/dataease/datasource/server/DatasourceServer.java @@ -989,16 +989,16 @@ public class DatasourceServer implements DatasourceApi { datasources.forEach(datasource -> { if (!syncDsIds.contains(datasource.getId())) { syncDsIds.add(datasource.getId()); + commonThreadPool.addTask(() -> { + try { + LicenseUtil.validate(); + validate(datasource); + } catch (Exception e) { + } finally { + syncDsIds.removeIf(id -> id.equals(datasource.getId())); + } + }); } - commonThreadPool.addTask(() -> { - try { - LicenseUtil.validate(); - validate(datasource); - } catch (Exception e) { - } finally { - syncDsIds.removeIf(id -> id.equals(datasource.getId())); - } - }); }); }