Skip to content

Commit 57037ac

Browse files
authored
Merge pull request #303 from basho/feature-jrd-ts_datatypes
Allow TS clients to see column data types
2 parents b4a188a + 452459e commit 57037ac

File tree

2 files changed

+25
-9
lines changed

2 files changed

+25
-9
lines changed

src/riakc_ts.erl

+2-1
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,8 @@ query_common(Pid, Query, Interpolations, Cover, Options)
9090
Msg1 = Msg0#tsqueryreq{cover_context = Cover},
9191
Msg = {Msg1, {msgopts, Options}},
9292
Response = server_call(Pid, Msg),
93-
riakc_ts_query_operator:deserialize(Response).
93+
riakc_ts_query_operator:deserialize(Response,
94+
proplists:get_value(datatypes, Options, false)).
9495

9596

9697
%% @doc Generate a parallel coverage plan for the specified 'query'

src/riakc_ts_query_operator.erl

+23-8
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,7 @@
2929
-include_lib("riak_pb/include/riak_ts_ttb.hrl").
3030

3131
-export([serialize/2,
32-
deserialize/1]).
32+
deserialize/1, deserialize/2]).
3333

3434
serialize(QueryText, Interpolations) ->
3535
Content = #tsinterpolation{
@@ -47,17 +47,32 @@ serialize_interpolations([{Key, Value} | RemainingInterps],
4747
UpdatedInterps = [#rpbpair{key=Key, value=Value} | SerializedInterps],
4848
serialize_interpolations(RemainingInterps, UpdatedInterps).
4949

50-
deserialize({error, {Code, Message}}) when is_integer(Code), is_list(Message) ->
50+
deserialize(Response) ->
51+
deserialize(Response, false).
52+
53+
%% 2nd (boolean) argument indicates whether column types should be
54+
%% included in the response. It's a bit silly that they aren't by
55+
%% default, but that's an old oversight/decision that can't be
56+
%% trivially changed without risking backwards compatibility.
57+
deserialize({error, {Code, Message}}, _IncludeColumnTypes)
58+
when is_integer(Code), is_list(Message) ->
5159
{error, {Code, iolist_to_binary(Message)}};
52-
deserialize({error, {Code, Message}}) when is_integer(Code), is_atom(Message) ->
60+
deserialize({error, {Code, Message}}, _IncludeColumnTypes)
61+
when is_integer(Code), is_atom(Message) ->
5362
{error, {Code, iolist_to_binary(atom_to_list(Message))}};
54-
deserialize({error, Message}) ->
63+
deserialize({error, Message}, _IncludeColumnTypes) ->
5564
{error, Message};
56-
deserialize(tsqueryresp) ->
65+
deserialize(tsqueryresp, _Types) ->
5766
{ok, {[], []}};
58-
deserialize({tsqueryresp, {ColumnNames, _ColumnTypes, Rows}}) ->
67+
deserialize({tsqueryresp, {ColumnNames, _ColumnTypes, Rows}}, false) ->
5968
{ok, {ColumnNames, Rows}};
60-
deserialize(#tsqueryresp{columns = C, rows = R}) ->
69+
deserialize({tsqueryresp, {ColumnNames, ColumnTypes, Rows}}, true) ->
70+
{ok, {lists:zip(ColumnNames, ColumnTypes), Rows}};
71+
deserialize(#tsqueryresp{columns = C, rows = R}, false) ->
6172
ColumnNames = [ColName || #tscolumndescription{name = ColName} <- C],
6273
Rows = riak_pb_ts_codec:decode_rows(R),
63-
{ok, {ColumnNames, Rows}}.
74+
{ok, {ColumnNames, Rows}};
75+
deserialize(#tsqueryresp{columns = C, rows = R}, true) ->
76+
Columns = [{ColName, ColType} || #tscolumndescription{name = ColName, type = ColType} <- C],
77+
Rows = riak_pb_ts_codec:decode_rows(R),
78+
{ok, {Columns, Rows}}.

0 commit comments

Comments
 (0)