/**
* Objects being passed inside fluent interface calls.
*/
package squill.builder;
import java.util.ArrayList;
import java.util.List;
import squill.db.Database;
import squill.query.FromPart;
import squill.query.QueryContext;
import squill.query.WherePart;
import squill.query.from.FromExpression;
import squill.query.select.ReadableTable;
/**
* Transfers in fluent interface implement this interface.
*/
public abstract class BaseBuilder {
protected final Database database;
protected QueryContext ctx;
protected final FromPart fromPart;
protected final WherePart wherePart;
protected BaseBuilder(QueryContext ctx, Database database) {
this.ctx = ctx;
this.database = database;
fromPart = new FromPart(ctx);
wherePart = new WherePart(ctx);
}
protected void addTables(FromExpression... fromExpr) {
fromPart.addFromExpressions(fromExpr);
}
protected void addTable(ReadableTable table) {
fromPart.addFromExpressions(table);
}
private final List<Object> argsList = new ArrayList<Object>();
protected void addArg(Object arg) {
argsList.add(arg);
}
protected void addArgs(List<Object> args) {
argsList.addAll(args);
}
protected FromPart getTablePart() {
return fromPart;
}
protected List<Object> getArgs() {
List<Object> args = new ArrayList<Object>(argsList);
args.addAll(wherePart.getSqlArguments());
return args;
}
/**
* Glue the final SQL out of fragments, some of them are implemented by
* extending classes
*/
public abstract String getSql();
protected long executeCUD() {
return database.executeCUD(getSql(), getArgs(), ctx);
}
public void addParam(String name, Object value) {
database.addParam(name, value);
}
protected void setQueryContext(QueryContext ctx) {
this.ctx = ctx;
fromPart.setQueryContext(ctx);
wherePart.setQueryContext(ctx);
}
}