/**
* Parts of SQL query as objects.
*/
package squill.query.orderby;
import java.util.List;
import squill.format.FormatUtil;
import squill.query.Expression;
import squill.query.QueryContext;
import squill.query.select.Column;
import squill.query.select.SelectExpression;
/**
* One FIELD AND ASC/DESC pair of orderby. For example "name" and "DESC" in following query:
* SELECT * FROM customer ORDER BY name DESC
*/
public class OrderByElement<OBJ> implements Expression<OBJ> {
private SelectExpression<OBJ> selectExpr;
private boolean ascending = true; // default order
private boolean mustOccurInSelect = false; // must this expression be present in select?
public OrderByElement(Column<OBJ, ?> selectExpr, boolean ascendingly) {
this.selectExpr = selectExpr;
this.ascending = ascendingly;
}
public OrderByElement(SelectExpression<OBJ> selectExpr, boolean ascending) {
this.selectExpr = selectExpr;
this.ascending = ascending;
mustOccurInSelect = true; // this custom expression must occur in select
}
public boolean isMustOccurInSelect() {
return mustOccurInSelect;
}
public SelectExpression<OBJ> getSelectExpr() {
return selectExpr;
}
public String getDefaultSql() {
if (ascending)
return FormatUtil.formatOrderBy(selectExpr) + " ASC";
return FormatUtil.formatOrderBy(selectExpr) + " DESC";
}
public List<Object> getSqlArguments() {
return getSelectExpr().getSqlArguments();
}
public void setQueryContext(QueryContext ctx) {
selectExpr.setQueryContext(ctx);
}
}