// 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.database.DbFeature; import org.openstreetmap.osmosis.core.store.Storeable; import org.openstreetmap.osmosis.pgsimple.common.BaseTableReader; import org.openstreetmap.osmosis.pgsimple.common.DatabaseContext; /** * Reads all features of a particular type for an entity from a feature table * ordered by the entity identifier. * * @author Brett Henderson * @param <Tef> * The entity feature type to be read. * @param <Tdb> * The entity feature database wrapper type to be used. */ public class EntityFeatureTableReader<Tef extends Storeable, Tdb extends DbFeature<Tef>> extends BaseTableReader<Tdb> { private EntityFeatureMapper<Tdb> entityFeatureBuilder; private String sql; /** * Creates a new instance. * * @param dbCtx * The active connection to use for reading from the database. * @param entityFeatureBuilder * Provides entity feature jdbc bindings. */ public EntityFeatureTableReader(DatabaseContext dbCtx, EntityFeatureMapper<Tdb> entityFeatureBuilder) { super(dbCtx); this.entityFeatureBuilder = entityFeatureBuilder; sql = entityFeatureBuilder.getSqlSelect(false, true); } /** * Creates a new instance. * * @param dbCtx * The active connection to use for reading from the database. * @param entityFeatureBuilder * Provides entity feature jdbc bindings. * @param constraintTable * The table containing a column named id defining the list of * entities to be returned. */ public EntityFeatureTableReader( DatabaseContext dbCtx, EntityFeatureMapper<Tdb> entityFeatureBuilder, String constraintTable) { super(dbCtx); this.entityFeatureBuilder = entityFeatureBuilder; sql = entityFeatureBuilder.getSqlSelect(false, false) + " INNER JOIN " + constraintTable + " c ON f." + entityFeatureBuilder.getParentEntityName() + "_id = c.id" + entityFeatureBuilder.getSqlDefaultOrderBy(); } /** * {@inheritDoc} */ @Override protected ResultSet createResultSet(DatabaseContext queryDbCtx) { return queryDbCtx.executeQuery(sql); } /** * {@inheritDoc} */ @Override protected ReadResult<Tdb> createNextValue(ResultSet resultSet) { return new ReadResult<Tdb>( true, entityFeatureBuilder.buildEntity(resultSet) ); } }