Skip to content

Commit 03f2686

Browse files
committed
fix incorrect column ordering problem when importing csvs
1 parent 9675d0e commit 03f2686

2 files changed

Lines changed: 11 additions & 4 deletions

File tree

executable/csv2sql.zip

200 Bytes
Binary file not shown.

lib/csv2sql/schema_maker.ex

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -74,11 +74,11 @@ defmodule Csv2sql.SchemaMaker do
7474
def get_types(path) do
7575
headers = get_headers(path)
7676

77+
column_count = Enum.count(headers)
78+
7779
varchar_limit = Application.get_env(:csv2sql, Csv2sql.SchemaMaker)[:varchar_limit]
7880

79-
headers_type_list =
80-
headers
81-
|> Enum.map(fn _header -> get_type_map() end)
81+
headers_type_list = List.duplicate(get_type_map(), column_count)
8282

8383
path
8484
|> File.stream!()
@@ -87,7 +87,7 @@ defmodule Csv2sql.SchemaMaker do
8787
Application.get_env(:csv2sql, Csv2sql.SchemaMaker)[:schema_infer_chunk_size]
8888
)
8989
|> Task.async_stream(__MODULE__, :infer_type, [headers_type_list], timeout: :infinity)
90-
|> Enum.reduce(List.duplicate(get_type_map(), Enum.count(headers)), fn {:ok, result}, acc ->
90+
|> Enum.reduce(headers_type_list, fn {:ok, result}, acc ->
9191
# Here we get a list of type maps for each chunk of data
9292
# We need to merge theses type maps obtained from each chunk
9393

@@ -121,6 +121,7 @@ defmodule Csv2sql.SchemaMaker do
121121

122122
Map.put(acc, header, type)
123123
end)
124+
|> header_map_to_list(headers)
124125
end
125126

126127
def infer_type(chunk, headers_type_list) do
@@ -154,6 +155,12 @@ defmodule Csv2sql.SchemaMaker do
154155
}
155156
end
156157

158+
defp header_map_to_list(header_map, headers) do
159+
Enum.reduce(headers, [], fn header, acc ->
160+
acc ++ [{header, header_map[header]}]
161+
end)
162+
end
163+
157164
defp is_empty?(item) do
158165
item == ""
159166
end

0 commit comments

Comments
 (0)