/* ================================================================ * JSQLParser : java based sql parser * ================================================================ * * Project Info: http://jsqlparser.sourceforge.net * Project Lead: Leonardo Francalanci (leoonardoo@yahoo.it); * * (C) Copyright 2004, by Leonardo Francalanci * * 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., 59 Temple Place, Suite 330, * Boston, MA 02111-1307, USA. */ package net.sf.jsqlparser.statement.select; import java.util.Iterator; import java.util.List; import net.sf.jsqlparser.expression.Expression; import net.sf.jsqlparser.schema.Table; /** */ /** * The core of a "SELECT" statement (no UNION, no ORDER BY) */ public class PlainSelect implements SelectBody { private Distinct distinct = null; private List selectItems; private Table into; private FromItem fromItem; private List joins; private Expression where; private List groupByColumnReferences; private List orderByElements; private Expression having; private Limit limit; private Top top; /** * The {@link FromItem} in this query * @return the {@link FromItem} */ public FromItem getFromItem() { return fromItem; } public Table getInto() { return into; } /** * The {@link SelectItem}s in this query (for example the A,B,C in "SELECT A,B,C") * @return a list of {@link SelectItem}s */ public List getSelectItems() { return selectItems; } public Expression getWhere() { return where; } public void setFromItem(FromItem item) { fromItem = item; } public void setInto(Table table) { into = table; } public void setSelectItems(List list) { selectItems = list; } public void setWhere(Expression where) { this.where = where; } /** * The list of {@link Join}s * @return the list of {@link Join}s */ public List getJoins() { return joins; } public void setJoins(List list) { joins = list; } public void accept(SelectVisitor selectVisitor){ selectVisitor.visit(this); } public List getOrderByElements() { return orderByElements; } public void setOrderByElements(List orderByElements) { this.orderByElements = orderByElements; } public Limit getLimit() { return limit; } public void setLimit(Limit limit) { this.limit = limit; } public Top getTop() { return top; } public void setTop(Top top) { this.top = top; } public Distinct getDistinct() { return distinct; } public void setDistinct(Distinct distinct) { this.distinct = distinct; } public Expression getHaving() { return having; } public void setHaving(Expression expression) { having = expression; } /** * A list of {@link Expression}s of the GROUP BY clause. * It is null in case there is no GROUP BY clause * @return a list of {@link Expression}s */ public List getGroupByColumnReferences() { return groupByColumnReferences; } public void setGroupByColumnReferences(List list) { groupByColumnReferences = list; } public String toString() { String sql = ""; sql = "SELECT "; sql += ((distinct != null)?""+distinct+" ":""); sql += ((top != null)?""+top+" ":""); sql += getStringList(selectItems); sql += " FROM " + fromItem; if (joins != null) { Iterator it = joins.iterator(); while(it.hasNext()) { Join join = (Join)it.next(); if (join.isSimple()) { sql += ", " + join; } else { sql += " " + join; } } } //sql += getFormatedList(joins, "", false, false); sql += ((where != null) ? " WHERE " + where : ""); sql += getFormatedList(groupByColumnReferences, "GROUP BY"); sql += ((having != null) ? " HAVING " + having : ""); sql += orderByToString(orderByElements); sql += ((limit != null) ? limit+"" : ""); return sql; } public static String orderByToString(List orderByElements) { return getFormatedList(orderByElements, "ORDER BY"); } public static String getFormatedList(List list, String expression) { return getFormatedList(list, expression, true, false); } public static String getFormatedList(List list, String expression, boolean useComma, boolean useBrackets) { String sql = getStringList(list, useComma, useBrackets); if (sql.length() > 0) { if (expression.length() > 0) { sql = " " + expression + " " + sql; } else { sql = " " + sql; } } return sql; } /** * List the toString out put of the objects in the List comma separated. If * the List is null or empty an empty string is returned. * * The same as getStringList(list, true, false) * @see #getStringList(List, boolean, boolean) * @param list * list of objects with toString methods * @return comma separated list of the elements in the list */ public static String getStringList(List list) { return getStringList(list, true, false); } /** * List the toString out put of the objects in the List that can be comma separated. If * the List is null or empty an empty string is returned. * * @param list list of objects with toString methods * @param useComma true if the list has to be comma separated * @param useBrackets true if the list has to be enclosed in brackets * @return comma separated list of the elements in the list */ public static String getStringList(List list, boolean useComma, boolean useBrackets) { String ans = ""; String comma = ","; if (!useComma) { comma = ""; } if (list != null) { if (useBrackets) { ans += "("; } for (int i = 0; i < list.size(); i++) { ans += "" + list.get(i) + ((i < list.size() - 1) ? comma + " " : ""); } if (useBrackets) { ans += ")"; } } return ans; } }