// This software is released into the Public Domain. See copying.txt for details. package org.openstreetmap.osmosis.pgsimple.v0_6.impl; import java.sql.ResultSet; import org.openstreetmap.osmosis.core.domain.v0_6.Entity; import org.openstreetmap.osmosis.pgsimple.common.BaseTableReader; import org.openstreetmap.osmosis.pgsimple.common.DatabaseContext; /** * Reads entities from a database ordered by their identifier. These entities * won't be populated with tags. * * @author Brett Henderson * @param <T> * The entity type to be supported. */ public class EntityTableReader<T extends Entity> extends BaseTableReader<T> { private EntityMapper<T> entityMapper; private String sql; /** * Creates a new instance. * * @param dbCtx * The active connection to use for reading from the database. * @param entityBuilder * The entity builder implementation to utilise. */ public EntityTableReader(DatabaseContext dbCtx, EntityMapper<T> entityBuilder) { super(dbCtx); this.entityMapper = entityBuilder; sql = entityBuilder.getSqlSelect(false, false) + " ORDER BY e.id"; } /** * Creates a new instance with a constrained search. * * @param dbCtx * The active connection to use for reading from the database. * @param entityBuilder * The entity builder implementation to utilise. * @param constraintTable * The table containing a column named id defining the list of * entities to be returned. */ public EntityTableReader(DatabaseContext dbCtx, EntityMapper<T> entityBuilder, String constraintTable) { super(dbCtx); this.entityMapper = entityBuilder; sql = entityBuilder.getSqlSelect(false, false) + " INNER JOIN " + constraintTable + " c ON e.id = c.id" + " ORDER BY e.id"; } /** * {@inheritDoc} */ @Override protected ResultSet createResultSet(DatabaseContext queryDbCtx) { return queryDbCtx.executeQuery(sql); } /** * {@inheritDoc} */ @Override protected ReadResult<T> createNextValue(ResultSet resultSet) { T entity; entity = entityMapper.parseRecord(resultSet); return new ReadResult<T>(true, entity); } }