diff --git a/src/principe.erl b/src/principe.erl index 5b6265d..684c99e 100644 --- a/src/principe.erl +++ b/src/principe.erl @@ -621,6 +621,20 @@ ext(Socket, Func, Opts, Key, Value) -> tyrant_response(Socket, ResponseHandler) -> receive + {tcp, Socket, <<1:8, _Rest/binary>>} -> + {error, invalid_operation}; + {tcp, Socket, <<2:8, _Rest/binary>>} -> + {error, no_host_found}; + {tcp, Socket, <<3:8, _Rest/binary>>} -> + {error, connection_refused}; + {tcp, Socket, <<4:8, _Rest/binary>>} -> + {error, send_error}; + {tcp, Socket, <<5:8, _Rest/binary>>} -> + {error, recv_error}; + {tcp, Socket, <<6:8, _Rest/binary>>} -> + {error, existing_record}; + {tcp, Socket, <<7:8, _Rest/binary>>} -> + {error, no_such_record}; {tcp, Socket, <>} when ErrorCode =/= 0 -> {error, ErrorCode}; {tcp_closed, Socket} -> diff --git a/src/principe_table.erl b/src/principe_table.erl index 2ef56f6..836232d 100644 --- a/src/principe_table.erl +++ b/src/principe_table.erl @@ -459,7 +459,7 @@ genuid(Socket) -> %% @end query_add_condition(Query, ColName, Op, ExprList) when is_list(ExprList) -> [{add_cond, {ColName, - integer_to_list(add_condition_op_val(Op)), + add_condition_op_val(Op), convert_query_exprlist(ExprList)}} | Query]. %% @spec query_set_limit(Query::proplist(), @@ -655,14 +655,28 @@ query_to_argslist([{K, V} | T], BinArgs) -> case K of add_cond -> {ColName, Op, ExprList} = V, - query_to_argslist(T, [["addcond", ?NULL, ColName, ?NULL, Op, ?NULL, ExprList] | BinArgs]); + query_to_argslist(T, [["addcond", + ?NULL, + ColName, + ?NULL, + integer_to_list(Op), + ?NULL, + ExprList] | BinArgs]); set_limit -> % XXX: check spec to see if the max and skip should be integers or chars - {M, S} = V, - query_to_argslist(T, [["setlimit", ?NULL, <>, ?NULL, <>] | BinArgs]); + {Max, Skip} = V, + query_to_argslist(T, [["setlimit", + ?NULL, + integer_to_list(Max), + ?NULL, + integer_to_list(Skip)] | BinArgs]); set_order -> {ColName, Type} = V, - query_to_argslist(T, [["setorder", ?NULL, ColName, ?NULL, Type] | BinArgs]) + query_to_argslist(T, [["setorder", + ?NULL, + ColName, + ?NULL, + integer_to_list(Type)] | BinArgs]) end; query_to_argslist([], BinArgs) -> lists:reverse(BinArgs). diff --git a/test/principe_table_test.erl b/test/principe_table_test.erl index 0ba2eb3..cf0e48c 100644 --- a/test/principe_table_test.erl +++ b/test/principe_table_test.erl @@ -191,8 +191,8 @@ query_generation_test(Mod) -> [{set_order, {"foo", 0}}] = Mod:query_set_order([{set_order, blah}], "foo", str_ascending), [{set_limit, {2, 0}}] = Mod:query_set_limit([], 2), [{set_limit, {4, 1}}] = Mod:query_set_limit([{set_limit, blah}], 4, 1), - [{add_cond, {"foo", "0", ["bar"]}}] = Mod:query_add_condition([], "foo", str_eq, ["bar"]), - [{add_cond, {"foo", "16777220", ["bar",",","baz"]}}] = + [{add_cond, {"foo", 0, ["bar"]}}] = Mod:query_add_condition([], "foo", str_eq, ["bar"]), + [{add_cond, {"foo", 16777220, ["bar",",","baz"]}}] = Mod:query_add_condition([], "foo", {no, str_and}, ["bar", "baz"]), ok. @@ -200,5 +200,8 @@ search_test(Mod) -> Socket = setup_column_data(Mod), Query1 = Mod:query_add_condition([], "name", str_eq, ["alice"]), [<<"rec1">>] = Mod:search(Socket, Query1), + Query2 = Mod:query_add_condition([], "name", {no, str_eq}, ["alice"]), + Query2A = Mod:query_set_limit(Query2, 2), + [<<"rec2">>, <<"rec3">>] = Mod:search(Socket, Query2A), ok.