Skip to content

Commit 6ddcae2

Browse files
committed
Fix calculation of spatialite SelectAtId capability
1 parent 4fbf4cf commit 6ddcae2

File tree

2 files changed

+23
-0
lines changed

2 files changed

+23
-0
lines changed

src/providers/spatialite/qgsspatialiteprovider.cpp

+20
Original file line numberDiff line numberDiff line change
@@ -588,8 +588,23 @@ QgsAbstractFeatureSource* QgsSpatiaLiteProvider::featureSource() const
588588
return new QgsSpatiaLiteFeatureSource( this );
589589
}
590590

591+
void QgsSpatiaLiteProvider::updatePrimaryKeyCapabilities()
592+
{
593+
if ( mPrimaryKey.isEmpty() )
594+
{
595+
enabledCapabilities &= ~QgsVectorDataProvider::SelectAtId;
596+
enabledCapabilities &= ~QgsVectorDataProvider::SelectGeometryAtId;
597+
}
598+
else
599+
{
600+
enabledCapabilities |= QgsVectorDataProvider::SelectAtId;
601+
enabledCapabilities |= QgsVectorDataProvider::SelectGeometryAtId;
602+
}
603+
}
604+
591605
#ifdef SPATIALITE_VERSION_GE_4_0_0
592606
// only if libspatialite version is >= 4.0.0
607+
593608
void QgsSpatiaLiteProvider::loadFieldsAbstractInterface( gaiaVectorLayerPtr lyr )
594609
{
595610
if ( lyr == nullptr )
@@ -657,6 +672,9 @@ void QgsSpatiaLiteProvider::loadFieldsAbstractInterface( gaiaVectorLayerPtr lyr
657672
mPrimaryKeyAttrs << i - 1;
658673
}
659674
}
675+
676+
updatePrimaryKeyCapabilities();
677+
660678
sqlite3_free_table( results );
661679
}
662680
#endif
@@ -849,6 +867,8 @@ void QgsSpatiaLiteProvider::loadFields()
849867
mPrimaryKey = pkName;
850868
}
851869

870+
updatePrimaryKeyCapabilities();
871+
852872
return;
853873

854874
error:

src/providers/spatialite/qgsspatialiteprovider.h

+3
Original file line numberDiff line numberDiff line change
@@ -426,6 +426,8 @@ class QgsSpatiaLiteProvider: public QgsVectorDataProvider
426426
static int computeMultiWKB3Dsize( const unsigned char *p_in, int little_endian,
427427
int endian_arch );
428428
private:
429+
void updatePrimaryKeyCapabilities();
430+
429431
int computeSizeFromMultiWKB2D( const unsigned char *p_in, int nDims,
430432
int little_endian,
431433
int endian_arch );
@@ -496,6 +498,7 @@ class QgsSpatiaLiteProvider: public QgsVectorDataProvider
496498
QgsSqliteHandle *handle;
497499

498500
friend class QgsSpatiaLiteFeatureSource;
501+
499502
};
500503

501504
#endif

0 commit comments

Comments
 (0)