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/30 23:35:19 UTC

svn commit: r1379165 - in /incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery: functions/ runtime/functions/numeric/

Author: prestonc
Date: Thu Aug 30 21:35:19 2012
New Revision: 1379165

URL: http://svn.apache.org/viewvc?rev=1379165&view=rev
Log:
Added fn:abs, fn:ceiling, fn:floor, and fn:round.

Added:
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/AbstractNumericOperation.java   (with props)
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/AbstractNumericScalarEvaluatorFactory.java   (with props)
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnAbsOperation.java   (with props)
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnAbsScalarEvaluatorFactory.java   (with props)
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnCeilingOperation.java   (with props)
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnCeilingScalarEvaluatorFactory.java   (with props)
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnFloorOperation.java   (with props)
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnFloorScalarEvaluatorFactory.java   (with props)
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnRoundOperation.java   (with props)
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnRoundScalarEvaluatorFactory.java   (with props)
Modified:
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/functions/builtin-functions.xml

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/functions/builtin-functions.xml
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/functions/builtin-functions.xml?rev=1379165&r1=1379164&r2=1379165&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/functions/builtin-functions.xml (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/functions/builtin-functions.xml Thu Aug 30 21:35:19 2012
@@ -20,6 +20,7 @@
     <function name="fn:abs">
         <param name="arg" type="xsext:numeric?"/>
         <return type="xsext:numeric?"/>
+        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.numeric.FnAbsScalarEvaluatorFactory"/>
     </function>
     
     <!-- fn:adjust-date-to-timezone( $arg as xs:date?) as  xs:date? -->
@@ -95,6 +96,7 @@
     <function name="fn:ceiling">
         <param name="arg" type="xsext:numeric?"/>
         <return type="xsext:numeric?"/>
+        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.numeric.FnCeilingScalarEvaluatorFactory"/>
     </function>
     
     <!-- fn:codepoint-equal($comparand1  as xs:string?, $comparand2 as xs:string?)  as xs:boolean? -->
@@ -360,6 +362,7 @@
     <function name="fn:floor">
         <param name="arg" type="xsext:numeric?"/>
         <return type="xsext:numeric?"/>
+        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.numeric.FnFloorScalarEvaluatorFactory"/>
     </function>
 
     <!-- fn:hours-from-dateTime( $arg as xs:dateTime?)  as xs:integer?  -->
@@ -663,6 +666,7 @@
     <function name="fn:number">
         <param name="arg" type="xs:anyAtomicType?"/>
         <return type="xs:double"/>
+        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.node.FnNumberScalarEvaluatorFactory"/>
     </function>
 
     <!-- fn:one-or-more($arg  as item()*) as  item()+ -->
@@ -757,6 +761,7 @@
     <function name="fn:round">
         <param name="arg" type="xsext:numeric?"/>
         <return type="xsext:numeric?"/>
+        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.numeric.FnRoundScalarEvaluatorFactory"/>
     </function>
 
     <!-- fn:round-half-to-even( $arg as numeric?) as  numeric?  -->

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/AbstractNumericOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/AbstractNumericOperation.java?rev=1379165&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/AbstractNumericOperation.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/AbstractNumericOperation.java Thu Aug 30 21:35:19 2012
@@ -0,0 +1,23 @@
+package org.apache.vxquery.runtime.functions.numeric;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.vxquery.datamodel.accessors.atomic.XSDecimalPointable;
+import org.apache.vxquery.exceptions.SystemException;
+
+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.LongPointable;
+
+public abstract class AbstractNumericOperation {
+
+    public abstract void operateDecimal(XSDecimalPointable decp, DataOutput dOut) throws SystemException, IOException;
+
+    public abstract void operateDouble(DoublePointable doublep, DataOutput dOut) throws SystemException, IOException;
+
+    public abstract void operateFloat(FloatPointable floatp, DataOutput dOut) throws SystemException, IOException;
+
+    public abstract void operateInteger(LongPointable longp, DataOutput dOut) throws SystemException, IOException;
+
+}

Propchange: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/AbstractNumericOperation.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/AbstractNumericScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/AbstractNumericScalarEvaluatorFactory.java?rev=1379165&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/AbstractNumericScalarEvaluatorFactory.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/AbstractNumericScalarEvaluatorFactory.java Thu Aug 30 21:35:19 2012
@@ -0,0 +1,201 @@
+/*
+* 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.numeric;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.vxquery.datamodel.accessors.SequencePointable;
+import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
+import org.apache.vxquery.datamodel.accessors.atomic.XSDecimalPointable;
+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.base.AbstractTaggedValueArgumentScalarEvaluator;
+import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory;
+import org.apache.vxquery.types.BuiltinTypeRegistry;
+
+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.BytePointable;
+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.primitive.ShortPointable;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+
+public abstract class AbstractNumericScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory {
+    private static final long serialVersionUID = 1L;
+
+    public AbstractNumericScalarEvaluatorFactory(IScalarEvaluatorFactory[] args) {
+        super(args);
+    }
+
+    @Override
+    protected AbstractTaggedValueArgumentScalarEvaluator createEvaluator(IHyracksTaskContext ctx,
+            IScalarEvaluator[] args) throws AlgebricksException {
+        return new AbstractTaggedValueArgumentScalarEvaluator(args) {
+            final AbstractNumericOperation aOp = createNumericOperation();
+            final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage();
+            final DataOutput dOut = abvs.getDataOutput();
+            final ArrayBackedValueStorage abvsInteger = new ArrayBackedValueStorage();
+            final DataOutput dOutInteger = abvsInteger.getDataOutput();
+            final TypedPointables tp = new TypedPointables();
+
+            @Override
+            protected void evaluate(TaggedValuePointable[] args, IPointable result) throws SystemException {
+                TaggedValuePointable tvp = args[0];
+                int tid = getBaseTypeForArithmetics(tvp.getTag());
+                abvs.reset();
+                try {
+                    switch (tid) {
+                        case ValueTag.SEQUENCE_TAG:
+                            tvp.getValue(tp.seqp);
+                            if (tp.seqp.getEntryCount() == 0) {
+                                dOut.write(ValueTag.SEQUENCE_TAG);
+                                dOut.write(tp.seqp.getByteArray(), tp.seqp.getStartOffset(), tp.seqp.getLength());
+                                return;
+                            }
+
+                        case ValueTag.XS_DECIMAL_TAG:
+                            tvp.getValue(tp.decp);
+                            aOp.operateDecimal(tp.decp, dOut);
+                            result.set(abvs);
+                            return;
+
+                        case ValueTag.XS_INTEGER_TAG:
+                            LongPointable longp = (LongPointable) LongPointable.FACTORY.createPointable();
+                            switch (tvp.getTag()) {
+                                case ValueTag.XS_INTEGER_TAG:
+                                case ValueTag.XS_NON_POSITIVE_INTEGER_TAG:
+                                case ValueTag.XS_NEGATIVE_INTEGER_TAG:
+                                case ValueTag.XS_LONG_TAG:
+                                case ValueTag.XS_NON_NEGATIVE_INTEGER_TAG:
+                                case ValueTag.XS_UNSIGNED_LONG_TAG:
+                                case ValueTag.XS_POSITIVE_INTEGER_TAG:
+                                case ValueTag.XS_INT_TAG:
+                                case ValueTag.XS_UNSIGNED_INT_TAG:
+                                case ValueTag.XS_SHORT_TAG:
+                                case ValueTag.XS_UNSIGNED_SHORT_TAG:
+                                case ValueTag.XS_BYTE_TAG:
+                                case ValueTag.XS_UNSIGNED_BYTE_TAG:
+                                    abvsInteger.reset();
+                                    getIntegerPointable(tp, tvp, dOutInteger);
+                                    longp.set(abvsInteger.getByteArray(), abvsInteger.getStartOffset() + 1,
+                                            LongPointable.TYPE_TRAITS.getFixedLength());
+                            }
+                            aOp.operateInteger(longp, dOut);
+                            result.set(abvs);
+                            return;
+
+                        case ValueTag.XS_FLOAT_TAG:
+                            tvp.getValue(tp.floatp);
+                            aOp.operateFloat(tp.floatp, dOut);
+                            result.set(abvs);
+                            return;
+
+                        case ValueTag.XS_DOUBLE_TAG:
+                            tvp.getValue(tp.doublep);
+                            aOp.operateDouble(tp.doublep, dOut);
+                            result.set(abvs);
+                            return;
+                    }
+                } catch (SystemException se) {
+                    throw se;
+                } catch (Exception e) {
+                    throw new SystemException(ErrorCode.SYSE0001, e);
+                }
+                throw new SystemException(ErrorCode.XPTY0004);
+            }
+
+            private void getIntegerPointable(TypedPointables tp, TaggedValuePointable tvp, DataOutput dOut)
+                    throws SystemException, IOException {
+                long value;
+                switch (tvp.getTag()) {
+                    case ValueTag.XS_INTEGER_TAG:
+                    case ValueTag.XS_LONG_TAG:
+                    case ValueTag.XS_NEGATIVE_INTEGER_TAG:
+                    case ValueTag.XS_NON_POSITIVE_INTEGER_TAG:
+                    case ValueTag.XS_NON_NEGATIVE_INTEGER_TAG:
+                    case ValueTag.XS_POSITIVE_INTEGER_TAG:
+                    case ValueTag.XS_UNSIGNED_INT_TAG:
+                    case ValueTag.XS_UNSIGNED_LONG_TAG:
+                        tvp.getValue(tp.longp);
+                        value = tp.longp.longValue();
+                        break;
+
+                    case ValueTag.XS_INT_TAG:
+                    case ValueTag.XS_UNSIGNED_SHORT_TAG:
+                        tvp.getValue(tp.intp);
+                        value = tp.intp.longValue();
+                        break;
+
+                    case ValueTag.XS_SHORT_TAG:
+                    case ValueTag.XS_UNSIGNED_BYTE_TAG:
+                        tvp.getValue(tp.shortp);
+                        value = tp.shortp.longValue();
+                        break;
+
+                    case ValueTag.XS_BYTE_TAG:
+                        tvp.getValue(tp.bytep);
+                        value = tp.bytep.longValue();
+                        break;
+
+                    default:
+                        value = 0;
+                }
+                dOut.write(ValueTag.XS_INTEGER_TAG);
+                dOut.writeLong(value);
+            }
+
+            private int getBaseTypeForArithmetics(int tid) throws SystemException {
+                while (true) {
+                    switch (tid) {
+                        case ValueTag.XS_DECIMAL_TAG:
+                        case ValueTag.XS_DOUBLE_TAG:
+                        case ValueTag.XS_FLOAT_TAG:
+                        case ValueTag.XS_INTEGER_TAG:
+                            return tid;
+
+                        case ValueTag.XS_ANY_ATOMIC_TAG:
+                            throw new SystemException(ErrorCode.XPTY0004);
+
+                        default:
+                            tid = BuiltinTypeRegistry.INSTANCE.getSchemaTypeById(tid).getBaseType().getTypeId();
+                    }
+                }
+            }
+        };
+    }
+
+    private static class TypedPointables {
+        BytePointable bytep = (BytePointable) BytePointable.FACTORY.createPointable();
+        ShortPointable shortp = (ShortPointable) ShortPointable.FACTORY.createPointable();
+        IntegerPointable intp = (IntegerPointable) IntegerPointable.FACTORY.createPointable();
+        DoublePointable doublep = (DoublePointable) DoublePointable.FACTORY.createPointable();
+        FloatPointable floatp = (FloatPointable) FloatPointable.FACTORY.createPointable();
+        LongPointable longp = (LongPointable) LongPointable.FACTORY.createPointable();
+        XSDecimalPointable decp = (XSDecimalPointable) XSDecimalPointable.FACTORY.createPointable();
+        SequencePointable seqp = (SequencePointable) SequencePointable.FACTORY.createPointable();
+    }
+
+    protected abstract AbstractNumericOperation createNumericOperation();
+}
\ No newline at end of file

Propchange: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/AbstractNumericScalarEvaluatorFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/AbstractNumericScalarEvaluatorFactory.java
------------------------------------------------------------------------------
    svn:executable = *

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnAbsOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnAbsOperation.java?rev=1379165&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnAbsOperation.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnAbsOperation.java Thu Aug 30 21:35:19 2012
@@ -0,0 +1,40 @@
+package org.apache.vxquery.runtime.functions.numeric;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.vxquery.datamodel.accessors.atomic.XSDecimalPointable;
+import org.apache.vxquery.datamodel.values.ValueTag;
+import org.apache.vxquery.exceptions.SystemException;
+
+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.LongPointable;
+
+public class FnAbsOperation extends AbstractNumericOperation {
+
+    @Override
+    public void operateDecimal(XSDecimalPointable decp, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_DECIMAL_TAG);
+        dOut.write(decp.getDecimalPlace());
+        dOut.writeLong(Math.abs(decp.getDecimalValue()));
+    }
+
+    @Override
+    public void operateDouble(DoublePointable doublep, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_DOUBLE_TAG);
+        dOut.writeDouble(Math.abs(doublep.getDouble()));
+    }
+
+    @Override
+    public void operateFloat(FloatPointable floatp, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_FLOAT_TAG);
+        dOut.writeFloat(Math.abs(floatp.getFloat()));
+    }
+
+    @Override
+    public void operateInteger(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_INTEGER_TAG);
+        dOut.writeLong(Math.abs(longp.getLong()));
+    }
+}
\ No newline at end of file

Propchange: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnAbsOperation.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnAbsScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnAbsScalarEvaluatorFactory.java?rev=1379165&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnAbsScalarEvaluatorFactory.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnAbsScalarEvaluatorFactory.java Thu Aug 30 21:35:19 2012
@@ -0,0 +1,16 @@
+package org.apache.vxquery.runtime.functions.numeric;
+
+import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+
+public class FnAbsScalarEvaluatorFactory extends AbstractNumericScalarEvaluatorFactory {
+    private static final long serialVersionUID = 1L;
+
+    public FnAbsScalarEvaluatorFactory(IScalarEvaluatorFactory[] args) {
+        super(args);
+    }
+
+    @Override
+    protected AbstractNumericOperation createNumericOperation() {
+        return new FnAbsOperation();
+    }
+}
\ No newline at end of file

Propchange: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnAbsScalarEvaluatorFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnCeilingOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnCeilingOperation.java?rev=1379165&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnCeilingOperation.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnCeilingOperation.java Thu Aug 30 21:35:19 2012
@@ -0,0 +1,40 @@
+package org.apache.vxquery.runtime.functions.numeric;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.vxquery.datamodel.accessors.atomic.XSDecimalPointable;
+import org.apache.vxquery.datamodel.values.ValueTag;
+import org.apache.vxquery.exceptions.SystemException;
+
+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.LongPointable;
+
+public class FnCeilingOperation extends AbstractNumericOperation {
+
+    @Override
+    public void operateDecimal(XSDecimalPointable decp, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_DECIMAL_TAG);
+        dOut.write(decp.getDecimalPlace());
+        dOut.writeLong((long) Math.ceil(decp.getDecimalValue()));
+    }
+
+    @Override
+    public void operateDouble(DoublePointable doublep, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_DOUBLE_TAG);
+        dOut.writeDouble(Math.ceil(doublep.getDouble()));
+    }
+
+    @Override
+    public void operateFloat(FloatPointable floatp, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_FLOAT_TAG);
+        dOut.writeFloat((float) Math.ceil(floatp.getFloat()));
+    }
+
+    @Override
+    public void operateInteger(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_INTEGER_TAG);
+        dOut.writeLong(longp.getLong());
+    }
+}
\ No newline at end of file

Propchange: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnCeilingOperation.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnCeilingScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnCeilingScalarEvaluatorFactory.java?rev=1379165&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnCeilingScalarEvaluatorFactory.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnCeilingScalarEvaluatorFactory.java Thu Aug 30 21:35:19 2012
@@ -0,0 +1,16 @@
+package org.apache.vxquery.runtime.functions.numeric;
+
+import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+
+public class FnCeilingScalarEvaluatorFactory extends AbstractNumericScalarEvaluatorFactory {
+    private static final long serialVersionUID = 1L;
+
+    public FnCeilingScalarEvaluatorFactory(IScalarEvaluatorFactory[] args) {
+        super(args);
+    }
+
+    @Override
+    protected AbstractNumericOperation createNumericOperation() {
+        return new FnCeilingOperation();
+    }
+}
\ No newline at end of file

Propchange: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnCeilingScalarEvaluatorFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnFloorOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnFloorOperation.java?rev=1379165&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnFloorOperation.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnFloorOperation.java Thu Aug 30 21:35:19 2012
@@ -0,0 +1,40 @@
+package org.apache.vxquery.runtime.functions.numeric;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.vxquery.datamodel.accessors.atomic.XSDecimalPointable;
+import org.apache.vxquery.datamodel.values.ValueTag;
+import org.apache.vxquery.exceptions.SystemException;
+
+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.LongPointable;
+
+public class FnFloorOperation extends AbstractNumericOperation {
+
+    @Override
+    public void operateDecimal(XSDecimalPointable decp, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_DECIMAL_TAG);
+        dOut.write(decp.getDecimalPlace());
+        dOut.writeLong((long) Math.floor(decp.getDecimalValue()));
+    }
+
+    @Override
+    public void operateDouble(DoublePointable doublep, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_DOUBLE_TAG);
+        dOut.writeDouble(Math.floor(doublep.getDouble()));
+    }
+
+    @Override
+    public void operateFloat(FloatPointable floatp, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_FLOAT_TAG);
+        dOut.writeFloat((float) Math.floor(floatp.getFloat()));
+    }
+
+    @Override
+    public void operateInteger(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_INTEGER_TAG);
+        dOut.writeLong(longp.getLong());
+    }
+}
\ No newline at end of file

Propchange: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnFloorOperation.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnFloorScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnFloorScalarEvaluatorFactory.java?rev=1379165&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnFloorScalarEvaluatorFactory.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnFloorScalarEvaluatorFactory.java Thu Aug 30 21:35:19 2012
@@ -0,0 +1,16 @@
+package org.apache.vxquery.runtime.functions.numeric;
+
+import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+
+public class FnFloorScalarEvaluatorFactory extends AbstractNumericScalarEvaluatorFactory {
+    private static final long serialVersionUID = 1L;
+
+    public FnFloorScalarEvaluatorFactory(IScalarEvaluatorFactory[] args) {
+        super(args);
+    }
+
+    @Override
+    protected AbstractNumericOperation createNumericOperation() {
+        return new FnFloorOperation();
+    }
+}
\ No newline at end of file

Propchange: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnFloorScalarEvaluatorFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnRoundOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnRoundOperation.java?rev=1379165&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnRoundOperation.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnRoundOperation.java Thu Aug 30 21:35:19 2012
@@ -0,0 +1,52 @@
+package org.apache.vxquery.runtime.functions.numeric;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.vxquery.datamodel.accessors.atomic.XSDecimalPointable;
+import org.apache.vxquery.datamodel.values.ValueTag;
+import org.apache.vxquery.exceptions.SystemException;
+
+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.LongPointable;
+
+public class FnRoundOperation extends AbstractNumericOperation {
+
+    @Override
+    public void operateDecimal(XSDecimalPointable decp, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_DECIMAL_TAG);
+        dOut.write(decp.getDecimalPlace());
+        dOut.writeLong((long) Math.round(decp.getDecimalValue()));
+    }
+
+    @Override
+    public void operateDouble(DoublePointable doublep, DataOutput dOut) throws SystemException, IOException {
+        double value = doublep.getDouble();
+        if (value < 0 && value >= -0.5) {
+            value = -0.0;
+        } else if (!Double.isNaN(value) && !Double.isInfinite(value) && value != 0.0) {
+            value = Math.round(value);
+        }
+        dOut.write(ValueTag.XS_DOUBLE_TAG);
+        dOut.writeDouble(value);
+    }
+
+    @Override
+    public void operateFloat(FloatPointable floatp, DataOutput dOut) throws SystemException, IOException {
+        float value = floatp.getFloat();
+        if (value < 0 && value >= -0.5f) {
+            value = -0.0f;
+        } else if (!Float.isNaN(value) && !Float.isInfinite(value) && value != 0.0f) {
+            value = Math.round(value);
+        }
+        dOut.write(ValueTag.XS_FLOAT_TAG);
+        dOut.writeFloat(value);
+    }
+
+    @Override
+    public void operateInteger(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_INTEGER_TAG);
+        dOut.writeLong(longp.getLong());
+    }
+}
\ No newline at end of file

Propchange: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnRoundOperation.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnRoundScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnRoundScalarEvaluatorFactory.java?rev=1379165&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnRoundScalarEvaluatorFactory.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnRoundScalarEvaluatorFactory.java Thu Aug 30 21:35:19 2012
@@ -0,0 +1,16 @@
+package org.apache.vxquery.runtime.functions.numeric;
+
+import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+
+public class FnRoundScalarEvaluatorFactory extends AbstractNumericScalarEvaluatorFactory {
+    private static final long serialVersionUID = 1L;
+
+    public FnRoundScalarEvaluatorFactory(IScalarEvaluatorFactory[] args) {
+        super(args);
+    }
+
+    @Override
+    protected AbstractNumericOperation createNumericOperation() {
+        return new FnRoundOperation();
+    }
+}
\ No newline at end of file

Propchange: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/numeric/FnRoundScalarEvaluatorFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native