mirror of
https://github.com/qgis/QGIS.git
synced 2025-03-22 00:06:57 -04:00
handle fid attribute in attrLookup on synchronization
and use column++ again on iteration through attributes on copyVectorLayer fixes #20276 especially the not reported issue with synchronization
This commit is contained in:
parent
d173b70b53
commit
0f653179ff
@ -762,10 +762,10 @@ QgsVectorLayer *QgsOfflineEditing::copyVectorLayer( QgsVectorLayer *layer, sqlit
|
||||
|
||||
// NOTE: SpatiaLite provider ignores position of geometry column
|
||||
// fill gap in QgsAttributeMap if geometry column is not last (WORKAROUND)
|
||||
int column = 0;
|
||||
QgsAttributes attrs = f.attributes();
|
||||
// on GPKG newAttrs has an addition FID attribute, so we have to add a dummy in the original set
|
||||
QgsAttributes newAttrs( containerType == GPKG ? attrs.count() + 1 : attrs.count() );
|
||||
int column = 0;
|
||||
for ( int it = 0; it < attrs.count(); ++it )
|
||||
{
|
||||
newAttrs[column++] = attrs.at( it );
|
||||
@ -1137,13 +1137,14 @@ void QgsOfflineEditing::updateLayerOrder( QgsVectorLayer *sourceLayer, QgsVector
|
||||
QMap<int, int> QgsOfflineEditing::attributeLookup( QgsVectorLayer *offlineLayer, QgsVectorLayer *remoteLayer )
|
||||
{
|
||||
const QgsAttributeList &offlineAttrs = offlineLayer->attributeList();
|
||||
const QgsAttributeList &remoteAttrs = remoteLayer->attributeList();
|
||||
|
||||
QMap < int /*offline attr*/, int /*remote attr*/ > attrLookup;
|
||||
// NOTE: use size of remoteAttrs, as offlineAttrs can have new attributes not yet synced
|
||||
for ( int i = 0; i < remoteAttrs.size(); i++ )
|
||||
// NOTE: though offlineAttrs can have new attributes not yet synced, we take the amount of offlineAttrs
|
||||
// because we anyway only add mapping for the fields existing in remoteLayer (this because it could contain fid on 0)
|
||||
for ( int i = 0; i < offlineAttrs.size(); i++ )
|
||||
{
|
||||
attrLookup.insert( offlineAttrs.at( i ), remoteAttrs.at( i ) );
|
||||
if ( remoteLayer->fields().lookupField( offlineLayer->fields().field( i ).name() ) >= 0 )
|
||||
attrLookup.insert( offlineAttrs.at( i ), remoteLayer->fields().indexOf( offlineLayer->fields().field( i ).name() ) );
|
||||
}
|
||||
|
||||
return attrLookup;
|
||||
|
Loading…
x
Reference in New Issue
Block a user