From 80acd7be41e854146f37b4e83259bae088533729 Mon Sep 17 00:00:00 2001 From: "marcus@micous.com" Date: Wed, 4 Jan 2023 16:53:15 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=BF=AE=E5=A4=8Djoin=E5=AD=90=E6=9F=A5?= =?UTF-8?q?=E8=AF=A2=E4=B8=8B=E7=9A=84sql=E5=8F=98=E9=87=8F=E6=97=A0?= =?UTF-8?q?=E6=B3=95=E8=AF=86=E5=88=AB=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../service/dataset/DataSetTableService.java | 25 +++++++++++++++++++ 1 file changed, 25 insertions(+) diff --git a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java index 0b1291928b..25a6b0e0f5 100644 --- a/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java +++ b/backend/src/main/java/io/dataease/service/dataset/DataSetTableService.java @@ -1123,6 +1123,31 @@ public class DataSetTableService { } plainSelect.setFromItem(subSelect); } + List 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 joinsList = new ArrayList<>(); + join.setRightItem(subSelect); + joinsList.add(join); + plainSelect.setJoins(joinsList); + } + } + } Expression expr = plainSelect.getWhere(); if (expr == null) { return handleWith(plainSelect, statementSelect, dsType);