/*
* Copyright (C) 2014 Indeed Inc.
*
* Licensed 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 com.indeed.imhotep.sql.ast2;
import com.indeed.imhotep.sql.ast.Expression;
import java.io.Serializable;
import java.util.List;
/**
* @author vladimir
*/
public class SelectStatement extends IQLStatement implements Serializable {
public final SelectClause select;
public final FromClause from;
public final WhereClause where;
public final GroupByClause groupBy;
public final int limit;
public SelectStatement(SelectClause select, FromClause from, WhereClause where, GroupByClause groupBy, int limit) {
this.select = select;
this.from = from;
this.where = where;
this.groupBy = groupBy;
this.limit = limit;
}
// convenience constructor that constructs the clauses for you
public SelectStatement(
List<Expression> projections, FromClause from, Expression where,
List<Expression> groupBy, int limit) {
this.select = new SelectClause(projections);
this.from = from;
this.where = new WhereClause(where);
this.groupBy = new GroupByClause(groupBy);
this.limit = limit;
}
// limit default constructor
public SelectStatement(
List<Expression> projections, FromClause from, Expression where,
List<Expression> groupBy) {
this(projections, from, where, groupBy, Integer.MAX_VALUE);
}
/**
* Returns a string representation that can be used to compare with other SelectStatements.
* limit value is ignored as it changes presentation of results only.
*/
public String toHashKeyString() {
final String fromStr = from != null ? from.toString() : "null";
final String groupByStr = groupBy != null ? groupBy.toString() : "null";
final String selectStr = select != null ? select.toString() : "null";
final String whereStr = where != null ? where.toString() : "null";
return "SelectStatement {from=" + fromStr +
", groupBy=" + groupByStr +
", select=" + selectStr +
", where=" + whereStr + "}";
}
}