Rename JMS to (AMQP) SQL
This commit is contained in:
		
							parent
							
								
									c34d6206f1
								
							
						
					
					
						commit
						dbc6321808
					
				|  | @ -258,7 +258,7 @@ define ct_master.erl | |||
| endef | ||||
| 
 | ||||
| PARALLEL_CT_SET_1_A = unit_rabbit_ssl unit_cluster_formation_locking_mocks unit_cluster_formation_sort_nodes unit_collections unit_config_value_encryption unit_connection_tracking | ||||
| PARALLEL_CT_SET_1_B = amqp_address amqp_auth amqp_credit_api_v2 amqp_filter_prop amqp_filter_sql amqp_jms_unit amqp_dotnet amqp_jms signal_handling single_active_consumer unit_access_control_authn_authz_context_propagation unit_access_control_credential_validation unit_amqp091_content_framing unit_amqp091_server_properties unit_app_management | ||||
| PARALLEL_CT_SET_1_B = amqp_address amqp_auth amqp_credit_api_v2 amqp_filter_prop amqp_filter_sql amqp_filter_sql_unit amqp_dotnet amqp_jms signal_handling single_active_consumer unit_access_control_authn_authz_context_propagation unit_access_control_credential_validation unit_amqp091_content_framing unit_amqp091_server_properties unit_app_management | ||||
| PARALLEL_CT_SET_1_C = amqp_proxy_protocol amqpl_consumer_ack amqpl_direct_reply_to backing_queue bindings rabbit_db_maintenance rabbit_db_msup rabbit_db_policy rabbit_db_queue rabbit_db_topic_exchange rabbit_direct_reply_to_prop cluster_limit cluster_minority term_to_binary_compat_prop topic_permission transactions unicode unit_access_control | ||||
| PARALLEL_CT_SET_1_D = amqqueue_backward_compatibility channel_interceptor channel_operation_timeout classic_queue classic_queue_prop config_schema peer_discovery_dns peer_discovery_tmp_hidden_node per_node_limit per_user_connection_channel_limit | ||||
| 
 | ||||
|  |  | |||
|  | @ -10,7 +10,7 @@ | |||
| 
 | ||||
| -type expression() :: undefined | | ||||
|                       {property, rabbit_amqp_filter_prop:parsed_expressions()} | | ||||
|                       {jms, rabbit_amqp_filter_jms:parsed_expression()}. | ||||
|                       {sql, rabbit_amqp_filter_sql:parsed_expression()}. | ||||
| 
 | ||||
| -export_type([expression/0]). | ||||
| 
 | ||||
|  | @ -20,5 +20,5 @@ eval(undefined, _Mc) -> | |||
|     true; | ||||
| eval({property, Expr}, Mc) -> | ||||
|     rabbit_amqp_filter_prop:eval(Expr, Mc); | ||||
| eval({jms, Expr}, Mc) -> | ||||
|     rabbit_amqp_filter_jms:eval(Expr, Mc). | ||||
| eval({sql, Expr}, Mc) -> | ||||
|     rabbit_amqp_filter_sql:eval(Expr, Mc). | ||||
|  |  | |||
|  | @ -4,13 +4,13 @@ | |||
| %% | ||||
| %% Copyright (c) 2007-2025 Broadcom. All Rights Reserved. The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.  All rights reserved. | ||||
| 
 | ||||
| -module(rabbit_amqp_filter_jms). | ||||
| -module(rabbit_amqp_filter_sql). | ||||
| -feature(maybe_expr, enable). | ||||
| 
 | ||||
| -include_lib("amqp10_common/include/amqp10_filter.hrl"). | ||||
| 
 | ||||
| -type parsed_expression() :: {ApplicationProperties :: boolean(), | ||||
|                               rabbit_jms_ast:ast()}. | ||||
|                               rabbit_amqp_sql_ast:ast()}. | ||||
| 
 | ||||
| -export_type([parsed_expression/0]). | ||||
| 
 | ||||
|  | @ -21,27 +21,26 @@ | |||
| -define(MAX_EXPRESSION_LENGTH, 4096). | ||||
| -define(MAX_TOKENS, 200). | ||||
| 
 | ||||
| %% defined in both AMQP and JMS | ||||
| -define(DEFAULT_MSG_PRIORITY, 4). | ||||
| 
 | ||||
| -define(IS_CONTROL_CHAR(C), C < 32 orelse C =:= 127). | ||||
| 
 | ||||
| -spec parse(tuple()) -> | ||||
|     {ok, parsed_expression()} | error. | ||||
| parse({described, Descriptor, {utf8, JmsSelector}}) -> | ||||
| parse({described, Descriptor, {utf8, SQL}}) -> | ||||
|     maybe | ||||
|         ok ?= check_descriptor(Descriptor), | ||||
|         {ok, String} ?= jms_selector_to_list(JmsSelector), | ||||
|         {ok, String} ?= sql_to_list(SQL), | ||||
|         ok ?= check_length(String), | ||||
|         {ok, Tokens} ?= tokenize(String, JmsSelector), | ||||
|         ok ?= check_token_count(Tokens, JmsSelector), | ||||
|         {ok, Ast0} ?= parse(Tokens, JmsSelector), | ||||
|         {ok, Ast} ?= transform_ast(Ast0, JmsSelector), | ||||
|         {ok, Tokens} ?= tokenize(String, SQL), | ||||
|         ok ?= check_token_count(Tokens, SQL), | ||||
|         {ok, Ast0} ?= parse(Tokens, SQL), | ||||
|         {ok, Ast} ?= transform_ast(Ast0, SQL), | ||||
|         AppProps = has_binary_identifier(Ast), | ||||
|         {ok, {AppProps, Ast}} | ||||
|     end. | ||||
| 
 | ||||
