/*
* 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 java.util.LinkedHashSet ;
import java.util.Set ;
import org.apache.jena.atlas.io.IndentedLineBuffer ;
import org.apache.jena.atlas.io.IndentedWriter ;
import org.apache.jena.atlas.lib.Lib ;
import org.apache.jena.sdb.core.AnnotationsBase ;
import org.apache.jena.sdb.core.sqlexpr.SqlColumn ;
public abstract class SqlNodeBase extends AnnotationsBase implements SqlNode
{
protected String aliasName ;
public SqlNodeBase(String aliasName) { this.aliasName = aliasName ; }
@Override
public boolean isJoin() { return false ; }
@Override
public boolean isInnerJoin() { return false ; }
@Override
public boolean isLeftJoin() { return false ; }
// public boolean isRightJoin() { return false ; }
// public boolean isOuterJoin() { return false ; }
@Override
public SqlJoin asJoin() { classError(SqlJoin.class) ; return null ; }
@Override
public SqlJoinLeftOuter asLeftJoin() { classError(SqlJoinLeftOuter.class) ; return null ; }
@Override
public SqlJoinInner asInnerJoin(){ classError(SqlJoinInner.class) ; return null ; }
@Override
public boolean isRestrict() { return false ; }
@Override
public SqlRestrict asRestrict() { classError(SqlRestrict.class) ; return null ; }
@Override
public boolean isProject() { return false ; }
@Override
public SqlProject asProject() { classError(SqlProject.class) ; return null ; }
@Override
public boolean isDistinct() { return false ; }
@Override
public SqlDistinct asDistinct() { classError(SqlDistinct.class) ; return null ; }
@Override
public boolean isCoalesce() { return false ; }
@Override
public SqlCoalesce asCoalesce() { classError(SqlCoalesce.class) ; return null ; }
@Override
public boolean isTable() { return false ; }
@Override
public SqlTable asTable() { classError(SqlTable.class) ; return null ; }
@Override
public boolean isSelectBlock() { return false ; }
@Override
public SqlSelectBlock asSelectBlock() { classError(SqlSelectBlock.class) ; return null ; }
@Override
public void output(IndentedWriter out) { output(out, true) ; }
public void output(IndentedWriter out, boolean withAnnotations)
{ this.visit(new SqlNodeTextVisitor(out, withAnnotations)) ; }
// Scope
// public boolean hasColumnForVar(Var var) { return getColumnForVar(var) != null ; }
// public Iterator<Var> vars()
// { return getVars().iterator() ; }
public boolean usesColumn(SqlColumn c) { return false ; }
@Override
final
public String getAliasName() { return aliasName ; }
private void classError(Class<?> wanted)
{
throw new ClassCastException("Wanted class: "+Lib.className(wanted)+" :: Actual class "+Lib.className(this) ) ;
}
@Override
public Set<SqlTable> tablesInvolved()
{
TableFinder t = new TableFinder() ;
SqlNodeWalker.walk(this, t) ;
return t.acc ;
}
@Override public String toString()
{
IndentedLineBuffer buff = new IndentedLineBuffer() ;
output(buff, true) ;
return buff.asString() ;
}
}
class TableFinder extends SqlNodeVisitorBase
{
Set<SqlTable> acc = new LinkedHashSet<SqlTable>() ;
@Override
public void visit(SqlTable sqlNode)
{
acc.add(sqlNode) ;
}
}