/*
* Copyright Aduna (http://www.aduna-software.com/) (c) 2008.
*
* Licensed under the Aduna BSD-style license.
*/
package org.openrdf.sail.rdbms.algebra;
import java.util.ArrayList;
import java.util.List;
import org.openrdf.sail.rdbms.algebra.base.FromItem;
import org.openrdf.sail.rdbms.algebra.base.RdbmsQueryModelVisitorBase;
/**
* An SQL join.
*
* @author James Leigh
*
*/
public class JoinItem extends FromItem {
private String tableName;
private Number predId;
private List<ColumnVar> vars = new ArrayList<ColumnVar>();
public JoinItem(String alias, String tableName, Number predId) {
super(alias);
this.tableName = tableName;
this.predId = predId;
}
public JoinItem(String alias, String tableName) {
super(alias);
this.tableName = tableName;
this.predId = 0;
}
public String getTableName() {
return tableName;
}
public Number getPredId() {
return predId;
}
public void addVar(ColumnVar var) {
this.vars.add(var);
}
@Override
public ColumnVar getVarForChildren(String name) {
for (ColumnVar var : vars) {
if (var.getName().equals(name))
return var;
}
return super.getVarForChildren(name);
}
@Override
public List<ColumnVar> appendVars(List<ColumnVar> vars) {
vars.addAll(this.vars);
return super.appendVars(vars);
}
@Override
public String getSignature() {
StringBuilder sb = new StringBuilder();
if (isLeft()) {
sb.append("LEFT ");
}
sb.append(super.getSignature());
sb.append(" ").append(tableName);
sb.append(" ").append(getAlias());
return sb.toString();
}
@Override
public JoinItem clone() {
JoinItem clone = (JoinItem)super.clone();
clone.vars = new ArrayList<ColumnVar>(vars);
return clone;
}
@Override
public <X extends Exception> void visit(RdbmsQueryModelVisitorBase<X> visitor)
throws X
{
visitor.meet(this);
}
}