@@ -319,6 +319,8 @@ QString QgsPostgresProvider::storageType() const
319
319
}
320
320
321
321
// 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)
322
324
#if QT_VERSION < 0x050000
323
325
static bool operator <( const QVariant &a, const QVariant &b )
324
326
{
@@ -401,6 +403,17 @@ static bool operator<( const QVariant &a, const QVariant &b )
401
403
}
402
404
#endif
403
405
406
+ #if QT_VERSION >= 0x050000 && QT_VERSION < 0x050600
407
+ #include < algorithm>
408
+ template <typename T>
409
+ bool operator <( const QList<T> &lhs, const QList<T> &rhs )
410
+ {
411
+ return std::lexicographical_compare ( lhs.begin (), lhs.end (),
412
+ rhs.begin (), rhs.end () );
413
+ }
414
+ #endif
415
+
416
+
404
417
QgsFeatureIterator QgsPostgresProvider::getFeatures ( const QgsFeatureRequest& request ) const
405
418
{
406
419
if ( !mValid )
@@ -488,11 +501,9 @@ void QgsPostgresProvider::appendPkParams( QgsFeatureId featureId, QStringList &p
488
501
489
502
case pktFidMap:
490
503
{
491
- QVariant pkValsVariant = mShared ->lookupKey ( featureId );
492
- QList<QVariant> pkVals;
493
- if ( !pkValsVariant.isNull () )
504
+ QVariantList pkVals = mShared ->lookupKey ( featureId );
505
+ if ( !pkVals.isEmpty () )
494
506
{
495
- pkVals = pkValsVariant.toList ();
496
507
Q_ASSERT ( pkVals.size () == mPrimaryKeyAttrs .size () );
497
508
}
498
509
@@ -554,11 +565,9 @@ QString QgsPostgresUtils::whereClause( QgsFeatureId featureId, const QgsFields&
554
565
555
566
case pktFidMap:
556
567
{
557
- QVariant pkValsVariant = sharedData->lookupKey ( featureId );
558
- if ( !pkValsVariant. isNull () )
568
+ QVariantList pkVals = sharedData->lookupKey ( featureId );
569
+ if ( !pkVals. isEmpty () )
559
570
{
560
- QList<QVariant> pkVals = pkValsVariant.toList ();
561
-
562
571
Q_ASSERT ( pkVals.size () == pkAttrs.size () );
563
572
564
573
QString delim = " " ;
@@ -2058,14 +2067,14 @@ bool QgsPostgresProvider::addFeatures( QgsFeatureList &flist )
2058
2067
}
2059
2068
else
2060
2069
{
2061
- QList<QVariant> primaryKeyVals;
2070
+ QVariantList primaryKeyVals;
2062
2071
2063
2072
Q_FOREACH ( int idx, mPrimaryKeyAttrs )
2064
2073
{
2065
2074
primaryKeyVals << attrs.at ( idx );
2066
2075
}
2067
2076
2068
- features->setFeatureId ( mShared ->lookupFid ( QVariant ( primaryKeyVals ) ) );
2077
+ features->setFeatureId ( mShared ->lookupFid ( primaryKeyVals ) );
2069
2078
}
2070
2079
QgsDebugMsgLevel ( QString ( " new fid=%1" ).arg ( features->id () ), 4 );
2071
2080
}
@@ -2416,9 +2425,7 @@ bool QgsPostgresProvider::changeAttributeValues( const QgsChangedAttributesMap &
2416
2425
// update feature id map if key was changed
2417
2426
if ( pkChanged && mPrimaryKeyType == pktFidMap )
2418
2427
{
2419
- QVariant v = mShared ->removeFid ( fid );
2420
-
2421
- QList<QVariant> k = v.toList ();
2428
+ QVariantList k = mShared ->removeFid ( fid );
2422
2429
2423
2430
for ( int i = 0 ; i < mPrimaryKeyAttrs .size (); i++ )
2424
2431
{
@@ -2766,9 +2773,7 @@ bool QgsPostgresProvider::changeFeatures( const QgsChangedAttributesMap &attr_ma
2766
2773
// update feature id map if key was changed
2767
2774
if ( pkChanged && mPrimaryKeyType == pktFidMap )
2768
2775
{
2769
- QVariant v = mShared ->removeFid ( fid );
2770
-
2771
- QList<QVariant> k = v.toList ();
2776
+ QVariantList k = mShared ->removeFid ( fid );
2772
2777
2773
2778
for ( int i = 0 ; i < mPrimaryKeyAttrs .size (); i++ )
2774
2779
{
@@ -4291,11 +4296,11 @@ void QgsPostgresSharedData::setFeaturesCounted( long count )
4291
4296
}
4292
4297
4293
4298
4294
- QgsFeatureId QgsPostgresSharedData::lookupFid ( const QVariant & v )
4299
+ QgsFeatureId QgsPostgresSharedData::lookupFid ( const QVariantList& v )
4295
4300
{
4296
4301
QMutexLocker locker ( &mMutex );
4297
4302
4298
- QMap<QVariant , QgsFeatureId>::const_iterator it = mKeyToFid .constFind ( v );
4303
+ QMap<QVariantList , QgsFeatureId>::const_iterator it = mKeyToFid .constFind ( v );
4299
4304
4300
4305
if ( it != mKeyToFid .constEnd () )
4301
4306
{
@@ -4309,30 +4314,30 @@ QgsFeatureId QgsPostgresSharedData::lookupFid( const QVariant &v )
4309
4314
}
4310
4315
4311
4316
4312
- QVariant QgsPostgresSharedData::removeFid ( QgsFeatureId fid )
4317
+ QVariantList QgsPostgresSharedData::removeFid ( QgsFeatureId fid )
4313
4318
{
4314
4319
QMutexLocker locker ( &mMutex );
4315
4320
4316
- QVariant v = mFidToKey [ fid ];
4321
+ QVariantList v = mFidToKey [ fid ];
4317
4322
mFidToKey .remove ( fid );
4318
4323
mKeyToFid .remove ( v );
4319
4324
return v;
4320
4325
}
4321
4326
4322
- void QgsPostgresSharedData::insertFid ( QgsFeatureId fid, const QVariant & k )
4327
+ void QgsPostgresSharedData::insertFid ( QgsFeatureId fid, const QVariantList & k )
4323
4328
{
4324
4329
QMutexLocker locker ( &mMutex );
4325
4330
4326
4331
mFidToKey .insert ( fid, k );
4327
4332
mKeyToFid .insert ( k, fid );
4328
4333
}
4329
4334
4330
- QVariant QgsPostgresSharedData::lookupKey ( QgsFeatureId featureId )
4335
+ QVariantList QgsPostgresSharedData::lookupKey ( QgsFeatureId featureId )
4331
4336
{
4332
4337
QMutexLocker locker ( &mMutex );
4333
4338
4334
- QMap<QgsFeatureId, QVariant >::const_iterator it = mFidToKey .constFind ( featureId );
4339
+ QMap<QgsFeatureId, QVariantList >::const_iterator it = mFidToKey .constFind ( featureId );
4335
4340
if ( it != mFidToKey .constEnd () )
4336
4341
return it.value ();
4337
- return QVariant ();
4342
+ return QVariantList ();
4338
4343
}
1 commit comments
m-kuhn commentedon Aug 16, 2016
Good job!