1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 package org.apache.expreval.expr.betweenstmt;
22
23 import org.apache.expreval.client.NullColumnValueException;
24 import org.apache.expreval.client.ResultMissingColumnException;
25 import org.apache.expreval.expr.TypeSupport;
26 import org.apache.expreval.expr.node.ByteValue;
27 import org.apache.expreval.expr.node.DateValue;
28 import org.apache.expreval.expr.node.GenericValue;
29 import org.apache.expreval.expr.node.NumberValue;
30 import org.apache.expreval.expr.node.StringValue;
31 import org.apache.hadoop.hbase.filter.Filter;
32 import org.apache.hadoop.hbase.hbql.client.HBqlException;
33 import org.apache.hadoop.hbase.hbql.impl.HConnectionImpl;
34 import org.apache.hadoop.hbase.hbql.impl.InvalidTypeException;
35
36 public class DelegateBetweenStmt extends GenericBetweenStmt {
37
38 public DelegateBetweenStmt(final GenericValue arg0,
39 final boolean not,
40 final GenericValue arg1,
41 final GenericValue arg2) {
42 super(null, not, arg0, arg1, arg2);
43 }
44
45 public Class<? extends GenericValue> validateTypes(final GenericValue parentExpr,
46 final boolean allowCollections) throws HBqlException {
47
48 final Class<? extends GenericValue> type0 = this.getExprArg(0).validateTypes(this, false);
49 final Class<? extends GenericValue> type1 = this.getExprArg(1).validateTypes(this, false);
50 final Class<? extends GenericValue> type2 = this.getExprArg(2).validateTypes(this, false);
51
52 if (TypeSupport.isParentClass(StringValue.class, type0, type1, type2))
53 this.setTypedExpr(new StringBetweenStmt(this.getExprArg(0), this.isNot(), this.getExprArg(1), this.getExprArg(2)));
54 else if (TypeSupport.isParentClass(NumberValue.class, type0, type1, type2))
55 this.setTypedExpr(new NumberBetweenStmt(this.getExprArg(0), this.isNot(), this.getExprArg(1), this.getExprArg(2)));
56 else if (TypeSupport.isParentClass(DateValue.class, type0, type1, type2))
57 this.setTypedExpr(new DateBetweenStmt(this.getExprArg(0), this.isNot(), this.getExprArg(1), this.getExprArg(2)));
58 else if (TypeSupport.isParentClass(ByteValue.class, type0, type1, type2))
59 this.setTypedExpr(new ByteBetweenStmt(this.getExprArg(0), this.isNot(), this.getExprArg(1), this.getExprArg(2)));
60 else
61 throw new InvalidTypeException(this.getInvalidTypeMsg(type0, type1, type2));
62
63 return this.getTypedExpr().validateTypes(parentExpr, false);
64 }
65
66 public GenericValue getOptimizedValue() throws HBqlException {
67 this.optimizeAllArgs();
68 return !this.isAConstant() ? this : this.getTypedExpr().getOptimizedValue();
69 }
70
71 public Boolean getValue(final HConnectionImpl conn, final Object object) throws HBqlException,
72 ResultMissingColumnException,
73 NullColumnValueException {
74 return this.getTypedExpr().getValue(conn, object);
75 }
76
77 public Filter getFilter() throws HBqlException {
78 return this.getTypedExpr().getFilter();
79 }
80 }