/**
* Parts of SQL query as objects.
*/
package squill.query.from;
import static java.lang.String.format;
import java.util.Collections;
import java.util.List;
import squill.query.JoinType;
import squill.query.QueryContext;
import squill.query.QueryPart;
import squill.query.select.Column;
import squill.query.select.ReadableTable;
/**
* join expression, TODO sql arguments, whole where expressions !!
*/
public class JoinElement<FIELD, OBJ> implements FromExpression, QueryPart {
private final ReadableTable<OBJ> table;
private final Column<FIELD, OBJ> field1;
private final Column<FIELD, ?> field2;
private final JoinType type;
public JoinElement(OrmJoin ojoin) {
this((ReadableTable) ojoin.getTable(), (Column) ojoin.getSource(), (Column) ojoin.getTarget(), ojoin.getJoinType());
}
public JoinElement(ReadableTable<OBJ> table, Column<FIELD, OBJ> field1, Column<FIELD, ?> field2, JoinType type) {
this.table = table;
this.field1 = field1;
this.field2 = field2;
this.type = type;
}
// TODO neccesary?
public ReadableTable<OBJ> getTable() {
return table;
}
public String getDefaultSql() {
return getFromSql();
}
public List<Object> getSqlArguments() {
return Collections.emptyList();
}
public String getFromSql() {
return format(" %s JOIN %s ON (%s = %s) ", type,
table.getTableWithAliasSql(), field1.getDefaultSql(), field2.getDefaultSql());
}
public boolean isJoin() {
return true;
}
public void setQueryContext(QueryContext ctx) {
table.setQueryContext(ctx);
field1.setQueryContext(ctx);
field2.setQueryContext(ctx);
}
}