commiting intermediary changes

pull/14/head
Arne Jans 16 years ago
parent 8697f99cab
commit 315584ce2e

@ -1,117 +1,117 @@
package com.todoroo.andlib; package com.todoroo.andlib;
import static com.todoroo.andlib.Constants.COMMA; import static com.todoroo.andlib.Constants.COMMA;
import static com.todoroo.andlib.Constants.GROUP_BY; import static com.todoroo.andlib.Constants.GROUP_BY;
import static com.todoroo.andlib.Constants.LIMIT; import static com.todoroo.andlib.Constants.LIMIT;
import static com.todoroo.andlib.Constants.ORDER_BY; import static com.todoroo.andlib.Constants.ORDER_BY;
import static com.todoroo.andlib.Constants.SPACE; import static com.todoroo.andlib.Constants.SPACE;
import static com.todoroo.andlib.Constants.WHERE; import static com.todoroo.andlib.Constants.WHERE;
import static java.util.Arrays.asList; import static java.util.Arrays.asList;
import java.util.ArrayList; import java.util.ArrayList;
/** /**
* Query Template returns a bunch of criteria that allows a query to be * Query Template returns a bunch of criteria that allows a query to be
* constructed * constructed
* *
* @author Tim Su <tim@todoroo.com> * @author Tim Su <tim@todoroo.com>
* *
*/ */
public final class QueryTemplate { public final class QueryTemplate {
private final ArrayList<Criterion> criterions = new ArrayList<Criterion>(); private final ArrayList<Criterion> criterions = new ArrayList<Criterion>();
private final ArrayList<Join> joins = new ArrayList<Join>(); private final ArrayList<Join> joins = new ArrayList<Join>();
private final ArrayList<Field> groupBies = new ArrayList<Field>(); private final ArrayList<Field> groupBies = new ArrayList<Field>();
private final ArrayList<Order> orders = new ArrayList<Order>(); private final ArrayList<Order> orders = new ArrayList<Order>();
private final ArrayList<Criterion> havings = new ArrayList<Criterion>(); private final ArrayList<Criterion> havings = new ArrayList<Criterion>();
private Integer limit = null; private Integer limit = null;
public QueryTemplate join(Join... join) { public QueryTemplate join(Join... join) {
joins.addAll(asList(join)); joins.addAll(asList(join));
return this; return this;
} }
public QueryTemplate where(Criterion criterion) { public QueryTemplate where(Criterion criterion) {
criterions.add(criterion); criterions.add(criterion);
return this; return this;
} }
public QueryTemplate groupBy(Field... groupBy) { public QueryTemplate groupBy(Field... groupBy) {
groupBies.addAll(asList(groupBy)); groupBies.addAll(asList(groupBy));
return this; return this;
} }
public QueryTemplate orderBy(Order... order) { public QueryTemplate orderBy(Order... order) {
orders.addAll(asList(order)); orders.addAll(asList(order));
return this; return this;
} }
@Override @Override
public String toString() { public String toString() {
StringBuilder sql = new StringBuilder(); StringBuilder sql = new StringBuilder();
visitJoinClause(sql); visitJoinClause(sql);
visitWhereClause(sql); visitWhereClause(sql);
visitGroupByClause(sql); visitGroupByClause(sql);
visitOrderByClause(sql); visitOrderByClause(sql);
if(limit != null) if(limit != null)
sql.append(LIMIT).append(SPACE).append(limit); sql.append(LIMIT).append(SPACE).append(limit);
return sql.toString(); return sql.toString();
} }
private void visitOrderByClause(StringBuilder sql) { private void visitOrderByClause(StringBuilder sql) {
if (orders.isEmpty()) { if (orders.isEmpty()) {
return; return;
} }
sql.append(ORDER_BY); sql.append(ORDER_BY);
for (Order order : orders) { for (Order order : orders) {
sql.append(SPACE).append(order).append(COMMA); sql.append(SPACE).append(order).append(COMMA);
} }
sql.deleteCharAt(sql.length() - 1).append(SPACE); sql.deleteCharAt(sql.length() - 1).append(SPACE);
} }
@SuppressWarnings("nls") @SuppressWarnings("nls")
private void visitGroupByClause(StringBuilder sql) { private void visitGroupByClause(StringBuilder sql) {
if (groupBies.isEmpty()) { if (groupBies.isEmpty()) {
return; return;
} }
sql.append(GROUP_BY); sql.append(GROUP_BY);
for (Field groupBy : groupBies) { for (Field groupBy : groupBies) {
sql.append(SPACE).append(groupBy).append(COMMA); sql.append(SPACE).append(groupBy).append(COMMA);
} }
sql.deleteCharAt(sql.length() - 1).append(SPACE); sql.deleteCharAt(sql.length() - 1).append(SPACE);
if (havings.isEmpty()) { if (havings.isEmpty()) {
return; return;
} }
sql.append("HAVING"); sql.append("HAVING");
for (Criterion havingCriterion : havings) { for (Criterion havingCriterion : havings) {
sql.append(SPACE).append(havingCriterion).append(COMMA); sql.append(SPACE).append(havingCriterion).append(COMMA);
} }
sql.deleteCharAt(sql.length() - 1).append(SPACE); sql.deleteCharAt(sql.length() - 1).append(SPACE);
} }
private void visitWhereClause(StringBuilder sql) { private void visitWhereClause(StringBuilder sql) {
if (criterions.isEmpty()) { if (criterions.isEmpty()) {
return; return;
} }
sql.append(WHERE); sql.append(WHERE);
for (Criterion criterion : criterions) { for (Criterion criterion : criterions) {
sql.append(SPACE).append(criterion).append(SPACE); sql.append(SPACE).append(criterion).append(SPACE);
} }
} }
private void visitJoinClause(StringBuilder sql) { private void visitJoinClause(StringBuilder sql) {
for (Join join : joins) { for (Join join : joins) {
sql.append(join).append(SPACE); sql.append(join).append(SPACE);
} }
} }
public QueryTemplate having(Criterion criterion) { public QueryTemplate having(Criterion criterion) {
this.havings.add(criterion); this.havings.add(criterion);
return this; return this;
} }
public QueryTemplate limit(int limitValue) { public QueryTemplate limit(int limitValue) {
this.limit = limitValue; this.limit = limitValue;
return this; return this;
} }
} }

