You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by bu...@apache.org on 2016/11/01 03:08:26 UTC

[17/22] asterixdb git commit: Unify runtime type exceptions by using error code and message template.

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/52671a2c/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/AbstractTypeCheckEvaluator.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/AbstractTypeCheckEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/AbstractTypeCheckEvaluator.java
index 2866f7b..0fa6c0e 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/AbstractTypeCheckEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/AbstractTypeCheckEvaluator.java
@@ -24,7 +24,6 @@ import java.io.DataOutput;
 import org.apache.asterix.dataflow.data.nontagged.serde.AObjectSerializerDeserializer;
 import org.apache.asterix.om.base.ABoolean;
 import org.apache.asterix.om.types.ATypeTag;
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.data.std.api.IPointable;
@@ -52,7 +51,7 @@ public abstract class AbstractTypeCheckEvaluator implements IScalarEvaluator {
     }
 
     @Override
-    public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
+    public void evaluate(IFrameTupleReference tuple, IPointable result) throws HyracksDataException {
         eval.evaluate(tuple, argPtr);
         Value match = isMatch(argPtr.getByteArray()[argPtr.getStartOffset()]);
         if (match == Value.MISSING) {
@@ -60,13 +59,9 @@ public abstract class AbstractTypeCheckEvaluator implements IScalarEvaluator {
             return;
         }
         ABoolean res = match == Value.TRUE ? ABoolean.TRUE : ABoolean.FALSE;
-        try {
-            resultStorage.reset();
-            aObjSerDer.serialize(res, out);
-            result.set(resultStorage);
-        } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
-        }
+        resultStorage.reset();
+        aObjSerDer.serialize(res, out);
+        result.set(resultStorage);
     }
 
     protected abstract Value isMatch(byte typeTag);

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/52671a2c/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/AccessibleByteArrayEval.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/AccessibleByteArrayEval.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/AccessibleByteArrayEval.java
index f621241..bc7cc03 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/AccessibleByteArrayEval.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/AccessibleByteArrayEval.java
@@ -21,8 +21,8 @@ package org.apache.asterix.runtime.evaluators.common;
 import java.io.DataOutput;
 import java.io.DataOutputStream;
 
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.data.std.api.IPointable;
 import org.apache.hyracks.data.std.util.ByteArrayAccessibleOutputStream;
 import org.apache.hyracks.dataflow.common.data.accessors.IFrameTupleReference;
@@ -42,14 +42,10 @@ public class AccessibleByteArrayEval implements IScalarEvaluator {
     }
 
     @Override
-    public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
+    public void evaluate(IFrameTupleReference tuple, IPointable result) throws HyracksDataException {
         result.set(baaos.getByteArray(), 0, baaos.size());
     }
 
-    public ByteArrayAccessibleOutputStream getBaaos() {
-        return baaos;
-    }
-
     public void reset() {
         baaos.reset();
     }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/52671a2c/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/AsterixListAccessor.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/AsterixListAccessor.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/AsterixListAccessor.java
index c16d3d1..aa5b0b5 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/AsterixListAccessor.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/AsterixListAccessor.java
@@ -28,6 +28,8 @@ import org.apache.asterix.dataflow.data.nontagged.serde.AUnorderedListSerializer
 import org.apache.asterix.om.types.ATypeTag;
 import org.apache.asterix.om.types.EnumDeserializer;
 import org.apache.asterix.om.util.NonTaggedFormatUtil;
