/**
* Licensed to the Apache Software Foundation (ASF) under one
* or more contributor license agreements. See the NOTICE file
* distributed with this work for additional information
* regarding copyright ownership. The ASF licenses this file
* to you under the Apache License, Version 2.0 (the
* "License"); you may not use this file except in compliance
* with the License. You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package org.apache.tajo.engine.planner.logical.join;
import com.google.common.collect.Sets;
import org.apache.tajo.algebra.JoinType;
import org.apache.tajo.engine.eval.EvalNode;
import org.apache.tajo.engine.planner.logical.LogicalNode;
import org.apache.tajo.engine.planner.logical.RelationNode;
import org.apache.tajo.util.TUtil;
import java.util.Collections;
import java.util.Set;
public class JoinEdge {
private final JoinType joinType;
private final LogicalNode leftRelation;
private final LogicalNode rightRelation;
private final Set<EvalNode> joinQual = Sets.newHashSet();
public JoinEdge(JoinType joinType, LogicalNode leftRelation, LogicalNode rightRelation) {
this.joinType = joinType;
this.leftRelation = leftRelation;
this.rightRelation = rightRelation;
}
public JoinEdge(JoinType joinType, LogicalNode leftRelation, LogicalNode rightRelation,
EvalNode ... condition) {
this(joinType, leftRelation, rightRelation);
Collections.addAll(joinQual, condition);
}
public JoinType getJoinType() {
return joinType;
}
public LogicalNode getLeftRelation() {
return leftRelation;
}
public LogicalNode getRightRelation() {
return rightRelation;
}
public boolean hasJoinQual() {
return joinQual.size() > 0;
}
public void addJoinQual(EvalNode joinQual) {
this.joinQual.add(joinQual);
}
public EvalNode [] getJoinQual() {
return joinQual.toArray(new EvalNode[joinQual.size()]);
}
public String toString() {
return leftRelation + " " + joinType + " " + rightRelation + " ON " + TUtil.collectionToString(joinQual);
}
}