| %% Evaluates a parsed JMS message selector expression. | ||||
| %% Evaluates a parsed SQL expression. | ||||
| -spec eval(parsed_expression(), mc:state()) -> boolean(). | ||||
| eval({ApplicationProperties, Ast}, Msg) -> | ||||
|     State = case ApplicationProperties of | ||||
|  | @ -298,54 +297,54 @@ check_descriptor({ulong, ?DESCRIPTOR_CODE_SQL_FILTER}) -> | |||
| check_descriptor(_) -> | ||||
|     error. | ||||
| 
 | ||||
| jms_selector_to_list(JmsSelector) -> | ||||
|     case unicode:characters_to_list(JmsSelector) of | ||||
| sql_to_list(SQL) -> | ||||
|     case unicode:characters_to_list(SQL) of | ||||
|         String when is_list(String) -> | ||||
|             {ok, String}; | ||||
|         Error -> | ||||
|             rabbit_log:warning("JMS message selector ~p is not UTF-8 encoded: ~p", | ||||
|                                [JmsSelector, Error]), | ||||
|             rabbit_log:warning("SQL expression ~p is not UTF-8 encoded: ~p", | ||||
|                                [SQL, Error]), | ||||
|             error | ||||
|     end. | ||||
| 
 | ||||
| check_length(String) | ||||
|   when length(String) > ?MAX_EXPRESSION_LENGTH -> | ||||
|     rabbit_log:warning("JMS message selector length ~b exceeds maximum length ~b", | ||||
|     rabbit_log:warning("SQL expression length ~b exceeds maximum length ~b", | ||||
|                        [length(String), ?MAX_EXPRESSION_LENGTH]), | ||||
|     error; | ||||
| check_length(_) -> | ||||
|     ok. | ||||
| 
 | ||||
| tokenize(String, JmsSelector) -> | ||||
|     case rabbit_jms_selector_lexer:string(String) of | ||||
| tokenize(String, SQL) -> | ||||
|     case rabbit_amqp_sql_lexer:string(String) of | ||||
|         {ok, Tokens, _EndLocation} -> | ||||
|             {ok, Tokens}; | ||||
|         {error, {_Line, _Mod, ErrDescriptor}, _Location} -> | ||||
|             rabbit_log:warning("failed to scan JMS message selector '~ts': ~tp", | ||||
|                                [JmsSelector, ErrDescriptor]), | ||||
|             rabbit_log:warning("failed to scan SQL expression '~ts': ~tp", | ||||
|                                [SQL, ErrDescriptor]), | ||||
|             error | ||||
|     end. | ||||
| 
 | ||||
| check_token_count(Tokens, JmsSelector) | ||||
| check_token_count(Tokens, SQL) | ||||
|   when length(Tokens) > ?MAX_TOKENS -> | ||||
|     rabbit_log:warning("JMS message selector '~ts' with ~b tokens exceeds token limit ~b", | ||||
|                        [JmsSelector, length(Tokens), ?MAX_TOKENS]), | ||||
|     rabbit_log:warning("SQL expression '~ts' with ~b tokens exceeds token limit ~b", | ||||
|                        [SQL, length(Tokens), ?MAX_TOKENS]), | ||||
|     error; | ||||
| check_token_count(_, _) -> | ||||
|     ok. | ||||
| 
 | ||||
| parse(Tokens, JmsSelector) -> | ||||
|     case rabbit_jms_selector_parser:parse(Tokens) of | ||||
| parse(Tokens, SQL) -> | ||||
|     case rabbit_amqp_sql_parser:parse(Tokens) of | ||||
|         {error, Reason} -> | ||||
|             rabbit_log:warning("failed to parse JMS message selector '~ts': ~p", | ||||
|                                [JmsSelector, Reason]), | ||||
|             rabbit_log:warning("failed to parse SQL expression '~ts': ~p", | ||||
|                                [SQL, Reason]), | ||||
|             error; | ||||
|         Ok -> | ||||
|             Ok | ||||
|     end. | ||||
| 
 | ||||
| transform_ast(Ast0, JmsSelector) -> | ||||
|     try rabbit_jms_ast:map( | ||||
| transform_ast(Ast0, SQL) -> | ||||
|     try rabbit_amqp_sql_ast:map( | ||||
|           fun({identifier, Ident}) | ||||
|                 when is_binary(Ident) -> | ||||
|                   {identifier, rabbit_amqp_util:section_field_name_to_atom(Ident)}; | ||||
|  | @ -358,18 +357,18 @@ transform_ast(Ast0, JmsSelector) -> | |||
|             {ok, Ast} | ||||
|     catch {unsupported_field, Name} -> | ||||
|               rabbit_log:warning( | ||||
|                 "identifier ~ts in JMS message selector ~tp is unsupported", | ||||
|                 [Name, JmsSelector]), | ||||
|                 "identifier ~ts in SQL expression ~tp is unsupported", | ||||
|                 [Name, SQL]), | ||||
|               error; | ||||
|           {invalid_pattern, Reason} -> | ||||
|               rabbit_log:warning( | ||||
|                 "failed to parse LIKE pattern for JMS message selector ~tp: ~tp", | ||||
|                 [JmsSelector, Reason]), | ||||
|                 "failed to parse LIKE pattern for SQL expression ~tp: ~tp", | ||||
|                 [SQL, Reason]), | ||||
|               error | ||||
|     end. | ||||
| 
 | ||||
| has_binary_identifier(Ast) -> | ||||
|     rabbit_jms_ast:search(fun({identifier, Val}) -> | ||||
|     rabbit_amqp_sql_ast:search(fun({identifier, Val}) -> | ||||
|                                   is_binary(Val); | ||||
|                              (_Node) -> | ||||
|                                   false | ||||
|  | @ -390,7 +389,7 @@ transform_pattern(Pattern, Escape) -> | |||
|         {single_percent, Chars, PercentPos} -> | ||||
|             single_percent(Chars, PercentPos); | ||||
|         regex -> | ||||
|             Re = jms_pattern_to_regex(Pattern, Escape, []), | ||||
|             Re = pattern_to_regex(Pattern, Escape, []), | ||||
|             case re:compile("^" ++ Re ++ "$", [unicode]) of | ||||
|                 {ok, CompiledRe} -> | ||||
|                     CompiledRe; | ||||
|  | @ -441,23 +440,23 @@ single_percent(Chars, Pos) -> | |||
|     {{prefix, byte_size(PrefixBin), PrefixBin}, | ||||
|      {suffix, byte_size(SuffixBin), SuffixBin}}. | ||||
| 
 | ||||
| jms_pattern_to_regex([], _Escape, Acc) -> | ||||
| pattern_to_regex([], _Escape, Acc) -> | ||||
|     lists:reverse(Acc); | ||||
| jms_pattern_to_regex([EscapeChar | Rest], EscapeChar, Acc) -> | ||||
| pattern_to_regex([EscapeChar | Rest], EscapeChar, Acc) -> | ||||
|     case Rest of | ||||
|         [] -> | ||||
|             throw({invalid_pattern, invalid_escape_at_end}); | ||||
|         [NextChar | Rest1] -> | ||||
|             jms_pattern_to_regex(Rest1, EscapeChar, escape_regex_char(NextChar) ++ Acc) | ||||
|             pattern_to_regex(Rest1, EscapeChar, escape_regex_char(NextChar) ++ Acc) | ||||
|     end; | ||||
| jms_pattern_to_regex([$% | Rest], Escape, Acc) -> | ||||
| pattern_to_regex([$% | Rest], Escape, Acc) -> | ||||
|     %% % matches any sequence of characters (0 or more) | ||||
|     jms_pattern_to_regex(Rest, Escape, [$*, $. | Acc]); | ||||
| jms_pattern_to_regex([$_ | Rest], Escape, Acc) -> | ||||
|     pattern_to_regex(Rest, Escape, [$*, $. | Acc]); | ||||
| pattern_to_regex([$_ | Rest], Escape, Acc) -> | ||||
|     %% _ matches exactly one character | ||||
|     jms_pattern_to_regex(Rest, Escape, [$. | Acc]); | ||||
| jms_pattern_to_regex([Char | Rest], Escape, Acc) -> | ||||
|     jms_pattern_to_regex(Rest, Escape, escape_regex_char(Char) ++ Acc). | ||||
|     pattern_to_regex(Rest, Escape, [$. | Acc]); | ||||
| pattern_to_regex([Char | Rest], Escape, Acc) -> | ||||
|     pattern_to_regex(Rest, Escape, escape_regex_char(Char) ++ Acc). | ||||
| 
 | ||||
| %% Escape user provided characters that have special meaning in Erlang regex. | ||||
| escape_regex_char(Char0) -> | ||||
|  | @ -3254,14 +3254,14 @@ parse_filters(Filter = {{symbol, ?FILTER_NAME_SQL}, Value}, | |||
|               Acc = {EffectiveFilters, ConsumerFilter, ConsumerArgs}) -> | ||||
|     case ConsumerFilter of | ||||
|         undefined -> | ||||
|             case rabbit_amqp_filter_jms:parse(Value) of | ||||
|             case rabbit_amqp_filter_sql:parse(Value) of | ||||
|                 {ok, ParsedSql} -> | ||||
|                     {[Filter | EffectiveFilters], {jms, ParsedSql}, ConsumerArgs}; | ||||
|                     {[Filter | EffectiveFilters], {sql, ParsedSql}, ConsumerArgs}; | ||||
|                 error -> | ||||
|                     Acc | ||||
|             end; | ||||
|         _ -> | ||||
|             %% SQL filter expression is mutually exclusive with AMQP property filter expression. | ||||
|             %% SQL and property filter expressions are mutually exclusive. | ||||
|             Acc | ||||
|     end; | ||||
| parse_filters(Filter = {{symbol, _Key}, Value}, | ||||
|  | @ -3284,9 +3284,8 @@ parse_filters(Filter = {{symbol, _Key}, Value}, | |||
|                              {property, [ParsedExpression | ParsedExpressions]}, | ||||
|                              ConsumerArgs} | ||||
|                     end; | ||||
|                 {jms, _} -> | ||||
|                     %% SQL filter expression is mutually exclusive with | ||||
|                     %% AMQP property filter expressions. | ||||
|                 {sql, _} -> | ||||
|                     %% SQL and property filter expressions are mutually exclusive. | ||||
|                     Acc | ||||
|             end; | ||||
|         error -> | ||||
|  |  | |||
|  | @ -5,8 +5,8 @@ | |||
| %% Copyright (c) 2007-2025 Broadcom. All Rights Reserved. The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries.  All rights reserved. | ||||
| 
 | ||||
| %% Helper functions operating on the Abstract Syntax Tree (AST) | ||||
| %% as returned by rabbit_jms_selector_parser:parse/1 | ||||
| -module(rabbit_jms_ast). | ||||
| %% as returned by rabbit_amqp_sql_parser:parse/1 | ||||
| -module(rabbit_amqp_sql_ast). | ||||
| 
 | ||||
| -export([search/2, | ||||
|          map/2]). | ||||
|  | @ -94,8 +94,8 @@ has_binary_identifier_test() -> | |||
|     ok. | ||||
| 
 | ||||
| has_binary_identifier(Selector) -> | ||||
|     {ok, Tokens, _EndLocation} = rabbit_jms_selector_lexer:string(Selector), | ||||
|     {ok, Ast0} = rabbit_jms_selector_parser:parse(Tokens), | ||||
|     {ok, Tokens, _EndLocation} = rabbit_amqp_sql_lexer:string(Selector), | ||||
|     {ok, Ast0} = rabbit_amqp_sql_parser:parse(Tokens), | ||||
|     Ast = map(fun({identifier, Ident}) when is_binary(Ident) -> | ||||
|                       {identifier, rabbit_amqp_util:section_field_name_to_atom(Ident)}; | ||||
|                  (Node) -> | ||||
|  | @ -39,13 +39,13 @@ | |||
| %% property of the creator of the scanner and is not covered by that | ||||
| %% Copyright. | ||||
| 
 | ||||
| -module(rabbit_jms_selector_lexer). | ||||
| -module(rabbit_amqp_sql_lexer). | ||||
| 
 | ||||
| -export([string/1,string/2,token/2,token/3,tokens/2,tokens/3]). | ||||
| -export([format_error/1]). | ||||
| 
 | ||||
| %% User code. This is placed here to allow extra attributes. | ||||
| -file("rabbit_jms_selector_lexer.xrl", 70). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 70). | ||||
| 
 | ||||
| %% "Approximate literals use the Java floating-point literal syntax." | ||||
| to_float([$. | _] = Chars) -> | ||||
|  | @ -436,7 +436,7 @@ tab_size() -> 8. | |||
| %% return signal either an unrecognised character or end of current | ||||
| %% input. | ||||
| 
 | ||||
| -file("rabbit_jms_selector_lexer.erl", 404). | ||||
| -file("rabbit_amqp_sql_lexer.erl", 404). | ||||
| yystate() -> 66. | ||||
| 
 | ||||
| yystate(69, [101|Ics], Line, Col, Tlen, _, _) -> | ||||
|  | @ -1693,157 +1693,157 @@ yyaction(30, TokenLen, YYtcs, _, _) -> | |||
| yyaction(_, _, _, _, _) -> error. | ||||
| 
 | ||||
| -compile({inline,yyaction_0/0}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 20). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 20). | ||||
| yyaction_0() -> | ||||
|      skip_token . | ||||
| 
 | ||||
| -compile({inline,yyaction_1/1}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 23). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 23). | ||||
| yyaction_1(TokenLine) -> | ||||
|      { token, { 'AND', TokenLine } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_2/1}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 24). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 24). | ||||
| yyaction_2(TokenLine) -> | ||||
|      { token, { 'OR', TokenLine } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_3/1}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 25). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 25). | ||||
| yyaction_3(TokenLine) -> | ||||
|      { token, { 'NOT', TokenLine } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_4/1}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 28). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 28). | ||||
| yyaction_4(TokenLine) -> | ||||
|      { token, { 'BETWEEN', TokenLine } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_5/1}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 29). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 29). | ||||
| yyaction_5(TokenLine) -> | ||||
|      { token, { 'LIKE', TokenLine } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_6/1}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 30). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 30). | ||||
| yyaction_6(TokenLine) -> | ||||
|      { token, { 'IN', TokenLine } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_7/1}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 31). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 31). | ||||
| yyaction_7(TokenLine) -> | ||||
|      { token, { 'IS', TokenLine } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_8/1}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 32). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 32). | ||||
| yyaction_8(TokenLine) -> | ||||
|      { token, { 'NULL', TokenLine } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_9/1}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 33). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 33). | ||||
| yyaction_9(TokenLine) -> | ||||
|      { token, { 'ESCAPE', TokenLine } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_10/1}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 36). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 36). | ||||
| yyaction_10(TokenLine) -> | ||||
|      { token, { boolean, TokenLine, true } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_11/1}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 37). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 37). | ||||
| yyaction_11(TokenLine) -> | ||||
|      { token, { boolean, TokenLine, false } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_12/1}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 40). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 40). | ||||
| yyaction_12(TokenLine) -> | ||||
|      { token, { '=', TokenLine } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_13/1}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 41). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 41). | ||||
| yyaction_13(TokenLine) -> | ||||
|      { token, { '<>', TokenLine } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_14/1}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 42). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 42). | ||||
| yyaction_14(TokenLine) -> | ||||
|      { token, { '>=', TokenLine } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_15/1}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 43). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 43). | ||||
| yyaction_15(TokenLine) -> | ||||
|      { token, { '<=', TokenLine } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_16/1}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 44). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 44). | ||||
| yyaction_16(TokenLine) -> | ||||
|      { token, { '>', TokenLine } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_17/1}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 45). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 45). | ||||
| yyaction_17(TokenLine) -> | ||||
|      { token, { '<', TokenLine } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_18/1}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 48). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 48). | ||||
| yyaction_18(TokenLine) -> | ||||
|      { token, { '+', TokenLine } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_19/1}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 49). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 49). | ||||
| yyaction_19(TokenLine) -> | ||||
|      { token, { '-', TokenLine } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_20/1}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 50). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 50). | ||||
| yyaction_20(TokenLine) -> | ||||
|      { token, { '*', TokenLine } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_21/1}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 51). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 51). | ||||
| yyaction_21(TokenLine) -> | ||||
|      { token, { '/', TokenLine } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_22/1}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 54). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 54). | ||||
| yyaction_22(TokenLine) -> | ||||
|      { token, { '(', TokenLine } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_23/1}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 55). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 55). | ||||
| yyaction_23(TokenLine) -> | ||||
|      { token, { ')', TokenLine } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_24/1}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 56). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 56). | ||||
| yyaction_24(TokenLine) -> | ||||
|      { token, { ',', TokenLine } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_25/2}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 59). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 59). | ||||
| yyaction_25(TokenChars, TokenLine) -> | ||||
|      { token, { integer, TokenLine, list_to_integer (TokenChars) } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_26/2}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 60). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 60). | ||||
| yyaction_26(TokenChars, TokenLine) -> | ||||
|      { token, { float, TokenLine, list_to_float (to_float (TokenChars)) } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_27/2}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 61). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 61). | ||||
| yyaction_27(TokenChars, TokenLine) -> | ||||
|      { token, { float, TokenLine, parse_scientific_notation (TokenChars) } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_28/2}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 62). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 62). | ||||
| yyaction_28(TokenChars, TokenLine) -> | ||||
|      { token, { string, TokenLine, process_string (TokenChars) } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_29/2}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 63). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 63). | ||||
| yyaction_29(TokenChars, TokenLine) -> | ||||
|      { token, { identifier, TokenLine, unicode : characters_to_binary (TokenChars) } } . | ||||
| 
 | ||||
