package org.nutz.dao.util.cri; import org.nutz.dao.Condition; import org.nutz.dao.Sqls; import org.nutz.dao.entity.Entity; import org.nutz.dao.impl.sql.pojo.AbstractPItem; import org.nutz.dao.jdbc.ValueAdaptor; import org.nutz.dao.pager.Pager; import org.nutz.dao.sql.Criteria; import org.nutz.dao.sql.GroupBy; import org.nutz.dao.sql.OrderBy; import org.nutz.dao.sql.Pojo; public class SimpleCriteria extends AbstractPItem implements Criteria, OrderBy, GroupBy { private SqlExpressionGroup where; private OrderBySet orderBy; private GroupBySet groupBy; private Pager pager; public SimpleCriteria() { where = new SqlExpressionGroup(); orderBy = new OrderBySet(); } public void joinSql(Entity<?> en, StringBuilder sb) { where.joinSql(en, sb); if (groupBy != null) groupBy.joinSql(en, sb); orderBy.joinSql(en, sb); } public void setPojo(Pojo pojo) { where.setPojo(pojo); orderBy.setPojo(pojo); if (groupBy != null) groupBy.setPojo(pojo); } public void setPager(int pageNumber, int pageSize) { pager = new Pager(); pager.setPageNumber(pageNumber); pager.setPageSize(pageSize); } public void setPager(Pager pager) { this.pager = pager; } public Pager getPager() { return pager; } public int joinAdaptor(Entity<?> en, ValueAdaptor[] adaptors, int off) { return where.joinAdaptor(en, adaptors, off); } public int joinParams(Entity<?> en, Object obj, Object[] params, int off) { return where.joinParams(en, obj, params, off); } public int paramCount(Entity<?> en) { return where.paramCount(en); } public String toSql(Entity<?> en) { Object[] params = new Object[this.paramCount(en)]; int i = where.joinParams(en, null, params, 0); orderBy.joinParams(en, null, params, i); StringBuilder sb = new StringBuilder(); this.joinSql(en, sb); String[] ss = sb.toString().split("[?]"); sb = new StringBuilder(); for (i = 0; i < params.length; i++) { sb.append(ss[i]); sb.append(Sqls.formatFieldValue(params[i])); } if (i < ss.length) sb.append(ss[i]); return sb.toString(); } public OrderBy asc(String name) { return orderBy.asc(name); } public OrderBy desc(String name) { return orderBy.desc(name); } public SqlExpressionGroup where() { return where; } public GroupBy groupBy(String...names) { groupBy = new GroupBySet(names); return this; } public GroupBy having(Condition cnd) { groupBy.having(cnd); return this; } public OrderBy getOrderBy() { return orderBy; } public String toString() { return toSql(null); } }