+import org.apache.asterix.runtime.exceptions.TypeMismatchException;
+import org.apache.hyracks.api.exceptions.HyracksDataException;
 
 /**
  * Utility class for accessing serialized unordered and ordered lists.
@@ -52,15 +54,18 @@ public class AsterixListAccessor {
         return itemType == ATypeTag.ANY;
     }
 
-    public void reset(byte[] listBytes, int start) throws AsterixException {
+    public void reset(byte[] listBytes, int start) throws HyracksDataException {
         this.listBytes = listBytes;
         this.start = start;
-        listType = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(listBytes[start]);
-        if (listType != ATypeTag.UNORDEREDLIST && listType != ATypeTag.ORDEREDLIST) {
-            throw new AsterixException("Unsupported type: " + listType);
+        byte typeTag = listBytes[start];
+        if (typeTag != ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG
+                && typeTag != ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG) {
+            throw new TypeMismatchException("list-accessor", 0, listBytes[start],
+                    ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG, ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG);
         }
+        listType = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(listBytes[start]);
         itemType = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(listBytes[start + 1]);
-        if (listType == ATypeTag.UNORDEREDLIST) {
+        if (listBytes[start] == ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG) {
             size = AUnorderedListSerializerDeserializer.getNumberOfItems(listBytes, start);
         } else {
             size = AOrderedListSerializerDeserializer.getNumberOfItems(listBytes, start);

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/52671a2c/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/ClosedRecordConstructorEvalFactory.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/ClosedRecordConstructorEvalFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/ClosedRecordConstructorEvalFactory.java
index f0ce758..1dd7089 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/ClosedRecordConstructorEvalFactory.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/ClosedRecordConstructorEvalFactory.java
@@ -24,7 +24,6 @@ import java.io.DataOutput;
 import org.apache.asterix.builders.IARecordBuilder;
 import org.apache.asterix.builders.RecordBuilder;
 import org.apache.asterix.om.types.ARecordType;
-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;
@@ -47,7 +46,7 @@ public class ClosedRecordConstructorEvalFactory implements IScalarEvaluatorFacto
     }
 
     @Override
-    public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws AlgebricksException {
+    public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
         int n = args.length / 2;
         IScalarEvaluator[] evalFields = new IScalarEvaluator[n];
         for (int i = 0; i < n; i++) {
@@ -71,23 +70,19 @@ public class ClosedRecordConstructorEvalFactory implements IScalarEvaluatorFacto
         }
 
         @Override
-        public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
-            try {
-                resultStorage.reset();
-                if (first) {
-                    first = false;
-                    recBuilder.reset(this.recType);
-                }
-                recBuilder.init();
-                for (int i = 0; i < evalFields.length; i++) {
-                    evalFields[i].evaluate(tuple, fieldValuePointable);
-                    recBuilder.addField(i, fieldValuePointable);
-                }
-                recBuilder.write(out, true);
-                result.set(resultStorage);
-            } catch (HyracksDataException e) {
-                throw new AlgebricksException(e);
+        public void evaluate(IFrameTupleReference tuple, IPointable result) throws HyracksDataException {
+            resultStorage.reset();
+            if (first) {
+                first = false;
+                recBuilder.reset(this.recType);
             }
+            recBuilder.init();
+            for (int i = 0; i < evalFields.length; i++) {
+                evalFields[i].evaluate(tuple, fieldValuePointable);
+                recBuilder.addField(i, fieldValuePointable);
+            }
+            recBuilder.write(out, true);
+            result.set(resultStorage);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/52671a2c/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/CreateMBREvalFactory.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/CreateMBREvalFactory.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/CreateMBREvalFactory.java
index 0a4d258..a1eb8ad 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/CreateMBREvalFactory.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/CreateMBREvalFactory.java
@@ -30,9 +30,10 @@ import org.apache.asterix.dataflow.data.nontagged.serde.ALineSerializerDeseriali
 import org.apache.asterix.dataflow.data.nontagged.serde.APointSerializerDeserializer;
 import org.apache.asterix.dataflow.data.nontagged.serde.APolygonSerializerDeserializer;
 import org.apache.asterix.dataflow.data.nontagged.serde.ARectangleSerializerDeserializer;
+import org.apache.asterix.runtime.exceptions.TypeMismatchException;
+import org.apache.asterix.om.functions.AsterixBuiltinFunctions;
 import org.apache.asterix.om.types.ATypeTag;
 import org.apache.asterix.om.types.EnumDeserializer;
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.common.exceptions.NotImplementedException;
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
@@ -59,7 +60,7 @@ public class CreateMBREvalFactory implements IScalarEvaluatorFactory {
     }
 
     @Override
-    public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws AlgebricksException {
+    public IScalarEvaluator createScalarEvaluator(IHyracksTaskContext ctx) throws HyracksDataException {
         return new IScalarEvaluator() {
             private final ArrayBackedValueStorage resultStorage = new ArrayBackedValueStorage();
             private final DataOutput out = resultStorage.getDataOutput();
@@ -72,7 +73,7 @@ public class CreateMBREvalFactory implements IScalarEvaluatorFactory {
             private IScalarEvaluator eval2 = coordinateEvalFactory.createScalarEvaluator(ctx);
 
             @Override
-            public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
+            public void evaluate(IFrameTupleReference tuple, IPointable result) throws HyracksDataException {
                 eval0.evaluate(tuple, inputArg0);
                 eval1.evaluate(tuple, inputArg1);
                 eval2.evaluate(tuple, inputArg2);
@@ -98,17 +99,18 @@ public class CreateMBREvalFactory implements IScalarEvaluatorFactory {
                         result.set(resultStorage);
                         return;
                     }
-
                     resultStorage.reset();
-                    // type-check: (Point/Line/Polygon/Circle/Rectangle/Null, Int32, Int32)
-                    if (data1[startOffset1] != ATypeTag.SERIALIZED_INT32_TYPE_TAG
-                            || data2[startOffset2] != ATypeTag.SERIALIZED_INT32_TYPE_TAG) {
-                        throw new AlgebricksException(
-                                "Expects Types: (Point/Line/Polygon/Circle/Rectangle/Null, Int32, Int32).");
+                    if (data1[startOffset1] != ATypeTag.SERIALIZED_INT32_TYPE_TAG) {
+                        throw new TypeMismatchException(AsterixBuiltinFunctions.CREATE_MBR, 1, data1[startOffset1],
+                                ATypeTag.SERIALIZED_INT32_TYPE_TAG);
                     }
-
                     int dimension = AInt32SerializerDeserializer.getInt(data1, startOffset1 + 1);
-                    int coordinate = AInt32SerializerDeserializer.getInt(inputArg2.getByteArray(), startOffset2 + 1);
+
+                    if (data2[startOffset2] != ATypeTag.SERIALIZED_INT32_TYPE_TAG) {
+                        throw new TypeMismatchException(AsterixBuiltinFunctions.CREATE_MBR, 2, data2[startOffset2],
+                                ATypeTag.SERIALIZED_INT32_TYPE_TAG);
+                    }
+                    int coordinate = AInt32SerializerDeserializer.getInt(data2, startOffset2 + 1);
                     double value;
                     if (dimension == 2) {
                         ATypeTag tag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(data0[startOffset0]);
@@ -293,7 +295,6 @@ public class CreateMBREvalFactory implements IScalarEvaluatorFactory {
                                 }
                                 break;
                             case RECTANGLE:
-                                value = Double.MAX_VALUE;
                                 switch (coordinate) {
                                     case 0: {
                                         value = ADoubleSerializerDeserializer.getDouble(data0,
@@ -326,20 +327,18 @@ public class CreateMBREvalFactory implements IScalarEvaluatorFactory {
                                 }
                                 break;
                             default:
-                                throw new NotImplementedException(
-                                        "create-mbr is only implemented for POINT, LINE, POLYGON, CIRCLE and RECTANGLE. Encountered type: "
-                                                + tag + ".");
-
+                                throw new TypeMismatchException(AsterixBuiltinFunctions.CREATE_MBR, 0,
+                                        data0[startOffset0], ATypeTag.SERIALIZED_POINT_TYPE_TAG,
+                                        ATypeTag.SERIALIZED_LINE_TYPE_TAG, ATypeTag.SERIALIZED_POLYGON_TYPE_TAG,
+                                        ATypeTag.SERIALIZED_CIRCLE_TYPE_TAG, ATypeTag.SERIALIZED_RECTANGLE_TYPE_TAG);
                         }
                     } else {
                         throw new NotImplementedException(dimension + "D is not supported");
                     }
                     out.writeByte(ATypeTag.SERIALIZED_DOUBLE_TYPE_TAG);
                     out.writeDouble(value);
-                } catch (HyracksDataException hde) {
-                    throw new AlgebricksException(hde);
                 } catch (IOException e) {
-                    throw new AlgebricksException(e);
+                    throw new HyracksDataException(e);
                 }
                 result.set(resultStorage);
             }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/52671a2c/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceCheckEvaluator.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceCheckEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceCheckEvaluator.java
index 3dca584..b9129a6 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceCheckEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceCheckEvaluator.java
@@ -29,7 +29,7 @@ import org.apache.asterix.om.types.ATypeTag;
 import org.apache.asterix.om.types.BuiltinType;
 import org.apache.asterix.om.types.EnumDeserializer;
 import org.apache.asterix.om.types.hierachy.ATypeHierarchy;
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.asterix.runtime.exceptions.TypeMismatchException;
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
 import org.apache.hyracks.api.context.IHyracksTaskContext;
@@ -52,7 +52,7 @@ public class EditDistanceCheckEvaluator extends EditDistanceEvaluator {
             .getSerializerDeserializer(BuiltinType.ABOOLEAN);
 
     public EditDistanceCheckEvaluator(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
-            throws AlgebricksException {
+            throws HyracksDataException {
         super(args, context);
         edThreshEval = args[2].createScalarEvaluator(context);
         listBuilder = new OrderedListBuilder();
@@ -60,9 +60,8 @@ public class EditDistanceCheckEvaluator extends EditDistanceEvaluator {
     }
 
     @Override
-    public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
+    public void evaluate(IFrameTupleReference tuple, IPointable result) throws HyracksDataException {
         resultStorage.reset();
-
         firstStringEval.evaluate(tuple, argPtr1);
         firstTypeTag = EnumDeserializer.ATYPETAGDESERIALIZER
                 .deserialize(argPtr1.getByteArray()[argPtr1.getStartOffset()]);
@@ -76,18 +75,19 @@ public class EditDistanceCheckEvaluator extends EditDistanceEvaluator {
             return;
         }
         try {
-            edThresh = ATypeHierarchy.getIntegerValue(argPtrThreshold.getByteArray(), argPtrThreshold.getStartOffset());
+            edThresh = ATypeHierarchy.getIntegerValue(AsterixBuiltinFunctions.EDIT_DISTANCE_CHECK.getName(), 2,
+                    argPtrThreshold.getByteArray(), argPtrThreshold.getStartOffset());
             editDistance = computeResult(argPtr1, argPtr2, firstTypeTag);
             writeResult(editDistance);
         } catch (IOException e) {
-            throw new AlgebricksException(e);
+            throw new HyracksDataException(e);
         }
         result.set(resultStorage);
     }
 
     @Override
     protected int computeResult(IPointable left, IPointable right, ATypeTag argType)
-            throws AlgebricksException, HyracksDataException {
+            throws HyracksDataException {
         byte[] leftBytes = left.getByteArray();
         int leftStartOffset = left.getStartOffset();
         byte[] rightBytes = right.getByteArray();
@@ -105,8 +105,8 @@ public class EditDistanceCheckEvaluator extends EditDistanceEvaluator {
             }
 
             default: {
-                throw new AlgebricksException(AsterixBuiltinFunctions.EDIT_DISTANCE_CHECK.getName()
-                        + ": expects input type as STRING or ORDEREDLIST but got " + argType + ".");
+                throw new TypeMismatchException(AsterixBuiltinFunctions.EDIT_DISTANCE_CHECK, 0, argType.serialize(),
+                        ATypeTag.SERIALIZED_STRING_TYPE_TAG, ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG);
             }
 
         }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/52671a2c/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceContainsEvaluator.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceContainsEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceContainsEvaluator.java
index 23a01d8..e108916 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceContainsEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceContainsEvaluator.java
@@ -18,9 +18,9 @@
  */
 package org.apache.asterix.runtime.evaluators.common;
 