| -compile({inline,yyaction_30/1}). | ||||
| -file("rabbit_jms_selector_lexer.xrl", 66). | ||||
| -file("rabbit_amqp_sql_lexer.xrl", 66). | ||||
| yyaction_30(TokenChars) -> | ||||
|      { error, { illegal_character, TokenChars } } . | ||||
| -file("leexinc.hrl", 377). | ||||
|  | @ -1,8 +1,8 @@ | |||
| %%% This is the definitions file for JMS message selectors: | ||||
| %%% https://jakarta.ee/specifications/messaging/3.1/jakarta-messaging-spec-3.1#message-selector | ||||
| %%% This is the definitions file for SQL Filter Expressions: | ||||
| %%% https://docs.oasis-open.org/amqp/filtex/v1.0/csd01/filtex-v1.0-csd01.html#_Toc67929276 | ||||
| %%% | ||||
| %%% To manually generate the scanner file rabbit_jms_selector_lexer.erl run: | ||||
| %%% leex:file("rabbit_jms_selector_lexer.xrl", [deterministic]). | ||||
| %%% To manually generate the scanner file rabbit_amqp_sql_lexer.erl run: | ||||
| %%% leex:file("rabbit_amqp_sql_lexer.xrl", [deterministic]). | ||||
| 
 | ||||
