package pl.shockah.shocky.sql;
import java.util.Collection;
import java.util.Map;
import java.util.Map.Entry;
public abstract class Query {
protected static String getColumnsClause(Collection<String> list) {
if (list == null || list.isEmpty()) return "*";
StringBuilder sb = new StringBuilder();
for (String s : list) {
if (s == null) break;
if (sb.length() != 0) sb.append(',');
sb.append(s);
}
return sb.toString();
}
protected static String getValuesPairClause(Map<String,Object> list) {
StringBuilder sb = new StringBuilder();
for (Entry<String, Object> pair : list.entrySet()) {
if (sb.length() != 0) sb.append(',');
sb.append(pair.getKey());
sb.append('=');
Object value = pair.getValue();
if (value instanceof Wildcard)
sb.append('?');
else if (value instanceof String)
sb.append('\'').append(value.toString().replace("\\","\\\\").replace("'","\\'")).append('\'');
else
sb.append(value);
}
return sb.toString();
}
protected static String getValuesObjectClause(Collection<Object> list) {
StringBuilder sb = new StringBuilder();
for (Object o : list) {
if (o == null) break;
if (sb.length() != 0) sb.append(',');
if (o instanceof Wildcard)
sb.append('?');
else if (o instanceof String)
sb.append('\'').append(o.toString().replace("\\","\\\\").replace("'","\\'")).append('\'');
else
sb.append(o);
}
return sb.toString();
}
protected static String getOrderByClause(Map<String,Boolean> list) {
if (list == null || list.isEmpty()) return "";
StringBuilder sb = new StringBuilder("ORDER BY ");
int i = 0;
for (Entry<String, Boolean> pair : list.entrySet()) {
if (i > 0) sb.append(',');
sb.append(pair.getKey());
sb.append(' ');
sb.append(pair.getValue() ? "ASC" : "DESC");
i++;
}
return sb.toString();
}
public static String getWhereClause(Collection<Criterion> list) {
if (list == null || list.isEmpty()) return "";
StringBuilder sb = new StringBuilder("WHERE ");
int i = 0;
for (Criterion c : list) {
if (i > 0) {
if (c.useOR)
sb.append(" OR ");
else
sb.append(" AND ");
}
sb.append(c);
i++;
}
return sb.toString();
}
public abstract String getSQLQuery();
}