feat(etl): add collision detection to ColumnRenameTransformer
This commit is contained in:
@@ -30,10 +30,23 @@ public class ColumnRenameTransformer : DataTransformerBase
|
||||
{
|
||||
_outputNames = new string[source.FieldCount];
|
||||
_nameToOrdinal = new Dictionary<string, int>(StringComparer.OrdinalIgnoreCase);
|
||||
|
||||
for (int i = 0; i < source.FieldCount; i++)
|
||||
{
|
||||
var originalName = source.GetName(i);
|
||||
var outputName = _renames.TryGetValue(originalName, out var newName) ? newName : originalName;
|
||||
var outputName = _renames.TryGetValue(originalName, out var newName)
|
||||
? newName
|
||||
: originalName;
|
||||
|
||||
if (_nameToOrdinal.TryGetValue(outputName, out var existingOrdinal))
|
||||
{
|
||||
var existingOriginal = source.GetName(existingOrdinal);
|
||||
throw new InvalidOperationException(
|
||||
$"Column name collision: '{originalName}' → '{outputName}' conflicts with " +
|
||||
$"'{existingOriginal}' (already at ordinal {existingOrdinal}). " +
|
||||
$"Each output column name must be unique.");
|
||||
}
|
||||
|
||||
_outputNames[i] = outputName;
|
||||
_nameToOrdinal[outputName] = i;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user