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