summaryrefslogtreecommitdiff
path: root/src/rabbit_router.erl
diff options
context:
space:
mode:
authorMatthew Sackman <matthew@rabbitmq.com>2011-02-28 12:53:38 +0000
committerMatthew Sackman <matthew@rabbitmq.com>2011-02-28 12:53:38 +0000
commit70d47f1a21e3bddf51b50371b6eaecfe4685db18 (patch)
tree59110196d97620c65d7ea8d06d53f982663dd79d /src/rabbit_router.erl
parent6bfc31d5ad164c82fd83f39ec019aa94f96525b8 (diff)
parent99c370c70001bee20f2cc5144321bac86e7924eb (diff)
downloadrabbitmq-server-70d47f1a21e3bddf51b50371b6eaecfe4685db18.tar.gz
Merging default into bug23554
Diffstat (limited to 'src/rabbit_router.erl')
-rw-r--r--src/rabbit_router.erl17
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']}]).
+
+
%%--------------------------------------------------------------------