diff --git a/migrations/lib/importer/shared_data.rb b/migrations/lib/importer/shared_data.rb index 763d553163c6e..7896bdedbb20a 100644 --- a/migrations/lib/importer/shared_data.rb +++ b/migrations/lib/importer/shared_data.rb @@ -13,11 +13,23 @@ def load_set(sql) def load_mapping(sql) rows = @discourse_db.query_array(sql) - if rows.first && rows.first.size > 2 - rows.to_h { |key, *values| [key, *values] } - else - rows.to_h - end + # While rows is an enumerator, it's not fully compliant, it does not + # rewind on #first, #peek, #any?, etc. + # So we need to hold on to first_row for use later + first_row = rows.first + + return {} if first_row.nil? + + has_multiple_values = first_row.size > 2 + result = + if has_multiple_values + rows.to_h { |key, *values| [key, values] } + else + rows.to_h + end + + result[first_row[0]] = has_multiple_values ? first_row[1..] : first_row[1] + result end def load(type)