This is an automated email from the ASF dual-hosted git repository. xxyu pushed a commit to branch kylin5 in repository https://gitbox.apache.org/repos/asf/kylin.git
commit 625c4b6c7e86aa8402e450c085f8332b0f5fc8b2 Author: Jiale He <35652389+jial...@users.noreply.github.com> AuthorDate: Tue Feb 28 10:10:36 2023 +0800 KYLIN-5521 [FOLLOW UP] Fix JoinsGraph toString method StackOverFlow --- .../apache/kylin/metadata/model/graph/JoinsGraph.java | 12 ++++++++++-- .../org/apache/kylin/metadata/model/JoinsGraphTest.java | 17 +++++++++++++++++ 2 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/graph/JoinsGraph.java b/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/graph/JoinsGraph.java index 2029fd61ac..ee4efbf60b 100644 --- a/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/graph/JoinsGraph.java +++ b/src/core-metadata/src/main/java/org/apache/kylin/metadata/model/graph/JoinsGraph.java @@ -476,6 +476,10 @@ public class JoinsGraph implements Serializable { return unmatched; } + public List<Edge> getEdgesByFKSideWithoutSwap(TableRef table) { + return getEdgesByFKSide(table).stream().filter(e -> !e.isSwapJoin()).collect(Collectors.toList()); + } + /** * Root: TableRef[TEST_KYLIN_FACT] * Edge: TableRef[TEST_KYLIN_FACT] LEFT JOIN TableRef[TEST_ORDER] ON [ORDER_ID] = [ORDER_ID] @@ -487,7 +491,9 @@ public class JoinsGraph implements Serializable { StringBuilder sb = new StringBuilder(); sb.append("Root: ").append(center); // build next edges - getEdgesByFKSide(center).forEach(e -> buildGraphStr(sb, e, 1)); + for (Edge e : getEdgesByFKSideWithoutSwap(center)) { + buildGraphStr(sb, e, 1); + } return sb.toString(); } @@ -495,7 +501,9 @@ public class JoinsGraph implements Serializable { sb.append(IntStream.range(0, indent).mapToObj(i -> " ") .collect(Collectors.joining("", "\n", String.valueOf(edge)))); // build next edges - getEdgesByFKSide(edge.pkSide()).forEach(e -> buildGraphStr(sb, e, indent + 1)); + for (Edge e : getEdgesByFKSideWithoutSwap(edge.pkSide())) { + buildGraphStr(sb, e, indent + 1); + } } private <T> void addIfAbsent(List<T> edges, T edge) { diff --git a/src/core-metadata/src/test/java/org/apache/kylin/metadata/model/JoinsGraphTest.java b/src/core-metadata/src/test/java/org/apache/kylin/metadata/model/JoinsGraphTest.java index 65a359e63f..59a946831c 100644 --- a/src/core-metadata/src/test/java/org/apache/kylin/metadata/model/JoinsGraphTest.java +++ b/src/core-metadata/src/test/java/org/apache/kylin/metadata/model/JoinsGraphTest.java @@ -25,6 +25,7 @@ import java.util.LinkedHashMap; import java.util.Map; import java.util.function.Supplier; +import org.apache.commons.lang3.StringUtils; import org.apache.kylin.common.KylinConfig; import org.apache.kylin.common.exception.KylinException; import org.apache.kylin.common.util.NLocalFileMetadataTestCase; @@ -368,4 +369,20 @@ public class JoinsGraphTest extends NLocalFileMetadataTestCase { Object invoke = method.invoke(matcher, a, b); Assert.assertEquals(true, invoke); } + + @Test + public void testToString() { + NDataModel modelDesc = NDataModelManager.getInstance(getTestConfig(), "default") + .getDataModelDescByAlias("nmodel_basic_inner"); + JoinsGraph graph1 = new MockJoinGraphBuilder(modelDesc, "TEST_KYLIN_FACT") + .innerJoin(new String[] { "TEST_KYLIN_FACT.ORDER_ID" }, new String[] { "TEST_ORDER.ORDER_ID" }).build(); + Assert.assertTrue(StringUtils.isNotEmpty(graph1.toString())); + + JoinsGraph graph2 = new MockJoinGraphBuilder(modelDesc, "TEST_KYLIN_FACT") + .innerJoin(new String[] { "TEST_KYLIN_FACT.ORDER_ID" }, new String[] { "TEST_ORDER.ORDER_ID" }) + .innerJoin(new String[] { "TEST_ORDER.BUYER_ID" }, new String[] { "BUYER_ACCOUNT.ACCOUNT_ID" }) + .innerJoin(new String[] { "BUYER_ACCOUNT.ACCOUNT_COUNTRY" }, new String[] { "BUYER_COUNTRY.COUNTRY" }) + .build(); + Assert.assertTrue(StringUtils.isNotEmpty(graph2.toString())); + } }