Fix calculation of spatialite SelectAtId capability

This commit is contained in:
Nyall Dawson 2015-12-10 16:20:43 +11:00
parent 4fbf4cf3ad
commit 6ddcae2936
2 changed files with 23 additions and 0 deletions

View File

@ -588,8 +588,23 @@ QgsAbstractFeatureSource* QgsSpatiaLiteProvider::featureSource() const
return new QgsSpatiaLiteFeatureSource( this );
}
void QgsSpatiaLiteProvider::updatePrimaryKeyCapabilities()
{
if ( mPrimaryKey.isEmpty() )
{
enabledCapabilities &= ~QgsVectorDataProvider::SelectAtId;
enabledCapabilities &= ~QgsVectorDataProvider::SelectGeometryAtId;
}
else
{
enabledCapabilities |= QgsVectorDataProvider::SelectAtId;
enabledCapabilities |= QgsVectorDataProvider::SelectGeometryAtId;
}
}
#ifdef SPATIALITE_VERSION_GE_4_0_0
// only if libspatialite version is >= 4.0.0
void QgsSpatiaLiteProvider::loadFieldsAbstractInterface( gaiaVectorLayerPtr lyr )
{
if ( lyr == nullptr )
@ -657,6 +672,9 @@ void QgsSpatiaLiteProvider::loadFieldsAbstractInterface( gaiaVectorLayerPtr lyr
mPrimaryKeyAttrs << i - 1;
}
}
updatePrimaryKeyCapabilities();
sqlite3_free_table( results );
}
#endif
@ -849,6 +867,8 @@ void QgsSpatiaLiteProvider::loadFields()
mPrimaryKey = pkName;
}
updatePrimaryKeyCapabilities();
return;
error:

View File

@ -426,6 +426,8 @@ class QgsSpatiaLiteProvider: public QgsVectorDataProvider
static int computeMultiWKB3Dsize( const unsigned char *p_in, int little_endian,
int endian_arch );
private:
void updatePrimaryKeyCapabilities();
int computeSizeFromMultiWKB2D( const unsigned char *p_in, int nDims,
int little_endian,
int endian_arch );
@ -496,6 +498,7 @@ class QgsSpatiaLiteProvider: public QgsVectorDataProvider
QgsSqliteHandle *handle;
friend class QgsSpatiaLiteFeatureSource;
};
#endif