Packages
ch
0.1.14
0.8.3
0.8.2
0.8.1
0.8.0
0.7.3
0.7.2
0.7.1
0.7.0
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.9
0.5.8
0.5.7
0.5.6
0.5.5
0.5.4
retired
0.5.3
retired
0.5.2
retired
0.5.1
retired
0.5.0
retired
0.4.3
0.4.2
0.4.1
0.4.0
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.5-rc.0
0.2.4
0.2.3
0.2.2
0.2.2-rc.3
0.2.2-rc.2
0.2.2-rc.1
0.2.2-rc.0
0.2.1
0.2.0
0.1.15
0.1.14
0.1.13
0.1.12
0.1.11
0.1.10
0.1.9
0.1.8
0.1.7
retired
0.1.6
retired
0.1.5
retired
0.1.4
retired
0.1.3
retired
0.1.2
retired
0.1.1
0.1.0
HTTP ClickHouse driver for Elixir
Current section
Files
Jump to
Current section
Files
lib/ch/error.ex
defmodule Ch.Error do
@moduledoc "Error struct wrapping ClickHouse error responses."
defexception [:code, :message]
@type t :: %__MODULE__{code: pos_integer | nil, message: String.t()}
def exception(code, message) do
message = IO.iodata_to_binary(ensure_printable(message))
exception(code: code, message: message)
end
@dialyzer :no_improper_lists
@doc false
def ensure_printable(message) do
printable(message, 0, 0, message, [])
end
defguardp is_printable(char) when char in 32..127 or char == ?\n
defp printable(<<char, rest::bytes>>, from, len, original, acc) when is_printable(char) do
printable(rest, from, len + 1, original, acc)
end
defp printable(<<_char, rest::bytes>>, from, len, original, acc) do
acc = [acc | binary_part(original, from, len)]
unprintable(rest, from + len, 1, original, acc)
end
defp printable(<<>>, from, len, original, acc) do
[acc | binary_part(original, from, len)]
end
defp unprintable(<<char, rest::bytes>>, from, len, original, acc) when is_printable(char) do
acc = [acc | inspect(binary_part(original, from, len))]
printable(rest, from + len, 1, original, acc)
end
defp unprintable(<<_char, rest::bytes>>, from, len, original, acc) do
unprintable(rest, from, len + 1, original, acc)
end
defp unprintable(<<>>, from, len, original, acc) do
[acc | inspect(binary_part(original, from, len))]
end
end