package pl.shockah.shocky.sql;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;
public class QueryUpdate extends Query {
private final String table;
private final Map<String,Object> values = new HashMap<String,Object>();
private final ArrayList<Criterion> criterions = new ArrayList<Criterion>();
private final Map<String,Boolean> orderby = new HashMap<String,Boolean>();
private int limitOffset = 0, limitCount = 1;
public QueryUpdate(String table) {
this.table = table;
}
public void set(String column, Object value) {
values.put(column,value);
}
public void addCriterions(Criterion... criterions) {
this.criterions.addAll(Arrays.asList(criterions));
}
public void addOrder(String column) {addOrder(column,true);}
public void addOrder(String column, boolean ascending) {
orderby.put(column,ascending);
}
public void setLimitOffset(int offset) {limitOffset = offset;}
public void setLimitCount(int count) {limitCount = count;}
public void setLimit(int offset, int count) {
setLimitOffset(offset);
setLimitCount(count);
}
public String getSQLQuery() {
String clauseValues = getValuesPairClause(values);
String clauseWhere = getWhereClause(criterions);
String clauseOrderBy = getOrderByClause(orderby);
String clauseLimit = limitOffset == 0 && limitCount == 1 ? "" : "LIMIT "+(limitOffset != 0 ? ""+limitOffset+"," : "")+limitCount;
return "UPDATE "+table+" SET "+clauseValues+(clauseWhere.isEmpty() ? "" : " "+clauseWhere)+(clauseOrderBy.isEmpty() ? "" : " "+clauseOrderBy)+(clauseLimit.isEmpty() ? "" : " "+clauseLimit);
}
}