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/09/25 00:08:07 UTC

svn commit: r1389622 - in /incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery: functions/ runtime/functions/error/ runtime/functions/util/

Author: prestonc
Date: Mon Sep 24 22:08:07 2012
New Revision: 1389622

URL: http://svn.apache.org/viewvc?rev=1389622&view=rev
Log:
VXQUERY-31 Added a basic fn:error function.

Added:
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/error/
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/error/FnErrorScalarEvaluatorFactory.java   (with props)
Modified:
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/functions/builtin-functions.xml
    incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/functions/builtin-functions.xml
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/functions/builtin-functions.xml?rev=1389622&r1=1389621&r2=1389622&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/functions/builtin-functions.xml (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/functions/builtin-functions.xml Mon Sep 24 22:08:07 2012
@@ -314,12 +314,14 @@
     <!-- fn:error() as  none -->
     <function name="fn:error">
         <return type="none"/>
+        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.error.FnErrorScalarEvaluatorFactory"/>
     </function>
 
     <!-- fn:error($error as  xs:QName) as none -->
     <function name="fn:error">
         <param name="error" type="xs:QName"/>
         <return type="none"/>
+        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.error.FnErrorScalarEvaluatorFactory"/>
     </function>
 
     <!-- fn:error($error as  xs:QName?, $description as xs:string)  as none -->
@@ -327,6 +329,7 @@
         <param name="error" type="xs:QName?"/>
         <param name="description" type="xs:string"/>
         <return type="none"/>
+        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.error.FnErrorScalarEvaluatorFactory"/>
     </function>
 
     <!-- fn:error($error as  xs:QName?, $description as xs:string, $error-object as item()*)  as none -->
@@ -335,6 +338,7 @@
         <param name="description" type="xs:string"/>
         <param name="error-object" type="item()*"/>
         <return type="none"/>
+        <runtime type="scalar" class="org.apache.vxquery.runtime.functions.error.FnErrorScalarEvaluatorFactory"/>
     </function>
 
     <!-- fn:escape-html-uri($uri  as xs:string?) as  xs:string -->

Added: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/error/FnErrorScalarEvaluatorFactory.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/error/FnErrorScalarEvaluatorFactory.java?rev=1389622&view=auto
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/error/FnErrorScalarEvaluatorFactory.java (added)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/error/FnErrorScalarEvaluatorFactory.java Mon Sep 24 22:08:07 2012
@@ -0,0 +1,124 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.apache.vxquery.runtime.functions.error;
+
+import java.io.DataInputStream;
+
+import org.apache.vxquery.datamodel.accessors.SequencePointable;
+import org.apache.vxquery.datamodel.accessors.TaggedValuePointable;
+import org.apache.vxquery.datamodel.accessors.atomic.XSQNamePointable;
+import org.apache.vxquery.datamodel.values.ValueTag;
+import org.apache.vxquery.exceptions.ErrorCode;
+import org.apache.vxquery.exceptions.SystemException;
+import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluator;
+import org.apache.vxquery.runtime.functions.base.AbstractTaggedValueArgumentScalarEvaluatorFactory;
+import org.apache.vxquery.runtime.functions.util.FunctionHelper;
+
+import edu.uci.ics.hyracks.algebricks.common.exceptions.AlgebricksException;
+import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import edu.uci.ics.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
+import edu.uci.ics.hyracks.api.context.IHyracksTaskContext;
+import edu.uci.ics.hyracks.data.std.api.IPointable;
+import edu.uci.ics.hyracks.data.std.primitive.UTF8StringPointable;
+import edu.uci.ics.hyracks.dataflow.common.comm.util.ByteBufferInputStream;
+
+public class FnErrorScalarEvaluatorFactory extends AbstractTaggedValueArgumentScalarEvaluatorFactory {
+    private static final long serialVersionUID = 1L;
+
+    public FnErrorScalarEvaluatorFactory(IScalarEvaluatorFactory[] args) {
+        super(args);
+    }
+
+    @Override
+    protected IScalarEvaluator createEvaluator(IHyracksTaskContext ctx, IScalarEvaluator[] args)
+            throws AlgebricksException {
+        final XSQNamePointable qnamep = (XSQNamePointable) XSQNamePointable.FACTORY.createPointable();
+        final SequencePointable seqp = (SequencePointable) SequencePointable.FACTORY.createPointable();
+        final UTF8StringPointable urip = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable();
+        final UTF8StringPointable localnamep = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable();
+        final UTF8StringPointable prefixp = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable();
+        final UTF8StringPointable descriptionp = (UTF8StringPointable) UTF8StringPointable.FACTORY.createPointable();
+
+        final ByteBufferInputStream bbis = new ByteBufferInputStream();
+        final DataInputStream di = new DataInputStream(bbis);
+
+        return new AbstractTaggedValueArgumentScalarEvaluator(args) {
+            @Override
+            protected void evaluate(TaggedValuePointable[] args, IPointable result) throws SystemException {
+
+                // No parameters.
+                if (args.length == 0) {
+                    throw new SystemException(ErrorCode.FOER0000);
+                }
+                String namespaceURI;
+                String localPart;
+
+                // Only QName parameter.
+                if (args.length == 1) {
+                    TaggedValuePointable tvp1 = args[0];
+                    if (tvp1.getTag() != ValueTag.XS_QNAME_TAG) {
+                        throw new SystemException(ErrorCode.FORG0006);
+                    }
+                    tvp1.getValue(qnamep);
+                    qnamep.getUri(urip);
+                    qnamep.getLocalName(localnamep);
+                    namespaceURI = FunctionHelper.getStringFromPointable(urip, bbis, di);
+                    localPart = FunctionHelper.getStringFromPointable(localnamep, bbis, di);
+
+                    // TODO Update to dynamic error.
+                    throw new SystemException(ErrorCode.FOER0000);
+                }
+                
+                // Only QName, description and optional error-object parameters.
+                if (args.length > 1) {
+                    TaggedValuePointable tvp1 = args[0];
+                    if (tvp1.getTag() == ValueTag.SEQUENCE_TAG) {
+                        tvp1.getValue(seqp);
+                        if (seqp.getEntryCount() == 0) {
+                            namespaceURI = "http://www.w3.org/2005/xqt-errors";
+                            localPart = "FOER0000";
+                        } else {
+                            throw new SystemException(ErrorCode.FORG0006);
+                        }
+                    } else if (tvp1.getTag() == ValueTag.XS_QNAME_TAG) {
+                        tvp1.getValue(qnamep);
+                        qnamep.getUri(urip);
+                        qnamep.getLocalName(localnamep);
+                        namespaceURI = FunctionHelper.getStringFromPointable(urip, bbis, di);
+                        localPart = FunctionHelper.getStringFromPointable(localnamep, bbis, di);
+                    } else {
+                        throw new SystemException(ErrorCode.FORG0006);
+                    }
+
+                    TaggedValuePointable tvp2 = args[1];
+                    if (tvp2.getTag() != ValueTag.XS_STRING_TAG) {
+                        throw new SystemException(ErrorCode.FORG0006);
+                    }
+                    tvp2.getValue(descriptionp);
+
+                    if (args.length == 3) {
+                        TaggedValuePointable tvp3 = args[2];
+                        // TODO do something with last parameter.
+                    }
+
+                    // TODO Update to dynamic error.
+                    throw new SystemException(ErrorCode.FOER0000);
+                }
+            }
+        };
+    }
+}
\ No newline at end of file

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

Modified: incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java
URL: http://svn.apache.org/viewvc/incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java?rev=1389622&r1=1389621&r2=1389622&view=diff
==============================================================================
--- incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java (original)
+++ incubator/vxquery/trunk/vxquery/vxquery-core/src/main/java/org/apache/vxquery/runtime/functions/util/FunctionHelper.java Mon Sep 24 22:08:07 2012
@@ -680,6 +680,18 @@ public class FunctionHelper {
         dOut.writeLong(value);
     }
 
+    public static String getStringFromPointable(UTF8StringPointable stringp, ByteBufferInputStream bbis,
+            DataInputStream di) throws SystemException {
+        try {
+            bbis.setByteBuffer(
+                    ByteBuffer.wrap(Arrays.copyOfRange(stringp.getByteArray(), stringp.getStartOffset(),
+                            stringp.getLength() + stringp.getStartOffset())), 0);
+            return di.readUTF();
+        } catch (IOException e) {
+            throw new SystemException(ErrorCode.SYSE0001, e);
+        }
+    }
+
     public static long getTimezone(ITimezone timezonep) {
         return timezonep.getTimezoneHour() * DateTime.CHRONON_OF_HOUR + timezonep.getTimezoneMinute()
                 * DateTime.CHRONON_OF_MINUTE;
@@ -744,15 +756,8 @@ public class FunctionHelper {
 
     public static void readInDocFromPointable(UTF8StringPointable stringp, InputSource in, ByteBufferInputStream bbis,
             DataInputStream di, ArrayBackedValueStorage abvs) throws SystemException {
-        try {
-            bbis.setByteBuffer(
-                    ByteBuffer.wrap(Arrays.copyOfRange(stringp.getByteArray(), stringp.getStartOffset(),
-                            stringp.getLength() + stringp.getStartOffset())), 0);
-            String fName = di.readUTF();
-            readInDocFromString(fName, in, abvs);
-        } catch (IOException e) {
-            throw new SystemException(ErrorCode.SYSE0001, e);
-        }
+        String fName = getStringFromPointable(stringp, bbis, di);
+        readInDocFromString(fName, in, abvs);
     }
 
     public static void readInDocFromString(String fName, InputSource in, ArrayBackedValueStorage abvs)