Ensure created memory layers have unique source

Sometimes the layer source is used for "looser" comparison then
layer ID
This commit is contained in:
Nyall Dawson 2017-05-16 11:29:49 +10:00
parent c484b505ce
commit a517c683cd
2 changed files with 6 additions and 0 deletions

View File

@ -65,6 +65,8 @@ QgsVectorLayer *QgsMemoryProviderUtils::createMemoryLayer( const QString &name,
{
parts << QStringLiteral( "field=%1:%2" ).arg( field.name(), memoryLayerFieldType( field.type() ) );
}
// required so that source differs between memory layers
parts << QStringLiteral( "uid=%1" ).arg( QUuid::createUuid().toString() );
QString uri = geomType + '?' + parts.join( '&' );

View File

@ -349,6 +349,10 @@ class TestPyQgsMemoryProvider(unittest.TestCase, ProviderTestCase):
self.assertEqual(layer.name(), 'my name')
self.assertTrue(layer.fields().isEmpty())
# similar layers should have unique sources
layer2 = QgsMemoryProviderUtils.createMemoryLayer('my name', QgsFields())
self.assertNotEqual(layer.source(), layer2.source())
# geometry type
layer = QgsMemoryProviderUtils.createMemoryLayer('my name', QgsFields(), QgsWkbTypes.Point)
self.assertTrue(layer.isValid())