18
18
eval /2 ,
19
19
is_control_char /1 ]).
20
20
21
- % % [filtex-v1.0-wd09 7.1]
21
+ % % [Filter-Expressions-v1.0 7.1]
22
+ % % https://docs.oasis-open.org/amqp/filtex/v1.0/csd01/filtex-v1.0-csd01.html#_Toc67929316
22
23
-define (MAX_EXPRESSION_LENGTH , 4096 ).
23
24
-define (MAX_TOKENS , 200 ).
24
25
@@ -297,13 +298,16 @@ sql_to_list(SQL) ->
297
298
error
298
299
end .
299
300
300
- check_length (String )
301
- when length (String ) > ? MAX_EXPRESSION_LENGTH ->
302
- rabbit_log :warning (" SQL expression length ~b exceeds maximum length ~b " ,
303
- [length (String ), ? MAX_EXPRESSION_LENGTH ]),
304
- error ;
305
- check_length (_ ) ->
306
- ok .
301
+ check_length (String ) ->
302
+ Len = length (String ),
303
+ case Len =< ? MAX_EXPRESSION_LENGTH of
304
+ true ->
305
+ ok ;
306
+ false ->
307
+ rabbit_log :warning (" SQL expression length ~b exceeds maximum length ~b " ,
308
+ [Len , ? MAX_EXPRESSION_LENGTH ]),
309
+ error
310
+ end .
307
311
308
312
tokenize (String , SQL ) ->
309
313
case rabbit_amqp_sql_lexer :string (String ) of
@@ -334,12 +338,11 @@ parse(Tokens, SQL) ->
334
338
end .
335
339
336
340
transform_ast (Ast0 , SQL ) ->
337
- try rabbit_amqp_sql_ast :map (
338
- fun ({'like' , _Ident , _Pattern , _Escape } = Node ) ->
339
- transform_pattern_node (Node );
340
- (Node ) ->
341
- Node
342
- end , Ast0 ) of
341
+ try rabbit_amqp_sql_ast :map (fun ({'like' , _Id , _Pat , _Esc } = Node ) ->
342
+ transform_pattern_node (Node );
343
+ (Node ) ->
344
+ Node
345
+ end , Ast0 ) of
343
346
Ast ->
344
347
{ok , Ast }
345
348
catch {invalid_pattern , Reason } ->
@@ -357,9 +360,8 @@ has_binary_identifier(Ast) ->
357
360
end , Ast ).
358
361
359
362
% % If the Pattern contains no wildcard or a single % wildcard,
360
- % % we will optimise message evaluation by using Erlang pattern matching.
361
- % % Otherwise, we will match with a regex. Even though we compile regexes,
362
- % % they are slower compared to Erlang pattern matching.
363
+ % % we will evaluate messages using Erlang pattern matching since
364
+ % % that's faster than evaluating compiled regexes.
363
365
transform_pattern_node ({Op , Ident , Pattern , Escape }) ->
364
366
Pat = transform_pattern (Pattern , Escape ),
365
367
{Op , Ident , {pattern , Pat }}.
0 commit comments