http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnLowerCaseEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnLowerCaseEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnLowerCaseEvaluatorFactory.java index cf431cd..7a0914f 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnLowerCaseEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnLowerCaseEvaluatorFactory.java @@ -16,6 +16,11 @@ */ package org.apache.vxquery.runtime.functions.strings; +import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; +import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; +import org.apache.hyracks.api.context.IHyracksTaskContext; +import org.apache.hyracks.api.exceptions.HyracksDataException; +import org.apache.hyracks.data.std.primitive.UTF8StringPointable; import org.apache.vxquery.datamodel.accessors.SequencePointable; import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; import org.apache.vxquery.datamodel.values.ValueTag; @@ -24,12 +29,6 @@ import org.apache.vxquery.exceptions.ErrorCode; import org.apache.vxquery.exceptions.SystemException; import org.apache.vxquery.runtime.functions.util.FunctionHelper; -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; -import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; -import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; -import org.apache.hyracks.api.context.IHyracksTaskContext; -import org.apache.hyracks.data.std.primitive.UTF8StringPointable; - public class FnLowerCaseEvaluatorFactory extends AbstractCharacterIteratorCopyingEvaluatorFactory { private static final long serialVersionUID = 1L; @@ -39,7 +38,7 @@ public class FnLowerCaseEvaluatorFactory extends AbstractCharacterIteratorCopyin @Override protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args) - throws AlgebricksException { + throws HyracksDataException { final UTF8StringPointable stringp = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable(); final ICharacterIterator charIterator = new LowerCaseCharacterIterator(new UTF8StringCharacterIterator(stringp)); final SequencePointable seqp = (SequencePointable) SequencePointable.FACTORY.createPointable();
http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStartsWithEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStartsWithEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStartsWithEvaluatorFactory.java index 7d0cb7a..db9404a 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStartsWithEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStartsWithEvaluatorFactory.java @@ -16,6 +16,12 @@ */ package org.apache.vxquery.runtime.functions.strings; +import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; +import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; +import org.apache.hyracks.api.context.IHyracksTaskContext; +import org.apache.hyracks.api.exceptions.HyracksDataException; +import org.apache.hyracks.data.std.api.IPointable; +import org.apache.hyracks.data.std.primitive.UTF8StringPointable; import org.apache.vxquery.datamodel.accessors.SequencePointable; import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; import org.apache.vxquery.datamodel.values.ValueTag; @@ -26,13 +32,6 @@ import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScal import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory; import org.apache.vxquery.runtime.functions.util.FunctionHelper; -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; -import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; -import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; -import org.apache.hyracks.api.context.IHyracksTaskContext; -import org.apache.hyracks.data.std.api.IPointable; -import org.apache.hyracks.data.std.primitive.UTF8StringPointable; - public class FnStartsWithEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory { private static final long serialVersionUID = 1L; @@ -42,7 +41,7 @@ public class FnStartsWithEvaluatorFactory extends AbstractTaggedValueArgumentSca @Override protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args) - throws AlgebricksException { + throws HyracksDataException { final UTF8StringPointable stringp1 = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable(); final UTF8StringPointable stringp2 = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable(); final UTF8StringPointable stringp3 = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable(); @@ -105,7 +104,7 @@ public class FnStartsWithEvaluatorFactory extends AbstractTaggedValueArgumentSca // TODO use the third value as collation // Only need to run comparisons if they both have a non empty string. - if (stringp1.getLength() > 2 && stringp2.getLength() > 2) { + if (stringp1.getUTF8Length() > 0 && stringp2.getUTF8Length() > 0) { int c1; int c2; while (true) { @@ -121,7 +120,7 @@ public class FnStartsWithEvaluatorFactory extends AbstractTaggedValueArgumentSca break; } } - } else if (stringp2.getLength() == 2) { + } else if (stringp2.getUTF8Length() == 0) { booleanResult[1] = 1; } http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStringJoinEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStringJoinEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStringJoinEvaluatorFactory.java index 576b409..e2dbbee 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStringJoinEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStringJoinEvaluatorFactory.java @@ -19,8 +19,17 @@ package org.apache.vxquery.runtime.functions.strings; import java.io.DataOutput; import java.io.IOException; +import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; +import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; +import org.apache.hyracks.api.context.IHyracksTaskContext; +import org.apache.hyracks.api.exceptions.HyracksDataException; +import org.apache.hyracks.data.std.api.IPointable; +import org.apache.hyracks.data.std.primitive.UTF8StringPointable; +import org.apache.hyracks.data.std.util.ArrayBackedValueStorage; +import org.apache.hyracks.data.std.util.GrowableArray; import org.apache.vxquery.datamodel.accessors.SequencePointable; import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; +import org.apache.vxquery.datamodel.builders.atomic.VXQueryUTF8StringBuilder; import org.apache.vxquery.datamodel.values.ValueTag; import org.apache.vxquery.exceptions.ErrorCode; import org.apache.vxquery.exceptions.SystemException; @@ -28,16 +37,9 @@ import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScal import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory; import org.apache.vxquery.runtime.functions.util.FunctionHelper; -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; -import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; -import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; -import org.apache.hyracks.api.context.IHyracksTaskContext; -import org.apache.hyracks.data.std.api.IPointable; -import org.apache.hyracks.data.std.primitive.UTF8StringPointable; -import org.apache.hyracks.data.std.util.ArrayBackedValueStorage; - public class FnStringJoinEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory { private static final long serialVersionUID = 1L; + private static final int STRING_EXPECTED_LENGTH = 300; public FnStringJoinEvaluatorFactory(IScalarEvaluatorFactory[] args) { super(args); @@ -45,12 +47,14 @@ public class FnStringJoinEvaluatorFactory extends AbstractTaggedValueArgumentSca @Override protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args) - throws AlgebricksException { + throws HyracksDataException { final TaggedValuePointable tvp = new TaggedValuePointable(); final UTF8StringPointable stringp1 = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable(); final UTF8StringPointable stringp2 = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable(); final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage(); final SequencePointable seq = (SequencePointable) SequencePointable.FACTORY.createPointable(); + final GrowableArray ga = new GrowableArray(); + final VXQueryUTF8StringBuilder sb = new VXQueryUTF8StringBuilder(); return new AbstractTaggedValueArgumentScalarEvaluator(args) { @Override @@ -90,16 +94,15 @@ public class FnStringJoinEvaluatorFactory extends AbstractTaggedValueArgumentSca out.write(ValueTag.XS_STRING_TAG); // Default values for the length and update later - out.write(0); - out.write(0); + ga.reset(); + sb.reset(ga, STRING_EXPECTED_LENGTH); int seqLen = seq.getEntryCount(); if (seqLen != 0) { for (int j = 0; j < seqLen; ++j) { // Add separator if more than one value. if (j > 0) { - out.write(stringp2.getByteArray(), stringp2.getStartOffset() + 2, - stringp2.getUTFLength()); + sb.appendUtf8StringPointable(stringp2); } // Get string from sequence. seq.getEntry(j, tvp); @@ -107,13 +110,11 @@ public class FnStringJoinEvaluatorFactory extends AbstractTaggedValueArgumentSca throw new SystemException(ErrorCode.FORG0006); } tvp.getValue(stringp1); - out.write(stringp1.getByteArray(), stringp1.getStartOffset() + 2, stringp1.getUTFLength()); + sb.appendUtf8StringPointable(stringp1); } - - // Update the full length string in the byte array. - abvs.getByteArray()[1] = (byte) (((abvs.getLength() - 3) >>> 8) & 0xFF); - abvs.getByteArray()[2] = (byte) (((abvs.getLength() - 3) >>> 0) & 0xFF); } + sb.finish(); + out.write(ga.getByteArray(), 0, ga.getLength()); result.set(abvs.getByteArray(), abvs.getStartOffset(), abvs.getLength()); } catch (IOException e) { http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStringLengthEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStringLengthEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStringLengthEvaluatorFactory.java index 298b45c..363a73d 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStringLengthEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStringLengthEvaluatorFactory.java @@ -18,6 +18,13 @@ package org.apache.vxquery.runtime.functions.strings; import java.io.DataOutput; +import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; +import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; +import org.apache.hyracks.api.context.IHyracksTaskContext; +import org.apache.hyracks.api.exceptions.HyracksDataException; +import org.apache.hyracks.data.std.api.IPointable; +import org.apache.hyracks.data.std.primitive.UTF8StringPointable; +import org.apache.hyracks.data.std.util.ArrayBackedValueStorage; import org.apache.vxquery.datamodel.accessors.SequencePointable; import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; import org.apache.vxquery.datamodel.values.ValueTag; @@ -28,14 +35,6 @@ import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScal import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory; import org.apache.vxquery.runtime.functions.util.FunctionHelper; -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; -import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; -import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; -import org.apache.hyracks.api.context.IHyracksTaskContext; -import org.apache.hyracks.data.std.api.IPointable; -import org.apache.hyracks.data.std.primitive.UTF8StringPointable; -import org.apache.hyracks.data.std.util.ArrayBackedValueStorage; - public class FnStringLengthEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory { private static final long serialVersionUID = 1L; @@ -45,7 +44,7 @@ public class FnStringLengthEvaluatorFactory extends AbstractTaggedValueArgumentS @Override protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args) - throws AlgebricksException { + throws HyracksDataException { final UTF8StringPointable stringp = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable(); final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage(); final DataOutput dOut = abvs.getDataOutput(); http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStringScalarEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStringScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStringScalarEvaluatorFactory.java index 27b5463..2eb927b 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStringScalarEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStringScalarEvaluatorFactory.java @@ -19,6 +19,13 @@ package org.apache.vxquery.runtime.functions.strings; import java.io.DataOutput; import java.io.IOException; +import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; +import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; +import org.apache.hyracks.api.context.IHyracksTaskContext; +import org.apache.hyracks.api.exceptions.HyracksDataException; +import org.apache.hyracks.data.std.api.IPointable; +import org.apache.hyracks.data.std.primitive.UTF8StringPointable; +import org.apache.hyracks.data.std.util.ArrayBackedValueStorage; import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; import org.apache.vxquery.datamodel.accessors.TypedPointables; import org.apache.vxquery.datamodel.values.ValueTag; @@ -30,14 +37,6 @@ import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScal import org.apache.vxquery.runtime.functions.cast.CastToStringOperation; import org.apache.vxquery.runtime.functions.util.AtomizeHelper; -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; -import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; -import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; -import org.apache.hyracks.api.context.IHyracksTaskContext; -import org.apache.hyracks.data.std.api.IPointable; -import org.apache.hyracks.data.std.primitive.UTF8StringPointable; -import org.apache.hyracks.data.std.util.ArrayBackedValueStorage; - public class FnStringScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory { private static final long serialVersionUID = 1L; @@ -47,7 +46,7 @@ public class FnStringScalarEvaluatorFactory extends AbstractTaggedValueArgumentS @Override protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args) - throws AlgebricksException { + throws HyracksDataException { final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage(); final DataOutput dOut = abvs.getDataOutput(); final CastToStringOperation castToString = new CastToStringOperation(); http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStringToCodepointsEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStringToCodepointsEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStringToCodepointsEvaluatorFactory.java index f77d869..c95a7ec 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStringToCodepointsEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnStringToCodepointsEvaluatorFactory.java @@ -19,6 +19,13 @@ package org.apache.vxquery.runtime.functions.strings; import java.io.DataOutput; import java.io.IOException; +import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; +import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; +import org.apache.hyracks.api.context.IHyracksTaskContext; +import org.apache.hyracks.api.exceptions.HyracksDataException; +import org.apache.hyracks.data.std.api.IPointable; +import org.apache.hyracks.data.std.primitive.UTF8StringPointable; +import org.apache.hyracks.data.std.util.ArrayBackedValueStorage; import org.apache.vxquery.datamodel.accessors.SequencePointable; import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; import org.apache.vxquery.datamodel.builders.sequence.SequenceBuilder; @@ -30,14 +37,6 @@ import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScal import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory; import org.apache.vxquery.runtime.functions.util.FunctionHelper; -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; -import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; -import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; -import org.apache.hyracks.api.context.IHyracksTaskContext; -import org.apache.hyracks.data.std.api.IPointable; -import org.apache.hyracks.data.std.primitive.UTF8StringPointable; -import org.apache.hyracks.data.std.util.ArrayBackedValueStorage; - public class FnStringToCodepointsEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory { private static final long serialVersionUID = 1L; @@ -47,7 +46,7 @@ public class FnStringToCodepointsEvaluatorFactory extends AbstractTaggedValueArg @Override protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args) - throws AlgebricksException { + throws HyracksDataException { final UTF8StringPointable stringp = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable(); final UTF8StringCharacterIterator charIterator = new UTF8StringCharacterIterator(stringp); final SequencePointable seqp = (SequencePointable) SequencePointable.FACTORY.createPointable(); @@ -75,7 +74,7 @@ public class FnStringToCodepointsEvaluatorFactory extends AbstractTaggedValueArg throw new SystemException(ErrorCode.FORG0006); } tvp1.getValue(stringp); - if (stringp.getLength() == 2) { + if (stringp.getUTF8Length() == 0) { XDMConstants.setEmptySequence(result); return; } http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnSubstringAfterEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnSubstringAfterEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnSubstringAfterEvaluatorFactory.java index f069152..ca4143d 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnSubstringAfterEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnSubstringAfterEvaluatorFactory.java @@ -16,6 +16,11 @@ */ package org.apache.vxquery.runtime.functions.strings; +import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; +import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; +import org.apache.hyracks.api.context.IHyracksTaskContext; +import org.apache.hyracks.api.exceptions.HyracksDataException; +import org.apache.hyracks.data.std.primitive.UTF8StringPointable; import org.apache.vxquery.datamodel.accessors.SequencePointable; import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; import org.apache.vxquery.datamodel.values.ValueTag; @@ -24,12 +29,6 @@ import org.apache.vxquery.exceptions.ErrorCode; import org.apache.vxquery.exceptions.SystemException; import org.apache.vxquery.runtime.functions.util.FunctionHelper; -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; -import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; -import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; -import org.apache.hyracks.api.context.IHyracksTaskContext; -import org.apache.hyracks.data.std.primitive.UTF8StringPointable; - public class FnSubstringAfterEvaluatorFactory extends AbstractCharacterIteratorCopyingEvaluatorFactory { private static final long serialVersionUID = 1L; @@ -39,7 +38,7 @@ public class FnSubstringAfterEvaluatorFactory extends AbstractCharacterIteratorC @Override protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args) - throws AlgebricksException { + throws HyracksDataException { final UTF8StringPointable stringp1 = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable(); final UTF8StringPointable stringp2 = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable(); final UTF8StringPointable stringp3 = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable(); http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnSubstringBeforeEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnSubstringBeforeEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnSubstringBeforeEvaluatorFactory.java index fb8e937..acc931e 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnSubstringBeforeEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnSubstringBeforeEvaluatorFactory.java @@ -16,6 +16,11 @@ */ package org.apache.vxquery.runtime.functions.strings; +import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; +import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; +import org.apache.hyracks.api.context.IHyracksTaskContext; +import org.apache.hyracks.api.exceptions.HyracksDataException; +import org.apache.hyracks.data.std.primitive.UTF8StringPointable; import org.apache.vxquery.datamodel.accessors.SequencePointable; import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; import org.apache.vxquery.datamodel.values.ValueTag; @@ -24,12 +29,6 @@ import org.apache.vxquery.exceptions.ErrorCode; import org.apache.vxquery.exceptions.SystemException; import org.apache.vxquery.runtime.functions.util.FunctionHelper; -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; -import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; -import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; -import org.apache.hyracks.api.context.IHyracksTaskContext; -import org.apache.hyracks.data.std.primitive.UTF8StringPointable; - public class FnSubstringBeforeEvaluatorFactory extends AbstractCharacterIteratorCopyingEvaluatorFactory { private static final long serialVersionUID = 1L; @@ -39,7 +38,7 @@ public class FnSubstringBeforeEvaluatorFactory extends AbstractCharacterIterator @Override protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args) - throws AlgebricksException { + throws HyracksDataException { final UTF8StringPointable stringp1 = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable(); final UTF8StringPointable stringp2 = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable(); final UTF8StringPointable stringp3 = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable(); http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnSubstringEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnSubstringEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnSubstringEvaluatorFactory.java index 0691a80..d04bcfe 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnSubstringEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnSubstringEvaluatorFactory.java @@ -16,22 +16,21 @@ */ package org.apache.vxquery.runtime.functions.strings; -import org.apache.vxquery.datamodel.accessors.SequencePointable; -import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; -import org.apache.vxquery.datamodel.values.ValueTag; -import org.apache.vxquery.datamodel.values.XDMConstants; -import org.apache.vxquery.exceptions.ErrorCode; -import org.apache.vxquery.exceptions.SystemException; -import org.apache.vxquery.runtime.functions.util.FunctionHelper; - -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; import org.apache.hyracks.api.context.IHyracksTaskContext; +import org.apache.hyracks.api.exceptions.HyracksDataException; import org.apache.hyracks.data.std.primitive.DoublePointable; import org.apache.hyracks.data.std.primitive.LongPointable; import org.apache.hyracks.data.std.primitive.UTF8StringPointable; import org.apache.hyracks.data.std.util.ArrayBackedValueStorage; +import org.apache.vxquery.datamodel.accessors.SequencePointable; +import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; +import org.apache.vxquery.datamodel.values.ValueTag; +import org.apache.vxquery.datamodel.values.XDMConstants; +import org.apache.vxquery.exceptions.ErrorCode; +import org.apache.vxquery.exceptions.SystemException; +import org.apache.vxquery.runtime.functions.util.FunctionHelper; public class FnSubstringEvaluatorFactory extends AbstractCharacterIteratorCopyingEvaluatorFactory { private static final long serialVersionUID = 1L; @@ -57,7 +56,7 @@ public class FnSubstringEvaluatorFactory extends AbstractCharacterIteratorCopyin @Override protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args) - throws AlgebricksException { + throws HyracksDataException { final UTF8StringPointable stringp = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable(); final DoublePointable doublep = (DoublePointable) DoublePointable.FACTORY.createPointable(); final LongPointable longp = (LongPointable) LongPointable.FACTORY.createPointable(); http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnUpperCaseEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnUpperCaseEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnUpperCaseEvaluatorFactory.java index 08492ff..c80fb48 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnUpperCaseEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/FnUpperCaseEvaluatorFactory.java @@ -16,6 +16,11 @@ */ package org.apache.vxquery.runtime.functions.strings; +import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; +import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; +import org.apache.hyracks.api.context.IHyracksTaskContext; +import org.apache.hyracks.api.exceptions.HyracksDataException; +import org.apache.hyracks.data.std.primitive.UTF8StringPointable; import org.apache.vxquery.datamodel.accessors.SequencePointable; import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; import org.apache.vxquery.datamodel.values.ValueTag; @@ -24,12 +29,6 @@ import org.apache.vxquery.exceptions.ErrorCode; import org.apache.vxquery.exceptions.SystemException; import org.apache.vxquery.runtime.functions.util.FunctionHelper; -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; -import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; -import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; -import org.apache.hyracks.api.context.IHyracksTaskContext; -import org.apache.hyracks.data.std.primitive.UTF8StringPointable; - public class FnUpperCaseEvaluatorFactory extends AbstractCharacterIteratorCopyingEvaluatorFactory { private static final long serialVersionUID = 1L; @@ -39,7 +38,7 @@ public class FnUpperCaseEvaluatorFactory extends AbstractCharacterIteratorCopyin @Override protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args) - throws AlgebricksException { + throws HyracksDataException { final UTF8StringPointable stringp = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable(); final ICharacterIterator charIterator = new UpperCaseCharacterIterator(new UTF8StringCharacterIterator(stringp)); final SequencePointable seqp = (SequencePointable) SequencePointable.FACTORY.createPointable(); http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/UTF8StringCharacterIterator.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/UTF8StringCharacterIterator.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/UTF8StringCharacterIterator.java index c170384..5b66bbf 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/UTF8StringCharacterIterator.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/strings/UTF8StringCharacterIterator.java @@ -45,13 +45,7 @@ public class UTF8StringCharacterIterator implements ICharacterIterator { LOGGER.finer(" UTF8StringCharacterIterator char[" + byteOffset + "] = " + c); } // Increment cursor - if ((c >= 0x0001) && (c <= 0x007F)) { - ++byteOffset; - } else if (c > 0x07FF) { - byteOffset += 3; - } else { - byteOffset += 2; - } + byteOffset += stringp.charSize(byteOffset); } if (LOGGER.isLoggable(Level.FINE)) { LOGGER.finer(" END UTF8StringCharacterIterator char[" + byteOffset + "] = " + c); @@ -61,7 +55,7 @@ public class UTF8StringCharacterIterator implements ICharacterIterator { @Override public void reset() { - byteOffset = 2; + byteOffset = stringp.getMetaDataLength(); } public void setByteOffset(int byteOffset) { http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/trace/FnTraceScalarEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/trace/FnTraceScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/trace/FnTraceScalarEvaluatorFactory.java index a202dc5..9159010 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/trace/FnTraceScalarEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/trace/FnTraceScalarEvaluatorFactory.java @@ -16,10 +16,10 @@ */ package org.apache.vxquery.runtime.functions.trace; -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; import org.apache.hyracks.api.context.IHyracksTaskContext; +import org.apache.hyracks.api.exceptions.HyracksDataException; import org.apache.hyracks.data.std.api.IPointable; import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; import org.apache.vxquery.datamodel.values.ValueTag; @@ -39,7 +39,7 @@ public class FnTraceScalarEvaluatorFactory extends AbstractTaggedValueArgumentSc @Override protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args) - throws AlgebricksException { + throws HyracksDataException { return new AbstractTaggedValueArgumentScalarEvaluator(args) { @Override http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/InstanceOfScalarEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/InstanceOfScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/InstanceOfScalarEvaluatorFactory.java index d9c5796..fc8b478 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/InstanceOfScalarEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/InstanceOfScalarEvaluatorFactory.java @@ -16,16 +16,15 @@ */ package org.apache.vxquery.runtime.functions.type; -import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; -import org.apache.vxquery.datamodel.values.XDMConstants; -import org.apache.vxquery.exceptions.SystemException; -import org.apache.vxquery.types.SequenceType; - -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; import org.apache.hyracks.api.context.IHyracksTaskContext; +import org.apache.hyracks.api.exceptions.HyracksDataException; import org.apache.hyracks.data.std.api.IPointable; +import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; +import org.apache.vxquery.datamodel.values.XDMConstants; +import org.apache.vxquery.exceptions.SystemException; +import org.apache.vxquery.types.SequenceType; public class InstanceOfScalarEvaluatorFactory extends AbstractTypeScalarEvaluatorFactory { private static final long serialVersionUID = 1L; @@ -36,7 +35,7 @@ public class InstanceOfScalarEvaluatorFactory extends AbstractTypeScalarEvaluato @Override protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args) - throws AlgebricksException { + throws HyracksDataException { return new AbstractTypeScalarEvaluator(args, ctx) { private final SequenceTypeMatcher matcher = new SequenceTypeMatcher(); http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/PromoteScalarEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/PromoteScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/PromoteScalarEvaluatorFactory.java index c1bb24e..f2088d7 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/PromoteScalarEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/PromoteScalarEvaluatorFactory.java @@ -18,6 +18,12 @@ package org.apache.vxquery.runtime.functions.type; import java.io.DataOutput; +import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; +import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; +import org.apache.hyracks.api.context.IHyracksTaskContext; +import org.apache.hyracks.api.exceptions.HyracksDataException; +import org.apache.hyracks.data.std.api.IPointable; +import org.apache.hyracks.data.std.util.ArrayBackedValueStorage; import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; import org.apache.vxquery.datamodel.accessors.TypedPointables; import org.apache.vxquery.datamodel.values.ValueTag; @@ -30,13 +36,6 @@ import org.apache.vxquery.runtime.functions.cast.CastToStringOperation; import org.apache.vxquery.types.BuiltinTypeRegistry; import org.apache.vxquery.types.SequenceType; -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; -import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; -import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; -import org.apache.hyracks.api.context.IHyracksTaskContext; -import org.apache.hyracks.data.std.api.IPointable; -import org.apache.hyracks.data.std.util.ArrayBackedValueStorage; - public class PromoteScalarEvaluatorFactory extends AbstractTypeScalarEvaluatorFactory { private static final long serialVersionUID = 1L; @@ -46,7 +45,7 @@ public class PromoteScalarEvaluatorFactory extends AbstractTypeScalarEvaluatorFa @Override protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args) - throws AlgebricksException { + throws HyracksDataException { return new AbstractTypeScalarEvaluator(args, ctx) { final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage(); final DataOutput dOut = abvs.getDataOutput(); http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/TreatScalarEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/TreatScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/TreatScalarEvaluatorFactory.java index 4913c71..0863de2 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/TreatScalarEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/type/TreatScalarEvaluatorFactory.java @@ -16,16 +16,15 @@ */ package org.apache.vxquery.runtime.functions.type; -import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; -import org.apache.vxquery.exceptions.ErrorCode; -import org.apache.vxquery.exceptions.SystemException; -import org.apache.vxquery.types.SequenceType; - -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; import org.apache.hyracks.api.context.IHyracksTaskContext; +import org.apache.hyracks.api.exceptions.HyracksDataException; import org.apache.hyracks.data.std.api.IPointable; +import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; +import org.apache.vxquery.exceptions.ErrorCode; +import org.apache.vxquery.exceptions.SystemException; +import org.apache.vxquery.types.SequenceType; public class TreatScalarEvaluatorFactory extends AbstractTypeScalarEvaluatorFactory { private static final long serialVersionUID = 1L; @@ -36,7 +35,7 @@ public class TreatScalarEvaluatorFactory extends AbstractTypeScalarEvaluatorFact @Override protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args) - throws AlgebricksException { + throws HyracksDataException { return new AbstractTypeScalarEvaluator(args, ctx) { private final SequenceTypeMatcher matcher = new SequenceTypeMatcher(); http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/unary/AbstractNumericUnaryScalarEvaluatorFactory.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/unary/AbstractNumericUnaryScalarEvaluatorFactory.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/unary/AbstractNumericUnaryScalarEvaluatorFactory.java index bd8c360..35b2d24 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/unary/AbstractNumericUnaryScalarEvaluatorFactory.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/unary/AbstractNumericUnaryScalarEvaluatorFactory.java @@ -18,6 +18,13 @@ package org.apache.vxquery.runtime.functions.unary; import java.io.DataOutput; +import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; +import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; +import org.apache.hyracks.api.context.IHyracksTaskContext; +import org.apache.hyracks.api.exceptions.HyracksDataException; +import org.apache.hyracks.data.std.api.IPointable; +import org.apache.hyracks.data.std.primitive.LongPointable; +import org.apache.hyracks.data.std.util.ArrayBackedValueStorage; import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; import org.apache.vxquery.datamodel.accessors.TypedPointables; import org.apache.vxquery.datamodel.values.ValueTag; @@ -28,14 +35,6 @@ import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScal import org.apache.vxquery.runtime.functions.util.FunctionHelper; import org.apache.vxquery.types.BuiltinTypeRegistry; -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; -import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator; -import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory; -import org.apache.hyracks.api.context.IHyracksTaskContext; -import org.apache.hyracks.data.std.api.IPointable; -import org.apache.hyracks.data.std.primitive.LongPointable; -import org.apache.hyracks.data.std.util.ArrayBackedValueStorage; - public abstract class AbstractNumericUnaryScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory { private static final long serialVersionUID = 1L; @@ -46,7 +45,7 @@ public abstract class AbstractNumericUnaryScalarEvaluatorFactory extends @Override protected AbstractTaggedValueArgumentScalarEvaluator createEvaluator(IHyracksTaskContext ctx, - IScalarEvaluator[] args) throws AlgebricksException { + IScalarEvaluator[] args) throws HyracksDataException { return new AbstractTaggedValueArgumentScalarEvaluator(args) { final AbstractNumericUnaryOperation aOp = createNumericUnaryOperation(); final ArrayBackedValueStorage abvs = new ArrayBackedValueStorage(); http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/AtomizeHelper.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/AtomizeHelper.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/AtomizeHelper.java index c31a5cf..a8e5652 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/AtomizeHelper.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/AtomizeHelper.java @@ -19,6 +19,12 @@ package org.apache.vxquery.runtime.functions.util; import java.io.DataOutput; import java.io.IOException; +import org.apache.hyracks.data.std.api.IPointable; +import org.apache.hyracks.data.std.primitive.UTF8StringPointable; +import org.apache.hyracks.data.std.primitive.VoidPointable; +import org.apache.hyracks.data.std.util.ArrayBackedValueStorage; +import org.apache.hyracks.data.std.util.GrowableArray; +import org.apache.hyracks.data.std.util.UTF8StringBuilder; import org.apache.vxquery.datamodel.accessors.PointablePool; import org.apache.vxquery.datamodel.accessors.SequencePointable; import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; @@ -29,27 +35,27 @@ import org.apache.vxquery.datamodel.accessors.nodes.NodeTreePointable; import org.apache.vxquery.datamodel.accessors.nodes.PINodePointable; import org.apache.vxquery.datamodel.accessors.nodes.TextOrCommentNodePointable; import org.apache.vxquery.datamodel.values.ValueTag; - -import org.apache.hyracks.data.std.api.IPointable; -import org.apache.hyracks.data.std.primitive.VoidPointable; -import org.apache.hyracks.data.std.util.ArrayBackedValueStorage; import org.apache.vxquery.exceptions.ErrorCode; import org.apache.vxquery.exceptions.SystemException; public class AtomizeHelper { - AttributeNodePointable anp = (AttributeNodePointable) AttributeNodePointable.FACTORY.createPointable(); - DocumentNodePointable dnp = (DocumentNodePointable) DocumentNodePointable.FACTORY.createPointable(); - ElementNodePointable enp = (ElementNodePointable) ElementNodePointable.FACTORY.createPointable(); - NodeTreePointable ntp = (NodeTreePointable) NodeTreePointable.FACTORY.createPointable(); - PINodePointable pnp = (PINodePointable) PINodePointable.FACTORY.createPointable(); - SequencePointable sp = (SequencePointable) SequencePointable.FACTORY.createPointable(); - TextOrCommentNodePointable tcnp = (TextOrCommentNodePointable) TextOrCommentNodePointable.FACTORY.createPointable(); - ArrayBackedValueStorage tempABVS = new ArrayBackedValueStorage(); - TaggedValuePointable tempTVP = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable(); - VoidPointable vp = (VoidPointable) VoidPointable.FACTORY.createPointable(); + private static final int STRING_EXPECTED_LENGTH = 300; + private final GrowableArray ga = new GrowableArray(); + private final UTF8StringBuilder sb = new UTF8StringBuilder(); + private final AttributeNodePointable anp = (AttributeNodePointable) AttributeNodePointable.FACTORY + .createPointable(); + private final DocumentNodePointable dnp = (DocumentNodePointable) DocumentNodePointable.FACTORY.createPointable(); + private final ElementNodePointable enp = (ElementNodePointable) ElementNodePointable.FACTORY.createPointable(); + private final NodeTreePointable ntp = (NodeTreePointable) NodeTreePointable.FACTORY.createPointable(); + private final PINodePointable pnp = (PINodePointable) PINodePointable.FACTORY.createPointable(); + private final SequencePointable sp = (SequencePointable) SequencePointable.FACTORY.createPointable(); + private final TextOrCommentNodePointable tcnp = (TextOrCommentNodePointable) TextOrCommentNodePointable.FACTORY + .createPointable(); + private final ArrayBackedValueStorage tempABVS = new ArrayBackedValueStorage(); + private final TaggedValuePointable tempTVP = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable(); + private final VoidPointable vp = (VoidPointable) VoidPointable.FACTORY.createPointable(); - public void atomize(TaggedValuePointable tvp, PointablePool pp, IPointable result) - throws SystemException, IOException { + public void atomize(TaggedValuePointable tvp, PointablePool pp, IPointable result) throws SystemException, IOException { switch (tvp.getTag()) { case ValueTag.NODE_TREE_TAG: tvp.getValue(ntp); @@ -114,7 +120,7 @@ public class AtomizeHelper { } } - public static void buildConcatenationRec(SequencePointable sp, PointablePool pp, DataOutput out, + public static void buildConcatenationRec(SequencePointable sp, PointablePool pp, UTF8StringBuilder sb, NodeTreePointable ntp) throws IOException { TaggedValuePointable tempTVP2 = pp.takeOne(TaggedValuePointable.class); int nItems = sp.getEntryCount(); @@ -123,13 +129,13 @@ public class AtomizeHelper { switch (tempTVP2.getTag()) { case ValueTag.TEXT_NODE_TAG: { TextOrCommentNodePointable tcnp = pp.takeOne(TextOrCommentNodePointable.class); - VoidPointable vp = pp.takeOne(VoidPointable.class); + UTF8StringPointable utf8sp = pp.takeOne(UTF8StringPointable.class); try { tempTVP2.getValue(tcnp); - tcnp.getValue(ntp, vp); - out.write(vp.getByteArray(), vp.getStartOffset() + 2, vp.getLength() - 2); + tcnp.getValue(ntp, utf8sp); + sb.appendUtf8StringPointable(utf8sp); } finally { - pp.giveBack(vp); + pp.giveBack(utf8sp); pp.giveBack(tcnp); } break; @@ -141,7 +147,7 @@ public class AtomizeHelper { tempTVP2.getValue(enp); if (enp.childrenChunkExists()) { enp.getChildrenSequence(ntp, sp2); - buildConcatenationRec(sp2, pp, out, ntp); + buildConcatenationRec(sp2, pp, sb, ntp); } } finally { pp.giveBack(sp2); @@ -153,20 +159,17 @@ public class AtomizeHelper { pp.giveBack(tempTVP2); } - public static void buildStringConcatenation(SequencePointable sp, PointablePool pp, - ArrayBackedValueStorage tempABVS, NodeTreePointable ntp) throws IOException { + public void buildStringConcatenation(SequencePointable sp, PointablePool pp, ArrayBackedValueStorage tempABVS, + NodeTreePointable ntp) throws IOException { tempABVS.reset(); DataOutput out = tempABVS.getDataOutput(); out.write(ValueTag.XS_UNTYPED_ATOMIC_TAG); + ga.reset(); + sb.reset(ga, STRING_EXPECTED_LENGTH); // Leave room for the utf-8 length - out.write(0); - out.write(0); - buildConcatenationRec(sp, pp, out, ntp); - int utflen = tempABVS.getLength() - 3; - byte[] bytes = tempABVS.getByteArray(); - // Patch utf-8 length at bytes 1 and 2 - bytes[1] = (byte) ((utflen >>> 8) & 0xFF); - bytes[2] = (byte) ((utflen >>> 0) & 0xFF); + buildConcatenationRec(sp, pp, sb, ntp); + sb.finish(); + out.write(ga.getByteArray(), 0, ga.getLength()); } } http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java index 49e1271..7c3197a 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java @@ -25,17 +25,18 @@ import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; import java.io.Reader; -import java.nio.ByteBuffer; -import java.util.Arrays; import java.util.List; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; +import org.apache.hyracks.api.exceptions.HyracksDataException; import org.apache.hyracks.data.std.api.IPointable; import org.apache.hyracks.data.std.primitive.DoublePointable; import org.apache.hyracks.data.std.primitive.LongPointable; import org.apache.hyracks.data.std.primitive.UTF8StringPointable; import org.apache.hyracks.data.std.util.ArrayBackedValueStorage; +import org.apache.hyracks.data.std.util.GrowableArray; +import org.apache.hyracks.data.std.util.UTF8StringBuilder; import org.apache.hyracks.dataflow.common.comm.util.ByteBufferInputStream; import org.apache.vxquery.context.DynamicContext; import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; @@ -486,7 +487,7 @@ public class FunctionHelper { public static boolean compareTaggedValues(AbstractValueComparisonOperation aOp, TaggedValuePointable tvp1, TaggedValuePointable tvp2, DynamicContext dCtx, TypedPointables tp1, TypedPointables tp2) - throws SystemException { + throws SystemException { int tid1 = getBaseTypeForComparisons(tvp1.getTag()); int tid2 = getBaseTypeForComparisons(tvp2.getTag()); @@ -1137,13 +1138,6 @@ public class FunctionHelper { return max; } - public static String getStringFromPointable(UTF8StringPointable stringp, ByteBufferInputStream bbis, - DataInputStream di) throws IOException { - bbis.setByteBuffer(ByteBuffer.wrap(Arrays.copyOfRange(stringp.getByteArray(), stringp.getStartOffset(), - stringp.getLength() + stringp.getStartOffset())), 0); - return di.readUTF(); - } - public static long getTimezone(ITimezone timezonep) { return timezonep.getTimezoneHour() * DateTime.CHRONON_OF_HOUR + timezonep.getTimezoneMinute() * DateTime.CHRONON_OF_MINUTE; @@ -1212,7 +1206,7 @@ public class FunctionHelper { } public static void printUTF8String(UTF8StringPointable stringp) { - System.err.println(" printUTF8String START length = " + stringp.getUTFLength()); + System.err.println(" printUTF8String START length = " + stringp.getUTF8Length()); ICharacterIterator charIterator = new UTF8StringCharacterIterator(stringp); charIterator.reset(); for (int c = charIterator.next(); c != ICharacterIterator.EOS_CHAR; c = charIterator.next()) { @@ -1223,8 +1217,7 @@ public class FunctionHelper { public static void readInDocFromPointable(UTF8StringPointable stringp, ByteBufferInputStream bbis, DataInputStream di, ArrayBackedValueStorage abvs, IParser parser) throws IOException { - String fName = getStringFromPointable(stringp, bbis, di); - readInDocFromString(fName, bbis, di, abvs, parser); + readInDocFromString(stringp.toString(), bbis, di, abvs, parser); } public static void readInDocFromString(String fName, ByteBufferInputStream bbis, DataInputStream di, @@ -1262,7 +1255,7 @@ public class FunctionHelper { public static boolean transformThenCompareMinMaxTaggedValues(AbstractValueComparisonOperation aOp, TaggedValuePointable tvp1, TaggedValuePointable tvp2, DynamicContext dCtx, TypedPointables tp1, - TypedPointables tp2) throws SystemException { + TypedPointables tp2) throws HyracksDataException { TaggedValuePointable tvp1new = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable(); TaggedValuePointable tvp2new = (TaggedValuePointable) TaggedValuePointable.FACTORY.createPointable(); @@ -1308,46 +1301,61 @@ public class FunctionHelper { } } - public static void writeChar(char c, DataOutput dOut) { - try { - if ((c >= 0x0001) && (c <= 0x007F)) { - dOut.write((byte) c); - } else if (c > 0x07FF) { - dOut.write((byte) (0xE0 | ((c >> 12) & 0x0F))); - dOut.write((byte) (0x80 | ((c >> 6) & 0x3F))); - dOut.write((byte) (0x80 | ((c >> 0) & 0x3F))); - } else { - dOut.write((byte) (0xC0 | ((c >> 6) & 0x1F))); - dOut.write((byte) (0x80 | ((c >> 0) & 0x3F))); - } - } catch (IOException e) { - e.printStackTrace(); + public static void writeChar(char c, UTF8StringBuilder sb) throws IOException { + sb.appendChar(c); + } + + public static void stringToGrowableArray(String value, GrowableArray ga, UTF8StringBuilder sb, int expectedLength) + throws IOException { + ga.reset(); + sb.reset(ga, expectedLength); + sb.appendString(value); + sb.finish(); + } + + public static void charSequenceToGrowableArray(CharSequence charSequence, GrowableArray ga, UTF8StringBuilder sb, + int expectedLength) throws IOException { + ga.reset(); + sb.reset(ga, expectedLength); + for (int i = 0; i < charSequence.length(); ++i) { + sb.appendChar(charSequence.charAt(i)); + } + sb.finish(); + } + + public static void charArrayToGrowableArray(char[] ch, int start, int length, GrowableArray ga, + UTF8StringBuilder sb, int expectedLength) throws IOException { + ga.reset(); + sb.reset(ga, expectedLength); + for (int i = start; i < start + length; ++i) { + sb.appendChar(ch[i]); } + sb.finish(); } - public static void writeCharSequence(CharSequence charSequence, DataOutput dOut) { + public static void writeCharSequence(CharSequence charSequence, UTF8StringBuilder sb) throws IOException { for (int i = 0; i < charSequence.length(); ++i) { - writeChar(charSequence.charAt(i), dOut); + sb.appendChar(charSequence.charAt(i)); } } - public static void writeCharArray(char[] ch, int start, int length, DataOutput dOut) { + public static void writeCharArray(char[] ch, int start, int length, UTF8StringBuilder sb) throws IOException { for (int i = start; i < start + length; ++i) { - writeChar(ch[i], dOut); + sb.appendChar(ch[i]); } } - public static void writeDateAsString(IDate date, DataOutput dOut) { + public static void writeDateAsString(IDate date, UTF8StringBuilder sb) throws IOException { // Year - writeNumberWithPadding(date.getYear(), 4, dOut); - writeChar('-', dOut); + writeNumberWithPadding(date.getYear(), 4, sb); + sb.appendChar('-'); // Month - writeNumberWithPadding(date.getMonth(), 2, dOut); - writeChar('-', dOut); + writeNumberWithPadding(date.getMonth(), 2, sb); + sb.appendChar('-'); // Day - writeNumberWithPadding(date.getDay(), 2, dOut); + writeNumberWithPadding(date.getDay(), 2, sb); } /** @@ -1359,66 +1367,66 @@ public class FunctionHelper { * padding * @param dOut * data output + * @throws IOException */ - - public static void writeNumberWithPadding(long valueArg, int paddingArg, DataOutput dOut) { + public static void writeNumberWithPadding(long valueArg, int paddingArg, UTF8StringBuilder sb) throws IOException { long value = valueArg; int padding = paddingArg; if (value < 0) { - writeChar('-', dOut); + sb.appendChar('-'); value = Math.abs(value); } int nDigits = getNumberOfDigits(value); // Add zero padding for set length numbers. while (padding > nDigits) { - writeChar('0', dOut); + sb.appendChar('0'); --padding; } // Write the actual number. long pow10 = (long) Math.pow(10, nDigits - 1.0); for (int i = nDigits - 1; i >= 0; --i) { - writeChar((char) ('0' + (value / pow10)), dOut); + sb.appendChar((char) ('0' + (value / pow10))); value %= pow10; pow10 /= 10; } } - public static void writeTimeAsString(ITime time, DataOutput dOut) { + public static void writeTimeAsString(ITime time, UTF8StringBuilder sb) throws IOException { // Hours - writeNumberWithPadding(time.getHour(), 2, dOut); - writeChar(':', dOut); + writeNumberWithPadding(time.getHour(), 2, sb); + sb.appendChar(':'); // Minute - writeNumberWithPadding(time.getMinute(), 2, dOut); - writeChar(':', dOut); + writeNumberWithPadding(time.getMinute(), 2, sb); + sb.appendChar(':'); // Milliseconds - writeNumberWithPadding(time.getMilliSecond() / DateTime.CHRONON_OF_SECOND, 2, dOut); + writeNumberWithPadding(time.getMilliSecond() / DateTime.CHRONON_OF_SECOND, 2, sb); if (time.getMilliSecond() % DateTime.CHRONON_OF_SECOND != 0) { - writeChar('.', dOut); - writeNumberWithPadding(time.getMilliSecond() % DateTime.CHRONON_OF_SECOND, 3, dOut); + sb.appendChar('.'); + writeNumberWithPadding(time.getMilliSecond() % DateTime.CHRONON_OF_SECOND, 3, sb); } } - public static void writeTimezoneAsString(ITimezone timezone, DataOutput dOut) { + public static void writeTimezoneAsString(ITimezone timezone, UTF8StringBuilder sb) throws IOException { long timezoneHour = timezone.getTimezoneHour(); long timezoneMinute = timezone.getTimezoneMinute(); if (timezoneHour != DateTime.TIMEZONE_HOUR_NULL && timezoneMinute != DateTime.TIMEZONE_MINUTE_NULL) { if (timezoneHour == 0 && timezoneMinute == 0) { - writeChar('Z', dOut); + sb.appendChar('Z'); } else { if (timezoneHour >= 0 && timezoneMinute >= 0) { - writeChar('+', dOut); + sb.appendChar('+'); } else { - writeChar('-', dOut); + sb.appendChar('-'); timezoneHour = Math.abs(timezoneHour); timezoneMinute = Math.abs(timezoneMinute); } - writeNumberWithPadding(timezoneHour, 2, dOut); - writeChar(':', dOut); - writeNumberWithPadding(timezoneMinute, 2, dOut); + writeNumberWithPadding(timezoneHour, 2, sb); + sb.appendChar(':'); + writeNumberWithPadding(timezoneMinute, 2, sb); } } } http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/serializer/XMLSerializer.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/serializer/XMLSerializer.java b/vxquery-core/src/main/java/org/apache/vxquery/serializer/XMLSerializer.java index 984ab81..6e20ba1 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/serializer/XMLSerializer.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/serializer/XMLSerializer.java @@ -20,6 +20,18 @@ import java.io.DataOutput; import java.io.IOException; import java.io.PrintStream; +import org.apache.hyracks.algebricks.data.IPrinter; +import org.apache.hyracks.api.exceptions.HyracksDataException; +import org.apache.hyracks.data.std.primitive.BooleanPointable; +import org.apache.hyracks.data.std.primitive.BytePointable; +import org.apache.hyracks.data.std.primitive.DoublePointable; +import org.apache.hyracks.data.std.primitive.FloatPointable; +import org.apache.hyracks.data.std.primitive.IntegerPointable; +import org.apache.hyracks.data.std.primitive.LongPointable; +import org.apache.hyracks.data.std.primitive.ShortPointable; +import org.apache.hyracks.data.std.primitive.UTF8StringPointable; +import org.apache.hyracks.data.std.primitive.VoidPointable; +import org.apache.hyracks.data.std.util.ArrayBackedValueStorage; import org.apache.vxquery.datamodel.accessors.PointablePool; import org.apache.vxquery.datamodel.accessors.PointablePoolFactory; import org.apache.vxquery.datamodel.accessors.SequencePointable; @@ -44,19 +56,6 @@ import org.apache.vxquery.datamodel.values.ValueTag; import org.apache.vxquery.exceptions.SystemException; import org.apache.vxquery.runtime.functions.cast.CastToStringOperation; -import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; -import org.apache.hyracks.algebricks.data.IPrinter; -import org.apache.hyracks.data.std.primitive.BooleanPointable; -import org.apache.hyracks.data.std.primitive.BytePointable; -import org.apache.hyracks.data.std.primitive.DoublePointable; -import org.apache.hyracks.data.std.primitive.FloatPointable; -import org.apache.hyracks.data.std.primitive.IntegerPointable; -import org.apache.hyracks.data.std.primitive.LongPointable; -import org.apache.hyracks.data.std.primitive.ShortPointable; -import org.apache.hyracks.data.std.primitive.UTF8StringPointable; -import org.apache.hyracks.data.std.primitive.VoidPointable; -import org.apache.hyracks.data.std.util.ArrayBackedValueStorage; - public class XMLSerializer implements IPrinter { private final PointablePool pp; @@ -873,8 +872,8 @@ public class XMLSerializer implements IPrinter { } private void printString(PrintStream ps, UTF8StringPointable utf8sp) { - int utfLen = utf8sp.getUTFLength(); - int offset = 2; + int utfLen = utf8sp.getUTF8Length(); + int offset = utf8sp.getMetaDataLength(); while (utfLen > 0) { char c = utf8sp.charAt(offset); switch (c) { @@ -902,7 +901,7 @@ public class XMLSerializer implements IPrinter { ps.append(c); break; } - int cLen = UTF8StringPointable.getModifiedUTF8Len(c); + int cLen = utf8sp.charSize(offset); offset += cLen; utfLen -= cLen; } @@ -941,7 +940,7 @@ public class XMLSerializer implements IPrinter { } @Override - public void init() throws AlgebricksException { + public void init() throws HyracksDataException { } } http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/types/NameTest.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/types/NameTest.java b/vxquery-core/src/main/java/org/apache/vxquery/types/NameTest.java index fde6e07..a4b31bd 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/types/NameTest.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/types/NameTest.java @@ -19,7 +19,7 @@ package org.apache.vxquery.types; import java.io.Serializable; import java.util.Arrays; -import org.apache.hyracks.data.std.primitive.UTF8StringPointable; +import org.apache.hyracks.util.string.UTF8StringUtil; public final class NameTest implements Serializable { private static final long serialVersionUID = 1L; @@ -49,13 +49,13 @@ public final class NameTest implements Serializable { StringBuilder buffer = new StringBuilder(); buffer.append("NameTest({"); if (uri != null) { - UTF8StringPointable.toString(buffer, uri, 0); + UTF8StringUtil.toString(buffer, uri, 0); } else { buffer.append('*'); } buffer.append('}'); if (localName != null) { - UTF8StringPointable.toString(buffer, localName, 0); + UTF8StringUtil.toString(buffer, localName, 0); } else { buffer.append('*'); } http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/types/ProcessingInstructionType.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/types/ProcessingInstructionType.java b/vxquery-core/src/main/java/org/apache/vxquery/types/ProcessingInstructionType.java index c445ba7..d29242e 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/types/ProcessingInstructionType.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/types/ProcessingInstructionType.java @@ -18,7 +18,7 @@ package org.apache.vxquery.types; import java.util.Arrays; -import org.apache.hyracks.data.std.primitive.UTF8StringPointable; +import org.apache.hyracks.util.string.UTF8StringUtil; public final class ProcessingInstructionType extends AbstractNodeType { private static final long serialVersionUID = 1L; @@ -44,7 +44,7 @@ public final class ProcessingInstructionType extends AbstractNodeType { public String toString() { StringBuilder sb = new StringBuilder("processing-instruction("); if (target != null) { - UTF8StringPointable.toString(sb, target, 0); + UTF8StringUtil.toString(sb, target, 0); } return sb.append(")").toString(); } http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/SAXContentHandler.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/SAXContentHandler.java b/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/SAXContentHandler.java index 846c27b..84c8ddf 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/SAXContentHandler.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/SAXContentHandler.java @@ -22,12 +22,13 @@ import java.util.List; import org.apache.hyracks.api.comm.IFrameFieldAppender; import org.apache.hyracks.api.comm.IFrameWriter; import org.apache.hyracks.api.exceptions.HyracksDataException; -import org.apache.hyracks.data.std.primitive.UTF8StringPointable; import org.apache.hyracks.data.std.util.ArrayBackedValueStorage; +import org.apache.hyracks.data.std.util.GrowableArray; +import org.apache.hyracks.data.std.util.UTF8StringBuilder; import org.apache.hyracks.dataflow.common.comm.util.FrameUtils; +import org.apache.hyracks.util.string.UTF8StringUtil; import org.apache.vxquery.datamodel.accessors.TaggedValuePointable; import org.apache.vxquery.datamodel.accessors.nodes.NodeTreePointable; -import org.apache.vxquery.datamodel.builders.atomic.UTF8StringBuilder; import org.apache.vxquery.datamodel.builders.nodes.AbstractNodeBuilder; import org.apache.vxquery.datamodel.builders.nodes.AttributeNodeBuilder; import org.apache.vxquery.datamodel.builders.nodes.CommentNodeBuilder; @@ -37,6 +38,7 @@ import org.apache.vxquery.datamodel.builders.nodes.ElementNodeBuilder; import org.apache.vxquery.datamodel.builders.nodes.PINodeBuilder; import org.apache.vxquery.datamodel.builders.nodes.TextNodeBuilder; import org.apache.vxquery.datamodel.values.ValueTag; +import org.apache.vxquery.runtime.functions.util.FunctionHelper; import org.apache.vxquery.types.BuiltinTypeQNames; import org.apache.vxquery.types.ElementType; import org.apache.vxquery.types.NameTest; @@ -50,6 +52,8 @@ import org.xml.sax.SAXException; import org.xml.sax.ext.LexicalHandler; public class SAXContentHandler implements ContentHandler, LexicalHandler { + private static final int STRING_EXPECTED_LENGTH = 300; + // XML node builders protected final AttributeNodeBuilder anb; protected final CommentNodeBuilder cnb; @@ -58,6 +62,7 @@ public class SAXContentHandler implements ContentHandler, LexicalHandler { protected final PINodeBuilder pinb; protected final TextNodeBuilder tnb; protected final UTF8StringBuilder utf8b; + private final UTF8StringBuilder utf8bInternal; protected final List<ElementNodeBuilder> enbStack; protected final List<ElementNodeBuilder> freeENBList; protected boolean isIndexHandler; @@ -83,7 +88,8 @@ public class SAXContentHandler implements ContentHandler, LexicalHandler { protected int nodeIdCounter; protected final ITreeNodeIdProvider nodeIdProvider; protected final ArrayBackedValueStorage tempABVS; - private final ArrayBackedValueStorage textABVS; + private final GrowableArray textGA; + private final GrowableArray textGAInternal; public SAXContentHandler(boolean attachTypes, ITreeNodeIdProvider nodeIdProvider, boolean isIndexHandler) { // XML node builders @@ -94,8 +100,9 @@ public class SAXContentHandler implements ContentHandler, LexicalHandler { pinb = new PINodeBuilder(); tnb = new TextNodeBuilder(); utf8b = new UTF8StringBuilder(); - enbStack = new ArrayList<ElementNodeBuilder>(); - freeENBList = new ArrayList<ElementNodeBuilder>(); + utf8bInternal = new UTF8StringBuilder(); + enbStack = new ArrayList<>(); + freeENBList = new ArrayList<>(); // Element writing and path step variables skipping = true; @@ -110,7 +117,8 @@ public class SAXContentHandler implements ContentHandler, LexicalHandler { nodeIdCounter = 0; this.nodeIdProvider = nodeIdProvider; tempABVS = new ArrayBackedValueStorage(); - textABVS = new ArrayBackedValueStorage(); + textGA = new GrowableArray(); + textGAInternal = new GrowableArray(); this.isIndexHandler = isIndexHandler; if (isIndexHandler) { this.appender = null; @@ -156,7 +164,7 @@ public class SAXContentHandler implements ContentHandler, LexicalHandler { return; } try { - utf8b.appendCharArray(ch, start, length); + appendCharArray(ch, start, length); } catch (IOException e) { e.printStackTrace(); throw new SAXException(e); @@ -233,15 +241,11 @@ public class SAXContentHandler implements ContentHandler, LexicalHandler { try { flushText(); startChildInParent(pinb); - tempABVS.reset(); - tempABVS.getDataOutput().writeUTF(target); if (createNodeIds) { pinb.setLocalNodeId(nodeIdCounter++); } - pinb.setTarget(tempABVS); - tempABVS.reset(); - tempABVS.getDataOutput().writeUTF(data); - pinb.setContent(tempABVS); + pinb.setTarget(stringToGrowableArray(target)); + pinb.setContent(stringToGrowableArray(data)); endChildInParent(pinb); } catch (IOException e) { e.printStackTrace(); @@ -249,6 +253,11 @@ public class SAXContentHandler implements ContentHandler, LexicalHandler { } } + private GrowableArray stringToGrowableArray(String value) throws IOException { + FunctionHelper.stringToGrowableArray(value, textGAInternal, utf8bInternal, STRING_EXPECTED_LENGTH); + return textGAInternal; + } + @Override public void setDocumentLocator(Locator locator) { } @@ -264,8 +273,8 @@ public class SAXContentHandler implements ContentHandler, LexicalHandler { } db.reset(); try { - textABVS.reset(); - utf8b.reset(textABVS); + textGA.reset(); + utf8b.reset(textGA, STRING_EXPECTED_LENGTH); } catch (IOException e) { throw new SAXException(e); } @@ -355,7 +364,8 @@ public class SAXContentHandler implements ContentHandler, LexicalHandler { tempABVS.reset(); DataOutput tempOut = tempABVS.getDataOutput(); tempOut.write(ValueTag.XS_UNTYPED_ATOMIC_TAG); - tempOut.writeUTF(aValue); + stringToGrowableArray(aValue); + tempOut.write(textGAInternal.getByteArray(), 0, textGAInternal.getLength()); enb.startAttribute(anb); anb.setName(aUriCode, aLocalNameCode, aPrefixCode); if (attachTypes) { @@ -394,18 +404,24 @@ public class SAXContentHandler implements ContentHandler, LexicalHandler { if (createNodeIds) { cnb.setLocalNodeId(nodeIdCounter++); } - utf8b.appendCharArray(ch, start, length); + appendCharArray(ch, start, length); utf8b.finish(); - cnb.setValue(textABVS); + cnb.setValue(textGA); endChildInParent(cnb); - textABVS.reset(); - utf8b.reset(textABVS); + textGA.reset(); + utf8b.reset(textGA, STRING_EXPECTED_LENGTH); } catch (IOException e) { e.printStackTrace(); throw new SAXException(e); } } + private void appendCharArray(char[] ch, int start, int length) throws IOException { + for (int i = 0; i < length; ++i) { + utf8b.appendChar(ch[i + start]); + } + } + protected void flushText() throws IOException { if (pendingText) { peekENBStackTop().startChild(tnb); @@ -413,10 +429,10 @@ public class SAXContentHandler implements ContentHandler, LexicalHandler { tnb.setLocalNodeId(nodeIdCounter++); } utf8b.finish(); - tnb.setValue(textABVS); + tnb.setValue(textGA); peekENBStackTop().endChild(tnb); - textABVS.reset(); - utf8b.reset(textABVS); + textGA.reset(); + utf8b.reset(textGA, STRING_EXPECTED_LENGTH); pendingText = false; } } @@ -559,7 +575,7 @@ public class SAXContentHandler implements ContentHandler, LexicalHandler { return null; } StringBuilder sb = new StringBuilder(); - UTF8StringPointable.toString(sb, bytes, 0); + UTF8StringUtil.toString(sb, bytes, 0); return sb.toString(); } http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/XMLParser.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/XMLParser.java b/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/XMLParser.java index 2f9f8c5..a830b47 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/XMLParser.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/xmlparser/XMLParser.java @@ -80,8 +80,7 @@ public class XMLParser implements IParser { handler.writeDocument(abvs); input.close(); } catch (Exception e) { - HyracksDataException hde = new HyracksDataException(e); - hde.setNodeId(nodeId); + HyracksDataException hde = new HyracksDataException(e, nodeId); throw hde; } return 0; @@ -100,16 +99,13 @@ public class XMLParser implements IParser { parser.parse(in); input.close(); } catch (FileNotFoundException e) { - HyracksDataException hde = new VXQueryFileNotFoundException(e, file); - hde.setNodeId(nodeId); + HyracksDataException hde = new VXQueryFileNotFoundException(e, file, nodeId); throw hde; } catch (SAXException e) { - HyracksDataException hde = new VXQueryParseException(e, file); - hde.setNodeId(nodeId); + HyracksDataException hde = new VXQueryParseException(e, file, nodeId); throw hde; } catch (IOException e) { - HyracksDataException hde = new HyracksDataException(e); - hde.setNodeId(nodeId); + HyracksDataException hde = new HyracksDataException(e, nodeId); throw hde; } } @@ -128,8 +124,7 @@ public class XMLParser implements IParser { parser.parse(in); input.close(); } catch (Exception e) { - HyracksDataException hde = new HyracksDataException(e); - hde.setNodeId(nodeId); + HyracksDataException hde = new HyracksDataException(e, nodeId); throw hde; } } http://git-wip-us.apache.org/repos/asf/vxquery/blob/2c881020/vxquery-core/src/main/java/org/apache/vxquery/xmlquery/query/VXQueryCompilationListener.java ---------------------------------------------------------------------- diff --git a/vxquery-core/src/main/java/org/apache/vxquery/xmlquery/query/VXQueryCompilationListener.java b/vxquery-core/src/main/java/org/apache/vxquery/xmlquery/query/VXQueryCompilationListener.java index b3692b1..8690c94 100644 --- a/vxquery-core/src/main/java/org/apache/vxquery/xmlquery/query/VXQueryCompilationListener.java +++ b/vxquery-core/src/main/java/org/apache/vxquery/xmlquery/query/VXQueryCompilationListener.java @@ -14,18 +14,19 @@ */ package org.apache.vxquery.xmlquery.query; -import org.apache.vxquery.compiler.algebricks.prettyprint.VXQueryLogicalExpressionPrettyPrintVisitor; -import org.apache.vxquery.xmlquery.ast.ModuleNode; -import org.json.JSONException; - -import com.thoughtworks.xstream.XStream; -import com.thoughtworks.xstream.io.xml.DomDriver; +import java.io.IOException; import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException; +import org.apache.hyracks.algebricks.core.algebra.prettyprint.AlgebricksAppendable; import org.apache.hyracks.algebricks.core.algebra.prettyprint.LogicalOperatorPrettyPrintVisitor; import org.apache.hyracks.algebricks.core.algebra.prettyprint.PlanPrettyPrinter; import org.apache.hyracks.algebricks.core.algebra.visitors.ILogicalExpressionVisitor; import org.apache.hyracks.api.job.JobSpecification; +import org.apache.vxquery.compiler.algebricks.prettyprint.VXQueryLogicalExpressionPrettyPrintVisitor; +import org.apache.vxquery.xmlquery.ast.ModuleNode; + +import com.thoughtworks.xstream.XStream; +import com.thoughtworks.xstream.io.xml.DomDriver; public class VXQueryCompilationListener implements XQueryCompilationListener { boolean showTET, showRP, showOET, showAST; @@ -39,7 +40,7 @@ public class VXQueryCompilationListener implements XQueryCompilationListener { /** * Outputs the query inputs, outputs and user constraints for each module as result of code generation. - * + * * @param module */ public void notifyCodegenResult(Module module) { @@ -47,8 +48,8 @@ public class VXQueryCompilationListener implements XQueryCompilationListener { JobSpecification jobSpec = module.getHyracksJobSpecification(); try { System.err.println("***Runtime Plan: "); - System.err.println(jobSpec.toJSON().toString(2)); - } catch (JSONException e) { + System.err.println(jobSpec.toJSON().toString()); + } catch (IOException e) { e.printStackTrace(); System.err.println(jobSpec.toString()); } @@ -58,7 +59,7 @@ public class VXQueryCompilationListener implements XQueryCompilationListener { /** * Outputs the syntax translation tree for the module in the format: "-- logical operator(if exists) | execution mode |" * where execution mode can be one of: UNPARTITIONED,PARTITIONED,LOCAL - * + * * @param module */ @Override @@ -76,7 +77,7 @@ public class VXQueryCompilationListener implements XQueryCompilationListener { /** * Outputs the optimized expression tree for the module in the format: * "-- logical operator(if exists) | execution mode |" where execution mode can be one of: UNPARTITIONED,PARTITIONED,LOCAL - * + * * @param module */ @Override @@ -90,7 +91,7 @@ public class VXQueryCompilationListener implements XQueryCompilationListener { /** * Outputs the abstract syntax tree obtained from parsing by serializing the DomDriver object to a pretty-printed XML * String. - * + * * @param moduleNode */ @Override @@ -105,8 +106,10 @@ public class VXQueryCompilationListener implements XQueryCompilationListener { try { ILogicalExpressionVisitor<String, Integer> ev = new VXQueryLogicalExpressionPrettyPrintVisitor( module.getModuleContext()); - LogicalOperatorPrettyPrintVisitor v = new LogicalOperatorPrettyPrintVisitor(ev); - PlanPrettyPrinter.printPlan(module.getBody(), sb, v, 0); + AlgebricksAppendable buffer = new AlgebricksAppendable(); + LogicalOperatorPrettyPrintVisitor v = new LogicalOperatorPrettyPrintVisitor(buffer, ev); + PlanPrettyPrinter.printPlan(module.getBody(), v, 0); + sb.append(buffer.toString()); } catch (AlgebricksException e) { e.printStackTrace(); }
