You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@vxquery.apache.org by pr...@apache.org on 2012/08/21 01:16:12 UTC
svn commit: r1375303 - in
/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic:
AddOperation.java DivideOperation.java MultiplyOperation.java
SubtractOperation.java
Author: prestonc
Date: Mon Aug 20 23:16:11 2012
New Revision: 1375303
URL: http://svn.apache.org/viewvc?rev=1375303&view=rev
Log:
Update the error reporting and fixed the array backed value store references.
Modified:
incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/AddOperation.java
incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/DivideOperation.java
incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/MultiplyOperation.java
incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/SubtractOperation.java
Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/AddOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/AddOperation.java?rev=1375303&r1=1375302&r2=1375303&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/AddOperation.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/AddOperation.java Mon Aug 20 23:16:11 2012
@@ -145,7 +145,9 @@ public class AddOperation extends Abstra
@Override
public void operateDecimalInteger(XSDecimalPointable decp1, LongPointable longp2, DataOutput dOut)
throws SystemException, IOException {
+ abvsInner.reset();
XSDecimalPointable decp2 = new XSDecimalPointable();
+ decp2.set(abvsInner.getByteArray(), abvsInner.getStartOffset(), XSDecimalPointable.TYPE_TRAITS.getFixedLength());
decp2.setDecimal(longp2.longValue(), (byte) 0);
operateDecimalDecimal(decp1, decp2, dOut);
}
@@ -419,7 +421,9 @@ public class AddOperation extends Abstra
}
public int operateIntDecimal(int intValue, XSDecimalPointable decp2) throws SystemException, IOException {
+ abvsInner.reset();
XSDecimalPointable decp1 = new XSDecimalPointable();
+ decp1.set(abvsInner.getByteArray(), abvsInner.getStartOffset(), XSDecimalPointable.TYPE_TRAITS.getFixedLength());
decp1.setDecimal(intValue, (byte) 0);
// Prepare
long value1 = decp1.getDecimalValue();
Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/DivideOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/DivideOperation.java?rev=1375303&r1=1375302&r2=1375303&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/DivideOperation.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/DivideOperation.java Mon Aug 20 23:16:11 2012
@@ -11,13 +11,17 @@ import org.apache.vxquery.datamodel.acce
import org.apache.vxquery.datamodel.values.ValueTag;
import org.apache.vxquery.exceptions.ErrorCode;
import org.apache.vxquery.exceptions.SystemException;
+import org.apache.vxquery.runtime.functions.cast.CastToDecimalOperation;
import edu.uci.ics.hyracks.data.std.primitive.DoublePointable;
import edu.uci.ics.hyracks.data.std.primitive.FloatPointable;
import edu.uci.ics.hyracks.data.std.primitive.IntegerPointable;
import edu.uci.ics.hyracks.data.std.primitive.LongPointable;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
public class DivideOperation extends AbstractArithmeticOperation {
+ protected final ArrayBackedValueStorage abvsInner = new ArrayBackedValueStorage();
+
@Override
public void operateDateDate(XSDatePointable datep, XSDatePointable datep2, DynamicContext dCtx, DataOutput dOut)
throws SystemException, IOException {
@@ -62,6 +66,9 @@ public class DivideOperation extends Abs
long value2 = decp2.getDecimalValue();
byte place1 = decp1.getDecimalPlace();
byte place2 = decp2.getDecimalPlace();
+ if (value2 == 0) {
+ throw new SystemException(ErrorCode.FOAR0001);
+ }
// Divide
if (value1 > Long.MAX_VALUE * value2) {
throw new SystemException(ErrorCode.XPDY0002);
@@ -86,9 +93,7 @@ public class DivideOperation extends Abs
@Override
public void operateDecimalDTDuration(XSDecimalPointable decp1, IntegerPointable intp2, DataOutput dOut)
throws SystemException, IOException {
- int value = operateDecimalInt(decp1, intp2.intValue());
- dOut.write(ValueTag.XS_DAY_TIME_DURATION_TAG);
- dOut.writeInt(value);
+ throw new UnsupportedOperationException();
}
@Override
@@ -103,8 +108,13 @@ public class DivideOperation extends Abs
@Override
public void operateDecimalInteger(XSDecimalPointable decp1, LongPointable longp2, DataOutput dOut)
throws SystemException, IOException {
+ if (longp2.getLong() == 0) {
+ throw new SystemException(ErrorCode.FOAR0001);
+ }
// Convert
+ abvsInner.reset();
XSDecimalPointable decp2 = new XSDecimalPointable();
+ decp2.set(abvsInner.getByteArray(), abvsInner.getStartOffset(), XSDecimalPointable.TYPE_TRAITS.getFixedLength());
decp2.setDecimal(longp2.longValue(), (byte) 0);
operateDecimalDecimal(decp1, decp2, dOut);
}
@@ -120,6 +130,9 @@ public class DivideOperation extends Abs
@Override
public void operateDoubleDecimal(DoublePointable doublep, XSDecimalPointable decp, DataOutput dOut)
throws SystemException, IOException {
+ if (decp.getDecimalValue() == 0) {
+ throw new SystemException(ErrorCode.FOAR0001);
+ }
double value = doublep.doubleValue();
value /= decp.doubleValue();
dOut.write(ValueTag.XS_DOUBLE_TAG);
@@ -138,10 +151,7 @@ public class DivideOperation extends Abs
@Override
public void operateDoubleDTDuration(DoublePointable doublep, IntegerPointable intp, DataOutput dOut)
throws SystemException, IOException {
- double value = doublep.doubleValue();
- value /= intp.intValue();
- dOut.write(ValueTag.XS_DAY_TIME_DURATION_TAG);
- dOut.writeInt((int) value);
+ throw new UnsupportedOperationException();
}
@Override
@@ -156,6 +166,9 @@ public class DivideOperation extends Abs
@Override
public void operateDoubleInteger(DoublePointable doublep, LongPointable longp, DataOutput dOut)
throws SystemException, IOException {
+ if (longp.getLong() == 0) {
+ throw new SystemException(ErrorCode.FOAR0001);
+ }
double value = doublep.doubleValue();
value /= longp.doubleValue();
dOut.write(ValueTag.XS_DOUBLE_TAG);
@@ -165,10 +178,7 @@ public class DivideOperation extends Abs
@Override
public void operateDoubleYMDuration(DoublePointable doublep, IntegerPointable intp, DataOutput dOut)
throws SystemException, IOException {
- double value = doublep.doubleValue();
- value /= intp.intValue();
- dOut.write(ValueTag.XS_YEAR_MONTH_DURATION_TAG);
- dOut.writeInt((int) value);
+ throw new UnsupportedOperationException();
}
@Override
@@ -186,6 +196,9 @@ public class DivideOperation extends Abs
@Override
public void operateDTDurationDecimal(IntegerPointable intp, XSDecimalPointable decp, DataOutput dOut)
throws SystemException, IOException {
+ if (decp.getDecimalValue() == 0) {
+ throw new SystemException(ErrorCode.FOAR0001);
+ }
int value = intp.intValue();
value /= decp.intValue();
dOut.write(ValueTag.XS_DAY_TIME_DURATION_TAG);
@@ -204,10 +217,15 @@ public class DivideOperation extends Abs
@Override
public void operateDTDurationDTDuration(IntegerPointable intp, IntegerPointable intp2, DataOutput dOut)
throws SystemException, IOException {
- int value = intp.intValue();
+ double value = intp.intValue();
value /= intp2.intValue();
- dOut.write(ValueTag.XS_DAY_TIME_DURATION_TAG);
- dOut.writeInt(value);
+
+ abvsInner.reset();
+ DoublePointable doublep = new DoublePointable();
+ doublep.set(abvsInner.getByteArray(), abvsInner.getStartOffset(), DoublePointable.TYPE_TRAITS.getFixedLength());
+ doublep.setDouble(value);
+ CastToDecimalOperation castToDecmial = new CastToDecimalOperation();
+ castToDecmial.convertDouble(doublep, dOut);
}
@Override
@@ -222,6 +240,9 @@ public class DivideOperation extends Abs
@Override
public void operateDTDurationInteger(IntegerPointable intp, LongPointable longp, DataOutput dOut)
throws SystemException, IOException {
+ if (longp.getLong() == 0) {
+ throw new SystemException(ErrorCode.FOAR0001);
+ }
int value = intp.intValue();
value /= longp.intValue();
dOut.write(ValueTag.XS_DAY_TIME_DURATION_TAG);
@@ -237,6 +258,9 @@ public class DivideOperation extends Abs
@Override
public void operateFloatDecimal(FloatPointable floatp1, XSDecimalPointable decp2, DataOutput dOut)
throws SystemException, IOException {
+ if (decp2.getDecimalValue() == 0) {
+ throw new SystemException(ErrorCode.FOAR0001);
+ }
float value = floatp1.floatValue();
value /= decp2.floatValue();
dOut.write(ValueTag.XS_FLOAT_TAG);
@@ -255,10 +279,7 @@ public class DivideOperation extends Abs
@Override
public void operateFloatDTDuration(FloatPointable floatp1, IntegerPointable intp2, DataOutput dOut)
throws SystemException, IOException {
- int value = floatp1.intValue();
- value /= intp2.intValue();
- dOut.write(ValueTag.XS_DAY_TIME_DURATION_TAG);
- dOut.writeInt(value);
+ throw new UnsupportedOperationException();
}
@Override
@@ -273,6 +294,9 @@ public class DivideOperation extends Abs
@Override
public void operateFloatInteger(FloatPointable floatp1, LongPointable longp2, DataOutput dOut)
throws SystemException, IOException {
+ if (longp2.getLong() == 0) {
+ throw new SystemException(ErrorCode.FOAR0001);
+ }
float value = floatp1.floatValue();
value /= longp2.floatValue();
dOut.write(ValueTag.XS_FLOAT_TAG);
@@ -282,16 +306,18 @@ public class DivideOperation extends Abs
@Override
public void operateFloatYMDuration(FloatPointable floatp1, IntegerPointable intp2, DataOutput dOut)
throws SystemException, IOException {
- long value = floatp1.longValue();
- value /= intp2.longValue();
- dOut.write(ValueTag.XS_YEAR_MONTH_DURATION_TAG);
- dOut.writeLong(value);
+ throw new UnsupportedOperationException();
}
@Override
public void operateIntegerDecimal(LongPointable longp1, XSDecimalPointable decp2, DataOutput dOut)
throws SystemException, IOException {
+ if (decp2.getDecimalValue() == 0) {
+ throw new SystemException(ErrorCode.FOAR0001);
+ }
+ abvsInner.reset();
XSDecimalPointable decp1 = new XSDecimalPointable();
+ decp1.set(abvsInner.getByteArray(), abvsInner.getStartOffset(), XSDecimalPointable.TYPE_TRAITS.getFixedLength());
decp1.setDecimal(longp1.longValue(), (byte) 0);
operateDecimalDecimal(decp1, decp2, dOut);
}
@@ -308,10 +334,7 @@ public class DivideOperation extends Abs
@Override
public void operateIntegerDTDuration(LongPointable longp, IntegerPointable intp, DataOutput dOut)
throws SystemException, IOException {
- int value = longp.intValue();
- value /= intp.intValue();
- dOut.write(ValueTag.XS_DAY_TIME_DURATION_TAG);
- dOut.writeInt(value);
+ throw new UnsupportedOperationException();
}
@Override
@@ -326,20 +349,25 @@ public class DivideOperation extends Abs
@Override
public void operateIntegerInteger(LongPointable longp, LongPointable longp2, DataOutput dOut)
throws SystemException, IOException {
+ if (longp.getLong() == 0) {
+ throw new SystemException(ErrorCode.FOAR0001);
+ }
// This is an exception for integer integer operations. The divide operation returns a decimal.
double value = longp.doubleValue();
value /= longp2.doubleValue();
- dOut.write(ValueTag.XS_DECIMAL_TAG);
- dOut.writeDouble(value);
+
+ abvsInner.reset();
+ DoublePointable doublep = new DoublePointable();
+ doublep.set(abvsInner.getByteArray(), abvsInner.getStartOffset(), DoublePointable.TYPE_TRAITS.getFixedLength());
+ doublep.setDouble(value);
+ CastToDecimalOperation castToDecmial = new CastToDecimalOperation();
+ castToDecmial.convertDouble(doublep, dOut);
}
@Override
public void operateIntegerYMDuration(LongPointable longp, IntegerPointable intp, DataOutput dOut)
throws SystemException, IOException {
- int value = longp.intValue();
- value /= intp.intValue();
- dOut.write(ValueTag.XS_YEAR_MONTH_DURATION_TAG);
- dOut.writeInt(value);
+ throw new UnsupportedOperationException();
}
@Override
@@ -395,6 +423,9 @@ public class DivideOperation extends Abs
@Override
public void operateYMDurationInteger(IntegerPointable intp, LongPointable longp, DataOutput dOut)
throws SystemException, IOException {
+ if (longp.getLong() == 0) {
+ throw new SystemException(ErrorCode.FOAR0001);
+ }
int value = intp.intValue();
value /= longp.intValue();
dOut.write(ValueTag.XS_YEAR_MONTH_DURATION_TAG);
@@ -404,20 +435,33 @@ public class DivideOperation extends Abs
@Override
public void operateYMDurationYMDuration(IntegerPointable intp, IntegerPointable intp2, DataOutput dOut)
throws SystemException, IOException {
- int value = intp.intValue();
+ if (intp2.getInteger() == 0) {
+ throw new SystemException(ErrorCode.FOAR0001);
+ }
+ double value = intp.intValue();
value /= intp2.intValue();
- dOut.write(ValueTag.XS_YEAR_MONTH_DURATION_TAG);
- dOut.writeInt(value);
+
+ abvsInner.reset();
+ DoublePointable doublep = new DoublePointable();
+ doublep.set(abvsInner.getByteArray(), abvsInner.getStartOffset(), DoublePointable.TYPE_TRAITS.getFixedLength());
+ doublep.setDouble(value);
+ CastToDecimalOperation castToDecmial = new CastToDecimalOperation();
+ castToDecmial.convertDouble(doublep, dOut);
}
public int operateIntDecimal(int intValue, XSDecimalPointable decp2) throws SystemException, IOException {
+ abvsInner.reset();
XSDecimalPointable decp1 = new XSDecimalPointable();
+ decp1.set(abvsInner.getByteArray(), abvsInner.getStartOffset(), XSDecimalPointable.TYPE_TRAITS.getFixedLength());
decp1.setDecimal(intValue, (byte) 0);
// Prepare
long value1 = decp1.getDecimalValue();
long value2 = decp2.getDecimalValue();
byte place1 = decp1.getDecimalPlace();
byte place2 = decp2.getDecimalPlace();
+ if (value2 == 0) {
+ throw new SystemException(ErrorCode.FOAR0001);
+ }
// Divide
if (value1 > Long.MAX_VALUE * value2) {
throw new SystemException(ErrorCode.XPDY0002);
@@ -430,13 +474,18 @@ public class DivideOperation extends Abs
}
public int operateDecimalInt(XSDecimalPointable decp1, int intValue) throws SystemException, IOException {
+ abvsInner.reset();
XSDecimalPointable decp2 = new XSDecimalPointable();
+ decp2.set(abvsInner.getByteArray(), abvsInner.getStartOffset(), XSDecimalPointable.TYPE_TRAITS.getFixedLength());
decp2.setDecimal(intValue, (byte) 0);
// Prepare
long value1 = decp1.getDecimalValue();
long value2 = decp2.getDecimalValue();
byte place1 = decp1.getDecimalPlace();
byte place2 = decp2.getDecimalPlace();
+ if (value2 == 0) {
+ throw new SystemException(ErrorCode.FOAR0001);
+ }
// Divide
if (value1 > Long.MAX_VALUE * value2) {
throw new SystemException(ErrorCode.XPDY0002);
Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/MultiplyOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/MultiplyOperation.java?rev=1375303&r1=1375302&r2=1375303&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/MultiplyOperation.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/MultiplyOperation.java Mon Aug 20 23:16:11 2012
@@ -16,8 +16,11 @@ import edu.uci.ics.hyracks.data.std.prim
import edu.uci.ics.hyracks.data.std.primitive.FloatPointable;
import edu.uci.ics.hyracks.data.std.primitive.IntegerPointable;
import edu.uci.ics.hyracks.data.std.primitive.LongPointable;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
public class MultiplyOperation extends AbstractArithmeticOperation {
+ protected final ArrayBackedValueStorage abvsInner = new ArrayBackedValueStorage();
+
@Override
public void operateDateDate(XSDatePointable datep, XSDatePointable datep2, DynamicContext dCtx, DataOutput dOut)
throws SystemException, IOException {
@@ -100,7 +103,9 @@ public class MultiplyOperation extends A
@Override
public void operateDecimalInteger(XSDecimalPointable decp1, LongPointable longp2, DataOutput dOut)
throws SystemException, IOException {
+ abvsInner.reset();
XSDecimalPointable decp2 = new XSDecimalPointable();
+ decp2.set(abvsInner.getByteArray(), abvsInner.getStartOffset(), XSDecimalPointable.TYPE_TRAITS.getFixedLength());
decp2.setDecimal(longp2.getLong(), (byte) 0);
operateDecimalDecimal(decp1, decp2, dOut);
}
@@ -363,7 +368,9 @@ public class MultiplyOperation extends A
}
public int operateIntDecimal(int intValue, XSDecimalPointable decp2) throws SystemException, IOException {
+ abvsInner.reset();
XSDecimalPointable decp1 = new XSDecimalPointable();
+ decp1.set(abvsInner.getByteArray(), abvsInner.getStartOffset(), XSDecimalPointable.TYPE_TRAITS.getFixedLength());
decp1.setDecimal(intValue, (byte) 0);
// Prepare
long value1 = decp1.getDecimalValue();
Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/SubtractOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/SubtractOperation.java?rev=1375303&r1=1375302&r2=1375303&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/SubtractOperation.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/arithmetic/SubtractOperation.java Mon Aug 20 23:16:11 2012
@@ -20,20 +20,22 @@ import edu.uci.ics.hyracks.data.std.prim
import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
public class SubtractOperation extends AbstractArithmeticOperation {
- protected final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage();
- protected final DataOutput dataOutput = abvs.getDataOutput();
+ protected final ArrayBackedValueStorage abvsInner1 = new ArrayBackedValueStorage();
+ protected final DataOutput dOutInner1 = abvsInner1.getDataOutput();
+ protected final ArrayBackedValueStorage abvsInner2 = new ArrayBackedValueStorage();
+ protected final DataOutput dOutInner2 = abvsInner2.getDataOutput();
public void operateDateDate(XSDatePointable datep1, XSDatePointable datep2, DynamicContext dCtx, DataOutput dOut)
throws SystemException, IOException {
- abvs.reset();
- DateTime.getTimezoneDateTime(datep1, dCtx, dataOutput);
+ abvsInner1.reset();
+ DateTime.getTimezoneDateTime(datep1, dCtx, dOutInner1);
XSDateTimePointable datetimep1 = new XSDateTimePointable();
- datetimep1.set(abvs.getByteArray(), 0, abvs.getLength());
+ datetimep1.set(abvsInner1.getByteArray(), abvsInner1.getStartOffset(), abvsInner1.getLength());
- abvs.reset();
- DateTime.getTimezoneDateTime(datep2, dCtx, dataOutput);
+ abvsInner2.reset();
+ DateTime.getTimezoneDateTime(datep2, dCtx, dOutInner2);
XSDateTimePointable datetimep2 = new XSDateTimePointable();
- datetimep1.set(abvs.getByteArray(), 0, abvs.getLength());
+ datetimep2.set(abvsInner2.getByteArray(), abvsInner2.getStartOffset(), abvsInner2.getLength());
operateDatetimeDatetime(datetimep1, datetimep2, dCtx, dOut);
}
@@ -42,9 +44,9 @@ public class SubtractOperation extends A
public void operateDateDTDuration(XSDatePointable datep1, IntegerPointable intp2, DataOutput dOut)
throws SystemException, IOException {
// Add duration.
- abvs.reset();
- DateTime.normalizeDateTime(datep1.getYearMonth(), datep1.getDayTime() - intp2.getInteger(), dataOutput);
- byte[] bytes = abvs.getByteArray();
+ abvsInner1.reset();
+ DateTime.normalizeDateTime(datep1.getYearMonth(), datep1.getDayTime() - intp2.getInteger(), dOutInner1);
+ byte[] bytes = abvsInner1.getByteArray();
// Convert to date.
bytes[XSDatePointable.TIMEZONE_HOUR_OFFSET] = bytes[XSDateTimePointable.TIMEZONE_HOUR_OFFSET];
bytes[XSDatePointable.TIMEZONE_MINUTE_OFFSET] = bytes[XSDateTimePointable.TIMEZONE_MINUTE_OFFSET];
@@ -55,13 +57,13 @@ public class SubtractOperation extends A
@Override
public void operateDatetimeDatetime(XSDateTimePointable datetimep1, XSDateTimePointable datetimep2,
DynamicContext dCtx, DataOutput dOut) throws SystemException, IOException {
- abvs.reset();
- DateTime.getTimezoneDateTime(datetimep1, dCtx, dataOutput);
- byte[] bytes1 = abvs.getByteArray();
-
- abvs.reset();
- DateTime.getTimezoneDateTime(datetimep2, dCtx, dataOutput);
- byte[] bytes2 = abvs.getByteArray();
+ abvsInner1.reset();
+ DateTime.getTimezoneDateTime(datetimep1, dCtx, dOutInner1);
+ byte[] bytes1 = abvsInner1.getByteArray();
+
+ abvsInner2.reset();
+ DateTime.getTimezoneDateTime(datetimep2, dCtx, dOutInner2);
+ byte[] bytes2 = abvsInner2.getByteArray();
long dayTime1 = XSDateTimePointable.getDayTime(bytes1, 0);
long dayTime2 = XSDateTimePointable.getDayTime(bytes2, 0);
@@ -101,29 +103,29 @@ public class SubtractOperation extends A
public void operateDatetimeDTDuration(XSDateTimePointable datetimep, IntegerPointable intp, DataOutput dOut)
throws SystemException, IOException {
// Add duration.
- abvs.reset();
- DateTime.normalizeDateTime(datetimep.getYearMonth(), datetimep.getDayTime() - intp.getInteger(), dataOutput);
+ abvsInner1.reset();
+ DateTime.normalizeDateTime(datetimep.getYearMonth(), datetimep.getDayTime() - intp.getInteger(), dOutInner1);
dOut.write(ValueTag.XS_DATETIME_TAG);
- dOut.write(abvs.getByteArray());
+ dOut.write(abvsInner1.getByteArray());
}
@Override
public void operateDatetimeYMDuration(XSDateTimePointable datetimep, IntegerPointable intp, DataOutput dOut)
throws SystemException, IOException {
// Add duration.
- abvs.reset();
- DateTime.normalizeDateTime(datetimep.getYearMonth() - intp.getInteger(), datetimep.getDayTime(), dataOutput);
+ abvsInner1.reset();
+ DateTime.normalizeDateTime(datetimep.getYearMonth() - intp.getInteger(), datetimep.getDayTime(), dOutInner1);
dOut.write(ValueTag.XS_DATE_TAG);
- dOut.write(abvs.getByteArray());
+ dOut.write(abvsInner1.getByteArray());
}
@Override
public void operateDateYMDuration(XSDatePointable datep, IntegerPointable intp, DataOutput dOut)
throws SystemException, IOException {
// Add duration.
- abvs.reset();
- DateTime.normalizeDateTime(datep.getYearMonth() - intp.getInteger(), datep.getDayTime(), dataOutput);
- byte[] bytes = abvs.getByteArray();
+ abvsInner1.reset();
+ DateTime.normalizeDateTime(datep.getYearMonth() - intp.getInteger(), datep.getDayTime(), dOutInner1);
+ byte[] bytes = abvsInner1.getByteArray();
// Convert to date.
bytes[XSDatePointable.TIMEZONE_HOUR_OFFSET] = bytes[XSDateTimePointable.TIMEZONE_HOUR_OFFSET];
bytes[XSDatePointable.TIMEZONE_MINUTE_OFFSET] = bytes[XSDateTimePointable.TIMEZONE_MINUTE_OFFSET];
@@ -192,7 +194,9 @@ public class SubtractOperation extends A
@Override
public void operateDecimalInteger(XSDecimalPointable decp1, LongPointable longp2, DataOutput dOut)
throws SystemException, IOException {
+ abvsInner1.reset();
XSDecimalPointable decp2 = new XSDecimalPointable();
+ decp2.set(abvsInner1.getByteArray(), abvsInner1.getStartOffset(), XSDecimalPointable.TYPE_TRAITS.getFixedLength());
decp2.setDecimal(longp2.longValue(), (byte) 0);
operateDecimalDecimal(decp1, decp2, dOut);
}
@@ -434,9 +438,9 @@ public class SubtractOperation extends A
public void operateTimeDTDuration(XSTimePointable timep1, IntegerPointable intp2, DataOutput dOut)
throws SystemException, IOException {
// Add duration.
- abvs.reset();
- DateTime.normalizeDateTime(0, timep1.getDayTime() - intp2.getInteger(), dataOutput);
- byte[] bytes = abvs.getByteArray();
+ abvsInner1.reset();
+ DateTime.normalizeDateTime(0, timep1.getDayTime() - intp2.getInteger(), dOutInner1);
+ byte[] bytes = abvsInner1.getByteArray();
// Convert to date.
bytes[XSTimePointable.HOUR_OFFSET] = bytes[XSDateTimePointable.HOUR_OFFSET];
bytes[XSTimePointable.MINUTE_OFFSET] = bytes[XSDateTimePointable.MINUTE_OFFSET];
@@ -450,15 +454,15 @@ public class SubtractOperation extends A
@Override
public void operateTimeTime(XSTimePointable timep1, XSTimePointable timep2, DynamicContext dCtx, DataOutput dOut)
throws SystemException, IOException {
- abvs.reset();
- DateTime.getTimezoneDateTime(timep1, dCtx, dataOutput);
+ abvsInner1.reset();
+ DateTime.getTimezoneDateTime(timep1, dCtx, dOutInner1);
XSDateTimePointable datetimep1 = new XSDateTimePointable();
- datetimep1.set(abvs.getByteArray(), 0, abvs.getLength());
+ datetimep1.set(abvsInner1.getByteArray(), abvsInner1.getStartOffset(), abvsInner1.getLength());
- abvs.reset();
- DateTime.getTimezoneDateTime(timep2, dCtx, dataOutput);
+ abvsInner2.reset();
+ DateTime.getTimezoneDateTime(timep2, dCtx, dOutInner2);
XSDateTimePointable datetimep2 = new XSDateTimePointable();
- datetimep1.set(abvs.getByteArray(), 0, abvs.getLength());
+ datetimep2.set(abvsInner2.getByteArray(), abvsInner2.getStartOffset(), abvsInner2.getLength());
operateDatetimeDatetime(datetimep1, datetimep2, dCtx, dOut);
}
@@ -521,7 +525,9 @@ public class SubtractOperation extends A
}
public int operateIntDecimal(int intValue, XSDecimalPointable decp2) throws SystemException, IOException {
+ abvsInner1.reset();
XSDecimalPointable decp1 = new XSDecimalPointable();
+ decp1.set(abvsInner1.getByteArray(), abvsInner1.getStartOffset(), XSDecimalPointable.TYPE_TRAITS.getFixedLength());
decp1.setDecimal(intValue, (byte) 0);
// Prepare
long value1 = decp1.getDecimalValue();
@@ -552,7 +558,9 @@ public class SubtractOperation extends A
}
public int operateDecimalInt(XSDecimalPointable decp1, int intValue) throws SystemException, IOException {
+ abvsInner1.reset();
XSDecimalPointable decp2 = new XSDecimalPointable();
+ decp2.set(abvsInner1.getByteArray(), abvsInner1.getStartOffset(), XSDecimalPointable.TYPE_TRAITS.getFixedLength());
decp2.setDecimal(intValue, (byte) 0);
// Prepare
long value1 = decp1.getDecimalValue();