@@ -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