From 67d3e950bae378fe73812feaeb649a61ea6894bf Mon Sep 17 00:00:00 2001 From: antirez Date: Sat, 30 May 2009 10:17:06 +0200 Subject: [PATCH] Erlang client updated --- client-libraries/erlang/.hg_archival.txt | 2 +- client-libraries/erlang/src/client.erl | 3 ++ client-libraries/erlang/src/erldis.erl | 54 ++++++++++++++----- client-libraries/erlang/test/erldis_tests.erl | 2 +- client-libraries/erlang/test/proto_tests.erl | 2 +- client-libraries/update-python-client.sh | 9 ++++ 6 files changed, 57 insertions(+), 15 deletions(-) create mode 100755 client-libraries/update-python-client.sh diff --git a/client-libraries/erlang/.hg_archival.txt b/client-libraries/erlang/.hg_archival.txt index dc46065c..70656b77 100644 --- a/client-libraries/erlang/.hg_archival.txt +++ b/client-libraries/erlang/.hg_archival.txt @@ -1,2 +1,2 @@ repo: 9e1f35ed7fdc7b3da7f5ff66a71d1975b85e2ae5 -node: d9dd3d00c6fafaa09809061816f4e3b85a32811d +node: 85e28ca5597e22ff1dde18ed4625f41923128993 diff --git a/client-libraries/erlang/src/client.erl b/client-libraries/erlang/src/client.erl index dc3e9836..734a9d3e 100644 --- a/client-libraries/erlang/src/client.erl +++ b/client-libraries/erlang/src/client.erl @@ -48,15 +48,18 @@ connect(Host) -> connect(Host, Port) -> gen_server:start_link(?MODULE, [Host, Port], []). +% This is the simple send with a single row of commands ssend(Client, Cmd) -> ssend(Client, Cmd, []). ssend(Client, Cmd, Args) -> gen_server:cast(Client, {send, sformat([Cmd|Args])}). +% This is the complete send with multiple rows send(Client, Cmd) -> send(Client, Cmd, []). send(Client, Cmd, Args) -> gen_server:cast(Client, {send, string:join([str(Cmd), format(Args)], " ")}). +% asynchronous send, we don't care about the result. asend(Client, Cmd) -> gen_server:cast(Client, {asend, Cmd}). disconnect(Client) -> diff --git a/client-libraries/erlang/src/erldis.erl b/client-libraries/erlang/src/erldis.erl index 136e2eb0..80d78eae 100644 --- a/client-libraries/erlang/src/erldis.erl +++ b/client-libraries/erlang/src/erldis.erl @@ -24,14 +24,19 @@ internal_set_like(Client, Command, Key, Value) -> get_all_results(Client) -> client:get_all_results(Client). +auth(Client, Password) -> client:ssend(Client, auth, [Password]). + set(Client, Key, Value) -> internal_set_like(Client, set, Key, Value). +get(Client, Key) -> client:ssend(Client, get, [Key]). +getset(Client, Key, Value) -> internal_set_like(Client, getset, Key, Value). +mget(Client, Keys) -> client:ssend(Client, mget, Keys). setnx(Client, Key, Value) -> internal_set_like(Client, setnx, Key, Value). incr(Client, Key) -> client:ssend(Client, incr, [Key]). incrby(Client, Key, By) -> client:ssend(Client, incrby, [Key, By]). decr(Client, Key) -> client:ssend(Client, decr, [Key]). decrby(Client, Key, By) -> client:ssend(Client, decrby, [Key, By]). -get(Client, Key) -> client:ssend(Client, get, [Key]). -mget(Client, Keys) -> client:ssend(Client, mget, Keys). + + %% Commands operating on every value exists(Client, Key) -> client:ssend(Client, exists, [Key]). @@ -41,10 +46,11 @@ keys(Client, Pattern) -> client:ssend(Client, keys, [Pattern]). randomkey(Client, Key) -> client:ssend(Client, randomkey, [Key]). rename(Client, OldKey, NewKey) -> client:ssend(Client, rename, [OldKey, NewKey]). renamenx(Client, OldKey, NewKey) -> client:ssend(Client, renamenx, [OldKey, NewKey]). +dbsize(Client) -> client:ssend(Client, dbsize). +expire(Client, Key, Seconds) -> client:ssend(Client, expire, [Key, Seconds]). +ttl(Client, Key) -> client:ssend(Client, ttl, [Key]). + -%% Commands operating on both lists and sets -sort(Client, Key) -> client:ssend(Client, sort, [Key]). -sort(Client, Key, Extra) -> client:ssend(Client, sort, [Key, Extra]). %% Commands operating on lists rpush(Client, Key, Value) -> internal_set_like(Client, rpush, Key, Value). @@ -53,30 +59,54 @@ llen(Client, Key) -> client:ssend(Client, llen, [Key]). lrange(Client, Key, Start, End) -> client:ssend(Client, lrange, [Key, Start, End]). ltrim(Client, Key, Start, End) -> client:ssend(Client, ltrim, [Key, Start, End]). lindex(Client, Key, Index) -> client:ssend(Client, lindex, [Key, Index]). -lpop(Client, Key) -> client:ssend(Client, lpop, [Key]). -rpop(Client, Key) -> client:ssend(Client, rpop, [Key]). -lrem(Client, Key, Number, Value) -> - client:send(Client, lrem, [[Key, Number, length(Value)], - [Value]]). lset(Client, Key, Index, Value) -> client:send(Client, lset, [[Key, Index, length(Value)], [Value]]). +lrem(Client, Key, Number, Value) -> + client:send(Client, lrem, [[Key, Number, length(Value)], + [Value]]). +lpop(Client, Key) -> client:ssend(Client, lpop, [Key]). +rpop(Client, Key) -> client:ssend(Client, rpop, [Key]). + + %% Commands operating on sets sadd(Client, Key, Value) -> internal_set_like(Client, sadd, Key, Value). srem(Client, Key, Value) -> internal_set_like(Client, srem, Key, Value). +smove(Client, SrcKey, DstKey, Member) -> client:send(Client, smove, [[SrcKey, DstKey, length(Member)], + [Member]]). scard(Client, Key) -> client:ssend(Client, scard, [Key]). sismember(Client, Key, Value) -> internal_set_like(Client, sismember, Key, Value). sintersect(Client, Keys) -> client:ssend(Client, sinter, Keys). +sinter(Client, Keys) -> sintersect(Client, Keys). +sinterstore(Client, DstKey, Keys) -> client:ssend(Client, sinterstore, [DstKey|Keys]). +sunion(Client, Keys) -> client:ssend(Client, sunion, Keys). +sunionstore(Client, DstKey, Keys) -> client:ssend(Client, sunionstore, [DstKey|Keys]). +sdiff(Client, Keys) -> client:ssend(Client, sdiff, Keys). +sdiffstore(Client, DstKey, Keys) -> client:ssend(Client, sdiffstore, [DstKey|Keys]). smembers(Client, Key) -> client:ssend(Client, smembers, [Key]). %% Multiple DB commands -flushdb(Client) -> client:ssend(Client, flushdb). -flushall(Client) -> client:ssend(Client, flushall). select(Client, Index) -> client:ssend(Client, select, [Index]). move(Client, Key, DBIndex) -> client:ssend(Client, move, [Key, DBIndex]). +flushdb(Client) -> client:ssend(Client, flushdb). +flushall(Client) -> client:ssend(Client, flushall). + + +%% Commands operating on both lists and sets +sort(Client, Key) -> client:ssend(Client, sort, [Key]). +sort(Client, Key, Extra) -> client:ssend(Client, sort, [Key, Extra]). + + +%% Persistence control commands save(Client) -> client:ssend(Client, save). bgsave(Client) -> client:ssend(Client, bgsave). lastsave(Client) -> client:ssend(Client, lastsave). shutdown(Client) -> client:asend(Client, shutdown). + + +%% Remote server control commands +info(Client) -> client:ssend(Client, info). +slaveof(Client, Host, Port) -> client:ssend(Client, slaveof, [Host, Port]). +slaveof(Client) -> client:ssend(Client, slaveof, ["no one"]). diff --git a/client-libraries/erlang/test/erldis_tests.erl b/client-libraries/erlang/test/erldis_tests.erl index 45042abf..4ebdd24a 100644 --- a/client-libraries/erlang/test/erldis_tests.erl +++ b/client-libraries/erlang/test/erldis_tests.erl @@ -14,7 +14,7 @@ utils_test() -> ?assertEqual(client:format([[1, 2, 3]]), "1 2 3"), ?assertEqual(client:format([[1,2,3], [4,5,6]]), "1 2 3\r\n4 5 6"). -pipeline_test() -> +basic_test() -> {ok, Client} = erldis:connect("localhost"), erldis:flushall(Client), erldis:get(Client, "pippo"), diff --git a/client-libraries/erlang/test/proto_tests.erl b/client-libraries/erlang/test/proto_tests.erl index 5bae317e..a07f9313 100644 --- a/client-libraries/erlang/test/proto_tests.erl +++ b/client-libraries/erlang/test/proto_tests.erl @@ -7,4 +7,4 @@ parse_test() -> pong = proto:parse(empty, "+PONG"), false = proto:parse(empty, ":0"), true = proto:parse(empty, ":1"), - {error, no_such_key} = proto:parse(empty, "-1"). + {error, "1"} = proto:parse(empty, "-1"). diff --git a/client-libraries/update-python-client.sh b/client-libraries/update-python-client.sh new file mode 100755 index 00000000..e5f03833 --- /dev/null +++ b/client-libraries/update-python-client.sh @@ -0,0 +1,9 @@ +#!/bin/sh +rm -rf temp +mkdir temp +cd temp +git clone git://github.com/ludoo/redis.git +cd .. +rm -rf python +mv temp/redis/client-libraries/python python +rm -rf temp -- 2.45.2