Skip to content

Commit 3528e85

Browse files
committed
continue
1 parent d46007d commit 3528e85

3 files changed

Lines changed: 63 additions & 1 deletion

File tree

lib/ch/row_binary.ex

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -596,6 +596,8 @@ defmodule Ch.RowBinary do
596596
defp decoding_type({:datetime64 = t, p}), do: {t, time_unit(p), _tz = nil}
597597
defp decoding_type({:datetime64 = t, p, tz}), do: {t, time_unit(p), tz}
598598

599+
defp decoding_type({:time64 = t, p}), do: {t, time_unit(p)}
600+
599601
defp decoding_type({e, mappings}) when e in [:enum8, :enum16] do
600602
{e, Map.new(mappings, fn {k, v} -> {v, k} end)}
601603
end
@@ -885,6 +887,11 @@ defmodule Ch.RowBinary do
885887
t = Time.from_seconds_after_midnight(s)
886888
decode_rows(types_rest, bin, [t | row], rows, types)
887889

890+
{:time64, time_unit} ->
891+
<<ticks::64-little-signed, bin::bytes>> = bin
892+
t = ticks |> DateTime.from_unix!(time_unit) |> DateTime.to_time()
893+
decode_rows(types_rest, bin, [t | row], rows, types)
894+
888895
{:datetime, timezone} ->
889896
<<s::32-little, bin::bytes>> = bin
890897

lib/ch/types.ex

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ defmodule Ch.Types do
2424
{"DateTime64", :datetime64, [:int, :string]},
2525
{"DateTime", :datetime, [:string]},
2626
# {"DateTime", :datetime, []},
27-
{"Time64", :time64, []},
27+
{"Time64", :time64, [:int]},
2828
{"Time", :time, []},
2929
{"Date32", :date32, []},
3030
{"Date", :date, []},
@@ -445,6 +445,7 @@ defmodule Ch.Types do
445445
defp build_type(:decimal128 = d, [s]), do: {d, s}
446446
defp build_type(:decimal256 = d, [s]), do: {d, s}
447447
defp build_type(:decimal = d, [s, p]), do: {d, p, s}
448+
defp build_type(:time64 = t, [precision]), do: {t, precision}
448449

449450
defp build_enum_mapping(mapping) do
450451
mapping |> :lists.reverse() |> Enum.chunk_every(2) |> Enum.map(fn [k, v] -> {k, v} end)

test/ch/query_test.exs

Lines changed: 54 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -99,6 +99,60 @@ defmodule Ch.QueryTest do
9999
]
100100
end
101101

102+
test "decode time64", %{conn: conn} do
103+
settings = [enable_time_time64_type: 1]
104+
105+
assert Ch.query!(conn, "SELECT '12:34:56.123456789'::time64(0)", [], settings: settings).rows ==
106+
[
107+
[~T[12:34:56]]
108+
]
109+
110+
assert Ch.query!(conn, "SELECT '12:34:56.123456789'::time64(1)", [], settings: settings).rows ==
111+
[
112+
[~T[12:34:56.1]]
113+
]
114+
115+
assert Ch.query!(conn, "SELECT '12:34:56.123456789'::time64(2)", [], settings: settings).rows ==
116+
[
117+
[~T[12:34:56.12]]
118+
]
119+
120+
assert Ch.query!(conn, "SELECT '12:34:56.123456789'::time64(3)", [], settings: settings).rows ==
121+
[
122+
[~T[12:34:56.123]]
123+
]
124+
125+
assert Ch.query!(conn, "SELECT '12:34:56.123456789'::time64(4)", [], settings: settings).rows ==
126+
[
127+
[~T[12:34:56.1234]]
128+
]
129+
130+
assert Ch.query!(conn, "SELECT '12:34:56.123456789'::time64(5)", [], settings: settings).rows ==
131+
[
132+
[~T[12:34:56.12345]]
133+
]
134+
135+
assert Ch.query!(conn, "SELECT '12:34:56.123456789'::time64(6)", [], settings: settings).rows ==
136+
[
137+
[~T[12:34:56.123456]]
138+
]
139+
140+
assert Ch.query!(conn, "SELECT '12:34:56.123456789'::time64(7)", [], settings: settings).rows ==
141+
[
142+
[~T[12:34:56.123456]]
143+
]
144+
145+
assert Ch.query!(conn, "SELECT '12:34:56.123456789'::time64(8)", [], settings: settings).rows ==
146+
[
147+
[~T[12:34:56.123456]]
148+
]
149+
150+
assert Ch.query!(conn, "SELECT '12:34:56.123456789'::time64(9)", [], settings: settings).rows ==
151+
[
152+
[~T[12:34:56.123456]]
153+
]
154+
end
155+
102156
test "decode arrays", %{conn: conn} do
103157
assert [[[]]] = Ch.query!(conn, "SELECT []").rows
104158
assert [[[1]]] = Ch.query!(conn, "SELECT [1]").rows

0 commit comments

Comments
 (0)