MySQL 5.6.14 Source Code Document
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
BetweenNode.java
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 }