@@ -319,6 +319,8 @@ QString QgsPostgresProvider::storageType() const
319319}
320320
321321// Qt5 has that built in
322+ // ... BUT it does not behave exactly the same way as our implementation
323+ // (e.g. comparison of QVariantList does not work)
322324#if QT_VERSION < 0x050000
323325static bool operator <( const QVariant &a, const QVariant &b )
324326{
@@ -488,11 +490,9 @@ void QgsPostgresProvider::appendPkParams( QgsFeatureId featureId, QStringList &p
488490
489491 case pktFidMap:
490492 {
491- QVariant pkValsVariant = mShared ->lookupKey ( featureId );
492- QList<QVariant> pkVals;
493- if ( !pkValsVariant.isNull () )
493+ QVariantList pkVals = mShared ->lookupKey ( featureId );
494+ if ( !pkVals.isEmpty () )
494495 {
495- pkVals = pkValsVariant.toList ();
496496 Q_ASSERT ( pkVals.size () == mPrimaryKeyAttrs .size () );
497497 }
498498
@@ -554,11 +554,9 @@ QString QgsPostgresUtils::whereClause( QgsFeatureId featureId, const QgsFields&
554554
555555 case pktFidMap:
556556 {
557- QVariant pkValsVariant = sharedData->lookupKey ( featureId );
558- if ( !pkValsVariant. isNull () )
557+ QVariantList pkVals = sharedData->lookupKey ( featureId );
558+ if ( !pkVals. isEmpty () )
559559 {
560- QList<QVariant> pkVals = pkValsVariant.toList ();
561-
562560 Q_ASSERT ( pkVals.size () == pkAttrs.size () );
563561
564562 QString delim = " " ;
@@ -2058,14 +2056,14 @@ bool QgsPostgresProvider::addFeatures( QgsFeatureList &flist )
20582056 }
20592057 else
20602058 {
2061- QList<QVariant> primaryKeyVals;
2059+ QVariantList primaryKeyVals;
20622060
20632061 Q_FOREACH ( int idx, mPrimaryKeyAttrs )
20642062 {
20652063 primaryKeyVals << attrs.at ( idx );
20662064 }
20672065
2068- features->setFeatureId ( mShared ->lookupFid ( QVariant ( primaryKeyVals ) ) );
2066+ features->setFeatureId ( mShared ->lookupFid ( primaryKeyVals ) );
20692067 }
20702068 QgsDebugMsgLevel ( QString ( " new fid=%1" ).arg ( features->id () ), 4 );
20712069 }
@@ -2416,9 +2414,7 @@ bool QgsPostgresProvider::changeAttributeValues( const QgsChangedAttributesMap &
24162414 // update feature id map if key was changed
24172415 if ( pkChanged && mPrimaryKeyType == pktFidMap )
24182416 {
2419- QVariant v = mShared ->removeFid ( fid );
2420-
2421- QList<QVariant> k = v.toList ();
2417+ QVariantList k = mShared ->removeFid ( fid );
24222418
24232419 for ( int i = 0 ; i < mPrimaryKeyAttrs .size (); i++ )
24242420 {
@@ -2766,9 +2762,7 @@ bool QgsPostgresProvider::changeFeatures( const QgsChangedAttributesMap &attr_ma
27662762 // update feature id map if key was changed
27672763 if ( pkChanged && mPrimaryKeyType == pktFidMap )
27682764 {
2769- QVariant v = mShared ->removeFid ( fid );
2770-
2771- QList<QVariant> k = v.toList ();
2765+ QVariantList k = mShared ->removeFid ( fid );
27722766
27732767 for ( int i = 0 ; i < mPrimaryKeyAttrs .size (); i++ )
27742768 {
@@ -4291,11 +4285,11 @@ void QgsPostgresSharedData::setFeaturesCounted( long count )
42914285}
42924286
42934287
4294- QgsFeatureId QgsPostgresSharedData::lookupFid ( const QVariant & v )
4288+ QgsFeatureId QgsPostgresSharedData::lookupFid ( const QVariantList& v )
42954289{
42964290 QMutexLocker locker ( &mMutex );
42974291
4298- QMap<QVariant , QgsFeatureId>::const_iterator it = mKeyToFid .constFind ( v );
4292+ QMap<QVariantList , QgsFeatureId>::const_iterator it = mKeyToFid .constFind ( v );
42994293
43004294 if ( it != mKeyToFid .constEnd () )
43014295 {
@@ -4309,30 +4303,30 @@ QgsFeatureId QgsPostgresSharedData::lookupFid( const QVariant &v )
43094303}
43104304
43114305
4312- QVariant QgsPostgresSharedData::removeFid ( QgsFeatureId fid )
4306+ QVariantList QgsPostgresSharedData::removeFid ( QgsFeatureId fid )
43134307{
43144308 QMutexLocker locker ( &mMutex );
43154309
4316- QVariant v = mFidToKey [ fid ];
4310+ QVariantList v = mFidToKey [ fid ];
43174311 mFidToKey .remove ( fid );
43184312 mKeyToFid .remove ( v );
43194313 return v;
43204314}
43214315
4322- void QgsPostgresSharedData::insertFid ( QgsFeatureId fid, const QVariant & k )
4316+ void QgsPostgresSharedData::insertFid ( QgsFeatureId fid, const QVariantList & k )
43234317{
43244318 QMutexLocker locker ( &mMutex );
43254319
43264320 mFidToKey .insert ( fid, k );
43274321 mKeyToFid .insert ( k, fid );
43284322}
43294323
4330- QVariant QgsPostgresSharedData::lookupKey ( QgsFeatureId featureId )
4324+ QVariantList QgsPostgresSharedData::lookupKey ( QgsFeatureId featureId )
43314325{
43324326 QMutexLocker locker ( &mMutex );
43334327
4334- QMap<QgsFeatureId, QVariant >::const_iterator it = mFidToKey .constFind ( featureId );
4328+ QMap<QgsFeatureId, QVariantList >::const_iterator it = mFidToKey .constFind ( featureId );
43354329 if ( it != mFidToKey .constEnd () )
43364330 return it.value ();
4337- return QVariant ();
4331+ return QVariantList ();
43384332}
0 commit comments