/*
* JBoss, Home of Professional Open Source.
* See the COPYRIGHT.txt file distributed with this work for information
* regarding copyright ownership. Some portions may be licensed
* to Red Hat, Inc. under one or more contributor license agreements.
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
* 02110-1301 USA.
*/
package org.teiid.language;
import java.util.List;
import java.util.Map;
import org.teiid.language.visitor.LanguageObjectVisitor;
/**
* Represents a simple SELECT query.
*/
public class Select extends QueryExpression {
private List<DerivedColumn> derivedColumns;
private boolean isDistinct;
private List<TableReference> from;
private Condition where;
private GroupBy groupBy;
private Condition having;
private Map<String, List<? extends List<?>>> dependentValues;
/**
* Constructs an empty select. This is not valid until at least the {@link DerivedColumn}s have been set.
*/
public Select() {
}
public Select(List<DerivedColumn> derivedColumns, boolean distinct, List<TableReference> from, Condition where,
GroupBy groupBy, Condition having, OrderBy orderBy) {
this.derivedColumns = derivedColumns;
this.isDistinct = distinct;
this.from = from;
this.where = where;
this.groupBy = groupBy;
this.having = having;
this.setOrderBy(orderBy);
}
public List<DerivedColumn> getDerivedColumns() {
return derivedColumns;
}
public boolean isDistinct() {
return this.isDistinct;
}
public void setDerivedColumns(List<DerivedColumn> symbols) {
this.derivedColumns = symbols;
}
public void setDistinct(boolean distinct) {
this.isDistinct = distinct;
}
/**
* Get FROM clause, should never be null.
* @return From clause object
*/
public List<TableReference> getFrom() {
return from;
}
/**
* Get WHERE clause, may be null.
* @return A criteria object
*/
public Condition getWhere() {
return where;
}
/**
* Get GROUP BY clause, may be null.
* @return A group by object
*/
public GroupBy getGroupBy() {
return groupBy;
}
/**
* Get HAVING clause, may be null.
* @return A criteria object
*/
public Condition getHaving() {
return having;
}
public void acceptVisitor(LanguageObjectVisitor visitor) {
visitor.visit(this);
}
/**
* Set FROM clause, should never be null.
* @param from From clause object
*/
public void setFrom(List<TableReference> from) {
this.from = from;
}
/**
* Set WHERE clause, may be null.
* @param criteria A criteria object
*/
public void setWhere(Condition criteria) {
this.where = criteria;
}
/**
* Set GROUP BY clause, may be null.
* @param groupBy A group by object
*/
public void setGroupBy(GroupBy groupBy) {
this.groupBy = groupBy;
}
/**
* Set HAVING clause, may be null.
* @param criteria A criteria object
*/
public void setHaving(Condition criteria) {
this.having = criteria;
}
public Select getProjectedQuery() {
return this;
}
/**
* Gets the dependent value lists. The lists are memory-safe. Caution should be used
* to not access large lists in a non-memory safe manner. The lists are invalid
* after returning results from the pushdown query.
* @return the map of dependent values or null if this is not a dependent join pushdown
*/
public Map<String, List<? extends List<?>>> getDependentValues() {
return dependentValues;
}
public void setDependentValues(Map<String, List<? extends List<?>>> dependentValues) {
this.dependentValues = dependentValues;
}
}