/*
* 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.jena.sdb.core.sqlnode;
import org.apache.jena.sdb.core.JoinType ;
import org.apache.jena.sdb.core.Scope ;
import org.apache.jena.sdb.core.Scope2 ;
import org.apache.jena.sdb.core.ScopeOptional ;
import org.apache.jena.sdb.core.sqlexpr.SqlExpr ;
import org.apache.jena.sdb.core.sqlexpr.SqlExprList ;
import org.slf4j.LoggerFactory;
public abstract class SqlJoin extends SqlNodeBase2
{
private JoinType joinType ;
private Scope idScope ;
private Scope nodeScope ;
private SqlExprList conditions = new SqlExprList() ;
// public static SqlJoin create(JoinType joinType, SqlNode left, SqlNode right)
// { return create(joinType, left, right) ; }
public static SqlJoin create(JoinType joinType, SqlNode left, SqlNode right)
{
switch (joinType)
{
case INNER: return new SqlJoinInner(left, right) ;
case LEFT: return new SqlJoinLeftOuter(left, right) ;
}
LoggerFactory.getLogger(SqlJoin.class).warn("Unknown join type: "+joinType.printName()) ;
return null ;
}
protected SqlJoin(JoinType joinType, SqlNode left, SqlNode right)
{
// Does not have an alias.
super(null, left, right) ;
this.joinType = joinType ;
if ( joinType == JoinType.LEFT )
{
// If a left join, the RHS may be null.
idScope = new Scope2(left.getIdScope(), new ScopeOptional(right.getIdScope())) ;
nodeScope = new Scope2(left.getNodeScope(), new ScopeOptional(right.getNodeScope())) ;
}
else
{
idScope = new Scope2(left.getIdScope(), right.getIdScope()) ;
nodeScope = new Scope2(left.getNodeScope(), right.getNodeScope()) ;
}
}
public JoinType getJoinType() { return joinType ; }
@Override
public boolean isJoin() { return true ; }
// @Override
// public boolean isInnerJoin() { return joinType == JoinType.INNER ; }
//
// @Override
// public boolean isLeftJoin() { return joinType == JoinType.LEFT ; }
@Override
public SqlJoin asJoin() { return this ; }
public SqlExprList getConditions() { return conditions ; }
public void addCondition(SqlExpr e) { conditions.add(e) ; }
public void addConditions(SqlExprList exprs) { conditions.addAll(exprs) ; }
@Override
public Scope getIdScope() { return idScope ; }
@Override
public Scope getNodeScope() { return nodeScope ; }
}