diff --git a/src/core/providers/memory/qgsmemoryproviderutils.cpp b/src/core/providers/memory/qgsmemoryproviderutils.cpp index cccc63c4cec..663395dd2b2 100644 --- a/src/core/providers/memory/qgsmemoryproviderutils.cpp +++ b/src/core/providers/memory/qgsmemoryproviderutils.cpp @@ -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( '&' ); diff --git a/tests/src/python/test_provider_memory.py b/tests/src/python/test_provider_memory.py index 9edb563dfb9..fdcdf317a64 100644 --- a/tests/src/python/test_provider_memory.py +++ b/tests/src/python/test_provider_memory.py @@ -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())