package jef.database; import java.sql.ResultSet; import java.sql.SQLException; import java.util.Arrays; import java.util.Collection; import jef.database.dialect.DatabaseDialect; import jef.database.dialect.type.ColumnMapping; import jef.database.jdbc.result.ResultSetImpl; import jef.database.query.SqlContext; import jef.database.wrapper.clause.BindSql; import jef.tools.reflect.BeanWrapper; public final class LobLazyLoadTask implements LazyLoadTask { private ColumnMapping mType; private String tableName; private String columnname; private String fieldName; private DatabaseDialect profile; public LobLazyLoadTask(ColumnMapping mtype, DatabaseDialect profile, String tableName) { this.mType = mtype; this.tableName = profile.getObjectNameToUse(tableName); this.columnname = mType.getColumnName(profile, true); this.profile = profile; this.fieldName = mtype.fieldName(); } public void process(Session db, Object o) throws SQLException { IQueryableEntity obj = (IQueryableEntity) o; BindSql where=db.preProcessor.toWhereClause( obj.getQuery(), new SqlContext(null, obj.getQuery()), null, profile,false); String sql = "select " + columnname + " from " + tableName + where.getSql(); Object[] params=new Object[where.getBind().size()]; for(int i=0;i<params.length;i++){ params[i]=where.getBind().get(i).getConstantValue(); } ResultSet rs = db.getResultSet(sql, 10, params); if (rs.next()) { Object value = mType.jdbcGet(new ResultSetImpl(rs, profile), 1); if (value != null) { BeanWrapper bw = BeanWrapper.wrap(o, BeanWrapper.FAST); bw.setPropertyValue(fieldName, value); } } } public Collection<String> getEffectFields() { return Arrays.asList(fieldName); } }