You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by am...@apache.org on 2016/03/26 21:27:36 UTC
[05/13] incubator-asterixdb git commit: Improve Error Handling in
Local Directory Feeds
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/Literal.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/Literal.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/Literal.java
index 5254a37..f04eb1d 100644
--- a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/Literal.java
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/Literal.java
@@ -23,6 +23,7 @@ import java.util.TimeZone;
import org.apache.asterix.external.classad.Value.NumberFactor;
import org.apache.asterix.external.classad.Value.ValueType;
+import org.apache.asterix.external.classad.object.pool.ClassAdObjectPool;
import org.apache.asterix.om.base.AMutableDouble;
import org.apache.asterix.om.base.AMutableInt32;
import org.apache.asterix.om.base.AMutableInt64;
@@ -34,12 +35,13 @@ public class Literal extends ExprTree {
* reals, booleans, strings, undefined and real.
*/
// literal specific information
- private Value value;
+ private final Value value;
private NumberFactor factor;
- public Literal() {
+ public Literal(ClassAdObjectPool objectPool) {
+ super(objectPool);
factor = Value.NumberFactor.NO_FACTOR;
- value = new Value();
+ value = new Value(objectPool);
}
@Override
@@ -69,47 +71,44 @@ public class Literal extends ExprTree {
}
}
- public Literal(Literal literal) throws HyracksDataException {
- copyFrom(literal);
- }
-
@Override
public ExprTree copy() throws HyracksDataException {
- Literal newTree = new Literal();
+ Literal newTree = objectPool.literalPool.get();
newTree.copyFrom(this);
return newTree;
}
public void copyFrom(Literal literal) throws HyracksDataException {
super.copyFrom(literal);
- value.copyFrom(literal.value);
+ value.setValue(literal.value);
factor = literal.factor;
return;
}
- public static Literal createReal(AMutableCharArrayString aString) throws HyracksDataException {
- Value val = new Value();
+ public static Literal createReal(AMutableCharArrayString aString, ClassAdObjectPool objectPool)
+ throws HyracksDataException {
+ Value val = objectPool.valuePool.get();
double real;
real = Double.parseDouble(aString.toString());
val.setRealValue(real);
- return createLiteral(val);
+ return createLiteral(val, objectPool);
}
- public static Literal createReal(String aString) throws HyracksDataException {
- Value val = new Value();
+ public static Literal createReal(String aString, ClassAdObjectPool objectPool) throws HyracksDataException {
+ Value val = objectPool.valuePool.get();
double real;
real = Double.parseDouble(aString.toString());
val.setRealValue(real);
- return createLiteral(val);
+ return createLiteral(val, objectPool);
}
- public static Literal createAbsTime(ClassAdTime tim) throws HyracksDataException {
- Value val = new Value();
+ public static Literal createAbsTime(ClassAdTime tim, ClassAdObjectPool objectPool) throws HyracksDataException {
+ Value val = objectPool.valuePool.get();
if (tim == null) { // => current time/offset
- tim = new ClassAdTime();
+ tim = objectPool.classAdTimePool.get();
}
val.setAbsoluteTimeValue(tim);
- return (createLiteral(val));
+ return (createLiteral(val, objectPool));
}
/* Creates an absolute time literal, from the string timestr,
@@ -118,17 +117,21 @@ public class Literal extends ExprTree {
D => non-digit, d=> digit
Ex - 2003-01-25T09:00:00-06:00
*/
- public static Literal createAbsTime(AMutableCharArrayString timeStr) throws HyracksDataException {
- Value val = new Value();
+ public static Literal createAbsTime(AMutableCharArrayString timeStr, ClassAdObjectPool objectPool)
+ throws HyracksDataException {
+ Value val = objectPool.valuePool.get();
boolean offset = false; // to check if the argument conatins a timezone offset parameter
- AMutableInt32 tzhr = new AMutableInt32(0); // corresponds to 1st "dd" in -|+dd:dd
- AMutableInt32 tzmin = new AMutableInt32(0); // corresponds to 2nd "dd" in -|+dd:dd
+ AMutableInt32 tzhr = objectPool.int32Pool.get(); // corresponds to 1st "dd" in -|+dd:dd
+ AMutableInt32 tzmin = objectPool.int32Pool.get(); // corresponds to 2nd "dd" in -|+dd:dd
int len = timeStr.getLength();
- AMutableInt32 index = new AMutableInt32(len - 1);
+ AMutableInt32 index = objectPool.int32Pool.get();
+ index.setValue(len - 1);
prevNonSpaceChar(timeStr, index);
- AMutableInt32 i = new AMutableInt32(index.getIntegerValue());
+ AMutableInt32 i = objectPool.int32Pool.get();
+ i.setValue(index.getIntegerValue());
+
if ((timeStr.charAt(i.getIntegerValue()) == 'z') || (timeStr.charAt(i.getIntegerValue()) == 'Z')) { // z|Z corresponds to a timezone offset of 0
offset = true;
timeStr.erase(i.getIntegerValue()); // remove the offset section from the string
@@ -145,7 +148,7 @@ public class Literal extends ExprTree {
nextDigitChar(timeStr, i);
if (i.getIntegerValue() > len - 4) { // string has to contain dddd (year)
val.setErrorValue();
- return (createLiteral(val));
+ return (createLiteral(val, objectPool));
}
int tm_year, tm_mon = 0, tm_mday = 0, tm_hour = 0, tm_min = 0, tm_sec = 0;
tm_year = Integer.parseInt((timeStr.substr(i.getIntegerValue(), 4)));// - 1900;
@@ -183,12 +186,12 @@ public class Literal extends ExprTree {
if ((i.getIntegerValue() <= len - 1) && (Character.isDigit(timeStr.charAt(i.getIntegerValue())))) { // there should be no more digit characters once the required
val.setErrorValue(); // parameteres are parsed
- return (createLiteral(val));
+ return (createLiteral(val, objectPool));
}
Calendar cal = Calendar.getInstance(TimeZone.getTimeZone("GMT"));
cal.clear();
cal.set(tm_year, tm_mon, tm_mday, tm_hour, tm_min, tm_sec);
- ClassAdTime time = new ClassAdTime();
+ ClassAdTime time = objectPool.classAdTimePool.get();
time.setValue(cal.getTimeInMillis());
if (offset) {
time.setTimeZone((tzhr.getIntegerValue() * 3600000) + (tzmin.getIntegerValue() * 60000));
@@ -197,28 +200,29 @@ public class Literal extends ExprTree {
time.setDefaultTimeZone();
}
val.setAbsoluteTimeValue(time);
- return (createLiteral(val));
+ return (createLiteral(val, objectPool));
}
public Literal createRelTime(ClassAdTime t1, ClassAdTime t2) throws HyracksDataException {
- Value val = new Value();
+ Value val = objectPool.valuePool.get();
val.setRelativeTimeValue(t1.subtract(t2));
- return (createLiteral(val));
+ return (createLiteral(val, objectPool));
}
Literal createRelTime(ClassAdTime secs) throws HyracksDataException {
- Value val = new Value();
+ Value val = objectPool.valuePool.get();
val.setRelativeTimeValue(secs);
- return (createLiteral(val));
+ return (createLiteral(val, objectPool));
}
/* Creates a relative time literal, from the string timestr,
*parsing it as [[[days+]hh:]mm:]ss
* Ex - 1+00:02:00
*/
- public static Literal createRelTime(AMutableCharArrayString timeStr) throws HyracksDataException {
- Value val = new Value();
- ClassAdTime rsecs = new ClassAdTime();
+ public static Literal createRelTime(AMutableCharArrayString timeStr, ClassAdObjectPool objectPool)
+ throws HyracksDataException {
+ Value val = objectPool.valuePool.get();
+ ClassAdTime rsecs = objectPool.classAdTimePool.get();
int len = timeStr.getLength();
double secs = 0;
@@ -226,8 +230,8 @@ public class Literal extends ExprTree {
int hrs = 0;
int days = 0;
boolean negative = false;
-
- AMutableInt32 i = new AMutableInt32(len - 1);
+ AMutableInt32 i = objectPool.int32Pool.get();
+ i.setValue(len - 1);
prevNonSpaceChar(timeStr, i);
// checking for 'sec' parameter & collecting it if present (ss.sss)
if ((i.getIntegerValue() >= 0)
@@ -237,7 +241,7 @@ public class Literal extends ExprTree {
i.setValue(i.getIntegerValue() - 1);
}
prevNonSpaceChar(timeStr, i);
- AMutableCharArrayString revSecStr = new AMutableCharArrayString();
+ AMutableCharArrayString revSecStr = objectPool.strPool.get();
while ((i.getIntegerValue() >= 0) && (Character.isDigit(timeStr.charAt(i.getIntegerValue())))) {
revSecStr.appendChar(timeStr.charAt(i.getIntegerValue()));
i.setValue(i.getIntegerValue() - 1);
@@ -250,7 +254,7 @@ public class Literal extends ExprTree {
i.setValue(i.getIntegerValue() - 1);
}
}
- secs = revDouble(revSecStr);
+ secs = revDouble(revSecStr, objectPool);
}
prevNonSpaceChar(timeStr, i);
@@ -258,13 +262,13 @@ public class Literal extends ExprTree {
if ((i.getIntegerValue() >= 0) && ((timeStr.charAt(i.getIntegerValue()) == 'm')
|| (timeStr.charAt(i.getIntegerValue()) == 'M') || (timeStr.charAt(i.getIntegerValue()) == ':'))) {
i.setValue(i.getIntegerValue() - 1);
- AMutableCharArrayString revMinStr = new AMutableCharArrayString();
+ AMutableCharArrayString revMinStr = objectPool.strPool.get();
prevNonSpaceChar(timeStr, i);
while ((i.getIntegerValue() >= 0) && (Character.isDigit(timeStr.charAt(i.getIntegerValue())))) {
revMinStr.appendChar(timeStr.charAt(i.getIntegerValue()));
i.setValue(i.getIntegerValue() - 1);
}
- mins = revInt(revMinStr);
+ mins = revInt(revMinStr, objectPool);
}
prevNonSpaceChar(timeStr, i);
@@ -272,13 +276,13 @@ public class Literal extends ExprTree {
if ((i.getIntegerValue() >= 0) && ((timeStr.charAt(i.getIntegerValue()) == 'h')
|| (timeStr.charAt(i.getIntegerValue()) == 'H') || (timeStr.charAt(i.getIntegerValue()) == ':'))) {
i.setValue(i.getIntegerValue() - 1);
- AMutableCharArrayString revHrStr = new AMutableCharArrayString();
+ AMutableCharArrayString revHrStr = objectPool.strPool.get();
prevNonSpaceChar(timeStr, i);
while ((i.getIntegerValue() >= 0) && (Character.isDigit(timeStr.charAt(i.getIntegerValue())))) {
revHrStr.appendChar(timeStr.charAt(i.getIntegerValue()));
i.setValue(i.getIntegerValue() - 1);
}
- hrs = revInt(revHrStr);
+ hrs = revInt(revHrStr, objectPool);
}
prevNonSpaceChar(timeStr, i);
@@ -286,13 +290,13 @@ public class Literal extends ExprTree {
if ((i.getIntegerValue() >= 0) && ((timeStr.charAt(i.getIntegerValue()) == 'd')
|| (timeStr.charAt(i.getIntegerValue()) == 'D') || (timeStr.charAt(i.getIntegerValue()) == '+'))) {
i.setValue(i.getIntegerValue() - 1);
- AMutableCharArrayString revDayStr = new AMutableCharArrayString();
+ AMutableCharArrayString revDayStr = objectPool.strPool.get();
prevNonSpaceChar(timeStr, i);
while ((i.getIntegerValue() >= 0) && (Character.isDigit(timeStr.charAt(i.getIntegerValue())))) {
revDayStr.appendChar(timeStr.charAt(i.getIntegerValue()));
i.setValue(i.getIntegerValue() - 1);
}
- days = revInt(revDayStr);
+ days = revInt(revDayStr, objectPool);
}
prevNonSpaceChar(timeStr, i);
@@ -306,14 +310,14 @@ public class Literal extends ExprTree {
if ((i.getIntegerValue() >= 0) && (!(Character.isWhitespace(timeStr.charAt(i.getIntegerValue()))))) { // should not conatin any non-space char beyond -,d,h,m,s
val.setErrorValue();
- return (createLiteral(val));
+ return (createLiteral(val, objectPool));
}
rsecs.setRelativeTime(
(long) ((negative ? -1 : +1) * (days * 86400000 + hrs * 3600000 + mins * 60000 + secs * 1000.0)));
val.setRelativeTimeValue(rsecs);
- return (createLiteral(val));
+ return (createLiteral(val, objectPool));
}
/* Function which iterates through the string Str from the location 'index',
@@ -343,8 +347,8 @@ public class Literal extends ExprTree {
* order of the digits & returns the corresponding number as an
* integer.
*/
- public static int revInt(AMutableCharArrayString revNumStr) {
- AMutableCharArrayString numStr = new AMutableCharArrayString(revNumStr.getLength());
+ public static int revInt(AMutableCharArrayString revNumStr, ClassAdObjectPool objectPool) {
+ AMutableCharArrayString numStr = objectPool.strPool.get();
for (int i = revNumStr.getLength() - 1; i >= 0; i--) {
numStr.appendChar(revNumStr.charAt(i));
}
@@ -354,8 +358,8 @@ public class Literal extends ExprTree {
/* Function which takes a number in string format, and reverses the
* order of the digits & returns the corresponding number as a double.
*/
- public static double revDouble(AMutableCharArrayString revNumStr) {
- AMutableCharArrayString numStr = new AMutableCharArrayString(revNumStr.getLength());
+ public static double revDouble(AMutableCharArrayString revNumStr, ClassAdObjectPool objectPool) {
+ AMutableCharArrayString numStr = objectPool.strPool.get();
for (int i = revNumStr.getLength() - 1; i >= 0; i--) {
numStr.appendChar(revNumStr.charAt(i));
}
@@ -369,15 +373,17 @@ public class Literal extends ExprTree {
return Util.timezoneOffset(epochsecs);
}
- public static Literal createLiteral(Value val, NumberFactor f) throws HyracksDataException {
+ public static Literal createLiteral(Value val, NumberFactor f, ClassAdObjectPool objectPool)
+ throws HyracksDataException {
if (val.getType() == ValueType.CLASSAD_VALUE || val.getType() == ValueType.LIST_VALUE
|| val.getType() == ValueType.SLIST_VALUE) {
throw new HyracksDataException("list and classad values are not literals");
}
- Literal lit = new Literal();
- lit.value.copyFrom(val);
- if (!val.isIntegerValue() && !val.isRealValue())
+ Literal lit = objectPool.literalPool.get();
+ lit.value.setValue(val);
+ if (!val.isIntegerValue() && !val.isRealValue()) {
f = NumberFactor.NO_FACTOR;
+ }
lit.factor = f;
return lit;
}
@@ -387,20 +393,21 @@ public class Literal extends ExprTree {
|| val.getType() == ValueType.SLIST_VALUE) {
throw new HyracksDataException("list and classad values are not literals");
}
- lit.value.copyFrom(val);
- if (!val.isIntegerValue() && !val.isRealValue())
+ lit.value.setValue(val);
+ if (!val.isIntegerValue() && !val.isRealValue()) {
f = NumberFactor.NO_FACTOR;
+ }
lit.factor = f;
}
- public static Literal createLiteral(Value val) throws HyracksDataException {
- return createLiteral(val, NumberFactor.NO_FACTOR);
+ public static Literal createLiteral(Value val, ClassAdObjectPool objectPool) throws HyracksDataException {
+ return createLiteral(val, NumberFactor.NO_FACTOR, objectPool);
}
public void GetValue(Value val) throws HyracksDataException {
- AMutableInt64 i = new AMutableInt64(0);
- AMutableDouble r = new AMutableDouble(0);
- val.copyFrom(value);
+ AMutableInt64 i = objectPool.int64Pool.get();
+ AMutableDouble r = objectPool.doublePool.get();
+ val.setValue(value);
// if integer or real, multiply by the factor
if (val.isIntegerValue(i)) {
@@ -415,7 +422,7 @@ public class Literal extends ExprTree {
}
public void getComponents(Value val, AMutableNumberFactor factor) throws HyracksDataException {
- val.copyFrom(value);
+ val.setValue(value);
factor.setFactor(this.factor);
}
@@ -446,10 +453,10 @@ public class Literal extends ExprTree {
@Override
public boolean privateEvaluate(EvalState eval, Value val) throws HyracksDataException {
- AMutableInt64 i = new AMutableInt64(0);
- AMutableDouble r = new AMutableDouble(0);
+ AMutableInt64 i = objectPool.int64Pool.get();
+ AMutableDouble r = objectPool.doublePool.get();
- val.copyFrom(value);
+ val.setValue(value);
// if integer or real, multiply by the factor
if (val.isIntegerValue(i)) {
@@ -511,7 +518,7 @@ public class Literal extends ExprTree {
@Override
public void reset() {
- value.clear();
+ value.reset();
factor = NumberFactor.NO_FACTOR;
}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/Operation.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/Operation.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/Operation.java
index ae3c5ef..b2ed5b1 100644
--- a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/Operation.java
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/Operation.java
@@ -19,6 +19,7 @@
package org.apache.asterix.external.classad;
import org.apache.asterix.external.classad.Value.ValueType;
+import org.apache.asterix.external.classad.object.pool.ClassAdObjectPool;
import org.apache.asterix.om.base.AMutableDouble;
import org.apache.asterix.om.base.AMutableInt32;
import org.apache.asterix.om.base.AMutableInt64;
@@ -91,9 +92,9 @@ public class Operation extends ExprTree {
public static final int OpKind_LAST_OP = OpKind_MISC_END;
private int opKind;
- private ExprTree child1;
- private ExprTree child2;
- private ExprTree child3;
+ private final ExprTreeHolder child1;
+ private final ExprTreeHolder child2;
+ private final ExprTreeHolder child3;
/// node type
@Override
@@ -117,14 +118,17 @@ public class Operation extends ExprTree {
* @param e3
* The third sub-expression child of the node (if any).
* @return The constructed operation
+ * @throws HyracksDataException
*/
- public static Operation createOperation(int opkind, ExprTree e1, ExprTree e2) {
- return createOperation(opkind, e1, e2, null);
+ public static Operation createOperation(int opkind, ExprTree e1, ExprTree e2, ClassAdObjectPool objectPool)
+ throws HyracksDataException {
+ return createOperation(opkind, e1, e2, null, objectPool);
}
- public static Operation createOperation(int opkind, ExprTree e1) {
- return createOperation(opkind, e1, null, null);
+ public static Operation createOperation(int opkind, ExprTree e1, ClassAdObjectPool objectPool)
+ throws HyracksDataException {
+ return createOperation(opkind, e1, null, null, objectPool);
}
// public access to operation function
@@ -166,57 +170,36 @@ public class Operation extends ExprTree {
* @return true if the operator is strict, false otherwise.
*/
- public Operation() {
+ public Operation(ClassAdObjectPool objectPool) {
+ super(objectPool);
opKind = OpKind_NO_OP;
- child1 = null;
- child2 = null;
- child3 = null;
+ child1 = new ExprTreeHolder(objectPool);
+ child2 = new ExprTreeHolder(objectPool);
+ child3 = new ExprTreeHolder(objectPool);
}
- public Operation(Operation op) throws HyracksDataException {
+ public Operation(Operation op, ClassAdObjectPool objectPool) throws HyracksDataException {
+ super(objectPool);
+ child1 = new ExprTreeHolder(objectPool);
+ child2 = new ExprTreeHolder(objectPool);
+ child3 = new ExprTreeHolder(objectPool);
copyFrom(op);
- return;
}
@Override
public ExprTree copy() throws HyracksDataException {
- Operation newTree = new Operation();
+ Operation newTree = objectPool.operationPool.get();
newTree.copyFrom(this);
return newTree;
}
public boolean copyFrom(Operation op) throws HyracksDataException {
- boolean success = true;
- if (op.child1 == null) {
- child1 = null;
- } else {
- if (child1 == null) {
- child1 = new ExprTreeHolder();
- }
- child1.copyFrom(op.child1);
- child1 = child1.self();
- }
- if (op.child2 == null) {
- child2 = null;
- } else {
- if (child2 == null) {
- child2 = new ExprTreeHolder();
- }
- child2.copyFrom(op.child2);
- child2 = child2.self();
- }
- if (op.child3 == null) {
- child3 = null;
- } else {
- if (child3 == null) {
- child3 = new ExprTreeHolder();
- }
- child3.copyFrom(op.child3);
- child3 = child3.self();
- }
+ child1.copyFrom(op.child1);
+ child2.copyFrom(op.child2);
+ child3.copyFrom(op.child3);
this.opKind = op.opKind;
super.copyFrom(op);
- return success;
+ return true;
}
@Override
@@ -257,33 +240,28 @@ public class Operation extends ExprTree {
@Override
public void privateSetParentScope(ClassAd parent) {
- if (child1 != null) {
- child1.setParentScope(parent);
- }
- if (child2 != null) {
- child2.setParentScope(parent);
- }
- if (child3 != null) {
- child3.setParentScope(parent);
- }
+ child1.setParentScope(parent);
+ child2.setParentScope(parent);
+ child3.setParentScope(parent);
}
- public static void operate(int opKind, Value op1, Value op2, Value result) throws HyracksDataException {
- Value dummy = new Value();
- privateDoOperation(opKind, op1, op2, dummy, true, true, false, result, null);
+ public static void operate(int opKind, Value op1, Value op2, Value result, ClassAdObjectPool objectPool)
+ throws HyracksDataException {
+ Value dummy = objectPool.valuePool.get();
+ privateDoOperation(opKind, op1, op2, dummy, true, true, false, result, null, objectPool);
}
public void operate(int op, Value op1, Value op2, Value op3, Value result) throws HyracksDataException {
- privateDoOperation(op, op1, op2, op3, true, true, true, result, null);
+ privateDoOperation(op, op1, op2, op3, true, true, true, result, null, objectPool);
}
public static int privateDoOperation(int op, Value val1, Value val2, Value val3, boolean valid1, boolean valid2,
- boolean valid3, Value result) throws HyracksDataException {
- return privateDoOperation(op, val1, val2, val3, valid1, valid2, valid3, result, null);
+ boolean valid3, Value result, ClassAdObjectPool objectPool) throws HyracksDataException {
+ return privateDoOperation(op, val1, val2, val3, valid1, valid2, valid3, result, null, objectPool);
}
public static int privateDoOperation(int op, Value val1, Value val2, Value val3, boolean valid1, boolean valid2,
- boolean valid3, Value result, EvalState es) throws HyracksDataException {
+ boolean valid3, Value result, EvalState es, ClassAdObjectPool objectPool) throws HyracksDataException {
ValueType vt1;
ValueType vt2;
ValueType vt3;
@@ -295,7 +273,7 @@ public class Operation extends ExprTree {
// take care of the easy cases
if (op == OpKind_NO_OP || op == OpKind_PARENTHESES_OP) {
- result.copyFrom(val1);
+ result.setValue(val1);
return SigValues.SIG_CHLD1.ordinal();
} else if (op == OpKind_UNARY_PLUS_OP) {
if (vt1 == ValueType.BOOLEAN_VALUE || vt1 == ValueType.STRING_VALUE || val1.isListValue()
@@ -303,7 +281,7 @@ public class Operation extends ExprTree {
result.setErrorValue();
} else {
// applies for ERROR, UNDEFINED and Numbers
- result.copyFrom(val1);
+ result.setValue(val1);
}
return SigValues.SIG_CHLD1.ordinal();
}
@@ -342,28 +320,28 @@ public class Operation extends ExprTree {
// comparison operations (binary, one unary)
if (op >= OpKind_COMPARISON_START && op <= OpKind_COMPARISON_END) {
- return (doComparison(op, val1, val2, result));
+ return (doComparison(op, val1, val2, result, objectPool));
}
// arithmetic operations (binary)
if (op >= OpKind_ARITHMETIC_START && op <= OpKind_ARITHMETIC_END) {
- return (doArithmetic(op, val1, val2, result));
+ return (doArithmetic(op, val1, val2, result, objectPool));
}
// logical operators (binary, one unary)
if (op >= OpKind_LOGIC_START && op <= OpKind_LOGIC_END) {
- return (doLogical(op, val1, val2, result));
+ return (doLogical(op, val1, val2, result, objectPool));
}
// bitwise operators (binary, one unary)
if (op >= OpKind_BITWISE_START && op <= OpKind_BITWISE_END) {
- return (doBitwise(op, val1, val2, result));
+ return (doBitwise(op, val1, val2, result, objectPool));
}
// misc.
if (op == OpKind_TERNARY_OP) {
// ternary (if-operator)
- MutableBoolean b = new MutableBoolean(false);
+ MutableBoolean b = objectPool.boolPool.get();
// if the selector is UNDEFINED, the result is undefined
if (vt1 == ValueType.UNDEFINED_VALUE) {
@@ -375,18 +353,18 @@ public class Operation extends ExprTree {
result.setErrorValue();
return SigValues.SIG_CHLD1.ordinal();
} else if (b.booleanValue()) {
- result.copyFrom(val2);
+ result.setValue(val2);
return (SigValues.SIG_CHLD2.ordinal());
} else {
- result.copyFrom(val3);
+ result.setValue(val3);
return (SigValues.SIG_CHLD3.ordinal());
}
} else if (op == OpKind_SUBSCRIPT_OP) {
// subscripting from a list (strict)
if (vt1 == ValueType.CLASSAD_VALUE && vt2 == ValueType.STRING_VALUE) {
- ClassAd classad = new ClassAd();
- AMutableCharArrayString index = new AMutableCharArrayString();
+ ClassAd classad = objectPool.classAdPool.get();
+ AMutableCharArrayString index = objectPool.strPool.get();
val1.isClassAdValue(classad);
val2.isStringValue(index);
@@ -402,8 +380,8 @@ public class Operation extends ExprTree {
return (SigValues.SIG_CHLD1.ordinal() | SigValues.SIG_CHLD2.ordinal());
} else if (val1.isListValue() && vt2 == ValueType.INTEGER_VALUE) {
- AMutableInt64 index = new AMutableInt64(0);
- ExprList elist = new ExprList();
+ AMutableInt64 index = objectPool.int64Pool.get();
+ ExprList elist = objectPool.exprListPool.get();
val1.isListValue(elist);
val2.isIntegerValue(index);
@@ -425,9 +403,9 @@ public class Operation extends ExprTree {
@Override
public boolean privateEvaluate(EvalState state, Value result) throws HyracksDataException {
- Value val1 = new Value();
- Value val2 = new Value();
- Value val3 = new Value();
+ Value val1 = objectPool.valuePool.get();
+ Value val2 = objectPool.valuePool.get();
+ Value val3 = objectPool.valuePool.get();
boolean valid1, valid2, valid3;
int rval = 0;
@@ -435,10 +413,10 @@ public class Operation extends ExprTree {
valid2 = false;
valid3 = false;
- AMutableInt32 operationKind = new AMutableInt32(OpKind_NO_OP);
- ExprTreeHolder child1 = new ExprTreeHolder();
- ExprTreeHolder child2 = new ExprTreeHolder();
- ExprTreeHolder child3 = new ExprTreeHolder();
+ AMutableInt32 operationKind = objectPool.int32Pool.get();
+ ExprTreeHolder child1 = objectPool.mutableExprPool.get();
+ ExprTreeHolder child2 = objectPool.mutableExprPool.get();
+ ExprTreeHolder child3 = objectPool.mutableExprPool.get();
getComponents(operationKind, child1, child2, child3);
// Evaluate all valid children
@@ -469,13 +447,13 @@ public class Operation extends ExprTree {
valid3 = true;
}
- rval = privateDoOperation(opKind, val1, val2, val3, valid1, valid2, valid3, result, state);
+ rval = privateDoOperation(opKind, val1, val2, val3, valid1, valid2, valid3, result, state, objectPool);
return (rval != SigValues.SIG_NONE.ordinal());
}
public boolean shortCircuit(EvalState state, Value arg1, Value result) throws HyracksDataException {
- MutableBoolean arg1_bool = new MutableBoolean();
+ MutableBoolean arg1_bool = objectPool.boolPool.get();
switch (opKind) {
case OpKind_LOGICAL_OR_OP:
if (arg1.isBooleanValueEquiv(arg1_bool) && arg1_bool.booleanValue()) {
@@ -512,21 +490,21 @@ public class Operation extends ExprTree {
@Override
public boolean privateEvaluate(EvalState state, Value result, ExprTreeHolder tree) throws HyracksDataException {
int sig;
- Value val1 = new Value();
- Value val2 = new Value();
- Value val3 = new Value();
- ExprTreeHolder t1 = new ExprTreeHolder();
- ExprTreeHolder t2 = new ExprTreeHolder();
- ExprTreeHolder t3 = new ExprTreeHolder();
+ Value val1 = objectPool.valuePool.get();
+ Value val2 = objectPool.valuePool.get();
+ Value val3 = objectPool.valuePool.get();
+ ExprTreeHolder t1 = objectPool.mutableExprPool.get();
+ ExprTreeHolder t2 = objectPool.mutableExprPool.get();
+ ExprTreeHolder t3 = objectPool.mutableExprPool.get();
boolean valid1 = false, valid2 = false, valid3 = false;
- AMutableInt32 opKind = new AMutableInt32(OpKind_NO_OP);
- ExprTreeHolder child1 = new ExprTreeHolder();
- ExprTreeHolder child2 = new ExprTreeHolder();
- ExprTreeHolder child3 = new ExprTreeHolder();
+ AMutableInt32 opKind = objectPool.int32Pool.get();
+ ExprTreeHolder child1 = objectPool.mutableExprPool.get();
+ ExprTreeHolder child2 = objectPool.mutableExprPool.get();
+ ExprTreeHolder child3 = objectPool.mutableExprPool.get();
getComponents(opKind, child1, child2, child3);
// Evaluate all valid children
- tree = new ExprTreeHolder();
+ tree = objectPool.mutableExprPool.get();
if (child1.getInnerTree() != null) {
if (!child1.publicEvaluate(state, val1, t1)) {
result.setErrorValue();
@@ -552,7 +530,7 @@ public class Operation extends ExprTree {
// do evaluation
sig = privateDoOperation(opKind.getIntegerValue().intValue(), val1, val2, val3, valid1, valid2, valid3, result,
- state);
+ state, objectPool);
// delete trees which were not significant
if (valid1 && 0 != (sig & SigValues.SIG_CHLD1.ordinal())) {
@@ -587,7 +565,7 @@ public class Operation extends ExprTree {
} else {
// the node operated on the value; the operator is also
// significant
- tree.setInnerTree(createOperation(opKind.getIntegerValue().intValue(), t1));
+ tree.setInnerTree(createOperation(opKind.getIntegerValue().intValue(), t1, objectPool));
}
return (true);
} else {
@@ -604,7 +582,7 @@ public class Operation extends ExprTree {
throw new HyracksDataException("Should not reach here");
} else {
// the node is also significant
- tree.setInnerTree(createOperation(opKind.getIntegerValue().intValue(), t1, t2));
+ tree.setInnerTree(createOperation(opKind.getIntegerValue().intValue(), t1, t2, objectPool));
return (true);
}
}
@@ -613,7 +591,7 @@ public class Operation extends ExprTree {
if (opKind.getIntegerValue().intValue() == OpKind_IS_OP
|| opKind.getIntegerValue().intValue() == OpKind_ISNT_OP) {
// the operation is *always* significant for IS and ISNT
- tree.setInnerTree(createOperation(opKind.getIntegerValue().intValue(), t1, t2));
+ tree.setInnerTree(createOperation(opKind.getIntegerValue().intValue(), t1, t2, objectPool));
return (true);
}
// other non-strict binary operators
@@ -621,7 +599,7 @@ public class Operation extends ExprTree {
|| opKind.getIntegerValue().intValue() == OpKind_LOGICAL_OR_OP) {
if ((SigValues.values()[sig].ordinal() & SigValues.SIG_CHLD1.ordinal()) != 0
&& (SigValues.values()[sig].ordinal() & SigValues.SIG_CHLD2.ordinal()) != 0) {
- tree.setInnerTree(createOperation(opKind.getIntegerValue().intValue(), t1, t2));
+ tree.setInnerTree(createOperation(opKind.getIntegerValue().intValue(), t1, t2, objectPool));
return (true);
} else if ((SigValues.values()[sig].ordinal() & SigValues.SIG_CHLD1.ordinal()) != 0) {
tree.setInnerTree(t1);
@@ -636,9 +614,9 @@ public class Operation extends ExprTree {
// non-strict ternary operator (conditional operator) s ? t : f
// selector is always significant (???)
if (opKind.getIntegerValue().intValue() == OpKind_TERNARY_OP) {
- Value tmpVal = new Value();
+ Value tmpVal = objectPool.valuePool.get();
tmpVal.setUndefinedValue();
- tree.setInnerTree(Literal.createLiteral(tmpVal));
+ tree.setInnerTree(Literal.createLiteral(tmpVal, objectPool));
// "true" consequent taken
if ((SigValues.values()[sig].ordinal() & SigValues.SIG_CHLD2.ordinal()) != 0) {
@@ -659,14 +637,17 @@ public class Operation extends ExprTree {
@Override
public boolean privateFlatten(EvalState state, Value val, ExprTreeHolder tree, AMutableInt32 opPtr)
throws HyracksDataException {
- AMutableInt32 childOp1 = new AMutableInt32(OpKind_NO_OP);
- AMutableInt32 childOp2 = new AMutableInt32(OpKind_NO_OP);
- ExprTreeHolder fChild1 = new ExprTreeHolder();
- ExprTreeHolder fChild2 = new ExprTreeHolder();;
- Value val1 = new Value();
- Value val2 = new Value();
- Value val3 = new Value();
- AMutableInt32 newOp = new AMutableInt32(opKind);
+ AMutableInt32 childOp1 = objectPool.int32Pool.get();
+ childOp1.setValue(OpKind_NO_OP);
+ AMutableInt32 childOp2 = objectPool.int32Pool.get();
+ childOp2.setValue(OpKind_NO_OP);
+ ExprTreeHolder fChild1 = objectPool.mutableExprPool.get();
+ ExprTreeHolder fChild2 = objectPool.mutableExprPool.get();;
+ Value val1 = objectPool.valuePool.get();
+ Value val2 = objectPool.valuePool.get();
+ Value val3 = objectPool.valuePool.get();
+ AMutableInt32 newOp = objectPool.int32Pool.get();
+ newOp.setValue(opKind);
int op = opKind;
tree.setInnerTree(null);; // Just to be safe... wenger 2003-12-11.
@@ -675,21 +656,22 @@ public class Operation extends ExprTree {
if ((op >= OpKind_COMPARISON_START && op <= OpKind_COMPARISON_END) || op == OpKind_SUBTRACTION_OP
|| op == OpKind_DIVISION_OP || op == OpKind_MODULUS_OP || op == OpKind_LEFT_SHIFT_OP
|| op == OpKind_RIGHT_SHIFT_OP || op == OpKind_URIGHT_SHIFT_OP) {
- if (opPtr != null)
+ if (opPtr != null) {
opPtr.setValue(OpKind_NO_OP);
+ }
if (child1.publicFlatten(state, val1, fChild1) && child2.publicFlatten(state, val2, fChild2)) {
if (fChild1.getInnerTree() == null && fChild2.getInnerTree() == null) {
- privateDoOperation(op, val1, val2, val3, true, true, false, val);
+ privateDoOperation(op, val1, val2, val3, true, true, false, val, objectPool);
tree.setInnerTree(null);
return true;
} else if (fChild1.getInnerTree() != null && fChild2.getInnerTree() != null) {
- tree.setInnerTree(Operation.createOperation(op, fChild1, fChild2));
+ tree.setInnerTree(Operation.createOperation(op, fChild1, fChild2, objectPool));
return true;
} else if (fChild1.getInnerTree() != null) {
- tree.setInnerTree(Operation.createOperation(op, fChild1, val2));
+ tree.setInnerTree(Operation.createOperation(op, fChild1, val2, objectPool));
return true;
} else if (fChild2.getInnerTree() != null) {
- tree.setInnerTree(Operation.createOperation(op, val1, fChild2));
+ tree.setInnerTree(Operation.createOperation(op, val1, fChild2, objectPool));
return true;
}
} else {
@@ -706,8 +688,8 @@ public class Operation extends ExprTree {
// any op that got past the above is binary, commutative and associative
// Flatten sub expressions
- if ((child1 != null && !child1.publicFlatten(state, val1, fChild1, childOp1))
- || (child2 != null && !child2.publicFlatten(state, val2, fChild2, childOp2))) {
+ if ((child1.getInnerTree() != null && !child1.publicFlatten(state, val1, fChild1, childOp1))
+ || (child2.getInnerTree() != null && !child2.publicFlatten(state, val2, fChild2, childOp2))) {
tree.setInnerTree(null);
return false;
}
@@ -724,7 +706,7 @@ public class Operation extends ExprTree {
// if splitting is disallowed, fold the value and tree into a tree
if (opPtr == null && newOp.getIntegerValue().intValue() != OpKind_NO_OP) {
- tree.setInnerTree(Operation.createOperation(newOp.getIntegerValue().intValue(), val, tree));
+ tree.setInnerTree(Operation.createOperation(newOp.getIntegerValue().intValue(), val, tree, objectPool));
if (tree.getInnerTree() == null) {
return false;
}
@@ -737,15 +719,15 @@ public class Operation extends ExprTree {
public boolean combine(AMutableInt32 op, Value val, ExprTreeHolder tree, AMutableInt32 op1, Value val1,
ExprTreeHolder tree1, AMutableInt32 op2, Value val2, ExprTreeHolder tree2) throws HyracksDataException {
- Operation newOp = new Operation();
- Value dummy = new Value(); // undefined
+ Operation newOp = objectPool.operationPool.get();
+ Value dummy = objectPool.valuePool.get(); // undefined
// special don't care cases for logical operators with exactly one value
if ((tree1.getInnerTree() == null || tree2.getInnerTree() == null)
&& (tree1.getInnerTree() != null || tree2.getInnerTree() != null)
&& (op.getIntegerValue() == OpKind_LOGICAL_OR_OP || op.getIntegerValue() == OpKind_LOGICAL_AND_OP)) {
privateDoOperation(op.getIntegerValue().intValue(), tree1.getInnerTree() == null ? val1 : dummy,
- tree2.getInnerTree() == null ? val2 : dummy, dummy, true, true, false, val);
+ tree2.getInnerTree() == null ? val2 : dummy, dummy, true, true, false, val, objectPool);
if (val.isBooleanValue()) {
tree.setInnerTree(null);
op.setValue(OpKind_NO_OP);
@@ -755,7 +737,7 @@ public class Operation extends ExprTree {
if (tree1.getInnerTree() == null && tree2.getInnerTree() == null) {
// left and rightsons are only values
- privateDoOperation(op.getIntegerValue().intValue(), val1, val2, dummy, true, true, false, val);
+ privateDoOperation(op.getIntegerValue().intValue(), val1, val2, dummy, true, true, false, val, objectPool);
tree.setInnerTree(null);
op.setValue(OpKind_NO_OP);
return true;
@@ -763,18 +745,18 @@ public class Operation extends ExprTree {
&& (tree2.getInnerTree() != null && op2.getIntegerValue().intValue() == OpKind_NO_OP)) {
// leftson is a value, rightson is a tree
tree.setInnerTree(tree2.getInnerTree());
- val.copyFrom(val1);
+ val.setValue(val1);
return true;
} else if (tree2.getInnerTree() == null
&& (tree1.getInnerTree() != null && op1.getIntegerValue().intValue() == OpKind_NO_OP)) {
// rightson is a value, leftson is a tree
tree.setInnerTree(tree1.getInnerTree());
- val.copyFrom(val2);
+ val.setValue(val2);
return true;
} else if ((tree1.getInnerTree() != null && op1.getIntegerValue().intValue() == OpKind_NO_OP)
&& (tree2.getInnerTree() != null && op2.getIntegerValue().intValue() == OpKind_NO_OP)) {
// left and rightsons are trees only
- if (null != (newOp = createOperation(op.getIntegerValue().intValue(), tree1, tree2))) {
+ if (null != (newOp = createOperation(op.getIntegerValue().intValue(), tree1, tree2, objectPool))) {
return false;
}
tree.setInnerTree(newOp);
@@ -787,23 +769,25 @@ public class Operation extends ExprTree {
&& !op.equals(op1) && !op.equals(op1)) {
// at least one of them returned a value and a tree, and parent does
// not share the same operation with either child
- ExprTreeHolder newOp1 = new ExprTreeHolder();
- ExprTreeHolder newOp2 = new ExprTreeHolder();
+ ExprTreeHolder newOp1 = objectPool.mutableExprPool.get();
+ ExprTreeHolder newOp2 = objectPool.mutableExprPool.get();
if (op1.getIntegerValue().intValue() != OpKind_NO_OP) {
- newOp1.setInnerTree(Operation.createOperation(op1.getIntegerValue().intValue(), val1, tree1));
+ newOp1.setInnerTree(
+ Operation.createOperation(op1.getIntegerValue().intValue(), val1, tree1, objectPool));
} else if (tree1.getInnerTree() != null) {
newOp1.setInnerTree(tree1.getInnerTree());
} else {
- newOp1.setInnerTree(Literal.createLiteral(val1));
+ newOp1.setInnerTree(Literal.createLiteral(val1, objectPool));
}
if (op2.getIntegerValue().intValue() != OpKind_NO_OP) {
- newOp2.setInnerTree(Operation.createOperation(op2.getIntegerValue().intValue(), val2, tree2));
+ newOp2.setInnerTree(
+ Operation.createOperation(op2.getIntegerValue().intValue(), val2, tree2, objectPool));
} else if (tree2.getInnerTree() != null) {
newOp2.setInnerTree(tree2);
} else {
- newOp2.setInnerTree(Literal.createLiteral(val2));
+ newOp2.setInnerTree(Literal.createLiteral(val2, objectPool));
}
if (newOp1.getInnerTree() == null || newOp2.getInnerTree() == null) {
@@ -811,7 +795,7 @@ public class Operation extends ExprTree {
op.setValue(OpKind_NO_OP);
return false;
}
- newOp = createOperation(op.getIntegerValue().intValue(), newOp1, newOp2);
+ newOp = createOperation(op.getIntegerValue().intValue(), newOp1, newOp2, objectPool);
if (newOp == null) {
tree.setInnerTree(null);
op.setValue(OpKind_NO_OP);
@@ -825,29 +809,30 @@ public class Operation extends ExprTree {
if (op.equals(op1) && op.equals(op2)) {
// same operators on both children . since op!=NO_OP, neither are op1,
// op2. so they both make tree and value contributions
- newOp = createOperation(op.getIntegerValue().intValue(), tree1, tree2);
+ newOp = createOperation(op.getIntegerValue().intValue(), tree1, tree2, objectPool);
if (newOp == null) {
return false;
}
- privateDoOperation(op.getIntegerValue().intValue(), val1, val2, dummy, true, true, false, val);
+ privateDoOperation(op.getIntegerValue().intValue(), val1, val2, dummy, true, true, false, val, objectPool);
tree.setInnerTree(newOp);
return true;
} else if (op.equals(op1)) {
// leftson makes a tree,value contribution
if (tree2.getInnerTree() == null) {
// rightson makes a value contribution
- privateDoOperation(op.getIntegerValue().intValue(), val1, val2, dummy, true, true, false, val);
+ privateDoOperation(op.getIntegerValue().intValue(), val1, val2, dummy, true, true, false, val,
+ objectPool);
tree.setInnerTree(tree1);
return true;
} else {
// rightson makes a tree contribution
- Operation local_newOp = createOperation(op.getIntegerValue().intValue(), tree1, tree2);
+ Operation local_newOp = createOperation(op.getIntegerValue().intValue(), tree1, tree2, objectPool);
if (local_newOp == null) {
tree.setInnerTree(null);
op.setValue(OpKind_NO_OP);
return false;
}
- val.copyFrom(val1);
+ val.setValue(val1);
tree.setInnerTree(local_newOp); // NAC - BUG FIX
return true;
}
@@ -855,19 +840,20 @@ public class Operation extends ExprTree {
// rightson makes a tree,value contribution
if (tree1.getInnerTree() == null) {
// leftson makes a value contribution
- privateDoOperation(op.getIntegerValue().intValue(), val1, val2, dummy, true, true, false, val);
+ privateDoOperation(op.getIntegerValue().intValue(), val1, val2, dummy, true, true, false, val,
+ objectPool);
tree.setInnerTree(tree2);
return true;
} else {
// leftson makes a tree contribution
- Operation local_newOp = createOperation(op.getIntegerValue().intValue(), tree1, tree2);
+ Operation local_newOp = createOperation(op.getIntegerValue().intValue(), tree1, tree2, objectPool);
if (local_newOp == null) {
tree.setInnerTree(null);
op.setValue(OpKind_NO_OP);
return false;
}
tree.setInnerTree(local_newOp); // NAC BUG FIX
- val.copyFrom(val2);
+ val.setValue(val2);
return true;
}
}
@@ -875,7 +861,8 @@ public class Operation extends ExprTree {
throw new HyracksDataException("Should not reach here");
}
- public static int doComparison(int op, Value v1, Value v2, Value result) throws HyracksDataException {
+ public static int doComparison(int op, Value v1, Value v2, Value result, ClassAdObjectPool objectPool)
+ throws HyracksDataException {
ValueType vt1;
ValueType vt2;
ValueType coerceResult;
@@ -887,7 +874,7 @@ public class Operation extends ExprTree {
coerceResult = vt1;
} else {
// do numerical type promotions --- other types/values are unchanged
- coerceResult = coerceToNumber(v1, v2);
+ coerceResult = coerceToNumber(v1, v2, objectPool);
vt1 = v1.getType();
vt2 = v2.getType();
}
@@ -929,15 +916,15 @@ public class Operation extends ExprTree {
result.setErrorValue();
return (SigValues.SIG_CHLD1.ordinal() | SigValues.SIG_CHLD2.ordinal());
}
- compareStrings(op, v1, v2, result);
+ compareStrings(op, v1, v2, result, objectPool);
return (SigValues.SIG_CHLD1.ordinal() | SigValues.SIG_CHLD2.ordinal());
case INTEGER_VALUE:
- compareIntegers(op, v1, v2, result);
+ compareIntegers(op, v1, v2, result, objectPool);
return (SigValues.SIG_CHLD1.ordinal() | SigValues.SIG_CHLD2.ordinal());
case REAL_VALUE:
- compareReals(op, v1, v2, result);
+ compareReals(op, v1, v2, result, objectPool);
return (SigValues.SIG_CHLD1.ordinal() | SigValues.SIG_CHLD2.ordinal());
case BOOLEAN_VALUE:
@@ -946,7 +933,7 @@ public class Operation extends ExprTree {
result.setErrorValue();
return (SigValues.SIG_CHLD1.ordinal() | SigValues.SIG_CHLD2.ordinal());
}
- compareBools(op, v1, v2, result);
+ compareBools(op, v1, v2, result, objectPool);
return (SigValues.SIG_CHLD1.ordinal() | SigValues.SIG_CHLD2.ordinal());
case LIST_VALUE:
@@ -960,7 +947,7 @@ public class Operation extends ExprTree {
result.setErrorValue();
return (SigValues.SIG_CHLD1.ordinal() | SigValues.SIG_CHLD2.ordinal());
}
- compareAbsoluteTimes(op, v1, v2, result);
+ compareAbsoluteTimes(op, v1, v2, result, objectPool);
return (SigValues.SIG_CHLD1.ordinal() | SigValues.SIG_CHLD2.ordinal());
case RELATIVE_TIME_VALUE:
@@ -968,7 +955,7 @@ public class Operation extends ExprTree {
result.setErrorValue();
return (SigValues.SIG_CHLD1.ordinal() | SigValues.SIG_CHLD2.ordinal());
}
- compareRelativeTimes(op, v1, v2, result);
+ compareRelativeTimes(op, v1, v2, result, objectPool);
return (SigValues.SIG_CHLD1.ordinal() | SigValues.SIG_CHLD2.ordinal());
default:
@@ -977,12 +964,13 @@ public class Operation extends ExprTree {
}
}
- public static int doArithmetic(int op, Value v1, Value v2, Value result) throws HyracksDataException {
- AMutableInt64 i1 = new AMutableInt64(0);
- AMutableInt64 i2 = new AMutableInt64(0);
- ClassAdTime t1 = new ClassAdTime();
- AMutableDouble r1 = new AMutableDouble(0);
- MutableBoolean b1 = new MutableBoolean();
+ public static int doArithmetic(int op, Value v1, Value v2, Value result, ClassAdObjectPool objectPool)
+ throws HyracksDataException {
+ AMutableInt64 i1 = objectPool.int64Pool.get();
+ AMutableInt64 i2 = objectPool.int64Pool.get();
+ ClassAdTime t1 = objectPool.classAdTimePool.get();
+ AMutableDouble r1 = objectPool.doublePool.get();
+ MutableBoolean b1 = objectPool.boolPool.get();
// ensure the operands have arithmetic types
if ((!v1.isIntegerValue() && !v1.isRealValue() && !v1.isAbsoluteTimeValue() && !v1.isRelativeTimeValue()
@@ -1009,7 +997,7 @@ public class Operation extends ExprTree {
result.setBooleanValue(!b1.booleanValue());
} else if (v1.isExceptional()) {
// undefined or error --- same as operand
- result.copyFrom(v1);
+ result.setValue(v1);
return SigValues.SIG_CHLD1.ordinal();
}
// unary minus not defined on any other operand type
@@ -1018,7 +1006,7 @@ public class Operation extends ExprTree {
}
// perform type promotions and proceed with arithmetic
- switch (coerceToNumber(v1, v2)) {
+ switch (coerceToNumber(v1, v2, objectPool)) {
case INTEGER_VALUE:
v1.isIntegerValue(i1);
v2.isIntegerValue(i2);
@@ -1057,11 +1045,11 @@ public class Operation extends ExprTree {
}
case REAL_VALUE: {
- return (doRealArithmetic(op, v1, v2, result));
+ return (doRealArithmetic(op, v1, v2, result, objectPool));
}
case ABSOLUTE_TIME_VALUE:
case RELATIVE_TIME_VALUE: {
- return (doTimeArithmetic(op, v1, v2, result));
+ return (doTimeArithmetic(op, v1, v2, result, objectPool));
}
default:
// should not get here
@@ -1069,9 +1057,10 @@ public class Operation extends ExprTree {
}
}
- public static int doLogical(int op, Value v1, Value v2, Value result) throws HyracksDataException {
- MutableBoolean b1 = new MutableBoolean();
- MutableBoolean b2 = new MutableBoolean();
+ public static int doLogical(int op, Value v1, Value v2, Value result, ClassAdObjectPool objectPool)
+ throws HyracksDataException {
+ MutableBoolean b1 = objectPool.boolPool.get();
+ MutableBoolean b2 = objectPool.boolPool.get();
// first coerece inputs to boolean if they are considered equivalent
if (!v1.isBooleanValue(b1) && v1.isBooleanValueEquiv(b1)) {
@@ -1098,7 +1087,7 @@ public class Operation extends ExprTree {
if (vt1 == ValueType.BOOLEAN_VALUE) {
result.setBooleanValue(!b1.booleanValue());
} else {
- result.copyFrom(v1);
+ result.setValue(v1);
}
return SigValues.SIG_CHLD1.ordinal();
}
@@ -1111,9 +1100,9 @@ public class Operation extends ExprTree {
result.setErrorValue();
return SigValues.SIG_CHLD1.ordinal();
} else if (vt1 == ValueType.BOOLEAN_VALUE && !b1.booleanValue()) {
- result.copyFrom(v2);
+ result.setValue(v2);
} else if (vt2 != ValueType.BOOLEAN_VALUE) {
- result.copyFrom(v2);
+ result.setValue(v2);
} else if (b2.booleanValue()) {
result.setBooleanValue(true);
} else {
@@ -1128,9 +1117,9 @@ public class Operation extends ExprTree {
result.setErrorValue();
return SigValues.SIG_CHLD1.ordinal();
} else if (vt1 == ValueType.BOOLEAN_VALUE && b1.booleanValue()) {
- result.copyFrom(v2);
+ result.setValue(v2);
} else if (vt2 != ValueType.BOOLEAN_VALUE) {
- result.copyFrom(v2);
+ result.setValue(v2);
} else if (!b2.booleanValue()) {
result.setBooleanValue(false);
} else {
@@ -1142,9 +1131,10 @@ public class Operation extends ExprTree {
throw new HyracksDataException("Shouldn't reach here");
}
- public static int doBitwise(int op, Value v1, Value v2, Value result) throws HyracksDataException {
- AMutableInt64 i1 = new AMutableInt64(0);
- AMutableInt64 i2 = new AMutableInt64(0);
+ public static int doBitwise(int op, Value v1, Value v2, Value result, ClassAdObjectPool objectPool)
+ throws HyracksDataException {
+ AMutableInt64 i1 = objectPool.int64Pool.get();
+ AMutableInt64 i2 = objectPool.int64Pool.get();
// bitwise operations are defined only on integers
if (op == OpKind_BITWISE_NOT_OP) {
@@ -1209,9 +1199,10 @@ public class Operation extends ExprTree {
//out of domain value
public static final int EDOM = 33;
- public static int doRealArithmetic(int op, Value v1, Value v2, Value result) throws HyracksDataException {
- AMutableDouble r1 = new AMutableDouble(0);
- AMutableDouble r2 = new AMutableDouble(0);
+ public static int doRealArithmetic(int op, Value v1, Value v2, Value result, ClassAdObjectPool objectPool)
+ throws HyracksDataException {
+ AMutableDouble r1 = objectPool.doublePool.get();
+ AMutableDouble r2 = objectPool.doublePool.get();
double comp = 0;
// we want to prevent FPE and set the ERROR value on the result; on Unix
@@ -1251,9 +1242,9 @@ public class Operation extends ExprTree {
return (SigValues.SIG_CHLD1.ordinal() | SigValues.SIG_CHLD2.ordinal());
}
- public static int doTimeArithmetic(int op, Value v1, Value v2, Value result) {
- ClassAdTime asecs1 = new ClassAdTime();
- ClassAdTime asecs2 = new ClassAdTime();
+ public static int doTimeArithmetic(int op, Value v1, Value v2, Value result, ClassAdObjectPool objectPool) {
+ ClassAdTime asecs1 = objectPool.classAdTimePool.get();
+ ClassAdTime asecs2 = objectPool.classAdTimePool.get();
ValueType vt1 = v1.getType();
ValueType vt2 = v2.getType();
@@ -1309,8 +1300,8 @@ public class Operation extends ExprTree {
if (op == OpKind_MULTIPLICATION_OP || op == OpKind_DIVISION_OP) {
if (vt1 == ValueType.RELATIVE_TIME_VALUE && vt2 == ValueType.INTEGER_VALUE) {
- AMutableInt64 num = new AMutableInt64(0);
- ClassAdTime msecs = new ClassAdTime();
+ AMutableInt64 num = objectPool.int64Pool.get();
+ ClassAdTime msecs = objectPool.classAdTimePool.get();
v1.isRelativeTimeValue(asecs1);
v2.isIntegerValue(num);
if (op == OpKind_MULTIPLICATION_OP) {
@@ -1323,8 +1314,8 @@ public class Operation extends ExprTree {
}
if (vt1 == ValueType.RELATIVE_TIME_VALUE && vt2 == ValueType.REAL_VALUE) {
- AMutableDouble num = new AMutableDouble(0);
- AMutableDouble msecs = new AMutableDouble(0);
+ AMutableDouble num = objectPool.doublePool.get();
+ AMutableDouble msecs = objectPool.doublePool.get();
v1.isRelativeTimeValue(asecs1);
v2.isRealValue(num);
if (op == OpKind_MULTIPLICATION_OP) {
@@ -1332,25 +1323,30 @@ public class Operation extends ExprTree {
} else {
msecs.setValue(asecs1.getRelativeTime() * num.getDoubleValue());
}
- result.setRelativeTimeValue(new ClassAdTime(1000L * ((long) msecs.getDoubleValue()), false));
+ ClassAdTime time = objectPool.classAdTimePool.get();
+ time.setRelativeTime(1000L * ((long) msecs.getDoubleValue()));
+ result.setRelativeTimeValue(time);
return (SigValues.SIG_CHLD1.ordinal() | SigValues.SIG_CHLD2.ordinal());
}
if (vt1 == ValueType.INTEGER_VALUE && vt2 == ValueType.RELATIVE_TIME_VALUE
&& op == OpKind_MULTIPLICATION_OP) {
- AMutableInt64 num = new AMutableInt64(0);
+ AMutableInt64 num = objectPool.int64Pool.get();
v1.isIntegerValue(num);
v2.isRelativeTimeValue(asecs1);
- result.setRelativeTimeValue(new ClassAdTime(num.getLongValue() * asecs1.getRelativeTime(), false));
+ ClassAdTime time = objectPool.classAdTimePool.get();
+ time.setRelativeTime(num.getLongValue() * asecs1.getRelativeTime());
+ result.setRelativeTimeValue(time);
return (SigValues.SIG_CHLD1.ordinal() | SigValues.SIG_CHLD2.ordinal());
}
if (vt2 == ValueType.RELATIVE_TIME_VALUE && vt1 == ValueType.REAL_VALUE && op == OpKind_MULTIPLICATION_OP) {
- AMutableDouble num = new AMutableDouble(0);
+ AMutableDouble num = objectPool.doublePool.get();
v1.isRelativeTimeValue(asecs1);
v2.isRealValue(num);
- result.setRelativeTimeValue(
- new ClassAdTime((long) (asecs1.getRelativeTime() * num.getDoubleValue()), false));
+ ClassAdTime time = objectPool.classAdTimePool.get();
+ time.setRelativeTime((long) (asecs1.getRelativeTime() * num.getDoubleValue()));
+ result.setRelativeTimeValue(time);
return (SigValues.SIG_CHLD1.ordinal() | SigValues.SIG_CHLD2.ordinal());
}
}
@@ -1359,9 +1355,9 @@ public class Operation extends ExprTree {
return (SigValues.SIG_CHLD1.ordinal() | SigValues.SIG_CHLD2.ordinal());
}
- public static void compareStrings(int op, Value v1, Value v2, Value result) {
- AMutableCharArrayString s1 = new AMutableCharArrayString();
- AMutableCharArrayString s2 = new AMutableCharArrayString();
+ public static void compareStrings(int op, Value v1, Value v2, Value result, ClassAdObjectPool objectPool) {
+ AMutableCharArrayString s1 = objectPool.strPool.get();
+ AMutableCharArrayString s2 = objectPool.strPool.get();
int cmp;
v1.isStringValue(s1);
v2.isStringValue(s2);
@@ -1392,9 +1388,10 @@ public class Operation extends ExprTree {
}
}
- public static void compareAbsoluteTimes(int op, Value v1, Value v2, Value result) throws HyracksDataException {
- ClassAdTime asecs1 = new ClassAdTime();
- ClassAdTime asecs2 = new ClassAdTime();
+ public static void compareAbsoluteTimes(int op, Value v1, Value v2, Value result, ClassAdObjectPool objectPool)
+ throws HyracksDataException {
+ ClassAdTime asecs1 = objectPool.classAdTimePool.get();
+ ClassAdTime asecs2 = objectPool.classAdTimePool.get();
boolean compResult = false;
v1.isAbsoluteTimeValue(asecs1);
v2.isAbsoluteTimeValue(asecs2);
@@ -1430,9 +1427,10 @@ public class Operation extends ExprTree {
result.setBooleanValue(compResult);
}
- public static void compareRelativeTimes(int op, Value v1, Value v2, Value result) throws HyracksDataException {
- ClassAdTime rsecs1 = new ClassAdTime();
- ClassAdTime rsecs2 = new ClassAdTime();
+ public static void compareRelativeTimes(int op, Value v1, Value v2, Value result, ClassAdObjectPool objectPool)
+ throws HyracksDataException {
+ ClassAdTime rsecs1 = objectPool.classAdTimePool.get();
+ ClassAdTime rsecs2 = objectPool.classAdTimePool.get();
boolean compResult = false;
v1.isRelativeTimeValue(rsecs1);
@@ -1472,9 +1470,10 @@ public class Operation extends ExprTree {
result.setBooleanValue(compResult);
}
- public static void compareBools(int op, Value v1, Value v2, Value result) throws HyracksDataException {
- MutableBoolean b1 = new MutableBoolean();
- MutableBoolean b2 = new MutableBoolean();
+ public static void compareBools(int op, Value v1, Value v2, Value result, ClassAdObjectPool objectPool)
+ throws HyracksDataException {
+ MutableBoolean b1 = objectPool.boolPool.get();
+ MutableBoolean b2 = objectPool.boolPool.get();
boolean compResult = false;
v1.isBooleanValue(b1);
v2.isBooleanValue(b2);
@@ -1511,9 +1510,10 @@ public class Operation extends ExprTree {
result.setBooleanValue(compResult);
}
- public static void compareIntegers(int op, Value v1, Value v2, Value result) throws HyracksDataException {
- AMutableInt64 i1 = new AMutableInt64(0);
- AMutableInt64 i2 = new AMutableInt64(0);
+ public static void compareIntegers(int op, Value v1, Value v2, Value result, ClassAdObjectPool objectPool)
+ throws HyracksDataException {
+ AMutableInt64 i1 = objectPool.int64Pool.get();
+ AMutableInt64 i2 = objectPool.int64Pool.get();
boolean compResult = false;
v1.isIntegerValue(i1);
v2.isIntegerValue(i2);
@@ -1549,9 +1549,10 @@ public class Operation extends ExprTree {
result.setBooleanValue(compResult);
}
- public static void compareReals(int op, Value v1, Value v2, Value result) throws HyracksDataException {
- AMutableDouble r1 = new AMutableDouble(0);
- AMutableDouble r2 = new AMutableDouble(0);
+ public static void compareReals(int op, Value v1, Value v2, Value result, ClassAdObjectPool objectPool)
+ throws HyracksDataException {
+ AMutableDouble r1 = objectPool.doublePool.get();
+ AMutableDouble r2 = objectPool.doublePool.get();
boolean compResult = false;
v1.isRealValue(r1);
@@ -1594,26 +1595,33 @@ public class Operation extends ExprTree {
// + if both v1 and v2 are Numbers and of the same type, return type
// + if v1 is an int and v2 is a real, convert v1 to real; return REAL_VALUE
// + if v1 is a real and v2 is an int, convert v2 to real; return REAL_VALUE
- public static ValueType coerceToNumber(Value v1, Value v2) {
- AMutableInt64 i = new AMutableInt64(0);
- AMutableDouble r = new AMutableDouble(0);
- MutableBoolean b = new MutableBoolean();
+ public static ValueType coerceToNumber(Value v1, Value v2, ClassAdObjectPool objectPool) {
+ AMutableInt64 i = objectPool.int64Pool.get();
+ AMutableDouble r = objectPool.doublePool.get();
+ MutableBoolean b = objectPool.boolPool.get();
// either of v1, v2 not numerical?
- if (v1.isClassAdValue() || v2.isClassAdValue())
+ if (v1.isClassAdValue() || v2.isClassAdValue()) {
return ValueType.CLASSAD_VALUE;
- if (v1.isListValue() || v2.isListValue())
+ }
+ if (v1.isListValue() || v2.isListValue()) {
return ValueType.LIST_VALUE;
- if (v1.isStringValue() || v2.isStringValue())
+ }
+ if (v1.isStringValue() || v2.isStringValue()) {
return ValueType.STRING_VALUE;
- if (v1.isUndefinedValue() || v2.isUndefinedValue())
+ }
+ if (v1.isUndefinedValue() || v2.isUndefinedValue()) {
return ValueType.UNDEFINED_VALUE;
- if (v1.isErrorValue() || v2.isErrorValue())
+ }
+ if (v1.isErrorValue() || v2.isErrorValue()) {
return ValueType.ERROR_VALUE;
- if (v1.isAbsoluteTimeValue() || v2.isAbsoluteTimeValue())
+ }
+ if (v1.isAbsoluteTimeValue() || v2.isAbsoluteTimeValue()) {
return ValueType.ABSOLUTE_TIME_VALUE;
- if (v1.isRelativeTimeValue() || v2.isRelativeTimeValue())
+ }
+ if (v1.isRelativeTimeValue() || v2.isRelativeTimeValue()) {
return ValueType.RELATIVE_TIME_VALUE;
+ }
// promote booleans to integers
if (v1.isBooleanValue(b)) {
@@ -1633,41 +1641,51 @@ public class Operation extends ExprTree {
}
// both v1 and v2 of same numerical type
- if (v1.isIntegerValue(i) && v2.isIntegerValue(i))
+ if (v1.isIntegerValue(i) && v2.isIntegerValue(i)) {
return ValueType.INTEGER_VALUE;
- if (v1.isRealValue(r) && v2.isRealValue(r))
+ }
+ if (v1.isRealValue(r) && v2.isRealValue(r)) {
return ValueType.REAL_VALUE;
+ }
// type promotions required
- if (v1.isIntegerValue(i) && v2.isRealValue(r))
+ if (v1.isIntegerValue(i) && v2.isRealValue(r)) {
v1.setRealValue(i.getLongValue());
- else if (v1.isRealValue(r) && v2.isIntegerValue(i))
+ } else if (v1.isRealValue(r) && v2.isIntegerValue(i)) {
v2.setRealValue(i.getLongValue());
+ }
return ValueType.REAL_VALUE;
}
- public Operation(int op, ExprTreeHolder e1, ExprTreeHolder e2, ExprTreeHolder e3) {
+ public Operation(int op, ExprTreeHolder e1, ExprTreeHolder e2, ExprTreeHolder e3, ClassAdObjectPool objectPool)
+ throws HyracksDataException {
+ super(objectPool);
this.opKind = op;
- this.child1 = e1 == null ? null : e1.self();
- this.child2 = e2 == null ? null : e2.self();
- this.child3 = e3 == null ? null : e3.self();
+ this.child1 = new ExprTreeHolder(objectPool);
+ this.child2 = new ExprTreeHolder(objectPool);
+ this.child3 = new ExprTreeHolder(objectPool);
+ child1.copyFrom(e1);
+ child2.copyFrom(e2);
+ child3.copyFrom(e3);
}
- public static Operation createOperation(int op, ExprTree e1, ExprTree e2, ExprTree e3) {
- Operation opnode = new Operation();
+ public static Operation createOperation(int op, ExprTree e1, ExprTree e2, ExprTree e3, ClassAdObjectPool objectPool)
+ throws HyracksDataException {
+ Operation opnode = objectPool.operationPool.get();
opnode.opKind = op;
- opnode.child1 = e1 == null ? null : e1.self();
- opnode.child2 = e2 == null ? null : e2.self();
- opnode.child3 = e3 == null ? null : e3.self();
+ opnode.child1.copyFrom(e1);
+ opnode.child2.copyFrom(e2);
+ opnode.child3.copyFrom(e3);
return opnode;
}
- public static void createOperation(int op, ExprTree e1, ExprTree e2, ExprTree e3, Operation opnode) {
+ public static void createOperation(int op, ExprTree e1, ExprTree e2, ExprTree e3, Operation opnode)
+ throws HyracksDataException {
opnode.opKind = op;
- opnode.child1 = e1 == null ? null : e1.self();
- opnode.child2 = e2 == null ? null : e2.self();
- opnode.child3 = e3 == null ? null : e3.self();
+ opnode.child1.copyFrom(e1);
+ opnode.child2.copyFrom(e2);
+ opnode.child3.copyFrom(e3);
}
public void getComponents(AMutableInt32 op, ExprTreeHolder e1, ExprTreeHolder e2, ExprTreeHolder e3) {
@@ -1677,37 +1695,39 @@ public class Operation extends ExprTree {
e3.setInnerTree(child3);
}
- public static Operation createOperation(int op, Value val, ExprTreeHolder tree) throws HyracksDataException {
+ public static Operation createOperation(int op, Value val, ExprTreeHolder tree, ClassAdObjectPool objectPool)
+ throws HyracksDataException {
if (tree.getInnerTree() == null) {
return null;
}
- Literal lit = Literal.createLiteral(val);
+ Literal lit = Literal.createLiteral(val, objectPool);
if (lit == null) {
return null;
}
- Operation newOp = createOperation(op, lit, tree);
+ Operation newOp = createOperation(op, lit, tree, objectPool);
return newOp;
}
- public static Operation createOperation(int op, ExprTreeHolder tree, Value val) throws HyracksDataException {
+ public static Operation createOperation(int op, ExprTreeHolder tree, Value val, ClassAdObjectPool objectPool)
+ throws HyracksDataException {
if (tree.getInnerTree() == null) {
return null;
}
- Literal lit = Literal.createLiteral(val);
+ Literal lit = Literal.createLiteral(val, objectPool);
if (lit == null) {
return null;
}
- Operation newOp = createOperation(op, lit, tree);
+ Operation newOp = createOperation(op, lit, tree, objectPool);
return newOp;
}
public boolean flattenSpecials(EvalState state, Value val, ExprTreeHolder tree) throws HyracksDataException {
- ExprTreeHolder fChild1 = new ExprTreeHolder();
- ExprTreeHolder fChild2 = new ExprTreeHolder();
- ExprTreeHolder fChild3 = new ExprTreeHolder();
- Value eval1 = new Value();
- Value eval2 = new Value();
- Value eval3 = new Value();
+ ExprTreeHolder fChild1 = objectPool.mutableExprPool.get();
+ ExprTreeHolder fChild2 = objectPool.mutableExprPool.get();
+ ExprTreeHolder fChild3 = objectPool.mutableExprPool.get();
+ Value eval1 = objectPool.valuePool.get();
+ Value eval2 = objectPool.valuePool.get();
+ Value eval3 = objectPool.valuePool.get();
switch (opKind) {
case OpKind_UNARY_PLUS_OP:
@@ -1720,12 +1740,12 @@ public class Operation extends ExprTree {
return false;
}
if (fChild1.getInnerTree() != null) {
- tree.setInnerTree(Operation.createOperation(opKind, fChild1));
+ tree.setInnerTree(Operation.createOperation(opKind, fChild1, objectPool));
return (tree.getInnerTree() != null);
} else {
- privateDoOperation(opKind, eval1, null, null, true, false, false, val);
+ privateDoOperation(opKind, eval1, null, null, true, false, false, val, objectPool);
tree.setInnerTree(null);
- eval1.clear();
+ eval1.setUndefinedValue();
return true;
}
case OpKind_TERNARY_OP:
@@ -1737,11 +1757,11 @@ public class Operation extends ExprTree {
// check if selector expression collapsed to a non-undefined value
if (fChild1.getInnerTree() == null && !eval1.isUndefinedValue()) {
- MutableBoolean b = new MutableBoolean();
+ MutableBoolean b = objectPool.boolPool.get();
// if the selector is not boolean-equivalent, propagate error
if (!eval1.isBooleanValueEquiv(b)) {
val.setErrorValue();
- eval1.clear();
+ eval1.setUndefinedValue();
tree.setInnerTree(null);
return true;
}
@@ -1761,10 +1781,12 @@ public class Operation extends ExprTree {
}
// if any arm collapsed into a value, make it a Literal
- if (fChild2.getInnerTree() == null)
- fChild2.setInnerTree(Literal.createLiteral(eval2));
- if (fChild3.getInnerTree() == null)
- fChild3.setInnerTree(Literal.createLiteral(eval3));
+ if (fChild2.getInnerTree() == null) {
+ fChild2.setInnerTree(Literal.createLiteral(eval2, objectPool));
+ }
+ if (fChild3.getInnerTree() == null) {
+ fChild3.setInnerTree(Literal.createLiteral(eval3, objectPool));
+ }
if (fChild2.getInnerTree() == null || fChild3.getInnerTree() == null) {
tree.setInnerTree(null);;
return false;
@@ -1775,7 +1797,7 @@ public class Operation extends ExprTree {
fChild1.setInnerTree(child1.copy());
}
- tree.setInnerTree(Operation.createOperation(opKind, fChild1, fChild2, fChild3));
+ tree.setInnerTree(Operation.createOperation(opKind, fChild1, fChild2, fChild3, objectPool));
if (tree.getInnerTree() == null) {
return false;
}
@@ -1790,22 +1812,24 @@ public class Operation extends ExprTree {
// if both arguments Flattened to values, Evaluate now
if (fChild1.getInnerTree() == null && fChild2.getInnerTree() == null) {
- privateDoOperation(opKind, eval1, eval2, null, true, true, false, val);
+ privateDoOperation(opKind, eval1, eval2, null, true, true, false, val, objectPool);
tree.setInnerTree(null);
return true;
}
// otherwise convert Flattened values into literals
- if (fChild1.getInnerTree() == null)
- fChild1.setInnerTree(Literal.createLiteral(eval1));
- if (fChild2.getInnerTree() == null)
- fChild2.setInnerTree(Literal.createLiteral(eval2));
+ if (fChild1.getInnerTree() == null) {
+ fChild1.setInnerTree(Literal.createLiteral(eval1, objectPool));
+ }
+ if (fChild2.getInnerTree() == null) {
+ fChild2.setInnerTree(Literal.createLiteral(eval2, objectPool));
+ }
if (fChild1.getInnerTree() == null || fChild2.getInnerTree() == null) {
tree.setInnerTree(null);
return false;
}
- tree.setInnerTree(Operation.createOperation(opKind, fChild1, fChild2));
+ tree.setInnerTree(Operation.createOperation(opKind, fChild1, fChild2, objectPool));
if (tree.getInnerTree() == null) {
return false;
}
@@ -1892,11 +1916,8 @@ public class Operation extends ExprTree {
@Override
public void reset() {
opKind = OpKind_NO_OP;
- if (child1 != null)
- child1.reset();
- if (child2 != null)
- child2.reset();
- if (child3 != null)
- child3.reset();
+ child1.reset();
+ child2.reset();
+ child3.reset();
}
}
http://git-wip-us.apache.org/repos/asf/incubator-asterixdb/blob/121e1d9a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/PrettyPrint.java
----------------------------------------------------------------------
diff --git a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/PrettyPrint.java b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/PrettyPrint.java
index e738bb9..2553bfa 100644
--- a/asterix-external-data/src/test/java/org/apache/asterix/external/classad/PrettyPrint.java
+++ b/asterix-external-data/src/test/java/org/apache/asterix/external/classad/PrettyPrint.java
@@ -22,6 +22,7 @@ import java.util.Map;
import java.util.Map.Entry;
import org.apache.asterix.external.classad.ExprTree.NodeKind;
+import org.apache.asterix.external.classad.object.pool.ClassAdObjectPool;
import org.apache.asterix.om.base.AMutableInt32;
import org.apache.hyracks.api.exceptions.HyracksDataException;
@@ -32,7 +33,8 @@ public class PrettyPrint extends ClassAdUnParser {
private boolean minimalParens;
private int indentLevel;
- public PrettyPrint() {
+ public PrettyPrint(ClassAdObjectPool objectPool) {
+ super(objectPool);
classadIndent = 4;
listIndent = 3;
wantStringQuotes = true;
@@ -116,8 +118,9 @@ public class PrettyPrint extends ClassAdUnParser {
return;
}
// all others are binary ops
- AMutableInt32 top = new AMutableInt32(0);
- ExprTreeHolder t1 = new ExprTreeHolder(), t2 = new ExprTreeHolder(), t3 = new ExprTreeHolder();
+ AMutableInt32 top = objectPool.int32Pool.get();
+ ExprTreeHolder t1 = objectPool.mutableExprPool.get(), t2 = objectPool.mutableExprPool.get(),
+ t3 = objectPool.mutableExprPool.get();
if (op1.getKind() == NodeKind.OP_NODE) {
((Operation) op1.getInnerTree()).getComponents(top, t1, t2, t3);