anchor.diff:      end;
   
   
  -process(#tslistkeysreq{table = Table, timeout = Timeout}, State) ->
  +process(#tslistkeysreq{table   = Table,
  +                       timeout = Timeout} = Req,
  +        State) ->
       Mod = riak_ql_ddl:make_module_name(Table),
       case catch Mod:get_ddl() of
           {_, {undef, _}} ->
               Props = riak_core_bucket:get_bucket(Table),
               {reply, missing_helper_module(Table, Props), State};
  -        _DDL ->
  -            Filter = none,
  -            Result = riak_client:list_keys(
  -                       {Table, Table}, Filter, Timeout,
  +        DDL ->
  +            Result = riak_client:stream_list_keys(
  +                       {Table, Table}, Timeout,
                          {riak_client, [node(), undefined]}),
               case Result of
  -                {ok, CompoundKeys} ->
  -                    Keys = riak_pb_ts_codec:encode_rows_non_strict(
  -                             [tuple_to_list(sext:decode(A)) || A <- CompoundKeys]),
  -                    {reply, #tslistkeysresp{keys = Keys, done = true}, State};
  +                {ok, ReqId} ->
  +                    ColumnInfo =
  +                        [Mod:get_field_type(N)
  +                         || #param_v1{name = N} <- DDL#ddl_v1.local_key#key_v1.ast],
  +                    {reply, {stream, ReqId}, State#state{req = Req, req_ctx = ReqId,
  +                                                         column_info = ColumnInfo}};
                   {error, Reason} ->
                       {reply, make_rpberrresp(
                                 ?E_LISTKEYS, flat_format("Failed to list keys: ~p", [Reason])),
  
positive.code:             {reply, make_rpberrresp(?E_SUBMIT, to_string(Reason)), State}
      end.
  
  
  %% TODO: implement
  process_stream(_, _, State)->
      {ignore, State}.
  
  -spec decode_query(Query::#tsinterpolation{}) ->
      {error, _} | {ok, #ddl_v1{} | #riak_sql_v1{}}.
  
negative.code:     Msg = riak_pb_codec:decode(Code, Bin),
      case Msg of
          #tsqueryreq{query = Q}->
              case catch decode_query(Q) of
                  {ok, DecodedQuery} ->
                      PermAndTarget = decode_query_permissions(DecodedQuery),
                      {ok, DecodedQuery, PermAndTarget};
                  {error, Error} ->
                      {error, decoder_parse_error_resp(Error)};
                  {'EXIT', {Error, _}} ->
                      {error, decoder_parse_error_resp(Error)}
              end;
          #tsgetreq{table = Table}->
  