calculate FID for GPKG

This commit is contained in:
signedav 2018-10-22 12:33:24 +02:00
parent d3ccd6ee5f
commit fc8062e1a7

View File

@ -638,7 +638,23 @@ QgsVectorLayer *QgsOfflineEditing::copyVectorLayer( QgsVectorLayer *layer, sqlit
options = CSLSetNameValue( options, "OVERWRITE", "YES" );
options = CSLSetNameValue( options, "IDENTIFIER", tr( "%1 (offline)" ).arg( layer->name() ).toUtf8().constData() );
options = CSLSetNameValue( options, "DESCRIPTION", layer->dataComment().toUtf8().constData() );
options = CSLSetNameValue( options, "FID", "gpkg_id" );
//the FID-name should not exist in the original data
QString fidBase( QStringLiteral( "fid" ) );
QString fid = fidBase;
int counter = 1;
while ( layer->dataProvider()->fields().lookupField( fid ) >= 0 && counter < 10000 )
{
fid = fidBase + '_' + QString::number( counter );
counter++;
}
if ( counter == 10000 )
{
showWarning( tr( "Cannot make FID-name for GPKG " ) );
return nullptr;
}
options = CSLSetNameValue( options, "FID", fid.toUtf8().constData() );
if ( layer->isSpatial() )
{
@ -748,11 +764,9 @@ QgsVectorLayer *QgsOfflineEditing::copyVectorLayer( QgsVectorLayer *layer, sqlit
// fill gap in QgsAttributeMap if geometry column is not last (WORKAROUND)
QgsAttributes attrs = f.attributes();
int column = 0;
if ( containerType == GPKG && layer->dataProvider()->fields().lookupField( "gpkg_fid" ) == -1 )
{
// newAttrs has an addition FID attribute, so we have to add a dummy in the original set
// on GPKG newAttrs has an addition FID attribute, so we have to add a dummy in the original set
if ( containerType == GPKG )
column++;
}
QgsAttributes newAttrs( attrs.count() + column );
for ( int it = 0; it < attrs.count(); ++it )
{