anchor.diff:  -include("riak_ts_pb.hrl").
   
   -export([encode_rows/2,
  +         encode_rows_non_strict/1,
            decode_rows/1,
            encode_cells/1,
            decode_cells/1,
  
positive.code: decode_cells(Cells) ->
      decode_cells(Cells, []).
  
  
  encode_tsdelreq(Bucket, Key, Options) ->
      #tsdelreq{table   = Bucket,
                key     = encode_cells(Key),
                vclock  = proplists:get_value(vclock, Options),
                timeout = proplists:get_value(timeout, Options)}.
  encode_tsgetreq(Bucket, Key, Options) ->
      #tsgetreq{table   = Bucket,
                key     = encode_cells(Key),
                timeout = proplists:get_value(timeout, Options)}.
  
  %% ---------------------------------------
  
negative.code: encode_cell({_ColumnType, []}) ->
      #tscell{}.
  
  %% @doc Only for encoding rows for PUTs on the erlang client,
  %%      and Key cells for get / delete requests.
  %%      Will not properly encode timestamp #tscell{} records,
  %%      but this is OK for these use cases since the values
  %%      get cast in the order of:
  %%      lvldbvalue() -> #tscell{} -> lvldbvalue().
  %%      THEREFORE no info is lost for these cases.
  %% @end
  -spec encode_cell_non_strict(ldbvalue()) -> #tscell{}.
  encode_cell_non_strict(V) when is_binary(V) ->
      #tscell{varchar_value = V};
  encode_cell_non_strict(V) when is_integer(V) ->
      #tscell{sint64_value = V};
  encode_cell_non_strict(V) when is_float(V) ->
      #tscell{double_value = V};
  encode_cell_non_strict(V) when is_boolean(V) ->
      #tscell{boolean_value = V};
  encode_cell_non_strict(undefined) ->
      #tscell{};
  %% NULL Cell
  %% TODO: represent null cells by something other than an empty list. emptyTsCell atom maybe?
  encode_cell_non_strict([]) ->
      #tscell{}.
  
  -spec decode_cells([#tscell{}], list(ldbvalue())) -> list(ldbvalue()).
  decode_cells([], Acc) ->
      lists:reverse(Acc);
  