FromItemVisitorAdapter.java
/*-
* #%L
* JSQLParser library
* %%
* Copyright (C) 2004 - 2019 JSQLParser
* %%
* Dual licensed under GNU LGPL 2.1 or Apache License 2.0
* #L%
*/
package net.sf.jsqlparser.statement.select;
import net.sf.jsqlparser.expression.Expression;
import net.sf.jsqlparser.expression.ExpressionVisitor;
import net.sf.jsqlparser.expression.ExpressionVisitorAdapter;
import net.sf.jsqlparser.schema.Column;
import net.sf.jsqlparser.schema.Table;
import net.sf.jsqlparser.statement.imprt.Import;
import net.sf.jsqlparser.statement.piped.FromQuery;
import java.util.ArrayList;
import java.util.Collection;
@SuppressWarnings({"PMD.UncommentedEmptyMethodBody"})
public class FromItemVisitorAdapter<T> implements FromItemVisitor<T> {
private SelectVisitor<T> selectVisitor;
private ExpressionVisitor<T> expressionVisitor;
public FromItemVisitorAdapter(SelectVisitor<T> selectVisitor,
ExpressionVisitor<T> expressionVisitor) {
this.selectVisitor = selectVisitor;
this.expressionVisitor = expressionVisitor;
}
public FromItemVisitorAdapter(ExpressionVisitor<T> expressionVisitor) {
this.selectVisitor = new SelectVisitorAdapter<>(expressionVisitor);
this.expressionVisitor = expressionVisitor;
}
public FromItemVisitorAdapter() {
this.selectVisitor = new SelectVisitorAdapter<>();
this.expressionVisitor = new ExpressionVisitorAdapter<>(this.selectVisitor);
}
public SelectVisitor<T> getSelectVisitor() {
return selectVisitor;
}
public FromItemVisitorAdapter<T> setSelectVisitor(SelectVisitor<T> selectVisitor) {
this.selectVisitor = selectVisitor;
return this;
}
public FromItemVisitorAdapter<T> setSelectVisitor(SelectVisitorAdapter<T> selectVisitor) {
this.selectVisitor = selectVisitor;
this.expressionVisitor = selectVisitor.getExpressionVisitor();
return this;
}
public ExpressionVisitor<T> getExpressionVisitor() {
return expressionVisitor;
}
public FromItemVisitorAdapter<T> setExpressionVisitor(ExpressionVisitor<T> expressionVisitor) {
this.expressionVisitor = expressionVisitor;
return this;
}
@Override
public <S> T visitJoins(Collection<Join> joins, S context) {
if (joins != null) {
for (Join join : joins) {
join.getFromItem().accept(this, context);
if (join.getUsingColumns() != null) {
for (Column column : join.getUsingColumns()) {
column.accept(expressionVisitor, context);
}
}
if (join.getOnExpressions() != null) {
for (Expression expression : join.getOnExpressions()) {
expression.accept(expressionVisitor, context);
}
}
}
}
return null;
}
@Override
public <S> T visit(Table table, S context) {
return null;
}
@Override
public <S> T visit(ParenthesedSelect select, S context) {
return select.getPlainSelect().accept(selectVisitor, context);
}
@Override
public <S> T visit(LateralSubSelect lateralSubSelect, S context) {
return lateralSubSelect.getPlainSelect().accept(selectVisitor, context);
}
@Override
public <S> T visit(TableFunction tableFunction, S context) {
return null;
}
@Override
public <S> T visit(ParenthesedFromItem fromItem, S context) {
return fromItem.getFromItem().accept(this, context);
}
@Override
public <S> T visit(Values values, S context) {
for (Expression expression : values.getExpressions()) {
expression.accept(expressionVisitor, context);
}
return null;
}
@Override
public <S> T visit(PlainSelect plainSelect, S context) {
return plainSelect.accept(selectVisitor, context);
}
@Override
public <S> T visit(SetOperationList setOperationList, S context) {
ArrayList<T> results = new ArrayList<>();
for (Select select : setOperationList.getSelects()) {
results.add(select.accept(selectVisitor, context));
}
return results.isEmpty() ? null : results.get(0);
}
@Override
public <S> T visit(TableStatement tableStatement, S context) {
return null;
}
@Override
public <S> T visit(Import imprt, S context) {
return null;
}
public <S> T visit(FromQuery fromQuery, S context) {
return fromQuery.accept(selectVisitor, context);
}
}