| Definitions. | ||||
| WHITESPACE  = [\s\t\f\n\r] | ||||
|  | @ -1,8 +1,8 @@ | |||
| -file("rabbit_jms_selector_parser.yrl", 0). | ||||
| -module(rabbit_jms_selector_parser). | ||||
| -file("rabbit_jms_selector_parser.erl", 3). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 0). | ||||
| -module(rabbit_amqp_sql_parser). | ||||
| -file("rabbit_amqp_sql_parser.erl", 3). | ||||
| -export([parse/1, parse_and_scan/1, format_error/1]). | ||||
| -file("rabbit_jms_selector_parser.yrl", 122). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 122). | ||||
| 
 | ||||
| extract_value({_Token, _Line, Value}) -> Value. | ||||
| 
 | ||||
|  | @ -212,7 +212,7 @@ yecctoken2string1(Other) -> | |||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| -file("rabbit_jms_selector_parser.erl", 215). | ||||
| -file("rabbit_amqp_sql_parser.erl", 215). | ||||
| 
 | ||||
| -dialyzer({nowarn_function, yeccpars2/7}). | ||||
| -compile({nowarn_unused_function,  yeccpars2/7}). | ||||
|  | @ -1346,7 +1346,7 @@ yeccgoto_unary_expr(79=_S, Cat, Ss, Stack, T, Ts, Tzr) -> | |||
| -compile({inline,yeccpars2_1_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_1_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_1_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 96). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 96). | ||||
| yeccpars2_1_(__Stack0) -> | ||||
|  [___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1356,7 +1356,7 @@ yeccpars2_1_(__Stack0) -> | |||
| -compile({inline,yeccpars2_3_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_3_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_3_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 101). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 101). | ||||
| yeccpars2_3_(__Stack0) -> | ||||
|  [___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1366,7 +1366,7 @@ yeccpars2_3_(__Stack0) -> | |||
| -compile({inline,yeccpars2_4_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_4_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_4_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 92). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 92). | ||||
| yeccpars2_4_(__Stack0) -> | ||||
|  [___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1376,7 +1376,7 @@ yeccpars2_4_(__Stack0) -> | |||
| -compile({inline,yeccpars2_5_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_5_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_5_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 43). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 43). | ||||
| yeccpars2_5_(__Stack0) -> | ||||
|  [___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1386,7 +1386,7 @@ yeccpars2_5_(__Stack0) -> | |||
| -compile({inline,yeccpars2_6_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_6_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_6_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 105). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 105). | ||||
| yeccpars2_6_(__Stack0) -> | ||||
|  [___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1396,7 +1396,7 @@ yeccpars2_6_(__Stack0) -> | |||
| -compile({inline,yeccpars2_7_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_7_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_7_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 59). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 59). | ||||
| yeccpars2_7_(__Stack0) -> | ||||
|  [___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1406,7 +1406,7 @@ yeccpars2_7_(__Stack0) -> | |||
| -compile({inline,yeccpars2_8_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_8_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_8_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 61). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 61). | ||||
| yeccpars2_8_(__Stack0) -> | ||||
|  [___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1416,7 +1416,7 @@ yeccpars2_8_(__Stack0) -> | |||
| -compile({inline,yeccpars2_9_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_9_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_9_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 60). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 60). | ||||
| yeccpars2_9_(__Stack0) -> | ||||
|  [___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1426,7 +1426,7 @@ yeccpars2_9_(__Stack0) -> | |||
| -compile({inline,yeccpars2_10_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_10_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_10_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 106). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 106). | ||||
| yeccpars2_10_(__Stack0) -> | ||||
|  [___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1436,7 +1436,7 @@ yeccpars2_10_(__Stack0) -> | |||
| -compile({inline,yeccpars2_11_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_11_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_11_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 40). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 40). | ||||
| yeccpars2_11_(__Stack0) -> | ||||
|  [___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1446,7 +1446,7 @@ yeccpars2_11_(__Stack0) -> | |||
| -compile({inline,yeccpars2_12_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_12_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_12_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 49). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 49). | ||||
| yeccpars2_12_(__Stack0) -> | ||||
|  [___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1456,7 +1456,7 @@ yeccpars2_12_(__Stack0) -> | |||
| -compile({inline,yeccpars2_13_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_13_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_13_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 58). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 58). | ||||
| yeccpars2_13_(__Stack0) -> | ||||
|  [___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1466,7 +1466,7 @@ yeccpars2_13_(__Stack0) -> | |||
| -compile({inline,yeccpars2_14_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_14_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_14_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 62). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 62). | ||||
| yeccpars2_14_(__Stack0) -> | ||||
|  [___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1476,7 +1476,7 @@ yeccpars2_14_(__Stack0) -> | |||
| -compile({inline,yeccpars2_19_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_19_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_19_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 116). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 116). | ||||
| yeccpars2_19_(__Stack0) -> | ||||
|  [___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1486,7 +1486,7 @@ yeccpars2_19_(__Stack0) -> | |||
| -compile({inline,yeccpars2_20_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_20_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_20_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 114). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 114). | ||||
| yeccpars2_20_(__Stack0) -> | ||||
|  [___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1496,7 +1496,7 @@ yeccpars2_20_(__Stack0) -> | |||
| -compile({inline,yeccpars2_21_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_21_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_21_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 109). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 109). | ||||
| yeccpars2_21_(__Stack0) -> | ||||
|  [___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1507,7 +1507,7 @@ yeccpars2_21_(__Stack0) -> | |||
| -compile({inline,yeccpars2_22_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_22_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_22_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 113). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 113). | ||||
| yeccpars2_22_(__Stack0) -> | ||||
|  [___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1517,7 +1517,7 @@ yeccpars2_22_(__Stack0) -> | |||
| -compile({inline,yeccpars2_23_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_23_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_23_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 115). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 115). | ||||
| yeccpars2_23_(__Stack0) -> | ||||
|  [___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1527,7 +1527,7 @@ yeccpars2_23_(__Stack0) -> | |||
| -compile({inline,yeccpars2_24_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_24_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_24_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 48). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 48). | ||||
| yeccpars2_24_(__Stack0) -> | ||||
|  [___2,___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1537,7 +1537,7 @@ yeccpars2_24_(__Stack0) -> | |||
| -compile({inline,yeccpars2_27_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_27_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_27_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 47). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 47). | ||||
| yeccpars2_27_(__Stack0) -> | ||||
|  [___3,___2,___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1547,7 +1547,7 @@ yeccpars2_27_(__Stack0) -> | |||
| -compile({inline,yeccpars2_28_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_28_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_28_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 46). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 46). | ||||
| yeccpars2_28_(__Stack0) -> | ||||
|  [___3,___2,___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1557,7 +1557,7 @@ yeccpars2_28_(__Stack0) -> | |||
| -compile({inline,yeccpars2_29_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_29_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_29_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 100). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 100). | ||||
| yeccpars2_29_(__Stack0) -> | ||||
|  [___2,___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1567,7 +1567,7 @@ yeccpars2_29_(__Stack0) -> | |||
| -compile({inline,yeccpars2_30_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_30_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_30_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 106). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 106). | ||||
| yeccpars2_30_(__Stack0) -> | ||||
|  [___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1577,7 +1577,7 @@ yeccpars2_30_(__Stack0) -> | |||
| -compile({inline,yeccpars2_31_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_31_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_31_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 99). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 99). | ||||
| yeccpars2_31_(__Stack0) -> | ||||
|  [___2,___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1587,7 +1587,7 @@ yeccpars2_31_(__Stack0) -> | |||
| -compile({inline,yeccpars2_33_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_33_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_33_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 104). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 104). | ||||
| yeccpars2_33_(__Stack0) -> | ||||
|  [___3,___2,___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1597,7 +1597,7 @@ yeccpars2_33_(__Stack0) -> | |||
| -compile({inline,yeccpars2_49_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_49_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_49_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 73). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 73). | ||||
| yeccpars2_49_(__Stack0) -> | ||||
|  [___4,___3,___2,___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1608,7 +1608,7 @@ yeccpars2_49_(__Stack0) -> | |||
| -compile({inline,yeccpars2_51_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_51_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_51_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 75). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 75). | ||||
| yeccpars2_51_(__Stack0) -> | ||||
|  [___6,___5,___4,___3,___2,___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1619,7 +1619,7 @@ yeccpars2_51_(__Stack0) -> | |||
| -compile({inline,yeccpars2_54_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_54_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_54_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 81). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 81). | ||||
| yeccpars2_54_(__Stack0) -> | ||||
|  [___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1629,7 +1629,7 @@ yeccpars2_54_(__Stack0) -> | |||
| -compile({inline,yeccpars2_55_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_55_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_55_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 83). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 83). | ||||
| yeccpars2_55_(__Stack0) -> | ||||
|  [___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1639,7 +1639,7 @@ yeccpars2_55_(__Stack0) -> | |||
| -compile({inline,yeccpars2_57_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_57_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_57_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 82). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 82). | ||||
| yeccpars2_57_(__Stack0) -> | ||||
|  [___3,___2,___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1649,7 +1649,7 @@ yeccpars2_57_(__Stack0) -> | |||
| -compile({inline,yeccpars2_58_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_58_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_58_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 80). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 80). | ||||
| yeccpars2_58_(__Stack0) -> | ||||
|  [___6,___5,___4,___3,___2,___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1659,7 +1659,7 @@ yeccpars2_58_(__Stack0) -> | |||
| -compile({inline,yeccpars2_61_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_61_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_61_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 66). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 66). | ||||
| yeccpars2_61_(__Stack0) -> | ||||
|  [___6,___5,___4,___3,___2,___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1669,7 +1669,7 @@ yeccpars2_61_(__Stack0) -> | |||
| -compile({inline,yeccpars2_62_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_62_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_62_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 69). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 69). | ||||
| yeccpars2_62_(__Stack0) -> | ||||
|  [___3,___2,___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1680,7 +1680,7 @@ yeccpars2_62_(__Stack0) -> | |||
| -compile({inline,yeccpars2_64_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_64_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_64_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 71). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 71). | ||||
| yeccpars2_64_(__Stack0) -> | ||||
|  [___5,___4,___3,___2,___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1691,7 +1691,7 @@ yeccpars2_64_(__Stack0) -> | |||
| -compile({inline,yeccpars2_67_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_67_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_67_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 79). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 79). | ||||
| yeccpars2_67_(__Stack0) -> | ||||
|  [___5,___4,___3,___2,___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1701,7 +1701,7 @@ yeccpars2_67_(__Stack0) -> | |||
| -compile({inline,yeccpars2_70_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_70_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_70_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 65). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 65). | ||||
| yeccpars2_70_(__Stack0) -> | ||||
|  [___5,___4,___3,___2,___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1711,7 +1711,7 @@ yeccpars2_70_(__Stack0) -> | |||
| -compile({inline,yeccpars2_71_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_71_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_71_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 56). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 56). | ||||
| yeccpars2_71_(__Stack0) -> | ||||
|  [___3,___2,___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1721,7 +1721,7 @@ yeccpars2_71_(__Stack0) -> | |||
| -compile({inline,yeccpars2_72_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_72_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_72_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 54). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 54). | ||||
| yeccpars2_72_(__Stack0) -> | ||||
|  [___3,___2,___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1731,7 +1731,7 @@ yeccpars2_72_(__Stack0) -> | |||
| -compile({inline,yeccpars2_73_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_73_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_73_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 52). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 52). | ||||
| yeccpars2_73_(__Stack0) -> | ||||
|  [___3,___2,___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1741,7 +1741,7 @@ yeccpars2_73_(__Stack0) -> | |||
| -compile({inline,yeccpars2_74_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_74_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_74_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 53). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 53). | ||||
| yeccpars2_74_(__Stack0) -> | ||||
|  [___3,___2,___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1751,7 +1751,7 @@ yeccpars2_74_(__Stack0) -> | |||
| -compile({inline,yeccpars2_75_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_75_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_75_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 57). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 57). | ||||
| yeccpars2_75_(__Stack0) -> | ||||
|  [___3,___2,___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1761,7 +1761,7 @@ yeccpars2_75_(__Stack0) -> | |||
| -compile({inline,yeccpars2_76_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_76_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_76_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 55). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 55). | ||||
| yeccpars2_76_(__Stack0) -> | ||||
|  [___3,___2,___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1771,7 +1771,7 @@ yeccpars2_76_(__Stack0) -> | |||
| -compile({inline,yeccpars2_77_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_77_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_77_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 91). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 91). | ||||
| yeccpars2_77_(__Stack0) -> | ||||
|  [___3,___2,___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1781,7 +1781,7 @@ yeccpars2_77_(__Stack0) -> | |||
| -compile({inline,yeccpars2_80_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_80_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_80_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 95). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 95). | ||||
| yeccpars2_80_(__Stack0) -> | ||||
|  [___3,___2,___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1791,7 +1791,7 @@ yeccpars2_80_(__Stack0) -> | |||
| -compile({inline,yeccpars2_81_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_81_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_81_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 94). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 94). | ||||
| yeccpars2_81_(__Stack0) -> | ||||
|  [___3,___2,___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1801,7 +1801,7 @@ yeccpars2_81_(__Stack0) -> | |||
| -compile({inline,yeccpars2_82_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_82_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_82_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 90). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 90). | ||||
| yeccpars2_82_(__Stack0) -> | ||||
|  [___3,___2,___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1811,7 +1811,7 @@ yeccpars2_82_(__Stack0) -> | |||
| -compile({inline,yeccpars2_85_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_85_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_85_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 86). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 86). | ||||
| yeccpars2_85_(__Stack0) -> | ||||
|  [___3,___2,___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1821,7 +1821,7 @@ yeccpars2_85_(__Stack0) -> | |||
| -compile({inline,yeccpars2_86_/1}). | ||||
| -dialyzer({nowarn_function, yeccpars2_86_/1}). | ||||
| -compile({nowarn_unused_function,  yeccpars2_86_/1}). | ||||
| -file("rabbit_jms_selector_parser.yrl", 87). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 87). | ||||
| yeccpars2_86_(__Stack0) -> | ||||
|  [___4,___3,___2,___1 | __Stack] = __Stack0, | ||||
|  [begin | ||||
|  | @ -1829,4 +1829,4 @@ yeccpars2_86_(__Stack0) -> | |||
|   end | __Stack]. | ||||
| 
 | ||||
| 
 | ||||
| -file("rabbit_jms_selector_parser.yrl", 141). | ||||
| -file("rabbit_amqp_sql_parser.yrl", 141). | ||||
|  | @ -1,8 +1,8 @@ | |||
| %%% This is the grammar file for JMS message selectors: | ||||
| %%% https://jakarta.ee/specifications/messaging/3.1/jakarta-messaging-spec-3.1#message-selector | ||||
| %%% This is the grammar file for SQL Filter Expressions: | ||||
| %%% https://docs.oasis-open.org/amqp/filtex/v1.0/csd01/filtex-v1.0-csd01.html#_Toc67929276 | ||||
| %%% | ||||
| %%% To manually generate the parser file rabbit_jms_selector_parser.erl run: | ||||
| %%% yecc:file("rabbit_jms_selector_parser.yrl", [deterministic]). | ||||
| %%% To manually generate the parser file rabbit_amqp_sql_parser.erl run: | ||||
| %%% yecc:file("rabbit_amqp_sql_parser.yrl", [deterministic]). | ||||
| 
 | ||||
| Nonterminals | ||||
|     selector | ||||
|  | @ -4,7 +4,7 @@ | |||
| %% | ||||
| %% Copyright (c) 2007-2025 Broadcom. All Rights Reserved. The term “Broadcom” refers to Broadcom Inc. and/or its subsidiaries. All rights reserved. | ||||
| 
 | ||||
| -module(amqp_jms_unit_SUITE). | ||||
| -module(amqp_filter_sql_unit_SUITE). | ||||
| 
 | ||||
| -compile([export_all, nowarn_export_all]). | ||||
| 
 | ||||
|  | @ -697,9 +697,8 @@ header_section(_Config) -> | |||
|     true = match("header.priority = 7", Hdr, Ps, APs), | ||||
|     false = match("header.priority < 7", Hdr, Ps, APs), | ||||
| 
 | ||||
|     %% Since the default priority is 4 in both AMQP and JMS, we expect the | ||||
|     %% following expression to evaluate to true if matched against a message | ||||
|     %% without an explicit priority level set. | ||||
|     %% Since the default priority is 4, we expect the following expression to evaluate | ||||
|     %% to true if matched against a message without an explicit priority level set. | ||||
|     true = match("header.priority = 4", []). | ||||
| 
 | ||||
| properties_section(_Config) -> | ||||
|  | @ -881,12 +880,12 @@ match(Selector, Header, Props, AppProps) | |||
|     Sections = [Header, Props, AP, Body], | ||||
|     Payload = amqp_encode_bin(Sections), | ||||
|     Mc = mc_amqp:init_from_stream(Payload, #{}), | ||||
|     rabbit_amqp_filter_jms:eval(ParsedSelector, Mc). | ||||
|     rabbit_amqp_filter_sql:eval(ParsedSelector, Mc). | ||||
| 
 | ||||
| parse(Selector) -> | ||||
|     Descriptor = {ulong, ?DESCRIPTOR_CODE_SQL_FILTER}, | ||||
|     Filter = {described, Descriptor, {utf8, Selector}}, | ||||
|     rabbit_amqp_filter_jms:parse(Filter). | ||||
|     rabbit_amqp_filter_sql:parse(Filter). | ||||
| 
 | ||||
| amqp_encode_bin(L) when is_list(L) -> | ||||
|     iolist_to_binary([amqp10_framing:encode_bin(X) || X <- L]). | ||||
		Loading…
	
		Reference in New Issue