Skip to content

Commit aaa18e0

Browse files
committedDec 1, 2017
Address review comments
1 parent 791eb91 commit aaa18e0

File tree

2 files changed

+11
-3
lines changed

2 files changed

+11
-3
lines changed
 

‎src/providers/ogr/qgsogrprovider.cpp

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1982,8 +1982,6 @@ bool QgsOgrProvider::createSpatialIndex()
19821982
{
19831983
QMutex *mutex = nullptr;
19841984
OGRLayerH layer = mOgrOrigLayer->getHandleAndMutex( mutex );
1985-
QMutexLocker locker( mutex );
1986-
19871985
QByteArray sql = QByteArray( "SELECT CreateSpatialIndex(" + quotedIdentifier( layerName ) + ","
19881986
+ quotedIdentifier( OGR_L_GetGeometryColumn( layer ) ) + ") " ); // quote the layer name so spaces are handled
19891987
mOgrOrigLayer->ExecuteSQLNoReturn( sql );
@@ -2012,6 +2010,12 @@ bool QgsOgrProvider::createAttributeIndex( int field )
20122010
if ( mGDALDriverName == QLatin1String( "GPKG" ) ||
20132011
mGDALDriverName == QLatin1String( "SQLite" ) )
20142012
{
2013+
if ( field == 0 && mFirstFieldIsFid )
2014+
{
2015+
// already an index on this field, no need to re-created
2016+
return false;
2017+
}
2018+
20152019
QString indexName = createIndexName( mOgrOrigLayer->name(), fields().at( field ).name() );
20162020
QByteArray createSql = "CREATE INDEX IF NOT EXISTS " + textEncoding()->fromUnicode( indexName ) + " ON " + quotedLayerName + " (" + textEncoding()->fromUnicode( fields().at( field ).name() ) + ")";
20172021
mOgrOrigLayer->ExecuteSQLNoReturn( createSql );

‎tests/src/python/test_provider_ogr_gpkg.py

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -787,6 +787,10 @@ def testCreateAttributeIndex(self):
787787
self.assertTrue(vl.dataProvider().capabilities() & QgsVectorDataProvider.CreateAttributeIndex)
788788
self.assertFalse(vl.dataProvider().createAttributeIndex(-1))
789789
self.assertFalse(vl.dataProvider().createAttributeIndex(100))
790+
791+
# should not be allowed - there's already a index on the primary key
792+
self.assertFalse(vl.dataProvider().createAttributeIndex(0))
793+
790794
self.assertTrue(vl.dataProvider().createAttributeIndex(1))
791795

792796
con = spatialite_connect(tmpfile, isolation_level=None)
@@ -819,7 +823,7 @@ def testCreateAttributeIndex(self):
819823
def testCreateSpatialIndex(self):
820824
tmpfile = os.path.join(self.basetestpath, 'testGeopackageSpatialIndex.gpkg')
821825
ds = ogr.GetDriverByName('GPKG').CreateDataSource(tmpfile)
822-
lyr = ds.CreateLayer('test', geom_type=ogr.wkbPolygon)
826+
lyr = ds.CreateLayer('test', geom_type=ogr.wkbPolygon, options=['SPATIAL_INDEX=NO'])
823827
lyr.CreateField(ogr.FieldDefn('str_field', ogr.OFTString))
824828
lyr.CreateField(ogr.FieldDefn('str_field2', ogr.OFTString))
825829
f = None

0 commit comments

Comments
 (0)
Please sign in to comment.