package squill.builder;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import squill.db.Database;
import squill.query.QueryContext;
import squill.query.cud.UpdateCruElement;
import squill.query.cud.UpdateElement;
import squill.query.cud.UpdateFieldElement;
import squill.util.StringUtil;
/**
* WHERE Builder object used in UPDATE clause.
* NB! For SELECT clause there is separate WHERE-clause
*
* @see squill.builder.SelWhereBuilder
*/
public class UpWhereBuilder<TABLE> extends BaseBuilder {
// list of fields to select from
private List<UpdateElement<TABLE>> setList;
protected UpWhereBuilder(QueryContext ctx, Database database) {
super(ctx, database);
}
public long set(UpdateFieldElement<TABLE>... elements) {
setList = Arrays.<UpdateElement<TABLE>>asList(elements);
for (UpdateFieldElement<TABLE> updateFieldElement : elements) {
updateFieldElement.setQueryContext(ctx);
addArgs(updateFieldElement.getSqlArguments());
}
return executeCUD();
// TODO - validate that elements belong to table (if not type safe!)
}
public long set(UpdateCruElement<TABLE> cruElement) {
cruElement.setQueryContext(ctx);
addArgs(cruElement.getSqlArguments());
setList = Collections.<UpdateElement<TABLE>>singletonList(cruElement);
return executeCUD();
}
@Override
public String getSql() {
StringBuilder sql = new StringBuilder();
sql.append("UPDATE ");
sql.append(fromPart.getTablesWithAliasesSql());
sql.append(" SET ");
sql.append(getSetValuesSql());
sql.append(wherePart.getDefaultSql());
return sql.toString();
}
protected String getSetValuesSql() {
return StringUtil.join(setList, UpdateElement.GET_SQL, ", ");
}
}