code: private LeftJoinNode updateRightNodesAndLJ(LeftJoinNode leftJoinNode,
                                                 DataNodeAndSubstitution rightComponent,
                                                 Optional<ImmutableExpression> newLJCondition,
                                                 Optional<DataNode> proposedRightDataNode,
                                                 QueryTreeComponent treeComponent) {
          rightComponent.constructionNode
                  .ifPresent(n -> treeComponent.replaceNodeByChild(n, Optional.empty()));
          rightComponent.filterNode
                  .ifPresent(n -> treeComponent.replaceNodeByChild(n, Optional.empty()));
          proposedRightDataNode
                  .ifPresent(n -> treeComponent.replaceNode(rightComponent.dataNode, n));
          LeftJoinNode newLeftJoinNode = leftJoinNode.changeOptionalFilterCondition(newLJCondition);
          treeComponent.replaceNode(leftJoinNode, newLeftJoinNode);
  
          return newLeftJoinNode;
      }
docs: NB: removes the construction node if present, without inserting its substitution (will be propagated later)