@@ -754,7 +754,7 @@ defmodule Ch.RowBinary do
754754 end
755755
756756 defp decoding_type ( { :variant = v , ts } ) do
757- { v , Enum . map ( ts , & decoding_type / 1 ) }
757+ { v , ts |> Enum . map ( & decoding_type / 1 ) |> List . to_tuple ( ) }
758758 end
759759
760760 defp decoding_type ( { :map = m , kt , vt } ) do
@@ -1397,10 +1397,14 @@ defmodule Ch.RowBinary do
13971397 decode_rows ( types_rest , bin , [ nil | row ] , rows , types )
13981398
13991399 # TODO varint?
1400- << variant_type_index :: 8 , bin :: bytes >> ->
1401- variant_type = Enum . at ( variant_types , variant_type_index )
1400+ << variant_type_index :: 8 , bin :: bytes >>
1401+ when variant_type_index < tuple_size ( variant_types ) ->
1402+ variant_type = elem ( variant_types , variant_type_index )
14021403 decode_rows ( [ variant_type | types_rest ] , bin , row , rows , types )
14031404
1405+ << variant_type_index :: 8 , _bin :: bytes >> ->
1406+ raise ArgumentError , "invalid Variant type index: #{ variant_type_index } "
1407+
14041408 _ ->
14051409 to_be_continued ( rows , bin , [ type | types_rest ] , row )
14061410 end
0 commit comments