+import org.apache.asterix.runtime.exceptions.TypeMismatchException;
 import org.apache.asterix.om.functions.AsterixBuiltinFunctions;
 import org.apache.asterix.om.types.ATypeTag;
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
 import org.apache.hyracks.api.context.IHyracksTaskContext;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
@@ -29,12 +29,12 @@ import org.apache.hyracks.data.std.api.IPointable;
 public class EditDistanceContainsEvaluator extends EditDistanceCheckEvaluator {
 
     public EditDistanceContainsEvaluator(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
-            throws AlgebricksException {
+            throws HyracksDataException {
         super(args, context);
     }
 
     @Override
-    protected int computeResult(IPointable left, IPointable right, ATypeTag argType) throws AlgebricksException {
+    protected int computeResult(IPointable left, IPointable right, ATypeTag argType) throws HyracksDataException {
         byte[] leftBytes = left.getByteArray();
         int leftStartOffset = left.getStartOffset();
         byte[] rightBytes = right.getByteArray();
@@ -46,17 +46,13 @@ public class EditDistanceContainsEvaluator extends EditDistanceCheckEvaluator {
                         rightStartOffset + typeIndicatorSize, edThresh);
             }
             case ORDEREDLIST: {
-                try {
-                    firstOrdListIter.reset(leftBytes, leftStartOffset);
-                    secondOrdListIter.reset(rightBytes, rightStartOffset);
-                    return ed.getSimilarityContains(firstOrdListIter, secondOrdListIter, edThresh);
-                } catch (HyracksDataException e) {
-                    throw new AlgebricksException(e);
-                }
+                firstOrdListIter.reset(leftBytes, leftStartOffset);
+                secondOrdListIter.reset(rightBytes, rightStartOffset);
+                return ed.getSimilarityContains(firstOrdListIter, secondOrdListIter, edThresh);
             }
             default: {
-                throw new AlgebricksException(AsterixBuiltinFunctions.EDIT_DISTANCE_CONTAINS.getName()
-                        + ": expects input type as STRING or ORDEREDLIST but got " + argType + ".");
+                throw new TypeMismatchException(AsterixBuiltinFunctions.EDIT_DISTANCE_CONTAINS, 0, argType.serialize(),
+                        ATypeTag.SERIALIZED_STRING_TYPE_TAG, ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG);
             }
         }
     }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/52671a2c/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceEvaluator.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceEvaluator.java
index d2adc1c..efab277 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/EditDistanceEvaluator.java
@@ -25,10 +25,13 @@ import org.apache.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
 import org.apache.asterix.fuzzyjoin.similarity.SimilarityMetricEditDistance;
 import org.apache.asterix.om.base.AInt64;
 import org.apache.asterix.om.base.AMutableInt64;
+import org.apache.asterix.om.functions.AsterixBuiltinFunctions;
 import org.apache.asterix.om.types.ATypeTag;
 import org.apache.asterix.om.types.BuiltinType;
 import org.apache.asterix.om.types.EnumDeserializer;
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.asterix.runtime.exceptions.IncompatibleTypeException;
+import org.apache.asterix.runtime.exceptions.TypeMismatchException;
+import org.apache.asterix.runtime.exceptions.UnsupportedItemTypeException;
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
 import org.apache.hyracks.api.context.IHyracksTaskContext;
@@ -64,15 +67,14 @@ public class EditDistanceEvaluator implements IScalarEvaluator {
     protected ATypeTag secondTypeTag;
 
     public EditDistanceEvaluator(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
-            throws AlgebricksException {
+            throws HyracksDataException {
         firstStringEval = args[0].createScalarEvaluator(context);
         secondStringEval = args[1].createScalarEvaluator(context);
     }
 
     @Override
-    public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
+    public void evaluate(IFrameTupleReference tuple, IPointable result) throws HyracksDataException {
         resultStorage.reset();
-
         firstStringEval.evaluate(tuple, argPtr1);
         firstTypeTag = EnumDeserializer.ATYPETAGDESERIALIZER
                 .deserialize(argPtr1.getByteArray()[argPtr1.getStartOffset()]);
@@ -85,22 +87,17 @@ public class EditDistanceEvaluator implements IScalarEvaluator {
             return;
         }
 
-        try {
-            editDistance = computeResult(argPtr1, argPtr2, firstTypeTag);
-        } catch (HyracksDataException e1) {
-            throw new AlgebricksException(e1);
-        }
-
+        editDistance = computeResult(argPtr1, argPtr2, firstTypeTag);
         try {
             writeResult(editDistance);
         } catch (IOException e) {
-            throw new AlgebricksException(e);
+            throw new HyracksDataException(e);
         }
         result.set(resultStorage);
     }
 
     protected int computeResult(IPointable left, IPointable right, ATypeTag argType)
-            throws AlgebricksException, HyracksDataException {
+            throws HyracksDataException {
         byte[] leftBytes = left.getByteArray();
         int leftStartOffset = left.getStartOffset();
         byte[] rightBytes = right.getByteArray();
@@ -114,43 +111,38 @@ public class EditDistanceEvaluator implements IScalarEvaluator {
             case ORDEREDLIST: {
                 firstOrdListIter.reset(leftBytes, leftStartOffset);
                 secondOrdListIter.reset(rightBytes, rightStartOffset);
-                try {
-                    return (int) ed.getSimilarity(firstOrdListIter, secondOrdListIter);
-                } catch (HyracksDataException e) {
-                    throw new AlgebricksException(e);
-                }
+                return (int) ed.getSimilarity(firstOrdListIter, secondOrdListIter);
             }
-
             default: {
-                throw new AlgebricksException(
-                        "Invalid type " + argType + " passed as argument to edit distance function.");
+                throw new TypeMismatchException(AsterixBuiltinFunctions.EDIT_DISTANCE, 0, argType.serialize(),
+                        ATypeTag.SERIALIZED_STRING_TYPE_TAG, ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG);
             }
 
         }
     }
 
-    protected boolean checkArgTypes(ATypeTag typeTag1, ATypeTag typeTag2) throws AlgebricksException {
+    protected boolean checkArgTypes(ATypeTag typeTag1, ATypeTag typeTag2) throws HyracksDataException {
         if (typeTag1 != typeTag2) {
-            throw new AlgebricksException(
-                    "Incompatible argument types given in edit distance: " + typeTag1 + " " + typeTag2);
+            throw new IncompatibleTypeException(AsterixBuiltinFunctions.EDIT_DISTANCE, typeTag1.serialize(),
+                    typeTag2.serialize());
         }
 
         // Since they are equal, check one tag is enough.
         if (typeTag1 != ATypeTag.STRING && typeTag1 != ATypeTag.ORDEREDLIST) { // could be an list
-            throw new AlgebricksException(
-                    "Only String or OrderedList type are allowed in edit distance, but given : " + typeTag1);
+            throw new TypeMismatchException(AsterixBuiltinFunctions.EDIT_DISTANCE, 0, typeTag1.serialize(),
+                    ATypeTag.SERIALIZED_STRING_TYPE_TAG, ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG);
         }
 
         if (typeTag1 == ATypeTag.ORDEREDLIST) {
             itemTypeTag = EnumDeserializer.ATYPETAGDESERIALIZER
                     .deserialize(argPtr1.getByteArray()[argPtr1.getStartOffset() + 1]);
             if (itemTypeTag == ATypeTag.ANY) {
-                throw new AlgebricksException("\n Edit Distance can only be called on homogenous lists");
+                throw new UnsupportedItemTypeException(AsterixBuiltinFunctions.EDIT_DISTANCE, itemTypeTag.serialize());
             }
             itemTypeTag = EnumDeserializer.ATYPETAGDESERIALIZER
                     .deserialize(argPtr2.getByteArray()[argPtr2.getStartOffset() + 1]);
             if (itemTypeTag == ATypeTag.ANY) {
-                throw new AlgebricksException("\n Edit Distance can only be called on homogenous lists");
+                throw new UnsupportedItemTypeException(AsterixBuiltinFunctions.EDIT_DISTANCE, itemTypeTag.serialize());
             }
         }
         return true;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/52671a2c/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/GramTokensEvaluator.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/GramTokensEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/GramTokensEvaluator.java
index ed20b26..f41f02e 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/GramTokensEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/GramTokensEvaluator.java
@@ -22,10 +22,10 @@ import java.io.DataOutput;
 import java.io.IOException;
 
 import org.apache.asterix.builders.OrderedListBuilder;
+import org.apache.asterix.om.functions.AsterixBuiltinFunctions;
 import org.apache.asterix.om.types.AOrderedListType;
 import org.apache.asterix.om.types.BuiltinType;
 import org.apache.asterix.om.types.hierachy.ATypeHierarchy;
-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;
@@ -57,7 +57,7 @@ public class GramTokensEvaluator implements IScalarEvaluator {
     private final AOrderedListType listType;
 
     public GramTokensEvaluator(IScalarEvaluatorFactory[] args, IHyracksTaskContext context, IBinaryTokenizer tokenizer,
-            BuiltinType itemType) throws AlgebricksException {
+            BuiltinType itemType) throws HyracksDataException {
         stringEval = args[0].createScalarEvaluator(context);
         gramLengthEval = args[1].createScalarEvaluator(context);
         prePostEval = args[2].createScalarEvaluator(context);
@@ -66,19 +66,14 @@ public class GramTokensEvaluator implements IScalarEvaluator {
     }
 
     @Override
-    public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
+    public void evaluate(IFrameTupleReference tuple, IPointable result) throws HyracksDataException {
         resultStorage.reset();
         stringEval.evaluate(tuple, stringArg);
         gramLengthEval.evaluate(tuple, gramLengthArg);
         prePostEval.evaluate(tuple, prePostArg);
 
-        int gramLength = 0;
-        try {
-            gramLength = ATypeHierarchy.getIntegerValue(gramLengthArg.getByteArray(), gramLengthArg.getStartOffset());
-        } catch (HyracksDataException e1) {
-            throw new AlgebricksException(e1);
-        }
-
+        int gramLength = ATypeHierarchy.getIntegerValue(AsterixBuiltinFunctions.GRAM_TOKENS.getName(), 1,
+                gramLengthArg.getByteArray(), gramLengthArg.getStartOffset());
         tokenizer.setGramlength(gramLength);
         boolean prePost = BooleanPointable.getBoolean(prePostArg.getByteArray(),
                 prePostArg.getStartOffset() + typeIndicatorSize);
@@ -93,7 +88,7 @@ public class GramTokensEvaluator implements IScalarEvaluator {
             }
             listBuilder.write(out, true);
         } catch (IOException e) {
-            throw new AlgebricksException(e);
+            throw new HyracksDataException(e);
         }
         result.set(resultStorage);
     }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/52671a2c/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityFiltersCache.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityFiltersCache.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityFiltersCache.java
index 52988a0..37b06af 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityFiltersCache.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityFiltersCache.java
@@ -24,7 +24,6 @@ import java.util.Arrays;
 
 import org.apache.asterix.fuzzyjoin.similarity.SimilarityFilters;
 import org.apache.asterix.fuzzyjoin.similarity.SimilarityFiltersFactory;
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
 import org.apache.hyracks.dataflow.common.comm.util.ByteBufferInputStream;
 import org.apache.hyracks.dataflow.common.data.marshalling.UTF8StringSerializerDeserializer;
@@ -40,16 +39,11 @@ public class SimilarityFiltersCache {
     private SimilarityFilters similarityFiltersCached = null;
 
     public SimilarityFilters get(float similarityThreshold, byte[] similarityNameBytes, int startOffset, int len)
-            throws AlgebricksException {
+            throws HyracksDataException {
         if (similarityThreshold != similarityThresholdCached || similarityNameBytesCached == null
                 || !Arrays.equals(similarityNameBytes, similarityNameBytesCached)) {
             bbis.setByteBuffer(ByteBuffer.wrap(similarityNameBytes), startOffset + 1);
-            String similarityName;
-            try {
-                similarityName = utf8SerDer.deserialize(dis);
-            } catch (HyracksDataException e) {
-                throw new AlgebricksException(e);
-            }
+            String similarityName = utf8SerDer.deserialize(dis);
             similarityNameBytesCached = Arrays.copyOfRange(similarityNameBytes, startOffset, len);
             similarityFiltersCached = SimilarityFiltersFactory.getSimilarityFilters(similarityName,
                     similarityThreshold);

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/52671a2c/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardCheckEvaluator.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardCheckEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardCheckEvaluator.java
index f31b289..bcbaf0c 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardCheckEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardCheckEvaluator.java
@@ -28,7 +28,6 @@ import org.apache.asterix.om.types.AOrderedListType;
 import org.apache.asterix.om.types.BuiltinType;
 import org.apache.asterix.om.types.EnumDeserializer;
 import org.apache.asterix.runtime.evaluators.functions.BinaryHashMap.BinaryEntry;
-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;
@@ -54,7 +53,7 @@ public class SimilarityJaccardCheckEvaluator extends SimilarityJaccardEvaluator
     protected final AOrderedListType listType = new AOrderedListType(BuiltinType.ANY, "list");
 
     public SimilarityJaccardCheckEvaluator(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
-            throws AlgebricksException {
+            throws HyracksDataException {
         super(args, context);
         jaccThreshEval = args[2].createScalarEvaluator(context);
         listBuilder = new OrderedListBuilder();
@@ -62,7 +61,7 @@ public class SimilarityJaccardCheckEvaluator extends SimilarityJaccardEvaluator
     }
 
     @Override
-    public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
+    public void evaluate(IFrameTupleReference tuple, IPointable result) throws HyracksDataException {
         resultStorage.reset();
 
         firstOrdListEval.evaluate(tuple, argPtr1);
@@ -86,7 +85,7 @@ public class SimilarityJaccardCheckEvaluator extends SimilarityJaccardEvaluator
             result.set(resultStorage);
             return;
         }
-        if (prepareLists(argPtr1, argPtr2, firstTypeTag)) {
+        if (prepareLists(argPtr1, argPtr2)) {
             jaccSim = computeResult();
         } else {
             jaccSim = 0.0f;
@@ -94,7 +93,7 @@ public class SimilarityJaccardCheckEvaluator extends SimilarityJaccardEvaluator
         try {
             writeResult(jaccSim);
         } catch (IOException e) {
-            throw new AlgebricksException(e);
+            throw new HyracksDataException(e);
         }
         result.set(resultStorage);
     }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/52671a2c/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardEvaluator.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardEvaluator.java
index 01c4b6b..01acf25 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardEvaluator.java
@@ -27,12 +27,13 @@ import org.apache.asterix.dataflow.data.nontagged.hash.ListItemBinaryHashFunctio
 import org.apache.asterix.formats.nontagged.AqlSerializerDeserializerProvider;
 import org.apache.asterix.om.base.AFloat;
 import org.apache.asterix.om.base.AMutableFloat;
+import org.apache.asterix.runtime.exceptions.TypeMismatchException;
+import org.apache.asterix.om.functions.AsterixBuiltinFunctions;
 import org.apache.asterix.om.types.ATypeTag;
 import org.apache.asterix.om.types.BuiltinType;
 import org.apache.asterix.om.types.EnumDeserializer;
 import org.apache.asterix.runtime.evaluators.functions.BinaryHashMap;
 import org.apache.asterix.runtime.evaluators.functions.BinaryHashMap.BinaryEntry;
-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;
@@ -89,7 +90,7 @@ public class SimilarityJaccardEvaluator implements IScalarEvaluator {
     protected final boolean ignoreCase = true;
 
     public SimilarityJaccardEvaluator(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
-            throws AlgebricksException {
+            throws HyracksDataException {
         firstOrdListEval = args[0].createScalarEvaluator(context);
         secondOrdListEval = args[1].createScalarEvaluator(context);
         byte[] emptyValBuf = new byte[8];
@@ -98,7 +99,7 @@ public class SimilarityJaccardEvaluator implements IScalarEvaluator {
     }
 
     @Override
-    public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
+    public void evaluate(IFrameTupleReference tuple, IPointable result) throws HyracksDataException {
         resultStorage.reset();
 
         firstOrdListEval.evaluate(tuple, argPtr1);
@@ -118,7 +119,7 @@ public class SimilarityJaccardEvaluator implements IScalarEvaluator {
             result.set(resultStorage);
             return;
         }
-        if (prepareLists(argPtr1, argPtr2, firstTypeTag)) {
+        if (prepareLists(argPtr1, argPtr2)) {
             jaccSim = computeResult();
         } else {
             jaccSim = 0.0f;
@@ -126,18 +127,14 @@ public class SimilarityJaccardEvaluator implements IScalarEvaluator {
         try {
             writeResult(jaccSim);
         } catch (IOException e) {
-            throw new AlgebricksException(e);
+            throw new HyracksDataException(e);
         }
         result.set(resultStorage);
     }
 
-    protected boolean prepareLists(IPointable left, IPointable right, ATypeTag argType) throws AlgebricksException {
-        try {
-            firstListIter.reset(left.getByteArray(), left.getStartOffset());
-            secondListIter.reset(right.getByteArray(), right.getStartOffset());
-        } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
-        }
+    protected boolean prepareLists(IPointable left, IPointable right) throws HyracksDataException {
+        firstListIter.reset(left.getByteArray(), left.getStartOffset());
+        secondListIter.reset(right.getByteArray(), right.getStartOffset());
         // Check for special case where one of the lists is empty, since list
         // types won't match.
         if (firstListIter.size() == 0 || secondListIter.size() == 0) {
@@ -147,7 +144,7 @@ public class SimilarityJaccardEvaluator implements IScalarEvaluator {
         return true;
     }
 
-    protected float computeResult() throws AlgebricksException {
+    protected float computeResult() throws HyracksDataException {
         // We will subtract the intersection size later to get the real union size.
         int firstListSize = firstListIter.size();
         int secondListSize = secondListIter.size();
@@ -161,18 +158,14 @@ public class SimilarityJaccardEvaluator implements IScalarEvaluator {
         ATypeTag probeItemTypeTag = (probeList == firstListIter) ? firstItemTypeTag : secondItemTypeTag;
 
         setHashMap(buildItemTypeTag, probeItemTypeTag);
-        try {
-            buildHashMap(buildList);
-            int intersectionSize = probeHashMap(probeList, buildListSize, probeListSize);
-            // Special indicator for the "check" version of jaccard.
-            if (intersectionSize < 0) {
-                return -1;
-            }
-            unionSize -= intersectionSize;
-            return (float) intersectionSize / (float) unionSize;
-        } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+        buildHashMap(buildList);
+        int intersectionSize = probeHashMap(probeList, buildListSize, probeListSize);
+        // Special indicator for the "check" version of jaccard.
+        if (intersectionSize < 0) {
+            return -1;
         }
+        unionSize -= intersectionSize;
+        return (float) intersectionSize / (float) unionSize;
     }
 
     protected void buildHashMap(AbstractAsterixListIterator buildIter) throws HyracksDataException {
@@ -239,7 +232,7 @@ public class SimilarityJaccardEvaluator implements IScalarEvaluator {
         hashMap = new BinaryHashMap(TABLE_SIZE, TABLE_FRAME_SIZE, putHashFunc, getHashFunc, cmp);
     }
 
-    protected boolean checkArgTypes(ATypeTag typeTag1, ATypeTag typeTag2) throws AlgebricksException {
+    protected boolean checkArgTypes(ATypeTag typeTag1, ATypeTag typeTag2) throws HyracksDataException {
         switch (typeTag1) {
             case ORDEREDLIST: {
                 firstListIter = fstOrdListIter;
@@ -250,7 +243,8 @@ public class SimilarityJaccardEvaluator implements IScalarEvaluator {
                 break;
             }
             default: {
-                throw new AlgebricksException("Invalid types " + typeTag1 + " given as arguments to jaccard.");
+                throw new TypeMismatchException(AsterixBuiltinFunctions.SIMILARITY_JACCARD, 0, typeTag1.serialize(),
+                        ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG, ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG);
             }
         }
         switch (typeTag2) {
@@ -263,7 +257,8 @@ public class SimilarityJaccardEvaluator implements IScalarEvaluator {
                 break;
             }
             default: {
-                throw new AlgebricksException("Invalid types " + typeTag2 + " given as arguments to jaccard.");
+                throw new TypeMismatchException(AsterixBuiltinFunctions.SIMILARITY_JACCARD, 1, typeTag2.serialize(),
+                        ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG, ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG);
             }
         }
         return true;

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/52671a2c/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardPrefixEvaluator.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardPrefixEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardPrefixEvaluator.java
index 5ab9e35..d1060c6 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardPrefixEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardPrefixEvaluator.java
@@ -32,11 +32,11 @@ import org.apache.asterix.fuzzyjoin.similarity.SimilarityFiltersJaccard;
 import org.apache.asterix.fuzzyjoin.similarity.SimilarityMetric;
 import org.apache.asterix.om.base.AFloat;
 import org.apache.asterix.om.base.AMutableFloat;
+import org.apache.asterix.om.functions.AsterixBuiltinFunctions;
 import org.apache.asterix.om.types.ATypeTag;
 import org.apache.asterix.om.types.BuiltinType;
-import org.apache.asterix.om.types.EnumDeserializer;
 import org.apache.asterix.om.types.hierachy.ATypeHierarchy;
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.asterix.runtime.exceptions.TypeMismatchException;
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
 import org.apache.hyracks.api.context.IHyracksTaskContext;
@@ -76,7 +76,7 @@ public class SimilarityJaccardPrefixEvaluator implements IScalarEvaluator {
             .getSerializerDeserializer(BuiltinType.AFLOAT);
 
     public SimilarityJaccardPrefixEvaluator(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
-            throws AlgebricksException {
+            throws HyracksDataException {
         evalLen1 = args[0].createScalarEvaluator(context);
         evalTokens1 = args[1].createScalarEvaluator(context);
         evalLen2 = args[2].createScalarEvaluator(context);
@@ -86,7 +86,7 @@ public class SimilarityJaccardPrefixEvaluator implements IScalarEvaluator {
     }
 
     @Override
-    public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
+    public void evaluate(IFrameTupleReference tuple, IPointable result) throws HyracksDataException {
         resultStorage.reset();
         // similarity threshold
         sim = 0;
@@ -100,21 +100,11 @@ public class SimilarityJaccardPrefixEvaluator implements IScalarEvaluator {
         }
 
         evalLen1.evaluate(tuple, inputVal);
-        int length1 = 0;
-        try {
-            length1 = ATypeHierarchy.getIntegerValue(inputVal.getByteArray(), inputVal.getStartOffset());
-        } catch (HyracksDataException e1) {
-            throw new AlgebricksException(e1);
-        }
-
+        int length1 = ATypeHierarchy.getIntegerValue(AsterixBuiltinFunctions.SIMILARITY_JACCARD.getName(), 0,
+                inputVal.getByteArray(), inputVal.getStartOffset());
         evalLen2.evaluate(tuple, inputVal);
-        int length2 = 0;
-
-        try {
-            length2 = ATypeHierarchy.getIntegerValue(inputVal.getByteArray(), inputVal.getStartOffset());
-        } catch (HyracksDataException e1) {
-            throw new AlgebricksException(e1);
-        }
+        int length2 = ATypeHierarchy.getIntegerValue(AsterixBuiltinFunctions.SIMILARITY_JACCARD.getName(), 2,
+                inputVal.getByteArray(), inputVal.getStartOffset());
 
         //
         // -- - length filter - --
@@ -130,8 +120,8 @@ public class SimilarityJaccardPrefixEvaluator implements IScalarEvaluator {
             int startOffset = inputVal.getStartOffset();
             if (serList[startOffset] != ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG
                     && serList[startOffset] != ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG) {
-                throw new AlgebricksException("Scan collection is not defined for values of type"
-                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(serList[startOffset]));
+                throw new TypeMismatchException(AsterixBuiltinFunctions.SIMILARITY_JACCARD, 1, serList[startOffset],
+                        ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG, ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG);
             }
 
             int lengthTokens1;
@@ -145,15 +135,11 @@ public class SimilarityJaccardPrefixEvaluator implements IScalarEvaluator {
                     try {
                         itemOffset = AOrderedListSerializerDeserializer.getItemOffset(serList, startOffset, i);
                     } catch (AsterixException e) {
-                        throw new AlgebricksException(e);
+                        throw new HyracksDataException(e);
                     }
-
-                    try {
-                        token = ATypeHierarchy.getIntegerValueWithDifferentTypeTagPosition(serList, itemOffset,
+                    token = ATypeHierarchy.getIntegerValueWithDifferentTypeTagPosition(
+                            AsterixBuiltinFunctions.SIMILARITY_JACCARD.getName(), 1, serList, itemOffset,
                                 startOffset + 1);
-                    } catch (HyracksDataException e) {
-                        throw new AlgebricksException(e);
-                    }
                     tokens1.add(token);
                 }
             } else {
@@ -167,15 +153,12 @@ public class SimilarityJaccardPrefixEvaluator implements IScalarEvaluator {
                     try {
                         itemOffset = AUnorderedListSerializerDeserializer.getItemOffset(serList, startOffset, i);
                     } catch (AsterixException e) {
-                        throw new AlgebricksException(e);
+                        throw new HyracksDataException(e);
                     }
 
-                    try {
-                        token = ATypeHierarchy.getIntegerValueWithDifferentTypeTagPosition(serList, itemOffset,
+                    token = ATypeHierarchy.getIntegerValueWithDifferentTypeTagPosition(
+                            AsterixBuiltinFunctions.SIMILARITY_JACCARD.getName(), 1, serList, itemOffset,
                                 startOffset + 1);
-                    } catch (HyracksDataException e) {
-                        throw new AlgebricksException(e);
-                    }
                     tokens1.add(token);
                 }
             }
@@ -192,8 +175,8 @@ public class SimilarityJaccardPrefixEvaluator implements IScalarEvaluator {
             startOffset = inputVal.getStartOffset();
             if (serList[startOffset] != ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG
                     && serList[startOffset] != ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG) {
-                throw new AlgebricksException("Scan collection is not defined for values of type"
-                        + EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(serList[startOffset]));
+                throw new TypeMismatchException(AsterixBuiltinFunctions.SIMILARITY_JACCARD, 3, serList[startOffset],
+                        ATypeTag.SERIALIZED_ORDEREDLIST_TYPE_TAG, ATypeTag.SERIALIZED_UNORDEREDLIST_TYPE_TAG);
             }
 
             int lengthTokens2;
@@ -208,15 +191,11 @@ public class SimilarityJaccardPrefixEvaluator implements IScalarEvaluator {
                     try {
                         itemOffset = AOrderedListSerializerDeserializer.getItemOffset(serList, startOffset, i);
                     } catch (AsterixException e) {
-                        throw new AlgebricksException(e);
+                        throw new HyracksDataException(e);
                     }
-
-                    try {
-                        token = ATypeHierarchy.getIntegerValueWithDifferentTypeTagPosition(serList, itemOffset,
+                    token = ATypeHierarchy.getIntegerValueWithDifferentTypeTagPosition(
+                            AsterixBuiltinFunctions.SIMILARITY_JACCARD.getName(), 3, serList, itemOffset,
                                 startOffset + 1);
-                    } catch (HyracksDataException e) {
-                        throw new AlgebricksException(e);
-                    }
                     tokens2.add(token);
                 }
             } else {
@@ -230,15 +209,11 @@ public class SimilarityJaccardPrefixEvaluator implements IScalarEvaluator {
                     try {
                         itemOffset = AUnorderedListSerializerDeserializer.getItemOffset(serList, startOffset, i);
                     } catch (AsterixException e) {
-                        throw new AlgebricksException(e);
+                        throw new HyracksDataException(e);
                     }
-
-                    try {
-                        token = ATypeHierarchy.getIntegerValueWithDifferentTypeTagPosition(serList, itemOffset,
+                    token = ATypeHierarchy.getIntegerValueWithDifferentTypeTagPosition(
+                            AsterixBuiltinFunctions.SIMILARITY_JACCARD.getName(), 3, serList, itemOffset,
                                 startOffset + 1);
-                    } catch (HyracksDataException e) {
-                        throw new AlgebricksException(e);
-                    }
                     tokens2.add(token);
                 }
             }
@@ -249,13 +224,8 @@ public class SimilarityJaccardPrefixEvaluator implements IScalarEvaluator {
 
             // -- - token prefix - --
             evalTokenPrefix.evaluate(tuple, inputVal);
-            int tokenPrefix = 0;
-
-            try {
-                tokenPrefix = ATypeHierarchy.getIntegerValue(inputVal.getByteArray(), inputVal.getStartOffset());
-            } catch (HyracksDataException e) {
-                throw new AlgebricksException(e);
-            }
+            int tokenPrefix = ATypeHierarchy.getIntegerValue(AsterixBuiltinFunctions.SIMILARITY_JACCARD.getName(), 4,
+                    inputVal.getByteArray(), inputVal.getStartOffset());
 
             //
             // -- - position filter - --
@@ -281,12 +251,12 @@ public class SimilarityJaccardPrefixEvaluator implements IScalarEvaluator {
         try {
             writeResult();
         } catch (IOException e) {
-            throw new AlgebricksException(e);
+            throw new HyracksDataException(e);
         }
         result.set(resultStorage);
     }
 
-    public void writeResult() throws AlgebricksException, IOException {
+    public void writeResult() throws IOException {
         res.setValue(sim);
         reusSerde.serialize(res, out);
     }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/52671a2c/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardSortedCheckEvaluator.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardSortedCheckEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardSortedCheckEvaluator.java
index d0b0f7d..19e9395 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardSortedCheckEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardSortedCheckEvaluator.java
@@ -19,7 +19,6 @@
 package org.apache.asterix.runtime.evaluators.common;
 
 import org.apache.asterix.fuzzyjoin.similarity.SimilarityMetricJaccard;
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
 import org.apache.hyracks.api.context.IHyracksTaskContext;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
@@ -29,16 +28,12 @@ public class SimilarityJaccardSortedCheckEvaluator extends SimilarityJaccardChec
     protected final SimilarityMetricJaccard jaccard = new SimilarityMetricJaccard();
 
     public SimilarityJaccardSortedCheckEvaluator(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
-            throws AlgebricksException {
+            throws HyracksDataException {
         super(args, context);
     }
 
     @Override
-    protected float computeResult() throws AlgebricksException {
-        try {
-            return jaccard.getSimilarity(firstListIter, secondListIter, jaccThresh);
-        } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
-        }
+    protected float computeResult() throws HyracksDataException {
+        return jaccard.getSimilarity(firstListIter, secondListIter, jaccThresh);
     }
 }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/52671a2c/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardSortedEvaluator.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardSortedEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardSortedEvaluator.java
index 242a59b..d40cb67 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardSortedEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/SimilarityJaccardSortedEvaluator.java
@@ -19,7 +19,6 @@
 package org.apache.asterix.runtime.evaluators.common;
 
 import org.apache.asterix.fuzzyjoin.similarity.SimilarityMetricJaccard;
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
 import org.apache.hyracks.api.context.IHyracksTaskContext;
 import org.apache.hyracks.api.exceptions.HyracksDataException;
@@ -30,16 +29,12 @@ public class SimilarityJaccardSortedEvaluator extends SimilarityJaccardEvaluator
     protected final SimilarityMetricJaccard jaccard = new SimilarityMetricJaccard();
 
     public SimilarityJaccardSortedEvaluator(IScalarEvaluatorFactory[] args, IHyracksTaskContext context)
-            throws AlgebricksException {
+            throws HyracksDataException {
         super(args, context);
     }
 
     @Override
-    protected float computeResult() throws AlgebricksException {
-        try {
-            return jaccard.getSimilarity(firstListIter, secondListIter);
-        } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
-        }
+    protected float computeResult() throws HyracksDataException {
+        return jaccard.getSimilarity(firstListIter, secondListIter);
     }
 }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/52671a2c/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/WordTokensEvaluator.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/WordTokensEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/WordTokensEvaluator.java
index faace0e..e51d5cf 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/WordTokensEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/common/WordTokensEvaluator.java
@@ -24,10 +24,10 @@ import java.io.IOException;
 import org.apache.asterix.builders.OrderedListBuilder;
 import org.apache.asterix.om.types.AOrderedListType;
 import org.apache.asterix.om.types.BuiltinType;
-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.hyracks.data.std.primitive.VoidPointable;
 import org.apache.hyracks.data.std.util.ArrayBackedValueStorage;
@@ -45,14 +45,14 @@ public class WordTokensEvaluator implements IScalarEvaluator {
     private final AOrderedListType listType;
 
     public WordTokensEvaluator(IScalarEvaluatorFactory[] args, IHyracksTaskContext context, IBinaryTokenizer tokenizer,
-            BuiltinType itemType) throws AlgebricksException {
+            BuiltinType itemType) throws HyracksDataException {
         stringEval = args[0].createScalarEvaluator(context);
         this.tokenizer = tokenizer;
         this.listType = new AOrderedListType(itemType, null);
     }
 
     @Override
-    public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
+    public void evaluate(IFrameTupleReference tuple, IPointable result) throws HyracksDataException {
         resultStorage.reset();
         stringEval.evaluate(tuple, argPtr);
         tokenizer.reset(argPtr.getByteArray(), argPtr.getStartOffset(), argPtr.getLength());
@@ -64,7 +64,7 @@ public class WordTokensEvaluator implements IScalarEvaluator {
             }
             listBuilder.write(out, true);
         } catch (IOException e) {
-            throw new AlgebricksException(e);
+            throw new HyracksDataException(e);
         }
         result.set(resultStorage);
     }

http://git-wip-us.apache.org/repos/asf/asterixdb/blob/52671a2c/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractComparisonEvaluator.java
----------------------------------------------------------------------
diff --git a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractComparisonEvaluator.java b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractComparisonEvaluator.java
index 0ed89dd..60fc3e0 100644
--- a/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractComparisonEvaluator.java
+++ b/asterixdb/asterix-runtime/src/main/java/org/apache/asterix/runtime/evaluators/comparisons/AbstractComparisonEvaluator.java
@@ -27,7 +27,7 @@ import org.apache.asterix.om.types.ATypeTag;
 import org.apache.asterix.om.types.BuiltinType;
 import org.apache.asterix.om.types.EnumDeserializer;
 import org.apache.asterix.om.types.hierachy.ATypeHierarchy;
-import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
+import org.apache.asterix.runtime.exceptions.UnsupportedTypeException;
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluator;
 import org.apache.hyracks.algebricks.runtime.base.IScalarEvaluatorFactory;
 import org.apache.hyracks.api.context.IHyracksTaskContext;
@@ -59,13 +59,13 @@ public abstract class AbstractComparisonEvaluator implements IScalarEvaluator {
             .getSerializerDeserializer(BuiltinType.ANULL);
 
     public AbstractComparisonEvaluator(IScalarEvaluatorFactory evalLeftFactory,
-            IScalarEvaluatorFactory evalRightFactory, IHyracksTaskContext context) throws AlgebricksException {
+            IScalarEvaluatorFactory evalRightFactory, IHyracksTaskContext context) throws HyracksDataException {
         this.evalLeft = evalLeftFactory.createScalarEvaluator(context);
         this.evalRight = evalRightFactory.createScalarEvaluator(context);
     }
 
     @Override
-    public void evaluate(IFrameTupleReference tuple, IPointable result) throws AlgebricksException {
+    public void evaluate(IFrameTupleReference tuple, IPointable result) throws HyracksDataException {
         resultStorage.reset();
 
         // Evaluates input args.
@@ -80,19 +80,15 @@ public abstract class AbstractComparisonEvaluator implements IScalarEvaluator {
             checkTotallyOrderable();
         }
 
-        try {
-            // Checks whether two types are comparable
-            if (comparabilityCheck()) {
-                // Two types can be compared
-                int r = compareResults();
-                ABoolean b = getComparisonResult(r) ? ABoolean.TRUE : ABoolean.FALSE;
-                serde.serialize(b, out);
-            } else {
-                // result:NULL - two types cannot be compared.
-                nullSerde.serialize(ANull.NULL, out);
-            }
-        } catch (HyracksDataException e) {
-            throw new AlgebricksException(e);
+        // Checks whether two types are comparable
+        if (comparabilityCheck()) {
+            // Two types can be compared
+            int r = compareResults();
+            ABoolean b = getComparisonResult(r) ? ABoolean.TRUE : ABoolean.FALSE;
+            serde.serialize(b, out);
+        } else {
+            // result:NULL - two types cannot be compared.
+            nullSerde.serialize(ANull.NULL, out);
         }
         result.set(resultStorage);
     }
@@ -103,7 +99,7 @@ public abstract class AbstractComparisonEvaluator implements IScalarEvaluator {
 
     // checks whether we can apply >, >=, <, and <= operations to the given type since
     // these operations can not be defined for certain types.
-    protected void checkTotallyOrderable() throws AlgebricksException {
+    protected void checkTotallyOrderable() throws HyracksDataException {
         if (argLeft.getLength() != 0) {
             ATypeTag typeTag = EnumDeserializer.ATYPETAGDESERIALIZER.deserialize(argLeft.getTag());
             switch (typeTag) {
@@ -115,8 +111,7 @@ public abstract class AbstractComparisonEvaluator implements IScalarEvaluator {
                 case POLYGON:
                 case CIRCLE:
                 case RECTANGLE:
-                    throw new AlgebricksException(
-                            "Comparison operations (GT, GE, LT, and LE) for the " + typeTag + " type are not defined.");
+                    throw new UnsupportedTypeException(ComparisonHelper.COMPARISON, argLeft.getTag());
                 default:
                     return;
             }