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)) {