Skip to content

Commit 5234212

Browse files
committed
[oracle] Fix provider
The oracle provider is quite broken on 3.0 for tables which require a feature id map. This is due to QMap<QVariant,..> not working correctly when the keys are QVariantLists on Qt5. We had a similar issue with the postgres provider which was resolved by changing the map to always use QVariantLists. Apply the same fix to oracle. Fixes #18289, #16869, #17738 (cherry-picked from 7ffc148)
1 parent 6ebc643 commit 5234212

File tree

3 files changed

+16
-16
lines changed

3 files changed

+16
-16
lines changed

src/providers/oracle/qgsoraclefeatureiterator.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -341,7 +341,7 @@ bool QgsOracleFeatureIterator::fetchFeature( QgsFeature &feature )
341341
case PktRowId:
342342
case PktFidMap:
343343
{
344-
QList<QVariant> primaryKeyVals;
344+
QVariantList primaryKeyVals;
345345

346346
if ( mSource->mPrimaryKeyType == PktFidMap )
347347
{
@@ -365,7 +365,7 @@ bool QgsOracleFeatureIterator::fetchFeature( QgsFeature &feature )
365365
primaryKeyVals << mQry.value( col++ );
366366
}
367367

368-
fid = mSource->mShared->lookupFid( QVariant( primaryKeyVals ) );
368+
fid = mSource->mShared->lookupFid( primaryKeyVals );
369369
}
370370
break;
371371

src/providers/oracle/qgsoracleprovider.cpp

Lines changed: 9 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1374,14 +1374,14 @@ bool QgsOracleProvider::addFeatures( QgsFeatureList &flist, QgsFeatureSink::Flag
13741374
}
13751375
else
13761376
{
1377-
QList<QVariant> primaryKeyVals;
1377+
QVariantList primaryKeyVals;
13781378

13791379
Q_FOREACH ( int idx, mPrimaryKeyAttrs )
13801380
{
13811381
primaryKeyVals << attributevec[ idx ];
13821382
}
13831383

1384-
features->setId( mShared->lookupFid( QVariant( primaryKeyVals ) ) );
1384+
features->setId( mShared->lookupFid( primaryKeyVals ) );
13851385
}
13861386
QgsDebugMsgLevel( QString( "new fid=%1" ).arg( features->id() ), 4 );
13871387
}
@@ -3193,11 +3193,11 @@ QgsOracleSharedData::QgsOracleSharedData()
31933193
{
31943194
}
31953195

3196-
QgsFeatureId QgsOracleSharedData::lookupFid( const QVariant &v )
3196+
QgsFeatureId QgsOracleSharedData::lookupFid( const QVariantList &v )
31973197
{
31983198
QMutexLocker locker( &mMutex );
31993199

3200-
QMap<QVariant, QgsFeatureId>::const_iterator it = mKeyToFid.find( v );
3200+
QMap<QVariantList, QgsFeatureId>::const_iterator it = mKeyToFid.constFind( v );
32013201

32023202
if ( it != mKeyToFid.constEnd() )
32033203
{
@@ -3214,28 +3214,28 @@ QVariant QgsOracleSharedData::removeFid( QgsFeatureId fid )
32143214
{
32153215
QMutexLocker locker( &mMutex );
32163216

3217-
QVariant v = mFidToKey[ fid ];
3217+
QVariantList v = mFidToKey[ fid ];
32183218
mFidToKey.remove( fid );
32193219
mKeyToFid.remove( v );
32203220
return v;
32213221
}
32223222

3223-
void QgsOracleSharedData::insertFid( QgsFeatureId fid, const QVariant &k )
3223+
void QgsOracleSharedData::insertFid( QgsFeatureId fid, const QVariantList &k )
32243224
{
32253225
QMutexLocker locker( &mMutex );
32263226

32273227
mFidToKey.insert( fid, k );
32283228
mKeyToFid.insert( k, fid );
32293229
}
32303230

3231-
QVariant QgsOracleSharedData::lookupKey( QgsFeatureId featureId )
3231+
QVariantList QgsOracleSharedData::lookupKey( QgsFeatureId featureId )
32323232
{
32333233
QMutexLocker locker( &mMutex );
32343234

3235-
QMap<QgsFeatureId, QVariant>::const_iterator it = mFidToKey.find( featureId );
3235+
QMap<QgsFeatureId, QVariantList>::const_iterator it = mFidToKey.find( featureId );
32363236
if ( it != mFidToKey.constEnd() )
32373237
return it.value();
3238-
return QVariant();
3238+
return QVariantList();
32393239
}
32403240

32413241
QGISEXTERN bool saveStyle( const QString &uri,

src/providers/oracle/qgsoracleprovider.h

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -344,17 +344,17 @@ class QgsOracleSharedData
344344
QgsOracleSharedData();
345345

346346
// FID lookups
347-
QgsFeatureId lookupFid( const QVariant &v ); // lookup existing mapping or add a new one
347+
QgsFeatureId lookupFid( const QVariantList &v ); // lookup existing mapping or add a new one
348348
QVariant removeFid( QgsFeatureId fid );
349-
void insertFid( QgsFeatureId fid, const QVariant &k );
350-
QVariant lookupKey( QgsFeatureId featureId );
349+
void insertFid( QgsFeatureId fid, const QVariantList &k );
350+
QVariantList lookupKey( QgsFeatureId featureId );
351351

352352
protected:
353353
QMutex mMutex; //!< Access to all data members is guarded by the mutex
354354

355355
QgsFeatureId mFidCounter; // next feature id if map is used
356-
QMap<QVariant, QgsFeatureId> mKeyToFid; // map key values to feature id
357-
QMap<QgsFeatureId, QVariant> mFidToKey; // map feature back to fea
356+
QMap<QVariantList, QgsFeatureId> mKeyToFid; // map key values to feature id
357+
QMap<QgsFeatureId, QVariantList> mFidToKey; // map feature back to fea
358358
};
359359

360360

0 commit comments

Comments
 (0)