]> review.fuel-infra Code Review - packages/trusty/mysql-wsrep-5.6.git/blob
735cfb1c1675c8fa2133abb6f369fbc316520195
[packages/trusty/mysql-wsrep-5.6.git] /
1 /*
2  *  Copyright (c) 2011, Oracle and/or its affiliates. All rights reserved.
3  *
4  *  This program is free software; you can redistribute it and/or modify
5  *  it under the terms of the GNU General Public License as published by
6  *  the Free Software Foundation; version 2 of the License.
7  *
8  *  This program is distributed in the hope that it will be useful,
9  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
10  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
11  *  GNU General Public License for more details.
12  *
13  *  You should have received a copy of the GNU General Public License
14  *  along with this program; if not, write to the Free Software
15  *  Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301  USA
16  */
17
18 package com.mysql.clusterj.jdbc.antlr.node;
19
20 import org.antlr.runtime.Token;
21 import org.antlr.runtime.tree.Tree;
22
23 import com.mysql.clusterj.jdbc.antlr.MySQL51Parser;
24 import com.mysql.clusterj.query.Predicate;
25 import com.mysql.clusterj.query.QueryDomainType;
26
27 public class BetweenNode extends PredicateNode {
28
29     public BetweenNode(Token token) {
30         super(token);
31         setNumberOfParameters(2);
32     }
33
34     public BetweenNode(BetweenNode betweenNode) {
35         super(betweenNode);
36         setNumberOfParameters(2);
37     }
38
39     @Override
40     public BetweenNode dupNode() {
41         return new BetweenNode(this);
42     }
43
44     @Override
45     public Predicate getPredicate(QueryDomainType<?> queryDomainType) {
46         Predicate result = null;
47         String propertyName = null;
48         String leftParameterName = getParameterName(1);
49         String rightParameterName = getParameterName(2);
50         if (getChild(0).getType() == MySQL51Parser.NOT) {
51                                        // For NOT BETWEEN,
52             propertyName = getChild(0) // the BETWEEN NODE's first child is a NOT node
53             .getChild(0)               // whose child is a FIELD node
54             .getChild(0)               // whose child is a text node
55             .getText();                // containing the column name
56             result = queryDomainType.not(queryDomainType.get(propertyName)
57                     .between(queryDomainType.param(leftParameterName), queryDomainType.param(rightParameterName)));
58         } else {
59             propertyName = getPropertyName();
60             result = queryDomainType.get(propertyName)
61                     .between(queryDomainType.param(leftParameterName), queryDomainType.param(rightParameterName));
62         }
63         Tree lowerBound = getChild(1);
64         Tree upperBound = getChild(2);
65         if (logger.isDetailEnabled()) logger.detail("propertyName: " + propertyName
66                 + " lowerBound: " + lowerBound.getText()
67                 + " upperBound: " + upperBound.getText());
68         return result;
69     }
70
71 }