Skip to content

Commit 01a09fe

Browse files
committed
MiraMonVector: fix a case of mutirecord (lists) in some fields
1 parent 0332c83 commit 01a09fe

File tree

1 file changed

+44
-4
lines changed

1 file changed

+44
-4
lines changed

ogr/ogrsf_frmts/miramon/ogrmiramonlayer.cpp

+44-4
Original file line numberDiff line numberDiff line change
@@ -2249,10 +2249,20 @@ OGRErr OGRMiraMonLayer::TranslateFieldsValuesToMM(OGRFeature *poFeature)
22492249
&(hMMFeature.pRecords[nIRecord].pField),
22502250
&hMMFeature.pRecords[nIRecord].nMaxField,
22512251
hMMFeature.pRecords[nIRecord].nNumField,
2252-
MM_INC_NUMBER_OF_FIELDS,
2252+
(nIRecord == 0)
2253+
? MM_INC_NUMBER_OF_FIELDS
2254+
: hMMFeature.pRecords[nIRecord - 1].nMaxField,
22532255
hMMFeature.pRecords[nIRecord].nNumField))
22542256
return OGRERR_NOT_ENOUGH_MEMORY;
22552257

2258+
if (nIRecord > 0)
2259+
{
2260+
// The number of fields of this new record is the same as the
2261+
// last one
2262+
hMMFeature.pRecords[nIRecord].nNumField =
2263+
hMMFeature.pRecords[nIRecord - 1].nNumField;
2264+
}
2265+
22562266
if (phMiraMonLayer->nCharSet != MM_JOC_CARAC_UTF8_DBF)
22572267
{
22582268
// MiraMon encoding is ISO 8859-1 (Latin1) -> Recode from UTF-8
@@ -2311,10 +2321,20 @@ OGRErr OGRMiraMonLayer::TranslateFieldsValuesToMM(OGRFeature *poFeature)
23112321
&(hMMFeature.pRecords[nIRecord].pField),
23122322
&hMMFeature.pRecords[nIRecord].nMaxField,
23132323
hMMFeature.pRecords[nIRecord].nNumField,
2314-
MM_INC_NUMBER_OF_FIELDS,
2324+
(nIRecord == 0)
2325+
? MM_INC_NUMBER_OF_FIELDS
2326+
: hMMFeature.pRecords[nIRecord - 1].nMaxField,
23152327
hMMFeature.pRecords[nIRecord].nNumField))
23162328
return OGRERR_NOT_ENOUGH_MEMORY;
23172329

2330+
if (nIRecord > 0)
2331+
{
2332+
// The number of fields of this new record is the same as the
2333+
// last one
2334+
hMMFeature.pRecords[nIRecord].nNumField =
2335+
hMMFeature.pRecords[nIRecord - 1].nNumField;
2336+
}
2337+
23182338
if (eFSType == OFSTBoolean)
23192339
{
23202340
if (panValues[nIRecord] == 1)
@@ -2382,10 +2402,20 @@ OGRErr OGRMiraMonLayer::TranslateFieldsValuesToMM(OGRFeature *poFeature)
23822402
&(hMMFeature.pRecords[nIRecord].pField),
23832403
&hMMFeature.pRecords[nIRecord].nMaxField,
23842404
hMMFeature.pRecords[nIRecord].nNumField,
2385-
MM_INC_NUMBER_OF_FIELDS,
2405+
(nIRecord == 0)
2406+
? MM_INC_NUMBER_OF_FIELDS
2407+
: hMMFeature.pRecords[nIRecord - 1].nMaxField,
23862408
hMMFeature.pRecords[nIRecord].nNumField))
23872409
return OGRERR_NOT_ENOUGH_MEMORY;
23882410

2411+
if (nIRecord > 0)
2412+
{
2413+
// The number of fields of this new record is the same as the
2414+
// last one
2415+
hMMFeature.pRecords[nIRecord].nNumField =
2416+
hMMFeature.pRecords[nIRecord - 1].nNumField;
2417+
}
2418+
23892419
hMMFeature.pRecords[nIRecord].pField[iField].iValue =
23902420
panValues[nIRecord];
23912421

@@ -2425,10 +2455,20 @@ OGRErr OGRMiraMonLayer::TranslateFieldsValuesToMM(OGRFeature *poFeature)
24252455
&(hMMFeature.pRecords[nIRecord].pField),
24262456
&hMMFeature.pRecords[nIRecord].nMaxField,
24272457
hMMFeature.pRecords[nIRecord].nNumField,
2428-
MM_INC_NUMBER_OF_FIELDS,
2458+
(nIRecord == 0)
2459+
? MM_INC_NUMBER_OF_FIELDS
2460+
: hMMFeature.pRecords[nIRecord - 1].nMaxField,
24292461
hMMFeature.pRecords[nIRecord].nNumField))
24302462
return OGRERR_NOT_ENOUGH_MEMORY;
24312463

2464+
if (nIRecord > 0)
2465+
{
2466+
// The number of fields of this new record is the same as the
2467+
// last one
2468+
hMMFeature.pRecords[nIRecord].nNumField =
2469+
hMMFeature.pRecords[nIRecord - 1].nNumField;
2470+
}
2471+
24322472
char szChain[MAX_SIZE_OF_FIELD_NUMBER_WITH_MINUS];
24332473
MM_SprintfDoubleSignifFigures(
24342474
szChain, sizeof(szChain),

0 commit comments

Comments
 (0)