Skip to content

Commit 335c97f

Browse files
committed
improve error message on failed type decoding
1 parent 3ecfd79 commit 335c97f

File tree

2 files changed

+30
-9
lines changed

2 files changed

+30
-9
lines changed

lib/ch/types.ex

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,15 @@ defmodule Ch.Types do
461461

462462
defp decode([], <<>>, [type]), do: type
463463

464+
defp decode([_ | _], <<>>, _acc) do
465+
raise ArgumentError, "unexpected end of type while decoding"
466+
end
467+
468+
defp decode(_stack, <<invalid::utf8, _rest::bytes>>, _acc) do
469+
raise ArgumentError,
470+
"unexpected character #{inspect(<<invalid::utf8>>)} in type while decoding"
471+
end
472+
464473
defp close([:close | stack]), do: stack
465474
defp close([_ | stack]), do: close(stack)
466475

test/ch/types_test.exs

Lines changed: 21 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -167,16 +167,28 @@ defmodule Ch.TypesTest do
167167
assert decode("SimpleAggregateFunction( any , Map ( String , UInt64 ))") ==
168168
{:simple_aggregate_function, "any", {:map, :string, :u64}}
169169
end
170-
end
171170

172-
test "newlines" do
173-
assert decode("""
174-
Tuple(
175-
String,
176-
Array(
177-
UInt64
171+
test "newlines" do
172+
assert decode("""
173+
Tuple(
174+
String,
175+
Array(
176+
UInt64
177+
)
178178
)
179-
)
180-
""") == {:tuple, [:string, {:array, :u64}]}
179+
""") == {:tuple, [:string, {:array, :u64}]}
180+
end
181+
182+
test "incomplete input" do
183+
assert_raise ArgumentError,
184+
~s[failed to decode "Tuple(String, Array(" as ClickHouse type (unexpected end of type while decoding)],
185+
fn -> decode("Tuple(String, Array(") end
186+
end
187+
188+
test "unexpected character" do
189+
assert_raise ArgumentError,
190+
~s[failed to decode "Int8$" as ClickHouse type (unexpected character "$" in type while decoding)],
191+
fn -> decode("Int8$") end
192+
end
181193
end
182194
end

0 commit comments

Comments
 (0)