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/01 20:15:23 UTC

svn commit: r1368152 [2/2] - in /incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery: functions/ runtime/functions/cast/

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToGMonthOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToGMonthOperation.java?rev=1368152&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToGMonthOperation.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToGMonthOperation.java Wed Aug  1 18:15:22 2012
@@ -0,0 +1,91 @@
+package org.apache.vxquery.runtime.functions.cast;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.vxquery.datamodel.accessors.atomic.XSDatePointable;
+import org.apache.vxquery.datamodel.accessors.atomic.XSDateTimePointable;
+import org.apache.vxquery.datamodel.util.DateTime;
+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.strings.ICharacterIterator;
+import org.apache.vxquery.runtime.functions.strings.UTF8StringCharacterIterator;
+
+import edu.uci.ics.hyracks.data.std.primitive.UTF8StringPointable;
+
+public class CastToGMonthOperation extends AbstractCastToOperation {
+
+    @Override
+    public void convertDate(XSDatePointable datep, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_G_MONTH_TAG);
+        dOut.writeShort((short) 1972);
+        dOut.write((byte) datep.getMonth());
+        dOut.write((byte) 29);
+        dOut.write((byte) DateTime.TIMEZONE_HOUR_NULL);
+        dOut.write((byte) DateTime.TIMEZONE_MINUTE_NULL);
+    }
+
+    @Override
+    public void convertDatetime(XSDateTimePointable datetimep, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_G_MONTH_TAG);
+        dOut.writeShort((short) 1972);
+        dOut.write((byte) datetimep.getMonth());
+        dOut.write((byte) 29);
+        dOut.write((byte) 0);
+        dOut.write((byte) 0);
+        dOut.writeInt((int) 0);
+        dOut.write((byte) DateTime.TIMEZONE_HOUR_NULL);
+        dOut.write((byte) DateTime.TIMEZONE_MINUTE_NULL);
+    }
+
+    @Override
+    public void convertGMonth(XSDatePointable datep, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_G_MONTH_TAG);
+        dOut.write(datep.getByteArray(), datep.getStartOffset(), datep.getLength());
+    }
+
+    @Override
+    public void convertString(UTF8StringPointable stringp, DataOutput dOut) throws SystemException, IOException {
+        ICharacterIterator charIterator = new UTF8StringCharacterIterator(stringp);
+        charIterator.reset();
+        int c;
+        int index = 0;
+        long[] date = new long[3];
+        boolean positiveTimezone = false;
+
+        // Set defaults
+        date[1] = DateTime.TIMEZONE_HOUR_NULL;
+        date[2] = DateTime.TIMEZONE_MINUTE_NULL;
+
+        while ((c = charIterator.next()) != ICharacterIterator.EOS_CHAR) {
+            if (Character.isDigit(c)) {
+                date[index] = date[index] * 10 + Character.getNumericValue(c);
+            } else if (c == Character.valueOf('-') || c == Character.valueOf(':')) {
+                ++index;
+            } else if (c == Character.valueOf('+')) {
+                positiveTimezone = true;
+                ++index;
+            } else {
+                // Invalid date format.
+                throw new SystemException(ErrorCode.FORG0001);
+            }
+        }
+        if (!DateTime.valid(1972, date[0], 29, 0, 0, 0, date[1], date[2])) {
+            throw new SystemException(ErrorCode.FODT0001);
+        }
+
+        dOut.write(ValueTag.XS_G_MONTH_TAG);
+        dOut.writeShort((short) 1972);
+        dOut.write((byte) date[0]);
+        dOut.write((byte) 29);
+        dOut.write((byte) ((positiveTimezone ? 1 : -1) * date[1]));
+        dOut.write((byte) ((positiveTimezone ? 1 : -1) * date[2]));
+    }
+
+    @Override
+    public void convertUntypedAtomic(UTF8StringPointable stringp, DataOutput dOut) throws SystemException, IOException {
+        convertString(stringp, dOut);
+    }
+
+}
\ No newline at end of file

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

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToGYearMonthOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToGYearMonthOperation.java?rev=1368152&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToGYearMonthOperation.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToGYearMonthOperation.java Wed Aug  1 18:15:22 2012
@@ -0,0 +1,105 @@
+package org.apache.vxquery.runtime.functions.cast;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.vxquery.datamodel.accessors.atomic.XSDatePointable;
+import org.apache.vxquery.datamodel.accessors.atomic.XSDateTimePointable;
+import org.apache.vxquery.datamodel.util.DateTime;
+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.strings.ICharacterIterator;
+import org.apache.vxquery.runtime.functions.strings.UTF8StringCharacterIterator;
+
+import edu.uci.ics.hyracks.data.std.primitive.UTF8StringPointable;
+
+public class CastToGYearMonthOperation extends AbstractCastToOperation {
+
+    @Override
+    public void convertDate(XSDatePointable datep, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_G_YEAR_MONTH_TAG);
+        dOut.writeShort((short) datep.getYear());
+        dOut.write((byte) datep.getMonth());
+        if (DateTime.isLeapYear(datep.getYear())) {
+            dOut.write((byte) DateTime.DAYS_OF_MONTH_ORDI[(int) (datep.getMonth() - 1)]);
+        } else {
+            dOut.write((byte) DateTime.DAYS_OF_MONTH_LEAP[(int) (datep.getMonth() - 1)]);
+        }
+        dOut.write((byte) DateTime.TIMEZONE_HOUR_NULL);
+        dOut.write((byte) DateTime.TIMEZONE_MINUTE_NULL);
+    }
+
+    @Override
+    public void convertDatetime(XSDateTimePointable datetimep, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_G_YEAR_MONTH_TAG);
+        dOut.writeShort((short) datetimep.getYear());
+        dOut.write((byte) datetimep.getMonth());
+        if (DateTime.isLeapYear(datetimep.getYear())) {
+            dOut.write((byte) DateTime.DAYS_OF_MONTH_ORDI[(int) (datetimep.getMonth() - 1)]);
+        } else {
+            dOut.write((byte) DateTime.DAYS_OF_MONTH_LEAP[(int) (datetimep.getMonth() - 1)]);
+        }
+        dOut.write((byte) 0);
+        dOut.write((byte) 0);
+        dOut.writeInt((int) 0);
+        dOut.write((byte) DateTime.TIMEZONE_HOUR_NULL);
+        dOut.write((byte) DateTime.TIMEZONE_MINUTE_NULL);
+    }
+
+    @Override
+    public void convertGYearMonth(XSDatePointable datep, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_G_YEAR_MONTH_TAG);
+        dOut.write(datep.getByteArray(), datep.getStartOffset(), datep.getLength());
+    }
+
+    @Override
+    public void convertString(UTF8StringPointable stringp, DataOutput dOut) throws SystemException, IOException {
+        ICharacterIterator charIterator = new UTF8StringCharacterIterator(stringp);
+        charIterator.reset();
+        int c;
+        int index = 0;
+        long[] date = new long[4];
+        boolean positiveTimezone = false;
+
+        // Set defaults
+        date[2] = DateTime.TIMEZONE_HOUR_NULL;
+        date[3] = DateTime.TIMEZONE_MINUTE_NULL;
+
+        while ((c = charIterator.next()) != ICharacterIterator.EOS_CHAR) {
+            if (Character.isDigit(c)) {
+                date[index] = date[index] * 10 + Character.getNumericValue(c);
+            } else if (c == Character.valueOf('-') || c == Character.valueOf(':')) {
+                ++index;
+            } else if (c == Character.valueOf('+')) {
+                positiveTimezone = true;
+                ++index;
+            } else {
+                // Invalid date format.
+                throw new SystemException(ErrorCode.FORG0001);
+            }
+        }
+        long day;
+        if (DateTime.isLeapYear(date[0])) {
+            day = DateTime.DAYS_OF_MONTH_ORDI[(int) (date[1] - 1)];
+        } else {
+            day = DateTime.DAYS_OF_MONTH_LEAP[(int) (date[1] - 1)];
+        }
+        if (!DateTime.valid(date[0], date[1], day, 0, 0, 0, date[2], date[3])) {
+            throw new SystemException(ErrorCode.FODT0001);
+        }
+
+        dOut.write(ValueTag.XS_G_YEAR_MONTH_TAG);
+        dOut.writeShort((short) date[0]);
+        dOut.write((byte) date[1]);
+        dOut.write((byte) day);
+        dOut.write((byte) ((positiveTimezone ? 1 : -1) * date[2]));
+        dOut.write((byte) ((positiveTimezone ? 1 : -1) * date[3]));
+    }
+
+    @Override
+    public void convertUntypedAtomic(UTF8StringPointable stringp, DataOutput dOut) throws SystemException, IOException {
+        convertString(stringp, dOut);
+    }
+
+}
\ No newline at end of file

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

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToGYearOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToGYearOperation.java?rev=1368152&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToGYearOperation.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToGYearOperation.java Wed Aug  1 18:15:22 2012
@@ -0,0 +1,91 @@
+package org.apache.vxquery.runtime.functions.cast;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.vxquery.datamodel.accessors.atomic.XSDatePointable;
+import org.apache.vxquery.datamodel.accessors.atomic.XSDateTimePointable;
+import org.apache.vxquery.datamodel.util.DateTime;
+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.strings.ICharacterIterator;
+import org.apache.vxquery.runtime.functions.strings.UTF8StringCharacterIterator;
+
+import edu.uci.ics.hyracks.data.std.primitive.UTF8StringPointable;
+
+public class CastToGYearOperation extends AbstractCastToOperation {
+
+    @Override
+    public void convertDate(XSDatePointable datep, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_G_YEAR_TAG);
+        dOut.writeShort((short) datep.getYear());
+        dOut.write((byte) 1);
+        dOut.write((byte) 1);
+        dOut.write((byte) DateTime.TIMEZONE_HOUR_NULL);
+        dOut.write((byte) DateTime.TIMEZONE_MINUTE_NULL);
+    }
+
+    @Override
+    public void convertDatetime(XSDateTimePointable datetimep, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_G_YEAR_TAG);
+        dOut.writeShort((short) datetimep.getYear());
+        dOut.write((byte) 1);
+        dOut.write((byte) 1);
+        dOut.write((byte) 0);
+        dOut.write((byte) 0);
+        dOut.writeInt((int) 0);
+        dOut.write((byte) DateTime.TIMEZONE_HOUR_NULL);
+        dOut.write((byte) DateTime.TIMEZONE_MINUTE_NULL);
+    }
+
+    @Override
+    public void convertGYear(XSDatePointable datep, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_G_YEAR_TAG);
+        dOut.write(datep.getByteArray(), datep.getStartOffset(), datep.getLength());
+    }
+
+    @Override
+    public void convertString(UTF8StringPointable stringp, DataOutput dOut) throws SystemException, IOException {
+        ICharacterIterator charIterator = new UTF8StringCharacterIterator(stringp);
+        charIterator.reset();
+        int c;
+        int index = 0;
+        long[] date = new long[3];
+        boolean positiveTimezone = false;
+
+        // Set defaults
+        date[1] = DateTime.TIMEZONE_HOUR_NULL;
+        date[2] = DateTime.TIMEZONE_MINUTE_NULL;
+
+        while ((c = charIterator.next()) != ICharacterIterator.EOS_CHAR) {
+            if (Character.isDigit(c)) {
+                date[index] = date[index] * 10 + Character.getNumericValue(c);
+            } else if (c == Character.valueOf('-') || c == Character.valueOf(':')) {
+                ++index;
+            } else if (c == Character.valueOf('+')) {
+                positiveTimezone = true;
+                ++index;
+            } else {
+                // Invalid date format.
+                throw new SystemException(ErrorCode.FORG0001);
+            }
+        }
+        if (!DateTime.valid(date[0], 1, 1, 0, 0, 0, date[1], date[2])) {
+            throw new SystemException(ErrorCode.FODT0001);
+        }
+
+        dOut.write(ValueTag.XS_G_YEAR_TAG);
+        dOut.writeShort((short) date[0]);
+        dOut.write((byte) 1);
+        dOut.write((byte) 1);
+        dOut.write((byte) ((positiveTimezone ? 1 : -1) * date[1]));
+        dOut.write((byte) ((positiveTimezone ? 1 : -1) * date[2]));
+    }
+
+    @Override
+    public void convertUntypedAtomic(UTF8StringPointable stringp, DataOutput dOut) throws SystemException, IOException {
+        convertString(stringp, dOut);
+    }
+
+}
\ No newline at end of file

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

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToHexBinaryOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToHexBinaryOperation.java?rev=1368152&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToHexBinaryOperation.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToHexBinaryOperation.java Wed Aug  1 18:15:22 2012
@@ -0,0 +1,92 @@
+package org.apache.vxquery.runtime.functions.cast;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.vxquery.datamodel.accessors.atomic.XSBinaryPointable;
+import org.apache.vxquery.datamodel.values.ValueTag;
+import org.apache.vxquery.exceptions.SystemException;
+import org.apache.vxquery.runtime.functions.strings.ICharacterIterator;
+import org.apache.vxquery.runtime.functions.strings.UTF8StringCharacterIterator;
+
+import edu.uci.ics.hyracks.data.std.primitive.UTF8StringPointable;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+
+public class CastToHexBinaryOperation extends AbstractCastToOperation {
+    private ArrayBackedValueStorage abvsInner = new ArrayBackedValueStorage();
+    private DataOutput dOutInner = abvsInner.getDataOutput();
+
+    @Override
+    public void convertBase64Binary(XSBinaryPointable binaryp, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_HEX_BINARY_TAG);
+        dOut.write(binaryp.getByteArray(), binaryp.getStartOffset(), binaryp.getLength());
+    }
+
+    @Override
+    public void convertHexBinary(XSBinaryPointable binaryp, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_HEX_BINARY_TAG);
+        dOut.write(binaryp.getByteArray(), binaryp.getStartOffset(), binaryp.getLength());
+    }
+
+    @Override
+    public void convertString(UTF8StringPointable stringp, DataOutput dOut) throws SystemException, IOException {
+        ICharacterIterator charIterator = new UTF8StringCharacterIterator(stringp);
+        charIterator.reset();
+        abvsInner.reset();
+        int c = 0;
+        byte halfByte1, halfByte2;
+        while ((c = charIterator.next()) != ICharacterIterator.EOS_CHAR) {
+            halfByte1 = getHexBinary((char) c);
+            halfByte2 = getHexBinary((char) c);
+
+            dOutInner.write(((halfByte1 & 0xf0) << 4) + (halfByte2 & 0x0f));
+        }
+
+        dOut.write(ValueTag.XS_HEX_BINARY_TAG);
+        dOut.write((byte) ((abvsInner.getLength() >>> 8) & 0xFF));
+        dOut.write((byte) ((abvsInner.getLength() >>> 0) & 0xFF));
+        dOut.write(abvsInner.getByteArray(), abvsInner.getStartOffset(), abvsInner.getLength());
+    }
+
+    @Override
+    public void convertUntypedAtomic(UTF8StringPointable stringp, DataOutput dOut) throws SystemException, IOException {
+        convertString(stringp, dOut);
+    }
+
+    private byte getHexBinary(char hexCharacter) {
+        if (hexCharacter == Character.valueOf('0')) {
+            return 0x00;
+        } else if (hexCharacter == Character.valueOf('1')) {
+            return 0x01;
+        } else if (hexCharacter == Character.valueOf('2')) {
+            return 0x02;
+        } else if (hexCharacter == Character.valueOf('3')) {
+            return 0x03;
+        } else if (hexCharacter == Character.valueOf('4')) {
+            return 0x04;
+        } else if (hexCharacter == Character.valueOf('5')) {
+            return 0x05;
+        } else if (hexCharacter == Character.valueOf('6')) {
+            return 0x06;
+        } else if (hexCharacter == Character.valueOf('7')) {
+            return 0x07;
+        } else if (hexCharacter == Character.valueOf('8')) {
+            return 0x08;
+        } else if (hexCharacter == Character.valueOf('9')) {
+            return 0x09;
+        } else if (hexCharacter == Character.valueOf('a')) {
+            return 0x0a;
+        } else if (hexCharacter == Character.valueOf('b')) {
+            return 0x0b;
+        } else if (hexCharacter == Character.valueOf('c')) {
+            return 0x0c;
+        } else if (hexCharacter == Character.valueOf('d')) {
+            return 0x0d;
+        } else if (hexCharacter == Character.valueOf('e')) {
+            return 0x0e;
+        } else {
+            return 0x0f;
+        }
+    }
+
+}
\ No newline at end of file

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

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToIntegerOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToIntegerOperation.java?rev=1368152&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToIntegerOperation.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToIntegerOperation.java Wed Aug  1 18:15:22 2012
@@ -0,0 +1,87 @@
+package org.apache.vxquery.runtime.functions.cast;
+
+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.ErrorCode;
+import org.apache.vxquery.exceptions.SystemException;
+import org.apache.vxquery.runtime.functions.strings.ICharacterIterator;
+import org.apache.vxquery.runtime.functions.strings.UTF8StringCharacterIterator;
+
+import edu.uci.ics.hyracks.data.std.primitive.BooleanPointable;
+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;
+import edu.uci.ics.hyracks.data.std.primitive.UTF8StringPointable;
+
+public class CastToIntegerOperation extends AbstractCastToOperation {
+
+    @Override
+    public void convertBoolean(BooleanPointable boolp, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_INTEGER_TAG);
+        dOut.writeLong((long) (boolp.getBoolean() ? 1 : 0));
+    }
+
+    @Override
+    public void convertDecimal(XSDecimalPointable decp, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_INTEGER_TAG);
+        dOut.writeLong(decp.longValue());
+    }
+
+    @Override
+    public void convertDouble(DoublePointable doublep, DataOutput dOut) throws SystemException, IOException {
+        if (doublep.getDouble() > Long.MAX_VALUE || doublep.getDouble() < Long.MIN_VALUE) {
+            throw new SystemException(ErrorCode.FOCA0003);
+        }
+        dOut.write(ValueTag.XS_INTEGER_TAG);
+        dOut.writeLong(doublep.longValue());
+    }
+
+    @Override
+    public void convertFloat(FloatPointable floatp, DataOutput dOut) throws SystemException, IOException {
+        if (floatp.getFloat() > Long.MAX_VALUE || floatp.getFloat() < Long.MIN_VALUE) {
+            throw new SystemException(ErrorCode.FOCA0003);
+        }
+        dOut.write(ValueTag.XS_INTEGER_TAG);
+        dOut.writeLong(floatp.longValue());
+    }
+
+    @Override
+    public void convertInteger(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_INTEGER_TAG);
+        dOut.write(longp.getByteArray(), longp.getStartOffset(), longp.getLength());
+    }
+
+    @Override
+    public void convertString(UTF8StringPointable stringp, DataOutput dOut) throws SystemException, IOException {
+        ICharacterIterator charIterator = new UTF8StringCharacterIterator(stringp);
+        charIterator.reset();
+        long value = 0;
+        int c = 0;
+        boolean negative = false;
+        while ((c = charIterator.next()) != ICharacterIterator.EOS_CHAR) {
+            if (Character.isDigit(c)) {
+                value = value * 10 + Character.getNumericValue(c);
+            } else if (c == Character.valueOf('-')) {
+                negative = true;
+            } else {
+                throw new SystemException(ErrorCode.FORG0001);
+            }
+        }
+        if (negative) {
+            value *= -1;
+        }
+        System.err.println("   int value = " + value);
+
+        dOut.write(ValueTag.XS_INTEGER_TAG);
+        dOut.writeLong(value);
+    }
+
+    @Override
+    public void convertUntypedAtomic(UTF8StringPointable stringp, DataOutput dOut) throws SystemException, IOException {
+        convertString(stringp, dOut);
+    }
+
+}
\ No newline at end of file

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

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToNotationOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToNotationOperation.java?rev=1368152&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToNotationOperation.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToNotationOperation.java Wed Aug  1 18:15:22 2012
@@ -0,0 +1,25 @@
+package org.apache.vxquery.runtime.functions.cast;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.vxquery.datamodel.values.ValueTag;
+import org.apache.vxquery.exceptions.SystemException;
+
+import edu.uci.ics.hyracks.data.std.primitive.UTF8StringPointable;
+
+public class CastToNotationOperation extends AbstractCastToOperation {
+
+    @Override
+    public void convertNotation(UTF8StringPointable stringp, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_NOTATION_TAG);
+        dOut.write(stringp.getByteArray(), stringp.getStartOffset(), stringp.getLength());
+    }
+
+    @Override
+    public void convertString(UTF8StringPointable stringp, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_NOTATION_TAG);
+        dOut.write(stringp.getByteArray(), stringp.getStartOffset(), stringp.getLength());
+    }
+
+}
\ No newline at end of file

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

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToQNameOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToQNameOperation.java?rev=1368152&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToQNameOperation.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToQNameOperation.java Wed Aug  1 18:15:22 2012
@@ -0,0 +1,55 @@
+package org.apache.vxquery.runtime.functions.cast;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.vxquery.datamodel.accessors.atomic.XSQNamePointable;
+import org.apache.vxquery.datamodel.values.ValueTag;
+import org.apache.vxquery.exceptions.SystemException;
+import org.apache.vxquery.runtime.functions.strings.ICharacterIterator;
+import org.apache.vxquery.runtime.functions.strings.UTF8StringCharacterIterator;
+
+import edu.uci.ics.hyracks.data.std.primitive.UTF8StringPointable;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+
+public class CastToQNameOperation extends AbstractCastToOperation {
+    ArrayBackedValueStorage abvsInner = new ArrayBackedValueStorage();
+    DataOutput dOutInner = abvsInner.getDataOutput();
+
+    @Override
+    public void convertQName(XSQNamePointable qnamep, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_QNAME_TAG);
+        dOut.write(qnamep.getByteArray(), qnamep.getStartOffset(), qnamep.getLength());
+    }
+
+    @Override
+    public void convertString(UTF8StringPointable stringp, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        ICharacterIterator charIterator = new UTF8StringCharacterIterator(stringp);
+        charIterator.reset();
+        int c = 0;
+        int prefixLength = 0;
+        while ((c = charIterator.next()) != ICharacterIterator.EOS_CHAR) {
+            if (c == Character.valueOf(':')) {
+                prefixLength = abvsInner.getLength();
+            } else {
+                dOutInner.writeChar(c);
+            }
+        }
+
+        dOut.write(ValueTag.XS_QNAME_TAG);
+        dOut.write((byte) ((0 >>> 8) & 0xFF));
+        dOut.write((byte) ((0 >>> 0) & 0xFF));
+        // No URI
+        
+        dOut.write((byte) ((prefixLength >>> 8) & 0xFF));
+        dOut.write((byte) ((prefixLength >>> 0) & 0xFF));
+        dOut.write(abvsInner.getByteArray(), abvsInner.getStartOffset(), prefixLength);
+
+        int localNameLength = abvsInner.getLength() - prefixLength;
+        dOut.write((byte) ((localNameLength >>> 8) & 0xFF));
+        dOut.write((byte) ((localNameLength >>> 0) & 0xFF));
+        dOut.write(abvsInner.getByteArray(), abvsInner.getStartOffset() + prefixLength, localNameLength);
+     }
+
+}
\ No newline at end of file

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

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToStringOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToStringOperation.java?rev=1368152&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToStringOperation.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToStringOperation.java Wed Aug  1 18:15:22 2012
@@ -0,0 +1,715 @@
+package org.apache.vxquery.runtime.functions.cast;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.commons.codec.binary.Base64OutputStream;
+import org.apache.vxquery.datamodel.accessors.atomic.XSBinaryPointable;
+import org.apache.vxquery.datamodel.accessors.atomic.XSDatePointable;
+import org.apache.vxquery.datamodel.accessors.atomic.XSDateTimePointable;
+import org.apache.vxquery.datamodel.accessors.atomic.XSDecimalPointable;
+import org.apache.vxquery.datamodel.accessors.atomic.XSDurationPointable;
+import org.apache.vxquery.datamodel.accessors.atomic.XSQNamePointable;
+import org.apache.vxquery.datamodel.accessors.atomic.XSTimePointable;
+import org.apache.vxquery.datamodel.util.DateTime;
+import org.apache.vxquery.datamodel.values.ValueTag;
+import org.apache.vxquery.exceptions.ErrorCode;
+import org.apache.vxquery.exceptions.SystemException;
+
+import edu.uci.ics.hyracks.data.std.primitive.BooleanPointable;
+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.UTF8StringPointable;
+import edu.uci.ics.hyracks.data.std.util.ArrayBackedValueStorage;
+import edu.uci.ics.hyracks.data.std.util.ByteArrayAccessibleOutputStream;
+
+public class CastToStringOperation extends AbstractCastToOperation {
+    private ArrayBackedValueStorage abvsInner = new ArrayBackedValueStorage();
+    private DataOutput dOutInner = abvsInner.getDataOutput();
+    int returnTag = ValueTag.XS_STRING_TAG;
+
+    @Override
+    public void convertAnyURI(UTF8StringPointable stringp, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(returnTag);
+        dOut.write(stringp.getByteArray(), stringp.getStartOffset(), stringp.getLength());
+    }
+
+    @Override
+    public void convertBase64Binary(XSBinaryPointable binaryp, DataOutput dOut) throws SystemException, IOException {
+        ByteArrayAccessibleOutputStream baaos = new ByteArrayAccessibleOutputStream();
+        Base64OutputStream b64os = new Base64OutputStream(baaos, false);
+        b64os.write(binaryp.getByteArray(), binaryp.getStartOffset() + 2, binaryp.getLength() - 2);
+
+        dOut.write(returnTag);
+        dOut.write((byte) ((baaos.size() >>> 8) & 0xFF));
+        dOut.write((byte) ((baaos.size() >>> 0) & 0xFF));
+        dOut.write(baaos.getByteArray());
+    }
+
+    @Override
+    public void convertBoolean(BooleanPointable boolp, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        if (boolp.getBoolean()) {
+            dOutInner.writeChars("true");
+        } else {
+            dOutInner.writeChars("false");
+        }
+        sendStringDataOutput(dOut);
+    }
+
+    @Override
+    public void convertDate(XSDatePointable datep, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        // Year
+        dOutInner.writeChars(String.format("%04d", datep.getYear()));
+        dOutInner.writeChar('-');
+
+        // Month
+        dOutInner.writeChars(String.format("%02d", datep.getMonth()));
+        dOutInner.writeChar('-');
+
+        // Day
+        dOutInner.writeChars(String.format("%02d", datep.getDay()));
+
+        // Timezone
+        if (datep.getTimezoneHour() != DateTime.TIMEZONE_HOUR_NULL
+                && datep.getTimezoneMinute() != DateTime.TIMEZONE_MINUTE_NULL) {
+            if (datep.getTimezoneMinute() >= 0 && datep.getTimezoneMinute() >= 0) {
+                dOutInner.writeChar('+');
+            } else {
+                dOutInner.writeChar('-');
+            }
+            dOutInner.writeChars(String.format("%02d", datep.getTimezoneHour()));
+            dOutInner.writeChar(':');
+            dOutInner.writeChars(String.format("%02d", datep.getTimezoneMinute()));
+        }
+
+        sendStringDataOutput(dOut);
+    }
+
+    @Override
+    public void convertDatetime(XSDateTimePointable datetimep, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        // Year
+        writeNumberWithPadding(datetimep.getYear(), 4, dOutInner);
+        dOutInner.writeChar('-');
+
+        // Month
+        writeNumberWithPadding(datetimep.getMonth(), 2, dOutInner);
+        dOutInner.writeChar('-');
+
+        // Day
+        writeNumberWithPadding(datetimep.getDay(), 2, dOutInner);
+        dOutInner.writeChar('T');
+
+        // Hour
+        writeNumberWithPadding(datetimep.getHour(), 2, dOutInner);
+        dOutInner.writeChar(':');
+
+        // Minute
+        writeNumberWithPadding(datetimep.getMinute(), 2, dOutInner);
+        dOutInner.writeChar(':');
+
+        // Milliseconds
+        writeNumberWithPadding(datetimep.getMilliSecond(), 2, dOutInner);
+        if (datetimep.getMilliSecond() % DateTime.CHRONON_OF_SECOND != 0) {
+            dOutInner.writeChar('.');
+            writeNumberWithPadding(datetimep.getMilliSecond() % DateTime.CHRONON_OF_SECOND, 3, dOutInner);
+        }
+
+        // Timezone
+        if (datetimep.getTimezoneHour() != DateTime.TIMEZONE_HOUR_NULL
+                && datetimep.getTimezoneMinute() != DateTime.TIMEZONE_MINUTE_NULL) {
+            if (datetimep.getTimezoneMinute() >= 0 && datetimep.getTimezoneMinute() >= 0) {
+                dOutInner.writeChar('+');
+            } else {
+                dOutInner.writeChar('-');
+            }
+            writeNumberWithPadding(datetimep.getTimezoneHour(), 2, dOutInner);
+            dOutInner.writeChar(':');
+            writeNumberWithPadding(datetimep.getTimezoneMinute(), 2, dOutInner);
+        }
+
+        sendStringDataOutput(dOut);
+    }
+
+    @Override
+    public void convertDecimal(XSDecimalPointable decp, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        byte decimalPlace = decp.getDecimalPlace();
+        long value = decp.getDecimalValue();
+        if (value < 0) {
+            // Negative result, but the rest of the calculations can be based on a positive value.
+            dOutInner.writeChar('-');
+            value *= -1;
+        }
+        int nDigits = (int) Math.log10(value) + 1;
+        long pow10 = (long) Math.pow(10, nDigits - 1);
+        int start = Math.max(decimalPlace, nDigits - 1);
+        int end = Math.min(0, decimalPlace);
+
+        for (int i = start; i >= end; --i) {
+            if (i >= nDigits || i < 0) {
+                dOutInner.writeChar('0');
+            } else {
+                dOutInner.writeChar((char) ('0' + (value / pow10)));
+                value %= pow10;
+                pow10 /= 10;
+            }
+            if (i == decimalPlace) {
+                dOutInner.writeChar('.');
+            }
+        }
+
+        sendStringDataOutput(dOut);
+    }
+
+    @Override
+    public void convertDouble(DoublePointable doublep, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        double value = doublep.getDouble();
+
+        if (value < 0) {
+            // Negative result, but the rest of the calculations can be based on a positive value.
+            dOutInner.writeChar('-');
+            value *= -1;
+        }
+        byte decimalPlace = 0;
+        // Move the decimal
+        while (value % 1 != 0) {
+            --decimalPlace;
+            value *= 10;
+        }
+        // Remove extra zeros
+        while (value != 0 && value % 10 == 0) {
+            value /= 10;
+            ++decimalPlace;
+        }
+        // Print out the value.
+        int nDigits = (int) Math.log10(value) + 1;
+        long pow10 = (long) Math.pow(10, nDigits - 1);
+        if (nDigits < 0) {
+            dOutInner.writeChars("0.0");
+        } else {
+            for (int i = nDigits - 1; i >= 0; --i) {
+                dOutInner.writeChar((char) ('0' + (value / pow10)));
+                value %= pow10;
+                pow10 /= 10;
+                if (i == nDigits - 1) {
+                    dOutInner.writeChar('.');
+                } else {
+                    ++decimalPlace;
+                }
+            }
+        }
+        dOutInner.writeChar('E');
+        writeNumberWithPadding(decimalPlace, 1, dOutInner);
+
+        sendStringDataOutput(dOut);
+    }
+
+    @Override
+    public void convertDTDuration(IntegerPointable intp, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        int dayTime = intp.getInteger();
+
+        if (dayTime < 0) {
+            dOutInner.writeChar('-');
+            dayTime *= -1;
+        }
+        dOutInner.writeChar('P');
+
+        // Day
+        if (dayTime > DateTime.CHRONON_OF_DAY) {
+            writeNumberWithPadding(dayTime / DateTime.CHRONON_OF_DAY, 1, dOutInner);
+            dOutInner.writeChar('D');
+            dayTime %= DateTime.CHRONON_OF_DAY;
+        }
+
+        if (dayTime > 0) {
+            dOutInner.writeChar('T');
+        }
+
+        // Hour
+        if (dayTime > DateTime.CHRONON_OF_HOUR) {
+            writeNumberWithPadding(dayTime / DateTime.CHRONON_OF_HOUR, 1, dOutInner);
+            dOutInner.writeChar('H');
+            dayTime %= DateTime.CHRONON_OF_HOUR;
+        }
+
+        // Minute
+        if (dayTime > DateTime.CHRONON_OF_MINUTE) {
+            writeNumberWithPadding(dayTime / DateTime.CHRONON_OF_MINUTE, 1, dOutInner);
+            dOutInner.writeChar('M');
+            dayTime %= DateTime.CHRONON_OF_MINUTE;
+        }
+
+        // Milliseconds
+        if (dayTime > 0) {
+            writeNumberWithPadding(dayTime / DateTime.CHRONON_OF_SECOND, 1, dOutInner);
+            if (dayTime % DateTime.CHRONON_OF_SECOND != 0) {
+                dOutInner.writeChar('.');
+                writeNumberWithPadding(dayTime % DateTime.CHRONON_OF_SECOND, 3, dOutInner);
+            }
+            dOutInner.writeChar('S');
+        }
+
+        sendStringDataOutput(dOut);
+    }
+
+    @Override
+    public void convertDuration(XSDurationPointable durationp, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        int dayTime = durationp.getDayTime();
+
+        if (durationp.getYearMonth() < 0 || dayTime < 0) {
+            dOutInner.writeChar('-');
+        }
+        dOutInner.writeChar('P');
+
+        // Year
+        if (durationp.getYearMonth() > 12) {
+            dOutInner.writeChars(String.format("%01d", durationp.getYearMonth() / 12));
+            dOutInner.writeChar('Y');
+        }
+
+        // Month
+        if (durationp.getYearMonth() % 12 > 0) {
+            dOutInner.writeChars(String.format("%01d", durationp.getYearMonth() % 12));
+            dOutInner.writeChar('M');
+        }
+
+        // Day
+        if (dayTime > DateTime.CHRONON_OF_DAY) {
+            dOutInner.writeChars(String.format("%01d", dayTime / DateTime.CHRONON_OF_DAY));
+            dOutInner.writeChar('D');
+            dayTime %= DateTime.CHRONON_OF_DAY;
+        }
+
+        if (dayTime > 0) {
+            dOutInner.writeChar('T');
+        }
+
+        // Hour
+        if (dayTime > DateTime.CHRONON_OF_HOUR) {
+            dOutInner.writeChars(String.format("%01d", dayTime / DateTime.CHRONON_OF_HOUR));
+            dOutInner.writeChar('H');
+            dayTime %= DateTime.CHRONON_OF_HOUR;
+        }
+
+        // Minute
+        if (dayTime > DateTime.CHRONON_OF_MINUTE) {
+            writeNumberWithPadding(dayTime / DateTime.CHRONON_OF_MINUTE, 1, dOutInner);
+            dOutInner.writeChar('M');
+            dayTime %= DateTime.CHRONON_OF_MINUTE;
+        }
+
+        // Milliseconds
+        if (dayTime > 0) {
+            dOutInner.writeChars(String.format("%01d", dayTime / DateTime.CHRONON_OF_SECOND));
+            if (dayTime % DateTime.CHRONON_OF_SECOND != 0) {
+                dOutInner.writeChar('.');
+                dOutInner.writeChars(String.format("%03d", dayTime % DateTime.CHRONON_OF_SECOND));
+            }
+            dOutInner.writeChar('S');
+        }
+
+        sendStringDataOutput(dOut);
+    }
+
+    @Override
+    public void convertFloat(FloatPointable floatp, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        float value = floatp.getFloat();
+
+        if (value < 0) {
+            // Negative result, but the rest of the calculations can be based on a positive value.
+            dOutInner.writeChar('-');
+            value *= -1;
+        }
+        byte decimalPlace = 0;
+        // Move the decimal
+        while (value % 1 != 0) {
+            --decimalPlace;
+            value *= 10;
+        }
+        // Remove extra zeros
+        while (value != 0 && value % 10 == 0) {
+            value /= 10;
+            ++decimalPlace;
+        }
+        // Print out the value.
+        int nDigits = (int) Math.log10(value) + 1;
+        long pow10 = (long) Math.pow(10, nDigits - 1);
+        if (nDigits < 0) {
+            dOutInner.writeChars("0.0");
+        } else {
+            for (int i = nDigits - 1; i >= 0; --i) {
+                dOutInner.writeChar((char) ('0' + (value / pow10)));
+                value %= pow10;
+                pow10 /= 10;
+                if (i == nDigits - 1) {
+                    dOutInner.writeChar('.');
+                } else {
+                    ++decimalPlace;
+                }
+            }
+        }
+        dOutInner.writeChar('E');
+        writeNumberWithPadding(decimalPlace, 1, dOutInner);
+
+        sendStringDataOutput(dOut);
+    }
+
+    @Override
+    public void convertGDay(XSDatePointable datep, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+
+        dOutInner.writeChar('-');
+        dOutInner.writeChar('-');
+        dOutInner.writeChar('-');
+
+        // Day
+        dOutInner.writeChars(String.format("%02d", datep.getDay()));
+
+        // Timezone
+        if (datep.getTimezoneHour() != DateTime.TIMEZONE_HOUR_NULL
+                && datep.getTimezoneMinute() != DateTime.TIMEZONE_MINUTE_NULL) {
+            if (datep.getTimezoneMinute() >= 0 && datep.getTimezoneMinute() >= 0) {
+                dOutInner.writeChar('+');
+            } else {
+                dOutInner.writeChar('-');
+            }
+            dOutInner.writeChars(String.format("%02d", datep.getTimezoneHour()));
+            dOutInner.writeChar(':');
+            dOutInner.writeChars(String.format("%02d", datep.getTimezoneMinute()));
+        }
+
+        sendStringDataOutput(dOut);
+    }
+
+    @Override
+    public void convertGMonth(XSDatePointable datep, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+
+        dOutInner.writeChar('-');
+        dOutInner.writeChar('-');
+
+        // Month
+        dOutInner.writeChars(String.format("%02d", datep.getMonth()));
+
+        // Timezone
+        if (datep.getTimezoneHour() != DateTime.TIMEZONE_HOUR_NULL
+                && datep.getTimezoneMinute() != DateTime.TIMEZONE_MINUTE_NULL) {
+            if (datep.getTimezoneMinute() >= 0 && datep.getTimezoneMinute() >= 0) {
+                dOutInner.writeChar('+');
+            } else {
+                dOutInner.writeChar('-');
+            }
+            dOutInner.writeChars(String.format("%02d", datep.getTimezoneHour()));
+            dOutInner.writeChar(':');
+            dOutInner.writeChars(String.format("%02d", datep.getTimezoneMinute()));
+        }
+
+        sendStringDataOutput(dOut);
+    }
+
+    @Override
+    public void convertGMonthDay(XSDatePointable datep, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        // Year
+        dOutInner.writeChar('-');
+
+        // Month
+        dOutInner.writeChars(String.format("%02d", datep.getMonth()));
+        dOutInner.writeChar('-');
+
+        // Day
+        dOutInner.writeChars(String.format("%02d", datep.getDay()));
+
+        // Timezone
+        if (datep.getTimezoneHour() != DateTime.TIMEZONE_HOUR_NULL
+                && datep.getTimezoneMinute() != DateTime.TIMEZONE_MINUTE_NULL) {
+            if (datep.getTimezoneMinute() >= 0 && datep.getTimezoneMinute() >= 0) {
+                dOutInner.writeChar('+');
+            } else {
+                dOutInner.writeChar('-');
+            }
+            dOutInner.writeChars(String.format("%02d", datep.getTimezoneHour()));
+            dOutInner.writeChar(':');
+            dOutInner.writeChars(String.format("%02d", datep.getTimezoneMinute()));
+        }
+
+        sendStringDataOutput(dOut);
+    }
+
+    @Override
+    public void convertGYear(XSDatePointable datep, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        // Year
+        dOutInner.writeChars(String.format("%04d", datep.getYear()));
+
+        // Timezone
+        if (datep.getTimezoneHour() != DateTime.TIMEZONE_HOUR_NULL
+                && datep.getTimezoneMinute() != DateTime.TIMEZONE_MINUTE_NULL) {
+            if (datep.getTimezoneMinute() >= 0 && datep.getTimezoneMinute() >= 0) {
+                dOutInner.writeChar('+');
+            } else {
+                dOutInner.writeChar('-');
+            }
+            dOutInner.writeChars(String.format("%02d", datep.getTimezoneHour()));
+            dOutInner.writeChar(':');
+            dOutInner.writeChars(String.format("%02d", datep.getTimezoneMinute()));
+        }
+
+        sendStringDataOutput(dOut);
+    }
+
+    @Override
+    public void convertGYearMonth(XSDatePointable datep, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        // Year
+        dOutInner.writeChars(String.format("%04d", datep.getYear()));
+        dOutInner.writeChar('-');
+
+        // Month
+        dOutInner.writeChars(String.format("%02d", datep.getMonth()));
+
+        // Timezone
+        if (datep.getTimezoneHour() != DateTime.TIMEZONE_HOUR_NULL
+                && datep.getTimezoneMinute() != DateTime.TIMEZONE_MINUTE_NULL) {
+            if (datep.getTimezoneMinute() >= 0 && datep.getTimezoneMinute() >= 0) {
+                dOutInner.writeChar('+');
+            } else {
+                dOutInner.writeChar('-');
+            }
+            dOutInner.writeChars(String.format("%02d", datep.getTimezoneHour()));
+            dOutInner.writeChar(':');
+            dOutInner.writeChars(String.format("%02d", datep.getTimezoneMinute()));
+        }
+
+        sendStringDataOutput(dOut);
+    }
+
+    @Override
+    public void convertHexBinary(XSBinaryPointable binaryp, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        //        int index = 0;
+        //        while (index < binaryp.getBinaryLength()) {
+        //            byte characterTuple = binaryp.getByteArray()[0];
+        //            writeHexCharacter(characterTuple & 0x0f, dOutInner);
+        //            writeHexCharacter((characterTuple & 0xf0) << 4, dOutInner);
+        //        }
+        sendStringDataOutput(dOut);
+    }
+
+    @Override
+    public void convertInteger(LongPointable longp, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        long value = longp.getLong();
+        if (value < 0) {
+            // Negative result, but the rest of the calculations can be based on a positive value.
+            dOutInner.writeChar('-');
+            value *= -1;
+        }
+        int nDigits = (int) Math.log10(value) + 1;
+        long pow10 = (long) Math.pow(10, nDigits - 1);
+        for (int i = nDigits - 1; i >= 0; --i) {
+            dOutInner.writeChar((char) ('0' + (value / pow10)));
+            value %= pow10;
+            pow10 /= 10;
+        }
+        sendStringDataOutput(dOut);
+    }
+
+    @Override
+    public void convertNotation(UTF8StringPointable stringp, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(returnTag);
+        dOut.write(stringp.getByteArray(), stringp.getStartOffset(), stringp.getLength());
+    }
+
+    @Override
+    public void convertQName(XSQNamePointable qnamep, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        dOutInner.write(qnamep.getByteArray(), qnamep.getStartOffset() + qnamep.getUriLength() + 4,
+                qnamep.getPrefixLength());
+        dOutInner.writeChar(':');
+        dOutInner.write(qnamep.getByteArray(),
+                qnamep.getStartOffset() + qnamep.getUriLength() + qnamep.getPrefixLength() + 6,
+                qnamep.getLocalNameLength());
+
+        sendStringDataOutput(dOut);
+    }
+
+    @Override
+    public void convertString(UTF8StringPointable stringp, DataOutput dOut) throws SystemException, IOException {
+        //        System.err.println(" convertString in CastToString length = " + stringp.getUTFLength());
+        //        ICharacterIterator charIterator = new UTF8StringCharacterIterator(stringp);
+        //        charIterator.reset();
+        //        for (int c = charIterator.next(); c != ICharacterIterator.EOS_CHAR; c = charIterator.next()) {
+        //            System.err.println("   parse value '" + c + "' as '" + Character.valueOf((char) c) + "'");
+        //        }
+        //        System.err.println(" convertString in CastToString AFTER");
+
+        dOut.write(returnTag);
+        dOut.write(stringp.getByteArray(), stringp.getStartOffset(), stringp.getLength());
+    }
+
+    @Override
+    public void convertTime(XSTimePointable timep, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        // Hours
+        dOutInner.writeChars(String.format("%02d", timep.getHour()));
+        dOutInner.writeChar(':');
+
+        // Minute
+        dOutInner.writeChars(String.format("%02d", timep.getMinute()));
+        dOutInner.writeChar(':');
+
+        // Milliseconds
+        dOutInner.writeChars(String.format("%02d", timep.getMilliSecond() / DateTime.CHRONON_OF_SECOND));
+        if (timep.getMilliSecond() % DateTime.CHRONON_OF_SECOND != 0) {
+            dOutInner.writeChar('.');
+            dOutInner.writeChars(String.format("%03d", timep.getMilliSecond() % DateTime.CHRONON_OF_SECOND));
+        }
+
+        // Timezone
+        if (timep.getTimezoneHour() != DateTime.TIMEZONE_HOUR_NULL
+                && timep.getTimezoneMinute() != DateTime.TIMEZONE_MINUTE_NULL) {
+            if (timep.getTimezoneMinute() >= 0 && timep.getTimezoneMinute() >= 0) {
+                dOutInner.writeChar('+');
+            } else {
+                dOutInner.writeChar('-');
+            }
+            dOutInner.writeChars(String.format("%02d", timep.getTimezoneHour()));
+            dOutInner.writeChar(':');
+            dOutInner.writeChars(String.format("%02d", timep.getTimezoneMinute()));
+        }
+
+        sendStringDataOutput(dOut);
+    }
+
+    @Override
+    public void convertUntypedAtomic(UTF8StringPointable stringp, DataOutput dOut) throws SystemException, IOException {
+        convertString(stringp, dOut);
+    }
+
+    @Override
+    public void convertYMDuration(IntegerPointable intp, DataOutput dOut) throws SystemException, IOException {
+        abvsInner.reset();
+        int yearMonth = intp.getInteger();
+
+        if (yearMonth < 0) {
+            dOutInner.writeChar('-');
+            yearMonth *= -1;
+        }
+        dOutInner.writeChar('P');
+
+        // Year
+        if (yearMonth > 12) {
+            writeNumberWithPadding(yearMonth / 12, 1, dOutInner);
+            dOutInner.writeChar('Y');
+        }
+
+        // Month
+        if (yearMonth % 12 > 0) {
+            writeNumberWithPadding(yearMonth % 12, 1, dOutInner);
+            dOutInner.writeChar('M');
+        }
+
+        sendStringDataOutput(dOut);
+    }
+
+    private void sendStringDataOutput(DataOutput dOut) throws SystemException, IOException {
+        dOut.write(returnTag);
+        dOut.write((byte) ((abvsInner.getLength() >>> 8) & 0xFF));
+        dOut.write((byte) ((abvsInner.getLength() >>> 0) & 0xFF));
+        dOut.write(abvsInner.getByteArray(), abvsInner.getStartOffset(), abvsInner.getLength());
+    }
+
+    private void writeHexCharacter(int hexCharacter, DataOutput dOut) throws IOException {
+        switch (hexCharacter) {
+            case 0:
+                dOut.writeChar('0');
+                break;
+            case 1:
+                dOut.writeChar('1');
+                break;
+            case 2:
+                dOut.writeChar('2');
+                break;
+            case 3:
+                dOut.writeChar('3');
+                break;
+            case 4:
+                dOut.writeChar('4');
+                break;
+            case 5:
+                dOut.writeChar('5');
+                break;
+            case 6:
+                dOut.writeChar('6');
+                break;
+            case 7:
+                dOut.writeChar('7');
+                break;
+            case 8:
+                dOut.writeChar('8');
+                break;
+            case 9:
+                dOut.writeChar('9');
+                break;
+            case 10:
+                dOut.writeChar('a');
+                break;
+            case 11:
+                dOut.writeChar('b');
+                break;
+            case 12:
+                dOut.writeChar('c');
+                break;
+            case 13:
+                dOut.writeChar('d');
+                break;
+            case 14:
+                dOut.writeChar('e');
+                break;
+            case 15:
+                dOut.writeChar('f');
+                break;
+            default:
+                break;
+        }
+    }
+
+    /**
+     * Writes a number to the DataOutput with zeros as place holders if the number is too small to fill the padding.
+     * 
+     * @param value
+     * @param padding
+     * @param dOut
+     * @throws IOException
+     */
+    private void writeNumberWithPadding(long value, int padding, DataOutput dOut) throws IOException {
+        if (value < 0) {
+            dOut.writeChar('-');
+        }
+        value = Math.abs(value);
+        int nDigits = (value == 0 ? 0 : (int) Math.log10(value) + 1);
+
+        while (padding > nDigits) {
+            dOut.writeChar('0');
+            --padding;
+        }
+        int number;
+        while (nDigits > 0) {
+            number = (int) (value / Math.pow(10, nDigits - 1));
+            dOut.writeChar(Character.forDigit(number, 10));
+            value = (int) (value - number * Math.pow(10, nDigits - 1));
+            --nDigits;
+        }
+    }
+
+}
\ No newline at end of file

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

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToTimeOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToTimeOperation.java?rev=1368152&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToTimeOperation.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToTimeOperation.java Wed Aug  1 18:15:22 2012
@@ -0,0 +1,96 @@
+package org.apache.vxquery.runtime.functions.cast;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.vxquery.datamodel.accessors.atomic.XSDateTimePointable;
+import org.apache.vxquery.datamodel.accessors.atomic.XSTimePointable;
+import org.apache.vxquery.datamodel.util.DateTime;
+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.strings.ICharacterIterator;
+import org.apache.vxquery.runtime.functions.strings.UTF8StringCharacterIterator;
+
+import edu.uci.ics.hyracks.data.std.primitive.UTF8StringPointable;
+
+public class CastToTimeOperation extends AbstractCastToOperation {
+
+    @Override
+    public void convertDatetime(XSDateTimePointable datetimep, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_TIME_TAG);
+        dOut.write((byte) datetimep.getHour());
+        dOut.write((byte) datetimep.getMinute());
+        dOut.writeLong(datetimep.getMilliSecond());
+        dOut.write((byte) datetimep.getTimezoneHour());
+        dOut.write((byte) datetimep.getTimezoneMinute());
+    }
+
+    @Override
+    public void convertString(UTF8StringPointable stringp, DataOutput dOut) throws SystemException, IOException {
+        ICharacterIterator charIterator = new UTF8StringCharacterIterator(stringp);
+        charIterator.reset();
+        int c;
+        int index = 0;
+        long[] date = new long[5];
+        boolean positiveTimezone = false;
+        boolean pastDecimal = false;
+        byte decimalPlace = 3;
+
+        // Set defaults
+        date[3] = DateTime.TIMEZONE_HOUR_NULL;
+        date[4] = DateTime.TIMEZONE_MINUTE_NULL;
+
+        while ((c = charIterator.next()) != ICharacterIterator.EOS_CHAR) {
+            if (Character.isDigit(c)) {
+                date[index] = date[index] * 10 + Character.getNumericValue(c);
+                if (pastDecimal) {
+                    --decimalPlace;
+                }
+            } else if (c == Character.valueOf('-') || c == Character.valueOf(':')) {
+                ++index;
+                pastDecimal = false;
+            } else if (c == Character.valueOf('+')) {
+                pastDecimal = false;
+                positiveTimezone = true;
+                ++index;
+            } else if (c == Character.valueOf('.')) {
+                pastDecimal = true;
+            } else {
+                // Invalid date format.
+                throw new SystemException(ErrorCode.FORG0001);
+            }
+        }
+        // Final touches on seconds and timezone.
+        date[2] = (long) (date[2] * Math.pow(10, decimalPlace));
+        if (!positiveTimezone && date[3] != DateTime.TIMEZONE_HOUR_NULL) {
+            date[3] *= -1;
+        }
+        if (!positiveTimezone && date[4] != DateTime.TIMEZONE_MINUTE_NULL) {
+            date[4] *= -1;
+        }
+        // Double check for a valid time
+        if (!DateTime.valid(1972, 12, 31, date[0], date[1], date[2], date[3], date[4])) {
+            throw new SystemException(ErrorCode.FODT0001);
+        }
+
+        dOut.write(ValueTag.XS_TIME_TAG);
+        dOut.write((byte) date[0]);
+        dOut.write((byte) date[1]);
+        dOut.writeInt((int) date[2]);
+        dOut.write((byte) date[3]);
+        dOut.write((byte) date[4]);
+    }
+
+    @Override
+    public void convertTime(XSTimePointable timep, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_TIME_TAG);
+        dOut.write(timep.getByteArray(), timep.getStartOffset(), timep.getLength());
+    }
+
+    @Override
+    public void convertUntypedAtomic(UTF8StringPointable stringp, DataOutput dOut) throws SystemException, IOException {
+        convertString(stringp, dOut);
+    }
+
+}
\ No newline at end of file

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

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToUntypedAtomicOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToUntypedAtomicOperation.java?rev=1368152&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToUntypedAtomicOperation.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToUntypedAtomicOperation.java Wed Aug  1 18:15:22 2012
@@ -0,0 +1,7 @@
+package org.apache.vxquery.runtime.functions.cast;
+
+import org.apache.vxquery.datamodel.values.ValueTag;
+
+public class CastToUntypedAtomicOperation extends CastToStringOperation {
+    int returnTag = ValueTag.XS_UNTYPED_ATOMIC_TAG;
+}
\ No newline at end of file

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

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToYMDurationOperation.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToYMDurationOperation.java?rev=1368152&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToYMDurationOperation.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/cast/CastToYMDurationOperation.java Wed Aug  1 18:15:22 2012
@@ -0,0 +1,81 @@
+package org.apache.vxquery.runtime.functions.cast;
+
+import java.io.DataOutput;
+import java.io.IOException;
+
+import org.apache.vxquery.datamodel.accessors.atomic.XSDurationPointable;
+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.strings.ICharacterIterator;
+import org.apache.vxquery.runtime.functions.strings.UTF8StringCharacterIterator;
+
+import edu.uci.ics.hyracks.data.std.primitive.IntegerPointable;
+import edu.uci.ics.hyracks.data.std.primitive.UTF8StringPointable;
+
+public class CastToYMDurationOperation extends AbstractCastToOperation {
+
+    @Override
+    public void convertDTDuration(IntegerPointable intp, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_YEAR_MONTH_DURATION_TAG);
+        dOut.writeInt(0);
+    }
+
+    @Override
+    public void convertDuration(XSDurationPointable durationp, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_YEAR_MONTH_DURATION_TAG);
+        dOut.writeInt(durationp.getYearMonth());
+    }
+
+    @Override
+    public void convertString(UTF8StringPointable stringp, DataOutput dOut) throws SystemException, IOException {
+        ICharacterIterator charIterator = new UTF8StringCharacterIterator(stringp);
+        charIterator.reset();
+        
+        int value = 0;
+        long year = 0, month = 0;
+        long negativeResult = 1;
+
+        // First character 
+        int c = charIterator.next();
+        if (c == Character.valueOf('-')) {
+            negativeResult = -1;
+            c = charIterator.next();
+        }
+        if (c != Character.valueOf('P')) {
+            // Invalid duration format.
+            throw new SystemException(ErrorCode.FORG0001);
+        }
+
+        while ((c = charIterator.next()) != ICharacterIterator.EOS_CHAR) {
+            if (Character.isDigit(c)) {
+                value = value * 10 + Character.getNumericValue(c);
+            } else if (c == Character.valueOf('Y')) {
+                year = value;
+                value = 0;
+            } else if (c == Character.valueOf('M')) {
+                month = value;
+                value = 0;
+            } else {
+                // Invalid duration format.
+                throw new SystemException(ErrorCode.FORG0001);
+            }
+        }
+
+        long yearMonth = year * 12 + month;
+        dOut.write(ValueTag.XS_YEAR_MONTH_DURATION_TAG);
+        dOut.writeInt((int) (negativeResult * yearMonth));
+    }
+
+    @Override
+    public void convertUntypedAtomic(UTF8StringPointable stringp, DataOutput dOut) throws SystemException, IOException {
+        convertString(stringp, dOut);
+    }
+
+    @Override
+    public void convertYMDuration(IntegerPointable intp, DataOutput dOut) throws SystemException, IOException {
+        dOut.write(ValueTag.XS_YEAR_MONTH_DURATION_TAG);
+        dOut.write(intp.getByteArray(), intp.getStartOffset(), intp.getLength());
+    }
+
+}
\ No newline at end of file

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