@ -1,20 +1,20 @@
package com.todoroo.andlib; package com.todoroo.andlib;
public class SqlTable extends DBObject<SqlTable> { public class SqlTable extends DBObject<SqlTable> {
protected SqlTable(String expression) { protected SqlTable(String expression) {
super(expression); super(expression);
} }
public static SqlTable table(String table) { public static SqlTable table(String table) {
return new SqlTable(table); return new SqlTable(table);
} }
@SuppressWarnings("nls") @SuppressWarnings("nls")
protected String fieldExpression(String fieldName) { protected String fieldExpression(String fieldName) {
if (hasAlias()) { if (hasAlias()) {
return alias + "." + fieldName; return alias + "." + fieldName;
} }
return expression+"."+fieldName; return expression+"."+fieldName;
} }
} }

@ -1,92 +1,92 @@
package com.todoroo.andlib; package com.todoroo.andlib;
import static com.todoroo.andlib.Constants.SPACE; import static com.todoroo.andlib.Constants.SPACE;
public class UnaryCriterion extends Criterion { public class UnaryCriterion extends Criterion {
protected final Field expression; protected final Field expression;
protected final Object value; protected final Object value;
UnaryCriterion(Field expression, Operator operator, Object value) { UnaryCriterion(Field expression, Operator operator, Object value) {
super(operator); super(operator);
this.expression = expression; this.expression = expression;
this.value = value; this.value = value;
} }
@Override @Override
protected void populate(StringBuilder sb) { protected void populate(StringBuilder sb) {
beforePopulateOperator(sb); beforePopulateOperator(sb);
populateOperator(sb); populateOperator(sb);
afterPopulateOperator(sb); afterPopulateOperator(sb);
} }
public static Criterion eq(Field expression, Object value) { public static Criterion eq(Field expression, Object value) {
return new UnaryCriterion(expression, Operator.eq, value); return new UnaryCriterion(expression, Operator.eq, value);
} }
protected void beforePopulateOperator(StringBuilder sb) { protected void beforePopulateOperator(StringBuilder sb) {
sb.append(expression); sb.append(expression);
} }
protected void populateOperator(StringBuilder sb) { protected void populateOperator(StringBuilder sb) {
sb.append(operator); sb.append(operator);
} }
@SuppressWarnings("nls") @SuppressWarnings("nls")
protected void afterPopulateOperator(StringBuilder sb) { protected void afterPopulateOperator(StringBuilder sb) {
if(value == null) if(value == null)
return; return;
else if(value instanceof String) else if(value instanceof String)
sb.append("'").append(sanitize((String) value)).append("'"); sb.append("'").append(sanitize((String) value)).append("'");
else else
sb.append(value); sb.append(value);
} }
/** /**
* Sanitize the given input for SQL * Sanitize the given input for SQL
* @param input * @param input
* @return * @return
*/ */
@SuppressWarnings("nls") @SuppressWarnings("nls")
public static String sanitize(String input) { public static String sanitize(String input) {
return input.replace("\\", "\\\\").replace("'", "\\'"); return input.replace("\\", "\\\\").replace("'", "\\'");
} }
public static Criterion neq(Field field, Object value) { public static Criterion neq(Field field, Object value) {
return new UnaryCriterion(field, Operator.neq, value); return new UnaryCriterion(field, Operator.neq, value);
} }
public static Criterion gt(Field field, Object value) { public static Criterion gt(Field field, Object value) {
return new UnaryCriterion(field, Operator.gt, value); return new UnaryCriterion(field, Operator.gt, value);
} }
public static Criterion lt(Field field, Object value) { public static Criterion lt(Field field, Object value) {
return new UnaryCriterion(field, Operator.lt, value); return new UnaryCriterion(field, Operator.lt, value);
} }
public static Criterion isNull(Field field) { public static Criterion isNull(Field field) {
return new UnaryCriterion(field, Operator.isNull, null) { return new UnaryCriterion(field, Operator.isNull, null) {
@Override @Override
protected void populateOperator(StringBuilder sb) { protected void populateOperator(StringBuilder sb) {
sb.append(SPACE).append(operator); sb.append(SPACE).append(operator);
} }
}; };
} }
public static Criterion isNotNull(Field field) { public static Criterion isNotNull(Field field) {
return new UnaryCriterion(field, Operator.isNotNull, null) { return new UnaryCriterion(field, Operator.isNotNull, null) {
@Override @Override
protected void populateOperator(StringBuilder sb) { protected void populateOperator(StringBuilder sb) {
sb.append(SPACE).append(operator); sb.append(SPACE).append(operator);
} }
}; };
} }
public static Criterion like(Field field, String value) { public static Criterion like(Field field, String value) {
return new UnaryCriterion(field, Operator.like, value) { return new UnaryCriterion(field, Operator.like, value) {
@Override @Override
protected void populateOperator(StringBuilder sb) { protected void populateOperator(StringBuilder sb) {
sb.append(SPACE).append(operator).append(SPACE); sb.append(SPACE).append(operator).append(SPACE);
} }
}; };
} }
} }

Loading…
Cancel
Save