Hi everybody,
I’m trying to set orderBy for FreeformQuery but it does not work.
Here is the code I’m using:
FreeformQuery query = new FreeformQuery("SELECT * FROM myTable");
myFreeformQueryDelegate myDelegate = new myFreeformQueryDelegate();
List<OrderBy> orderBys = new ArrayList<OrderBy>();
orderBys.add(new OrderBy("myfield", true));
myDelegate.setOrderBy(orderBys);
query.setDelegate(myDelegate);
myContainer = new SQLContainer(query);
And these are overridden methods of FreeformStatementDelegate related to Order By:
@Override
public StatementHelper getQueryStatement(int offset, int limit) throws UnsupportedOperationException {
StatementHelper sh = new StatementHelper();
StringBuffer query = new StringBuffer("SELECT * FROM myTable ");
if (filters != null) {
query.append(QueryBuilder.getWhereStringForFilters(filters, sh));
}
query.append(getOrderByString());
if (offset != 0 || limit != 0) {
query.append(" LIMIT ").append(limit);
query.append(" OFFSET ").append(offset);
}
sh.setQueryString(query.toString());
return sh;
}
private String getOrderByString() {
StringBuffer orderBuffer = new StringBuffer("");
if (orderBys != null && !orderBys.isEmpty()) {
orderBuffer.append(" ORDER BY ");
OrderBy lastOrderBy = orderBys.get(orderBys.size() - 1);
for (OrderBy orderBy : orderBys) {
orderBuffer.append(SQLUtil.escapeSQL(orderBy.getColumn()));
if (orderBy.isAscending()) {
orderBuffer.append(" ASC");
} else {
orderBuffer.append(" DESC");
}
if (orderBy != lastOrderBy) {
orderBuffer.append(", ");
}
}
}
return orderBuffer.toString();
}
Is there anything wrong? Thanks