CE-1955 Make sure to skip blank rows (e.g., no columns had a value)

This commit is contained in:
2025-01-07 11:30:19 -06:00
parent bcedb566ff
commit f7cbf9d1c2
2 changed files with 14 additions and 3 deletions

View File

@ -62,13 +62,23 @@ public class FlatRowsToRecord implements RowsToRecordInterface
QRecord record = new QRecord(); QRecord record = new QRecord();
BulkLoadRecordUtils.addBackendDetailsAboutFileRows(record, row); BulkLoadRecordUtils.addBackendDetailsAboutFileRows(record, row);
boolean anyValuesFromFileUsed = false;
for(QFieldMetaData field : table.getFields().values()) for(QFieldMetaData field : table.getFields().values())
{ {
setValueOrDefault(record, field, null, mapping, row, fieldIndexes.get(field.getName())); if(setValueOrDefault(record, field, null, mapping, row, fieldIndexes.get(field.getName())))
{
anyValuesFromFileUsed = true;
}
} }
//////////////////////////////////////////////////////////////////////////
// avoid building empty records (e.g., "past the end" of an Excel file) //
//////////////////////////////////////////////////////////////////////////
if(anyValuesFromFileUsed)
{
rs.add(record); rs.add(record);
} }
}
BulkLoadValueMapper.valueMapping(rs, mapping, table); BulkLoadValueMapper.valueMapping(rs, mapping, table);

View File

@ -56,7 +56,8 @@ class FlatRowsToRecordTest extends BaseTest
new Serializable[] { 1, "Homer", "Simpson", true, "three fifty" }, new Serializable[] { 1, "Homer", "Simpson", true, "three fifty" },
new Serializable[] { 2, "Marge", "Simpson", false, "" }, new Serializable[] { 2, "Marge", "Simpson", false, "" },
new Serializable[] { 3, "Bart", "Simpson", "A", "99.95" }, new Serializable[] { 3, "Bart", "Simpson", "A", "99.95" },
new Serializable[] { 4, "Ned", "Flanders", 3.1, "one$" } new Serializable[] { 4, "Ned", "Flanders", 3.1, "one$" },
new Serializable[] { "", "", "", "", "" } // all blank row (we can get these at the bottoms of files) - make sure it doesn't become a record.
)); ));
BulkLoadFileRow header = fileToRows.next(); BulkLoadFileRow header = fileToRows.next();