package jef.database.query; import java.util.Collection; import java.util.Collections; import java.util.List; import java.util.Map; import jef.database.Condition; import jef.database.Condition.Operator; import jef.database.DataObject; import jef.database.DebugUtil; import jef.database.Field; import jef.database.IConditionField; import jef.database.IQueryableEntity; import jef.database.meta.ITableMetadata; import jef.database.meta.Reference; import jef.database.wrapper.populator.Transformer; /** * 不可更改的Query对象实现,用于内部处理 * @author jiyi * * @param <T> */ public final class ReadOnlyQuery<T extends IQueryableEntity> extends AbstractQuery<T> { private static final long serialVersionUID = 1L; /** * 结果转换器 */ protected final Transformer t; @SuppressWarnings("rawtypes") public static Query<?> getEmptyQuery(ITableMetadata cls) { return new ReadOnlyQuery(cls); } @SuppressWarnings("unchecked") public ReadOnlyQuery(ITableMetadata clz){ this.type=clz; DataObject data=(DataObject) clz.newInstance(); DebugUtil.bindQuery(data, this); this.instance=(T)data; t = new Transformer(type); this.cacheable=type.isCacheable(); } @SuppressWarnings("unchecked") public List<Condition> getConditions() { return Collections.EMPTY_LIST; } public EntityMappingProvider getSelectItems() { throw new UnsupportedOperationException(); } public void setSelectItems(Selects select) { throw new UnsupportedOperationException(); } public SqlContext prepare() { SqlContext context = new SqlContext("t", this); return context; } public void clearQuery() { } @SuppressWarnings("unchecked") public Collection<OrderField> getOrderBy() { return Collections.EMPTY_LIST; } public void setOrderBy(boolean asc, Field... orderby) { throw new UnsupportedOperationException(); } public void addOrderBy(boolean asc, Field... orderby) { throw new UnsupportedOperationException(); } public void setAttribute(String key, Object value) { throw new UnsupportedOperationException(); } public Object getAttribute(String key) { return null; } @SuppressWarnings("unchecked") public Map<String, Object> getAttributes() { return Collections.EMPTY_MAP; } public void setMaxResult(int size) { } public void setFetchSize(int size) { } public void setQueryTimeout(int timout) { } public Query<T> addExtendQuery(Query<?> querys) { throw new UnsupportedOperationException(); } public Query<T> setAllRecordsCondition() { throw new UnsupportedOperationException(); } public Query<T> addCondition(Field field, Object value) { throw new UnsupportedOperationException(); } public Query<T> addCondition(Field field, Operator oper, Object value) { throw new UnsupportedOperationException(); } public Query<T> addCondition(IConditionField field) { throw new UnsupportedOperationException(); } public Query<T> addCondition(Condition condition) { throw new UnsupportedOperationException(); } @SuppressWarnings("unchecked") public Map<Reference, List<Condition>> getFilterCondition() { return Collections.EMPTY_MAP; } public Query<?>[] getOtherQueryProvider() { return EMPTY_Q; } public void setCustomTableName(String name) { throw new UnsupportedOperationException(); } public Query<T> addCascadeCondition(Condition cond) { throw new UnsupportedOperationException(); } public Query<T> addCascadeCondition(String refName, Condition... conds) { throw new UnsupportedOperationException(); } @Override public String toString() { return type.getName()+"[Empty]"; } public boolean isCascadeViaOuterJoin() { return true; } public void setCascadeViaOuterJoin(boolean cascadeViaOuterJoin) { } public void setCascade(boolean cascade) { throw new UnsupportedOperationException(); } public Transformer getResultTransformer() { if (t == null) { } return t; } @Override public boolean isAll() { return true; } @Override public boolean isSelectCustomized() { return false; } }