/*
* This file is part of Zql.
*
* Zql is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* Zql 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with Zql. If not, see <http://www.gnu.org/licenses/>.
*/
package org.gibello.zql;
import java.io.* ;
import java.util.* ;
/**
* ZSelectItem: an item in the SELECT part of an SQL query.
* (The SELECT part of a query is a Vector of ZSelectItem).
*/
public class ZSelectItem extends ZAliasedName {
ZExp expression_ = null;
String aggregate_ = null;
/**
* Create a new SELECT item
*/
public ZSelectItem() { super(); }
/**
* Create a new SELECT item, given its name (for column names and wildcards).
* @param fullname A string that represents a column name or wildcard
* (example: a.*).
*/
public ZSelectItem(String fullname) {
super(fullname, ZAliasedName.FORM_COLUMN);
setAggregate(ZUtils.getAggregateCall(fullname)); //PY.Gibello 21 Apr 2001
}
/**
* @return An SQL Expression if this SELECT item is an expression,
* a ZConstant if it is a column name, null if it is a wildcard
*/
public ZExp getExpression() {
if(isExpression()) return expression_;
else if(isWildcard()) return null;
else {
return new ZConstant(getColumn(), ZConstant.COLUMNNAME);
}
}
/**
* Initialize this SELECT item as an SQL expression (not a column name
* nor wildcard)
* Example: SELECT a+b FROM table1; (a+b is an expression)
*/
public void setExpression(ZExp e) {
expression_ = e;
strform_ = expression_.toString();
}
/**
* @return true if this item is an SQL expression, false if not.
* (Example: SELECT a+b, c FROM num; a+b is an expression, not c)
*/
public boolean isExpression() { return (expression_ != null && expression_ instanceof ZExpression); }
/**
* Initialize an aggregate function on this item
* (generally SUM, AVG, MAX, MIN)
* Example: SELECT AVG(age) FROM people; The aggregate function is AVG.
* @param a The name of the aggregate function
* (a String, like SUM, AVG, MAX, MIN)
*/
public void setAggregate(String a) { aggregate_ = a; }
/**
* If this item is an aggregate function, return the function name.
* @return The name of an aggregate function (generally SUM, AVG, MAX, MIN),
* or null if there's no aggregate.
* Example: SELECT name, AVG(age) FROM people; null for the "name" item,
* and "AVG" for the "AVG(age)" item.
*/
public String getAggregate() { return aggregate_; }
/** TBD
public String toString() {
String agg = getAggregate();
if(agg == null) agg = "";
return agg + super.toString();
}
**/
};