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.instmt;
22
23 import org.apache.expreval.client.InternalErrorException;
24 import org.apache.expreval.client.NullColumnValueException;
25 import org.apache.expreval.client.ResultMissingColumnException;
26 import org.apache.expreval.expr.TypeSupport;
27 import org.apache.expreval.expr.node.BooleanValue;
28 import org.apache.expreval.expr.node.DateValue;
29 import org.apache.expreval.expr.node.GenericValue;
30 import org.apache.expreval.expr.node.NumberValue;
31 import org.apache.expreval.expr.node.StringValue;
32 import org.apache.hadoop.hbase.filter.Filter;
33 import org.apache.hadoop.hbase.hbql.client.HBqlException;
34 import org.apache.hadoop.hbase.hbql.impl.HConnectionImpl;
35
36 import java.util.List;
37
38 public class DelegateInStmt extends GenericInStmt {
39
40 public DelegateInStmt(final GenericValue arg0, final boolean not, final List<GenericValue> inList) {
41 super(arg0, not, inList);
42 }
43
44 public Class<? extends GenericValue> validateTypes(final GenericValue parentExpr,
45 final boolean allowCollections) throws HBqlException {
46
47 final Class<? extends GenericValue> type = this.getExprArg(0).validateTypes(this, false);
48
49 final Class<? extends GenericValue> inType = this.getGenericValueClass(type);
50
51
52 for (final GenericValue val : this.getInList())
53 this.validateParentClass(inType, val.validateTypes(this, true));
54
55 if (TypeSupport.isParentClass(StringValue.class, type))
56 this.setTypedExpr(new StringInStmt(this.getExprArg(0), this.isNot(), this.getInList()));
57 else if (TypeSupport.isParentClass(NumberValue.class, type))
58 this.setTypedExpr(new NumberInStmt(this.getExprArg(0), this.isNot(), this.getInList()));
59 else if (TypeSupport.isParentClass(DateValue.class, type))
60 this.setTypedExpr(new DateInStmt(this.getExprArg(0), this.isNot(), this.getInList()));
61 else if (TypeSupport.isParentClass(BooleanValue.class, type))
62 this.setTypedExpr(new BooleanInStmt(this.getExprArg(0), this.isNot(), this.getInList()));
63 else
64 this.throwInvalidTypeException(type);
65
66 return this.getTypedExpr().validateTypes(parentExpr, false);
67 }
68
69 protected boolean evaluateInList(final Object object) throws HBqlException {
70 throw new InternalErrorException();
71 }
72
73 public GenericValue getOptimizedValue() throws HBqlException {
74 this.optimizeAllArgs();
75 return !this.isAConstant() ? this : this.getTypedExpr().getOptimizedValue();
76 }
77
78 public Boolean getValue(final HConnectionImpl conn, final Object object) throws HBqlException,
79 ResultMissingColumnException,
80 NullColumnValueException {
81 return this.getTypedExpr().getValue(conn, object);
82 }
83
84 public Filter getFilter() throws HBqlException {
85 return this.getTypedExpr().getFilter();
86 }
87 }