Revision 209 trunk/org.gvsig.gdal/org.gvsig.gdal.prov/org.gvsig.gdal.prov.ogr/src/main/java/org/gvsig/gdal/prov/ogr/OGRFetureSetProvider.java

View differences:

OGRFetureSetProvider.java
55 55
import org.slf4j.LoggerFactory;
56 56

  
57 57
/**
58
 * 
58
 *
59 59
 * @author <a href="mailto:lmarques@disid.com">Lluis Marques</a>
60 60
 *
61 61
 */
......
122 122
        LOG.debug("Running query {} over {}", new Object[] { sql, dataSource.getName() });
123 123

  
124 124
        Layer layer = null;
125
        if (getOGRStoreProvider().getLayer().TestCapability(ogrConstants.OLCFastSpatialFilter)
125
        boolean ignoreSpatialFilter = (boolean) getStore().getParameters().getDynValue(OGRDataStoreParameters.IGNORE_SPATIAL_FILTER);
126
        if (!ignoreSpatialFilter && getOGRStoreProvider().getLayer().TestCapability(ogrConstants.OLCFastSpatialFilter)
126 127
            && getQuery().hasFilter()) {
127 128

  
128 129
            String evaluatorSQL = getQuery().getFilter().getSQL();
......
153 154
        } else {
154 155
            layer = dataSource.ExecuteSQL(sql);
155 156
        }
156
        
157

  
157 158
        if(layer == null){
158 159
            LOG.warn("The result of query is null. SQL {} FeatureType {}", sql, getFeatureType());
159 160
            LOG.warn("Getting data without SQL filter");
160 161
            OGRDataStoreParameters ogrParameters = (OGRDataStoreParameters) getOGRStoreProvider().getParameters();
161 162
            layer = dataSource.ExecuteSQL("SELECT * FROM ".concat(ogrParameters.getLayerName()));
162 163
        }
163
        
164

  
164 165
        return new OGRFastIterator(getStore(), layer, index);
165 166
    }
166 167

  
......
188 189

  
189 190
        private FeatureProvider featureProvider;
190 191

  
192
        private Feature currentOgrFeature;
193
        private Feature nextOgrFeature;
194

  
191 195
        public OGRFastIterator(FeatureStoreProvider storeProvider, Layer layer, long index)
192 196
            throws OGRUnsupportedFormatException {
193 197
            super(storeProvider);
......
196 200
            this.converter = new OGRConverter();
197 201
            this.index = index;
198 202
            this.layer = layer;
199
            this.layer.SetNextByIndex((int) index);
203
            this.layer.GetFeatureCount();
204
            this.layer.ResetReading();
205
            if(index!=0){
206
                this.layer.SetNextByIndex((int) index);
207
            }
208
            this.currentOgrFeature = null;
209
            this.nextOgrFeature =  this.layer.GetNextFeature();
200 210
        }
201 211

  
202 212
        @Override
203 213
        public void remove() {
204
            Feature ogrFeature;
205
            ogrFeature = this.layer.GetNextFeature();
206
            this.layer.DeleteFeature(ogrFeature.GetFID());
207
            index++;
214
            if (currentOgrFeature != null) {
215
                this.layer.DeleteFeature(currentOgrFeature.GetFID());
216
                currentOgrFeature=null;
217
            }
208 218
        }
209 219

  
210 220
        @Override
211 221
        protected Object internalNext() {
212
            Feature ogrFeature = this.layer.GetNextFeature();
213
            this.featureProvider = converter.convert(featureProvider, getFeatureType(), ogrFeature);
214
            index++;
222
            this.currentOgrFeature = this.nextOgrFeature;
223
            this.featureProvider = null;
224
            this.featureProvider = converter.convert(featureProvider, getFeatureType(), this.nextOgrFeature);
225
            this.nextOgrFeature =  this.layer.GetNextFeature();
215 226
            return this.featureProvider;
216 227
        }
217 228

  
218 229
        @Override
219 230
        protected boolean internalHasNext() {
220
            return index < this.layer.GetFeatureCount() ? true : false;
231
            return nextOgrFeature!=null;
221 232
        }
222 233

  
223 234
        @Override

Also available in: Unified diff