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/11/17 02:35:25 UTC
svn commit: r1410664 - in
/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions:
aggregate/ base/ util/
Author: prestonc
Date: Sat Nov 17 01:35:24 2012
New Revision: 1410664
URL: http://svn.apache.org/viewvc?rev=1410664&view=rev
Log:
Updated max and min to use a shared abstract class and fixed an issue with the aggregate functions not returning the correct value.
Added:
incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AbstractMaxMinAggregateEvaluatorFactory.java
incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AbstractMaxMinScalarEvaluatorFactory.java
Modified:
incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnAvgAggregateEvaluatorFactory.java
incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnMaxAggregateEvaluatorFactory.java
incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnMaxScalarEvaluatorFactory.java
incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnMinAggregateEvaluatorFactory.java
incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnMinScalarEvaluatorFactory.java
incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnSumAggregateEvaluatorFactory.java
incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/base/AbstractTaggedValueArgumentAggregateEvaluatorFactory.java
incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java
Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AbstractMaxMinAggregateEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AbstractMaxMinAggregateEvaluatorFactory.java?rev=1410664&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AbstractMaxMinAggregateEvaluatorFactory.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AbstractMaxMinAggregateEvaluatorFactory.java Sat Nov 17 01:35:24 2012
@@ -0,0 +1,86 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.vxquery.runtime.functions.aggregate;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
+import org.apache.vxquery.exceptions.ErrorCode;
+import org.apache.vxquery.exceptions.SystemException;
+import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentAggregateEvaluator;
+import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentAggregateEvaluatorFactory;
+import org.apache.vxquery.runtime.functions.comparison.AbstractValueComparisonOperation;
+import org.apache.vxquery.runtime.functions.util.FunctionHelper;
+
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.runtime.base.IAggregateEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import edu.uci.ics.hyracks.data.std.api.IPointable;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+
+public abstract class AbstractMaxMinAggregateEvaluatorFactory extends
+ AbstractTaggedValueArgumentAggregateEvaluatorFactory {
+ private static final long serialVersionUID = 1L;
+
+ public AbstractMaxMinAggregateEvaluatorFactory(IScalarEvaluatorFactory[] args) {
+ super(args);
+ }
+
+ protected IAggregateEvaluator createEvaluator(IScalarEvaluator[] args) throws AlgebricksException {
+ final AbstractValueComparisonOperation aOp = createValueComparisonOperation();
+ final TaggedValuePointable tvp2 = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable();
+
+ final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage();
+ final DataOutput dOut = abvs.getDataOutput();
+
+ return new AbstractTaggedValueArgumentAggregateEvaluator(args) {
+ long count;
+
+ @Override
+ public void init() throws AlgebricksException {
+ count = 0;
+ }
+
+ @Override
+ public void finish(IPointable result) throws AlgebricksException {
+ result.set(abvs);
+ }
+
+ @Override
+ protected void step(TaggedValuePointable[] args) throws SystemException {
+ TaggedValuePointable tvp1 = args[0];
+ if (count != 0) {
+ tvp2.set(abvs.getByteArray(), abvs.getStartOffset(), abvs.getLength());
+ }
+ if (count == 0 || FunctionHelper.transformThenCompareMinMaxTaggedValues(aOp, tvp1, tvp2, dCtx)) {
+ try {
+ abvs.reset();
+ dOut.write(tvp1.getByteArray(), tvp1.getStartOffset(), tvp1.getLength());
+ } catch (IOException e) {
+ throw new SystemException(ErrorCode.SYSE0001, e);
+ }
+ }
+ count++;
+ }
+
+ };
+ }
+
+ protected abstract AbstractValueComparisonOperation createValueComparisonOperation();
+}
\ No newline at end of file
Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AbstractMaxMinScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AbstractMaxMinScalarEvaluatorFactory.java?rev=1410664&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AbstractMaxMinScalarEvaluatorFactory.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/AbstractMaxMinScalarEvaluatorFactory.java Sat Nov 17 01:35:24 2012
@@ -0,0 +1,81 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.vxquery.runtime.functions.aggregate;
+
+import org.apache.vxquery.context.DynamicContext;
+import org.apache.vxquery.datamodel.accessors.SequencePointable;
+import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
+import org.apache.vxquery.datamodel.values.ValueTag;
+import org.apache.vxquery.exceptions.SystemException;
+import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluator;
+import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory;
+import org.apache.vxquery.runtime.functions.comparison.AbstractValueComparisonOperation;
+import org.apache.vxquery.runtime.functions.util.FunctionHelper;
+
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
+import edu.uci.ics.hyracks.data.std.api.IPointable;
+import edu.uci.ics.hyracks.data.std.primitive.VoidPointable;
+
+public abstract class AbstractMaxMinScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory {
+ private static final long serialVersionUID = 1L;
+
+ public AbstractMaxMinScalarEvaluatorFactory(IScalarEvaluatorFactory[] args) {
+ super(args);
+ }
+
+ @Override
+ protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
+ throws AlgebricksException {
+ final DynamicContext dCtx = (DynamicContext) ctx.getJobletContext().getGlobalJobData();
+ final SequencePointable seqp = (SequencePointable) SequencePointable.FACTORY.createPointable();
+ final AbstractValueComparisonOperation aOp = createValueComparisonOperation();
+ final TaggedValuePointable tvpReturn = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable();
+ final TaggedValuePointable tvpNext = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable();
+ final VoidPointable p = (VoidPointable) VoidPointable.FACTORY.createPointable();
+
+ return new AbstractTaggedValueArgumentScalarEvaluator(args) {
+ @Override
+ protected void evaluate(TaggedValuePointable[] args, IPointable result) throws SystemException {
+ // TODO Update the results to be based on specs when different types in sequence.
+ TaggedValuePointable tvp = args[0];
+ if (tvp.getTag() == ValueTag.SEQUENCE_TAG) {
+ tvp.getValue(seqp);
+ int seqLen = seqp.getEntryCount();
+ for (int j = 0; j < seqLen; ++j) {
+ seqp.getEntry(j, p);
+ tvpNext.set(p.getByteArray(), p.getStartOffset(), p.getLength());
+ if (j == 0) {
+ // Init.
+ tvpReturn.set(tvpNext);
+ }
+ if (FunctionHelper.transformThenCompareMinMaxTaggedValues(aOp, tvpNext, tvpReturn, dCtx)) {
+ tvpReturn.set(tvpNext);
+ }
+ }
+ result.set(tvpReturn);
+ } else {
+ result.set(tvp);
+ }
+ }
+ };
+ }
+
+ protected abstract AbstractValueComparisonOperation createValueComparisonOperation();
+}
\ No newline at end of file
Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnAvgAggregateEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnAvgAggregateEvaluatorFactory.java?rev=1410664&r1=1410663&r2=1410664&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnAvgAggregateEvaluatorFactory.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnAvgAggregateEvaluatorFactory.java Sat Nov 17 01:35:24 2012
@@ -18,7 +18,6 @@ package org.apache.vxquery.runtime.funct
import java.io.DataOutput;
-import org.apache.vxquery.context.DynamicContext;
import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
import org.apache.vxquery.datamodel.values.ValueTag;
import org.apache.vxquery.datamodel.values.XDMConstants;
@@ -38,8 +37,6 @@ import edu.uci.ics.hyracks.data.std.util
public class FnAvgAggregateEvaluatorFactory extends AbstractTaggedValueArgumentAggregateEvaluatorFactory {
private static final long serialVersionUID = 1L;
- // TODO Populate the dynamic context.
- private static final DynamicContext dCtx = null;
public FnAvgAggregateEvaluatorFactory(IScalarEvaluatorFactory[] args) {
super(args);
Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnMaxAggregateEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnMaxAggregateEvaluatorFactory.java?rev=1410664&r1=1410663&r2=1410664&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnMaxAggregateEvaluatorFactory.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnMaxAggregateEvaluatorFactory.java Sat Nov 17 01:35:24 2012
@@ -16,60 +16,21 @@
*/
package org.apache.vxquery.runtime.functions.aggregate;
-import org.apache.vxquery.context.DynamicContext;
-import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
-import org.apache.vxquery.exceptions.SystemException;
-import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentAggregateEvaluator;
-import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentAggregateEvaluatorFactory;
import org.apache.vxquery.runtime.functions.comparison.AbstractValueComparisonOperation;
-import org.apache.vxquery.runtime.functions.comparison.ValueLtComparisonOperation;
-import org.apache.vxquery.runtime.functions.util.FunctionHelper;
+import org.apache.vxquery.runtime.functions.comparison.ValueGtComparisonOperation;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.runtime.base.IAggregateEvaluator;
-import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluator;
import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
-import edu.uci.ics.hyracks.data.std.api.IPointable;
-public class FnMaxAggregateEvaluatorFactory extends AbstractTaggedValueArgumentAggregateEvaluatorFactory {
+public class FnMaxAggregateEvaluatorFactory extends AbstractMaxMinAggregateEvaluatorFactory {
private static final long serialVersionUID = 1L;
- // TODO Populate the dynamic context.
- private static final DynamicContext dCtx = null;
public FnMaxAggregateEvaluatorFactory(IScalarEvaluatorFactory[] args) {
super(args);
}
@Override
- protected IAggregateEvaluator createEvaluator(IScalarEvaluator[] args) throws AlgebricksException {
- final AbstractValueComparisonOperation aOp = new ValueLtComparisonOperation();
- final TaggedValuePointable tvpMax = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable();
-
- return new AbstractTaggedValueArgumentAggregateEvaluator(args) {
- long count;
-
- @Override
- public void init() throws AlgebricksException {
- count = 0;
- }
-
- @Override
- public void finish(IPointable result) throws AlgebricksException {
- result.set(tvpMax);
- }
-
- @Override
- protected void step(TaggedValuePointable[] args) throws SystemException {
- TaggedValuePointable tvp = args[0];
- if (count == 0) {
- // Init.
- tvpMax.set(tvp);
- } else if (FunctionHelper.compareTaggedValues(aOp, tvpMax, tvp, dCtx)) {
- tvpMax.set(tvp);
- }
- count++;
- }
-
- };
+ protected AbstractValueComparisonOperation createValueComparisonOperation() {
+ return new ValueGtComparisonOperation();
}
+
}
\ No newline at end of file
Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnMaxScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnMaxScalarEvaluatorFactory.java?rev=1410664&r1=1410663&r2=1410664&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnMaxScalarEvaluatorFactory.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnMaxScalarEvaluatorFactory.java Sat Nov 17 01:35:24 2012
@@ -16,25 +16,12 @@
*/
package org.apache.vxquery.runtime.functions.aggregate;
-import org.apache.vxquery.context.DynamicContext;
-import org.apache.vxquery.datamodel.accessors.SequencePointable;
-import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
-import org.apache.vxquery.datamodel.values.ValueTag;
-import org.apache.vxquery.exceptions.SystemException;
-import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluator;
-import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory;
import org.apache.vxquery.runtime.functions.comparison.AbstractValueComparisonOperation;
-import org.apache.vxquery.runtime.functions.comparison.ValueLtComparisonOperation;
-import org.apache.vxquery.runtime.functions.util.FunctionHelper;
+import org.apache.vxquery.runtime.functions.comparison.ValueGtComparisonOperation;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluator;
import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
-import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
-import edu.uci.ics.hyracks.data.std.api.IPointable;
-import edu.uci.ics.hyracks.data.std.primitive.VoidPointable;
-public class FnMaxScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory {
+public class FnMaxScalarEvaluatorFactory extends AbstractMaxMinScalarEvaluatorFactory {
private static final long serialVersionUID = 1L;
public FnMaxScalarEvaluatorFactory(IScalarEvaluatorFactory[] args) {
@@ -42,39 +29,8 @@ public class FnMaxScalarEvaluatorFactory
}
@Override
- protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
- throws AlgebricksException {
- final DynamicContext dCtx = (DynamicContext) ctx.getJobletContext().getGlobalJobData();
- final SequencePointable seqp = (SequencePointable) SequencePointable.FACTORY.createPointable();
- final AbstractValueComparisonOperation aOp = new ValueLtComparisonOperation();
- final TaggedValuePointable tvpMax = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable();
- final TaggedValuePointable tvpNext = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable();
- final VoidPointable p = (VoidPointable) VoidPointable.FACTORY.createPointable();
-
- return new AbstractTaggedValueArgumentScalarEvaluator(args) {
- @Override
- protected void evaluate(TaggedValuePointable[] args, IPointable result) throws SystemException {
- // TODO Update the results to be based on specs when different types in sequence.
- TaggedValuePointable tvp = args[0];
- if (tvp.getTag() == ValueTag.SEQUENCE_TAG) {
- tvp.getValue(seqp);
- int seqLen = seqp.getEntryCount();
- for (int j = 0; j < seqLen; ++j) {
- seqp.getEntry(j, p);
- tvpNext.set(p.getByteArray(), p.getStartOffset(), p.getLength());
- if (j == 0) {
- // Init.
- tvpMax.set(tvpNext);
- }
- if (FunctionHelper.compareTaggedValues(aOp, tvpMax, tvpNext, dCtx)) {
- tvpMax.set(tvpNext);
- }
- }
- result.set(tvpMax);
- } else {
- result.set(tvp);
- }
- }
- };
+ protected AbstractValueComparisonOperation createValueComparisonOperation() {
+ return new ValueGtComparisonOperation();
}
+
}
\ No newline at end of file
Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnMinAggregateEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnMinAggregateEvaluatorFactory.java?rev=1410664&r1=1410663&r2=1410664&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnMinAggregateEvaluatorFactory.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnMinAggregateEvaluatorFactory.java Sat Nov 17 01:35:24 2012
@@ -16,60 +16,21 @@
*/
package org.apache.vxquery.runtime.functions.aggregate;
-import org.apache.vxquery.context.DynamicContext;
-import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
-import org.apache.vxquery.exceptions.SystemException;
-import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentAggregateEvaluator;
-import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentAggregateEvaluatorFactory;
import org.apache.vxquery.runtime.functions.comparison.AbstractValueComparisonOperation;
import org.apache.vxquery.runtime.functions.comparison.ValueLtComparisonOperation;
-import org.apache.vxquery.runtime.functions.util.FunctionHelper;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.runtime.base.IAggregateEvaluator;
-import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluator;
import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
-import edu.uci.ics.hyracks.data.std.api.IPointable;
-public class FnMinAggregateEvaluatorFactory extends AbstractTaggedValueArgumentAggregateEvaluatorFactory {
+public class FnMinAggregateEvaluatorFactory extends AbstractMaxMinAggregateEvaluatorFactory {
private static final long serialVersionUID = 1L;
- // TODO Populate the dynamic context.
- private static final DynamicContext dCtx = null;
public FnMinAggregateEvaluatorFactory(IScalarEvaluatorFactory[] args) {
super(args);
}
@Override
- protected IAggregateEvaluator createEvaluator(IScalarEvaluator[] args) throws AlgebricksException {
- final AbstractValueComparisonOperation aOp = new ValueLtComparisonOperation();
- final TaggedValuePointable tvpMin = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable();
-
- return new AbstractTaggedValueArgumentAggregateEvaluator(args) {
- long count;
-
- @Override
- public void init() throws AlgebricksException {
- count = 0;
- }
-
- @Override
- public void finish(IPointable result) throws AlgebricksException {
- result.set(tvpMin);
- }
-
- @Override
- protected void step(TaggedValuePointable[] args) throws SystemException {
- TaggedValuePointable tvp = args[0];
- if (count == 0) {
- // Init.
- tvpMin.set(tvp);
- } else if (FunctionHelper.compareTaggedValues(aOp, tvp, tvpMin, dCtx)) {
- tvpMin.set(tvp);
- }
- count++;
- }
-
- };
+ protected AbstractValueComparisonOperation createValueComparisonOperation() {
+ return new ValueLtComparisonOperation();
}
+
}
\ No newline at end of file
Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnMinScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnMinScalarEvaluatorFactory.java?rev=1410664&r1=1410663&r2=1410664&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnMinScalarEvaluatorFactory.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnMinScalarEvaluatorFactory.java Sat Nov 17 01:35:24 2012
@@ -16,25 +16,12 @@
*/
package org.apache.vxquery.runtime.functions.aggregate;
-import org.apache.vxquery.context.DynamicContext;
-import org.apache.vxquery.datamodel.accessors.SequencePointable;
-import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
-import org.apache.vxquery.datamodel.values.ValueTag;
-import org.apache.vxquery.exceptions.SystemException;
-import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluator;
-import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory;
import org.apache.vxquery.runtime.functions.comparison.AbstractValueComparisonOperation;
import org.apache.vxquery.runtime.functions.comparison.ValueLtComparisonOperation;
-import org.apache.vxquery.runtime.functions.util.FunctionHelper;
-import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
-import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluator;
import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
-import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
-import edu.uci.ics.hyracks.data.std.api.IPointable;
-import edu.uci.ics.hyracks.data.std.primitive.VoidPointable;
-public class FnMinScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory {
+public class FnMinScalarEvaluatorFactory extends AbstractMaxMinScalarEvaluatorFactory {
private static final long serialVersionUID = 1L;
public FnMinScalarEvaluatorFactory(IScalarEvaluatorFactory[] args) {
@@ -42,39 +29,8 @@ public class FnMinScalarEvaluatorFactory
}
@Override
- protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
- throws AlgebricksException {
- final DynamicContext dCtx = (DynamicContext) ctx.getJobletContext().getGlobalJobData();
- final SequencePointable seqp = (SequencePointable) SequencePointable.FACTORY.createPointable();
- final AbstractValueComparisonOperation aOp = new ValueLtComparisonOperation();
- final TaggedValuePointable tvpMin = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable();
- final TaggedValuePointable tvpNext = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable();
- final VoidPointable p = (VoidPointable) VoidPointable.FACTORY.createPointable();
-
- return new AbstractTaggedValueArgumentScalarEvaluator(args) {
- @Override
- protected void evaluate(TaggedValuePointable[] args, IPointable result) throws SystemException {
- // TODO Update the results to be based on specs when different types in sequence.
- TaggedValuePointable tvp = args[0];
- if (tvp.getTag() == ValueTag.SEQUENCE_TAG) {
- tvp.getValue(seqp);
- int seqLen = seqp.getEntryCount();
- for (int j = 0; j < seqLen; ++j) {
- seqp.getEntry(j, p);
- tvpNext.set(p.getByteArray(), p.getStartOffset(), p.getLength());
- if (j == 0) {
- // Init.
- tvpMin.set(tvpNext);
- }
- if (FunctionHelper.compareTaggedValues(aOp, tvpNext, tvpMin, dCtx)) {
- tvpMin.set(tvpNext);
- }
- }
- result.set(tvpMin);
- } else {
- result.set(tvp);
- }
- }
- };
+ protected AbstractValueComparisonOperation createValueComparisonOperation() {
+ return new ValueLtComparisonOperation();
}
+
}
\ No newline at end of file
Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnSumAggregateEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnSumAggregateEvaluatorFactory.java?rev=1410664&r1=1410663&r2=1410664&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnSumAggregateEvaluatorFactory.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/aggregate/FnSumAggregateEvaluatorFactory.java Sat Nov 17 01:35:24 2012
@@ -18,7 +18,6 @@ package org.apache.vxquery.runtime.funct
import java.io.DataOutput;
-import org.apache.vxquery.context.DynamicContext;
import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
import org.apache.vxquery.datamodel.values.ValueTag;
import org.apache.vxquery.exceptions.SystemException;
@@ -36,8 +35,6 @@ import edu.uci.ics.hyracks.data.std.util
public class FnSumAggregateEvaluatorFactory extends AbstractTaggedValueArgumentAggregateEvaluatorFactory {
private static final long serialVersionUID = 1L;
- // TODO Populate the dynamic context.
- private static final DynamicContext dCtx = null;
public FnSumAggregateEvaluatorFactory(IScalarEvaluatorFactory[] args) {
super(args);
Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/base/AbstractTaggedValueArgumentAggregateEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/base/AbstractTaggedValueArgumentAggregateEvaluatorFactory.java?rev=1410664&r1=1410663&r2=1410664&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/base/AbstractTaggedValueArgumentAggregateEvaluatorFactory.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/base/AbstractTaggedValueArgumentAggregateEvaluatorFactory.java Sat Nov 17 01:35:24 2012
@@ -16,6 +16,8 @@
*/
package org.apache.vxquery.runtime.functions.base;
+import org.apache.vxquery.context.DynamicContext;
+
import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
import edu.uci.ics.hyracks.algebricks.runtime.base.IAggregateEvaluator;
import edu.uci.ics.hyracks.algebricks.runtime.base.IAggregateEvaluatorFactory;
@@ -28,12 +30,15 @@ public abstract class AbstractTaggedValu
private final IScalarEvaluatorFactory[] args;
+ public static DynamicContext dCtx;
+
public AbstractTaggedValueArgumentAggregateEvaluatorFactory(IScalarEvaluatorFactory[] args) {
this.args = args;
}
@Override
public final IAggregateEvaluator createAggregateEvaluator(IHyracksTaskContext ctx) throws AlgebricksException {
+ dCtx = (DynamicContext) ctx.getJobletContext().getGlobalJobData();
IScalarEvaluator[] es = new IScalarEvaluator[args.length];
for (int i = 0; i < es.length; ++i) {
es[i] = args[i].createScalarEvaluator(ctx);
Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java?rev=1410664&r1=1410663&r2=1410664&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java Sat Nov 17 01:35:24 2012
@@ -60,7 +60,6 @@ import edu.uci.ics.hyracks.data.std.prim
import edu.uci.ics.hyracks.data.std.primitive.LongPointable;
import edu.uci.ics.hyracks.data.std.primitive.ShortPointable;
import edu.uci.ics.hyracks.data.std.primitive.UTF8StringPointable;
-import edu.uci.ics.hyracks.data.std.primitive.VoidPointable;
import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
import edu.uci.ics.hyracks.dataflow.common.comm.util.ByteBufferInputStream;
@@ -1191,6 +1190,55 @@ public class FunctionHelper {
}
}
+ public static boolean transformThenCompareMinMaxTaggedValues(AbstractValueComparisonOperation aOp,
+ TaggedValuePointable tvp1, TaggedValuePointable tvp2, DynamicContext dCtx) throws SystemException {
+ TaggedValuePointable tvp1new = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable();
+ TaggedValuePointable tvp2new = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable();
+
+ ArrayBackedValueStorage abvsArgument1 = new ArrayBackedValueStorage();
+ DataOutput dOutArgument1 = abvsArgument1.getDataOutput();
+ ArrayBackedValueStorage abvsArgument2 = new ArrayBackedValueStorage();
+ DataOutput dOutArgument2 = abvsArgument2.getDataOutput();
+ CastToDoubleOperation castToDouble = new CastToDoubleOperation();
+ UTF8StringPointable stringp = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable();
+ UTF8StringPointable stringp2 = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable();
+
+ try {
+ abvsArgument1.reset();
+ if (tvp1.getTag() == ValueTag.XS_UNTYPED_ATOMIC_TAG) {
+ tvp1.getValue(stringp);
+ castToDouble.convertUntypedAtomic(stringp, dOutArgument1);
+ tvp1new.set(abvsArgument1.getByteArray(), abvsArgument1.getStartOffset(),
+ DoublePointable.TYPE_TRAITS.getFixedLength() + 1);
+ } else if (isDerivedFromInteger(tvp1.getTag())) {
+ getIntegerPointable(tvp1, dOutArgument1);
+ tvp1new.set(abvsArgument1.getByteArray(), abvsArgument1.getStartOffset(),
+ LongPointable.TYPE_TRAITS.getFixedLength() + 1);
+ } else {
+ tvp1new = tvp1;
+ }
+ abvsArgument2.reset();
+ if (tvp2.getTag() == ValueTag.XS_UNTYPED_ATOMIC_TAG) {
+ tvp2.getValue(stringp2);
+ castToDouble.convertUntypedAtomic(stringp2, dOutArgument2);
+ tvp2new.set(abvsArgument2.getByteArray(), abvsArgument2.getStartOffset(),
+ DoublePointable.TYPE_TRAITS.getFixedLength() + 1);
+ } else if (isDerivedFromInteger(tvp2.getTag())) {
+ getIntegerPointable(tvp2, dOutArgument2);
+ tvp2new.set(abvsArgument2.getByteArray(), abvsArgument2.getStartOffset(),
+ LongPointable.TYPE_TRAITS.getFixedLength() + 1);
+ } else {
+ tvp2new = tvp2;
+ }
+
+ return compareTaggedValues(aOp, tvp1new, tvp2new, dCtx);
+ } catch (SystemException se) {
+ throw se;
+ } catch (Exception e) {
+ throw new SystemException(ErrorCode.SYSE0001, e);
+ }
+ }
+
public static void writeChar(char c, DataOutput dOut) {
try {
if ((c >= 0x0001) && (c <= 0x007F)) {