diff options
author | Matthew Sackman <matthew@rabbitmq.com> | 2011-02-28 12:53:38 +0000 |
---|---|---|
committer | Matthew Sackman <matthew@rabbitmq.com> | 2011-02-28 12:53:38 +0000 |
commit | 70d47f1a21e3bddf51b50371b6eaecfe4685db18 (patch) | |
tree | 59110196d97620c65d7ea8d06d53f982663dd79d /src/rabbit_router.erl | |
parent | 6bfc31d5ad164c82fd83f39ec019aa94f96525b8 (diff) | |
parent | 99c370c70001bee20f2cc5144321bac86e7924eb (diff) | |
download | rabbitmq-server-70d47f1a21e3bddf51b50371b6eaecfe4685db18.tar.gz |
Merging default into bug23554
Diffstat (limited to 'src/rabbit_router.erl')
-rw-r--r-- | src/rabbit_router.erl | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/rabbit_router.erl b/src/rabbit_router.erl index 309e0e6e..422e53e8 100644 --- a/src/rabbit_router.erl +++ b/src/rabbit_router.erl @@ -37,7 +37,8 @@ fun ((rabbit_types:binding()) -> boolean())) -> match_result()). -spec(match_routing_key/2 :: (rabbit_types:binding_source(), - routing_key() | '_') -> match_result()). + [routing_key()] | ['_']) -> + match_result()). -endif. @@ -82,12 +83,22 @@ match_bindings(SrcName, Match) -> Match(Binding)]), mnesia:async_dirty(fun qlc:e/1, [Query]). -match_routing_key(SrcName, RoutingKey) -> +match_routing_key(SrcName, [RoutingKey]) -> MatchHead = #route{binding = #binding{source = SrcName, destination = '$1', key = RoutingKey, _ = '_'}}, - mnesia:dirty_select(rabbit_route, [{MatchHead, [], ['$1']}]). + mnesia:dirty_select(rabbit_route, [{MatchHead, [], ['$1']}]); +match_routing_key(SrcName, [_|_] = RoutingKeys) -> + Condition = list_to_tuple(['orelse' | [{'=:=', '$2', RKey} || + RKey <- RoutingKeys]]), + MatchHead = #route{binding = #binding{source = SrcName, + destination = '$1', + key = '$2', + _ = '_'}}, + mnesia:dirty_select(rabbit_route, [{MatchHead, [Condition], ['$1']}]). + + %%-------------------------------------------------------------------- |