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.ifthenstmt;
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.BooleanValue;
27 import org.apache.expreval.expr.node.ByteValue;
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.hbql.client.HBqlException;
33 import org.apache.hadoop.hbase.hbql.impl.HConnectionImpl;
34
35 public class DelegateIfThen extends GenericIfThen {
36
37 public DelegateIfThen(final GenericValue arg0, final GenericValue arg1, final GenericValue arg2) {
38 super(null, arg0, arg1, arg2);
39 }
40
41 public Class<? extends GenericValue> validateTypes(final GenericValue parentExpr,
42 final boolean allowCollections) throws HBqlException {
43
44 this.validateParentClass(BooleanValue.class, this.getExprArg(0).validateTypes(this, false));
45
46 final Class<? extends GenericValue> type1 = this.getExprArg(1).validateTypes(this, false);
47 final Class<? extends GenericValue> type2 = this.getExprArg(2).validateTypes(this, false);
48
49 if (TypeSupport.isParentClass(StringValue.class, type1, type2))
50 this.setTypedExpr(new StringIfThen(this.getExprArg(0), this.getExprArg(1), this.getExprArg(2)));
51 else if (TypeSupport.isParentClass(NumberValue.class, type1, type2))
52 this.setTypedExpr(new NumberIfThen(this.getExprArg(0), this.getExprArg(1), this.getExprArg(2)));
53 else if (TypeSupport.isParentClass(DateValue.class, type1, type2))
54 this.setTypedExpr(new DateIfThen(this.getExprArg(0), this.getExprArg(1), this.getExprArg(2)));
55 else if (TypeSupport.isParentClass(BooleanValue.class, type1, type2))
56 this.setTypedExpr(new BooleanIfThen(this.getExprArg(0), this.getExprArg(1), this.getExprArg(2)));
57 else if (TypeSupport.isParentClass(ByteValue.class, type1, type2))
58 this.setTypedExpr(new ByteIfThen(this.getExprArg(0), this.getExprArg(1), this.getExprArg(2)));
59 else
60 this.throwInvalidTypeException(type1, type2);
61
62 return this.getTypedExpr().validateTypes(parentExpr, false);
63 }
64
65 public GenericValue getOptimizedValue() throws HBqlException {
66 this.optimizeAllArgs();
67 return !this.isAConstant() ? this : this.getTypedExpr().getOptimizedValue();
68 }
69
70 public Object getValue(final HConnectionImpl conn, final Object object) throws HBqlException,
71 ResultMissingColumnException,
72 NullColumnValueException {
73 return this.getTypedExpr().getValue(conn, object);
74 }
75 }