Skip to content

Commit 3528d88

Browse files
committedMar 1, 2023
[ogr] Ensure field split policy is set respecting datasource policy
1 parent 34ed6ca commit 3528d88

22 files changed

+28
-0
lines changed
 

‎src/core/providers/ogr/qgsogrprovider.cpp

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -857,6 +857,19 @@ void QgsOgrProvider::loadFields()
857857
// dataset retains ownership of domain!
858858
if ( OGRFieldDomainH domain = GDALDatasetGetFieldDomain( ds, domainName ) )
859859
{
860+
switch ( OGR_FldDomain_GetSplitPolicy( domain ) )
861+
{
862+
case OFDSP_DEFAULT_VALUE:
863+
newField.setSplitPolicy( Qgis::FieldDomainSplitPolicy::DefaultValue );
864+
break;
865+
case OFDSP_DUPLICATE:
866+
newField.setSplitPolicy( Qgis::FieldDomainSplitPolicy::Duplicate );
867+
break;
868+
case OFDSP_GEOMETRY_RATIO:
869+
newField.setSplitPolicy( Qgis::FieldDomainSplitPolicy::GeometryRatio );
870+
break;
871+
}
872+
860873
switch ( OGR_FldDomain_GetDomainType( domain ) )
861874
{
862875
case OFDT_CODED:

‎tests/src/python/test_provider_ogr.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1256,12 +1256,26 @@ def testFieldDomainNames(self):
12561256
self.assertEqual(fields.field('with_range_domain_int').constraints().domainName(), 'range_domain_int')
12571257
self.assertEqual(fields.field('with_glob_domain').constraints().domainName(), 'glob_domain')
12581258

1259+
self.assertEqual(fields.field('with_range_domain_int').splitPolicy(), Qgis.FieldDomainSplitPolicy.DefaultValue)
1260+
self.assertEqual(fields.field('with_glob_domain').splitPolicy(), Qgis.FieldDomainSplitPolicy.DefaultValue)
1261+
12591262
datasource = os.path.join(unitTestDataPath(), 'gps_timestamp.gpkg')
12601263
vl = QgsVectorLayer(datasource, 'test', 'ogr')
12611264
self.assertTrue(vl.isValid())
12621265
fields = vl.fields()
12631266
self.assertFalse(fields.field('stringf').constraints().domainName())
12641267

1268+
datasource = os.path.join(unitTestDataPath(), 'domains.gdb|layername=test')
1269+
vl = QgsVectorLayer(datasource, 'test', 'ogr')
1270+
self.assertTrue(vl.isValid())
1271+
fields = vl.fields()
1272+
self.assertEqual(fields.field('default_value').splitPolicy(),
1273+
Qgis.FieldDomainSplitPolicy.DefaultValue)
1274+
self.assertEqual(fields.field('duplicate').splitPolicy(),
1275+
Qgis.FieldDomainSplitPolicy.Duplicate)
1276+
self.assertEqual(fields.field('ratio').splitPolicy(),
1277+
Qgis.FieldDomainSplitPolicy.GeometryRatio)
1278+
12651279
def testGdbLayerMetadata(self):
12661280
"""
12671281
Test that we translate GDB metadata to QGIS layer metadata on loading a GDB source
347 Bytes
Binary file not shown.
4.03 KB
Binary file not shown.
2.04 KB
Binary file not shown.
4.03 KB
Binary file not shown.
557 Bytes
Binary file not shown.
4.03 KB
Binary file not shown.
4.34 KB
Binary file not shown.
11.8 KB
Binary file not shown.
4.03 KB
Binary file not shown.
1.7 KB
Binary file not shown.
4.03 KB
Binary file not shown.
514 Bytes
Binary file not shown.
4.03 KB
Binary file not shown.
2.24 KB
Binary file not shown.
4.03 KB
Binary file not shown.
66 Bytes
Binary file not shown.
512 Bytes
Binary file not shown.
32 Bytes
Binary file not shown.

‎tests/testdata/domains.gdb/gdb

8 Bytes
Binary file not shown.

‎tests/testdata/domains.gdb/timestamps

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������

0 commit comments

Comments
 (0)
Please sign in to comment.