summaryrefslogtreecommitdiff
path: root/doc/book/src/Java-JMS-Selector-Syntax.xml
blob: 870e277b66b910d748da1e5fc9b3d924eff7d0ed (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
<!--
 -
 - 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>