| <!-- |
| - |
| - Licensed to the Apache Software Foundation (ASF) under one |
| - or more contributor license agreements. See the NOTICE file |
| - distributed with this work for additional information |
| - regarding copyright ownership. The ASF licenses this file |
| - to you under the Apache License, Version 2.0 (the |
| - "License"); you may not use this file except in compliance |
| - with the License. You may obtain a copy of the License at |
| - |
| - http://www.apache.org/licenses/LICENSE-2.0 |
| - |
| - Unless required by applicable law or agreed to in writing, |
| - software distributed under the License is distributed on an |
| - "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY |
| - KIND, either express or implied. See the License for the |
| - specific language governing permissions and limitations |
| - under the License. |
| - |
| --> |
| <section> |
| <title>Java JMS Selector Syntax</title> |
| <para>The AMQP Java JMS Messaging Client supports the following syntax for JMS selectors.</para> |
| |
| <programlisting><![CDATA[ |
| Comments: |
| |
| LINE_COMMENT: "--" (~["\n","\r"])* EOL |
| EOL: "\n"|"\r"|"\r\n" |
| BLOCK_COMMENT: "/*" (~["*"])* "*" ("*" | (~["*","/"] (~["*"])* "*"))* "/" |
| |
| Reserved Words (case insensitive): |
| |
| NOT: "NOT" |
| AND: "AND" |
| OR: "OR" |
| BETWEEN: "BETWEEN" |
| LIKE: "LIKE" |
| ESCAPE: "ESCAPE" |
| IN: "IN" |
| IS: "IS" |
| TRUE: "TRUE" |
| FALSE: "FALSE" |
| NULL: "NULL" |
| |
| Literals (case insensitive): |
| |
| DECIMAL_LITERAL: ["1"-"9"] (["0"-"9"])* (["l","L"])? |
| HEX_LITERAL: "0" ["x","X"] (["0"-"9","a"-"f","A"-"F"])+ |
| OCTAL_LITERAL: "0" (["0"-"7"])* |
| FLOATING_POINT_LITERAL: ( (["0"-"9"])+ "." (["0"-"9"])* (<EXPONENT>)? // matches: 5.5 or 5. or 5.5E10 or 5.E10 |
| | "." (["0"-"9"])+ (<EXPONENT>)? // matches: .5 or .5E10 |
| | (["0"-"9"])+ <EXPONENT> ) // matches: 5E10 |
| EXPONENT: "E" (["+","-"])? (["0"-"9"])+ |
| STRING_LITERAL: "'" ( ("''") | ~["'"] )* "'" |
| |
| Identifiers (case insensitive): |
| |
| ID : ["a"-"z", "_", "$"] (["a"-"z","0"-"9","_", "$"])* |
| QUOTED_ID : "\"" ( ("\"\"") | ~["\""] )* "\"" |
| |
| Grammar: |
| |
| JmsSelector := orExpression |
| orExpression := ( andExpression ( <OR> andExpression )* ) |
| andExpression := ( equalityExpression ( <AND> equalityExpression )* ) |
| equalityExpression := ( comparisonExpression ( "=" comparisonExpression |
| | "<>" comparisonExpression |
| | <IS> <NULL> |
| | <IS> <NOT> <NULL> )* ) |
| comparisonExpression := ( addExpression ( ">" addExpression |
| | ">=" addExpression |
| | "<" addExpression |
| | "<=" addExpression |
| | <LIKE> stringLitteral ( <ESCAPE> stringLitteral )? |
| | <NOT> <LIKE> <STRING_LITERAL> ( <ESCAPE> <STRING_LITERAL> )? |
| | <BETWEEN> addExpression <AND> addExpression |
| | <NOT> <BETWEEN> addExpression <AND> addExpression |
| | <IN> "(" <STRING_LITERAL> ( "," <STRING_LITERAL> )* ")" |
| | <NOT> <IN> "(" <STRING_LITERAL> ( "," <STRING_LITERAL> )* ")" )* ) |
| addExpression := multExpr ( ( "+" multExpr | "-" multExpr ) )* |
| multExpr := unaryExpr ( "*" unaryExpr | "/" unaryExpr | "%" unaryExpr )* |
| unaryExpr := ( "+" unaryExpr | "-" unaryExpr | <NOT> unaryExpr | primaryExpr ) |
| primaryExpr := ( literal | variable | "(" orExpression ")" ) |
| literal := ( <STRING_LITERAL> |
| | <DECIMAL_LITERAL> |
| | <HEX_LITERAL> |
| | <OCTAL_LITERAL> |
| | <FLOATING_POINT_LITERAL> |
| | <TRUE> |
| | <FALSE> |
| | <NULL> ) |
| variable := ( <ID> | <QUOTED_ID> ) |
| ]]></programlisting> |
| |
| </section> |