From 09ea5db0ba8320e8984408c0af2507750b80f70a Mon Sep 17 00:00:00 2001 From: pisces <30692337+p1scess@users.noreply.github.com> Date: Mon, 9 Dec 2024 18:46:52 +0800 Subject: [PATCH 1/2] =?UTF-8?q?fix(agent):=20=E5=8A=A9=E7=90=86=E7=AE=A1?= =?UTF-8?q?=E7=90=86=E5=88=97=E8=A1=A8=E5=88=87=E6=8D=A2=E5=88=86=E9=A1=B5?= =?UTF-8?q?=E5=90=8E=E5=90=AF=E7=94=A8=E7=A6=81=E7=94=A8=E7=8A=B6=E6=80=81?= =?UTF-8?q?=E5=B1=95=E7=A4=BA=E9=94=99=E8=AF=AF=20(#1946)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- webapp/packages/supersonic-fe/src/pages/Agent/AgentsSection.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/webapp/packages/supersonic-fe/src/pages/Agent/AgentsSection.tsx b/webapp/packages/supersonic-fe/src/pages/Agent/AgentsSection.tsx index 23e8047c3..13e14e7b6 100644 --- a/webapp/packages/supersonic-fe/src/pages/Agent/AgentsSection.tsx +++ b/webapp/packages/supersonic-fe/src/pages/Agent/AgentsSection.tsx @@ -64,6 +64,7 @@ const AgentsSection: React.FC = ({ }} > { From 3db9a0dcec2a98f9fcf65c7f14014b5765197781 Mon Sep 17 00:00:00 2001 From: siriusbo <131440949+siriusbo@users.noreply.github.com> Date: Mon, 9 Dec 2024 22:13:27 +0800 Subject: [PATCH 2/2] =?UTF-8?q?[improvement][headless-core]=20=20=E6=8F=90?= =?UTF-8?q?=E5=8D=87join=E5=87=86=E7=A1=AE=E6=80=A7=EF=BC=8C=E4=BF=AE?= =?UTF-8?q?=E5=A4=8Djoin=E6=9D=A1=E4=BB=B6=E9=94=99=E8=AF=AF=E9=97=AE?= =?UTF-8?q?=E9=A2=98=20(#1945)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../parser/calcite/node/DataModelNode.java | 19 +++++++++++++------ .../parser/calcite/render/JoinRender.java | 10 ++++++++++ 2 files changed, 23 insertions(+), 6 deletions(-) diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/node/DataModelNode.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/node/DataModelNode.java index 75d32ad9f..95ea823b6 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/node/DataModelNode.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/node/DataModelNode.java @@ -343,18 +343,25 @@ public class DataModelNode extends SemanticNode { Map orders = new HashMap<>(); joinDataModelNames.add(baseDataModel.getName()); orders.put(baseDataModel.getName(), 0L); + + // Adjust the order of tables in the data source to facilitate subsequent joins + ArrayList joinTables = new ArrayList<>(); for (JoinRelation joinRelation : ontology.getJoinRelations()) { if (joinDataModelNames.contains(joinRelation.getLeft()) && joinDataModelNames.contains(joinRelation.getRight())) { - orders.put(joinRelation.getLeft(), 0L); - orders.put(joinRelation.getRight(), 1L); + joinTables.add(joinRelation.getLeft()); + joinTables.add(joinRelation.getRight()); } } - orders.entrySet().stream().sorted(Map.Entry.comparingByValue()).forEach(d -> { - joinDataModels.add(ontology.getDataModelMap().get(d.getKey())); - }); + for (String joinTable : joinTables) { + orders.put(joinTable, orders.getOrDefault(joinTable, 0L) + 1L); + } + orders.entrySet().stream() + .sorted((entry1, entry2) -> entry2.getValue().compareTo(entry1.getValue())) // 倒序排序 + .forEach(d -> { + joinDataModels.add(ontology.getDataModelMap().get(d.getKey())); + }); } - return joinDataModels; } diff --git a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/render/JoinRender.java b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/render/JoinRender.java index ba63fc91b..3ae790ce9 100644 --- a/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/render/JoinRender.java +++ b/headless/core/src/main/java/com/tencent/supersonic/headless/core/translator/parser/calcite/render/JoinRender.java @@ -306,6 +306,16 @@ public class JoinRender extends Renderer { r.getMiddle(), tableView.getAlias() + "." + r.getRight())) .collect(Collectors.toList())); matchJoinRelation.setJoinType(joinRelation.getJoinType()); + // Added join condition judgment to solve the problem of join condition order + } else if (joinRelation.getLeft() + .equalsIgnoreCase(tableView.getDataModel().getName()) + && before.containsKey(joinRelation.getRight())) { + matchJoinRelation.setJoinCondition(joinRelation.getJoinCondition().stream() + .map(r -> Triple.of( + before.get(joinRelation.getRight()) + "." + r.getRight(), + r.getMiddle(), tableView.getAlias() + "." + r.getLeft())) + .collect(Collectors.toList())); + matchJoinRelation.setJoinType(joinRelation.getJoinType()); } } }