Skip to content

Commit 8b82ed8

Browse files
committed
add safeguard
1 parent c994d26 commit 8b82ed8

File tree

1 file changed

+5
-1
lines changed

1 file changed

+5
-1
lines changed

packages/cubejs-schema-compiler/src/adapter/BaseQuery.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -474,14 +474,18 @@ export class BaseQuery {
474474
return true;
475475
};
476476

477-
while (newJoin?.joins.length > 0 && !isJoinTreesEqual(prevJoins, newJoin)) {
477+
// Safeguard against infinite loop in case of cyclic joins somehow managed to slip through
478+
let cnt = 0;
479+
480+
while (newJoin?.joins.length > 0 && !isJoinTreesEqual(prevJoins, newJoin) && cnt < 10000) {
478481
prevJoins = newJoin;
479482
joinMembersJoinHints = this.collectJoinHintsFromMembers(this.joinMembersFromJoin(newJoin));
480483
if (!isOrderPreserved(prevJoinMembersJoinHints, joinMembersJoinHints)) {
481484
throw new UserError(`Can not construct joins for the query, potential loop detected: ${prevJoinMembersJoinHints.join('->')} vs ${joinMembersJoinHints.join('->')}`);
482485
}
483486
newJoin = this.joinGraph.buildJoin(constructJH());
484487
prevJoinMembersJoinHints = joinMembersJoinHints;
488+
cnt++;
485489
}
486490

487491
this.collectedJoinHints = R.uniq(constructJH());

0 commit comments

Comments
 (0)