Search in sources :

Example 6 with Value

use of org.apache.asterix.external.classad.Value in project asterixdb by apache.

the class ClassAdParser method evaluateFunction.

public ExprTree evaluateFunction(String functionName, ExprList argList) throws HyracksDataException {
    Value val = objectPool.valuePool.get();
    AMutableNumberFactor factor = objectPool.numFactorPool.get();
    ExprTreeHolder tree = objectPool.mutableExprPool.get();
    ((Literal) argList.get(0)).getComponents(val, factor);
    AMutableCharArrayString string_value = objectPool.strPool.get();
    if (val.isStringValue(string_value)) {
        if (functionName.equalsIgnoreCase("absTime")) {
            tree.setInnerTree(Literal.createAbsTime(string_value, objectPool));
        } else if (functionName.equalsIgnoreCase("relTime")) {
            tree.setInnerTree(Literal.createRelTime(string_value, objectPool));
        } else {
            tree.setInnerTree(FunctionCall.createFunctionCall(functionName, argList, objectPool));
        }
    } else {
        tree.setInnerTree(FunctionCall.createFunctionCall(functionName, argList, objectPool));
    }
    return tree;
}
Also used : ExprTreeHolder(org.apache.asterix.external.classad.ExprTreeHolder) Literal(org.apache.asterix.external.classad.Literal) TokenValue(org.apache.asterix.external.classad.TokenValue) Value(org.apache.asterix.external.classad.Value) AMutableNumberFactor(org.apache.asterix.external.classad.AMutableNumberFactor) AMutableCharArrayString(org.apache.asterix.external.classad.AMutableCharArrayString)

Example 7 with Value

use of org.apache.asterix.external.classad.Value in project asterixdb by apache.

the class ClassAdParser method writeFieldValueToBuffer.

private void writeFieldValueToBuffer(IAType fieldType, DataOutput out, String name, ExprTree tree, ClassAd pAd) throws IOException, AsterixException {
    Value val;
    switch(tree.getKind()) {
        case ATTRREF_NODE:
        case CLASSAD_NODE:
        case EXPR_ENVELOPE:
        case EXPR_LIST_NODE:
        case FN_CALL_NODE:
        case OP_NODE:
            val = objectPool.valuePool.get();
            if (pAd.evaluateAttr(name, val)) {
            } else {
                // just write the expr
                val = ((Literal) pAd.getAttrList().get(name + "Expr")).getValue();
            }
            break;
        case LITERAL_NODE:
            val = ((Literal) tree.getTree()).getValue();
            break;
        default:
            throw new HyracksDataException("Unknown Expression type detected: " + tree.getKind());
    }
    if (fieldType != null) {
        if (NonTaggedFormatUtil.isOptional(fieldType)) {
            fieldType = ((AUnionType) fieldType).getActualType();
        }
    }
    switch(val.getValueType()) {
        case ABSOLUTE_TIME_VALUE:
            if (checkType(ATypeTag.DATETIME, fieldType)) {
                parseDateTime(val, out);
            } else {
                throw new HyracksDataException(mismatchErrorMessage + fieldType.getTypeTag());
            }
            break;
        case BOOLEAN_VALUE:
            if (checkType(ATypeTag.BOOLEAN, fieldType)) {
                booleanSerde.serialize(val.getBoolVal() ? ABoolean.TRUE : ABoolean.FALSE, out);
            } else {
                throw new HyracksDataException(mismatchErrorMessage + fieldType.getTypeTag());
            }
            break;
        case CLASSAD_VALUE:
            if (checkType(ATypeTag.OBJECT, fieldType)) {
                IAType objectType = getComplexType(fieldType, ATypeTag.OBJECT);
                ClassAd classad = val.getClassadVal();
                parseRecord((ARecordType) objectType, classad, out);
            } else {
                throw new HyracksDataException(mismatchErrorMessage + fieldType.getTypeTag());
            }
            break;
        case ERROR_VALUE:
        case STRING_VALUE:
        case UNDEFINED_VALUE:
            if (checkType(ATypeTag.STRING, fieldType)) {
                parseString(val, out);
            } else {
                throw new HyracksDataException(mismatchErrorMessage + fieldType.getTypeTag());
            }
            break;
        case INTEGER_VALUE:
            if (checkType(ATypeTag.BIGINT, fieldType)) {
                if (fieldType == null || fieldType.getTypeTag() == ATypeTag.BIGINT) {
                    aInt64.setValue(val.getLongVal());
                    int64Serde.serialize(aInt64, out);
                } else if (fieldType.getTypeTag() == ATypeTag.INTEGER) {
                    aInt32.setValue((int) val.getLongVal());
                    int32Serde.serialize(aInt32, out);
                } else if (fieldType.getTypeTag() == ATypeTag.DOUBLE) {
                    aDouble.setValue(val.getLongVal());
                    doubleSerde.serialize(aDouble, out);
                } else if (fieldType.getTypeTag() == ATypeTag.SMALLINT) {
                    aInt16.setValue((short) val.getLongVal());
                    int16Serde.serialize(aInt16, out);
                } else if (fieldType.getTypeTag() == ATypeTag.TINYINT) {
                    aInt8.setValue((byte) val.getLongVal());
                    int8Serde.serialize(aInt8, out);
                } else if (fieldType.getTypeTag() == ATypeTag.FLOAT) {
                    aFloat.setValue(val.getLongVal());
                    floatSerde.serialize(aFloat, out);
                }
            } else if (checkType(ATypeTag.DATETIME, fieldType)) {
                // Classad uses Linux Timestamps (s instead of ms)
                aDateTime.setValue(val.getLongVal() * 1000);
                datetimeSerde.serialize(aDateTime, out);
            } else if (checkType(ATypeTag.DURATION, fieldType)) {
                // Classad uses Linux Timestamps (s instead of ms)
                aDuration.setValue(0, val.getLongVal() * 1000);
                durationSerde.serialize(aDuration, out);
            } else if (checkType(ATypeTag.INTEGER, fieldType)) {
                aInt32.setValue((int) val.getLongVal());
                int32Serde.serialize(aInt32, out);
            } else if (checkType(ATypeTag.DOUBLE, fieldType)) {
                aDouble.setValue(val.getLongVal());
                doubleSerde.serialize(aDouble, out);
            } else {
                throw new HyracksDataException(mismatchErrorMessage + fieldType.getTypeTag());
            }
            break;
        case LIST_VALUE:
        case SLIST_VALUE:
            IAType objectType;
            if (checkType(ATypeTag.MULTISET, fieldType)) {
                objectType = getComplexType(fieldType, ATypeTag.MULTISET);
                parseUnorderedList((AUnorderedListType) objectType, val, out);
            } else if (checkType(ATypeTag.ARRAY, fieldType)) {
                objectType = getComplexType(fieldType, ATypeTag.ARRAY);
                parseOrderedList((AOrderedListType) objectType, val, out);
            } else {
                throw new HyracksDataException(mismatchErrorMessage + fieldType.getTypeTag());
            }
            break;
        case REAL_VALUE:
            if (checkType(ATypeTag.DOUBLE, fieldType)) {
                if (fieldType == null || fieldType.getTypeTag() == ATypeTag.DOUBLE) {
                    aDouble.setValue(val.getDoubleVal());
                    doubleSerde.serialize(aDouble, out);
                } else if (fieldType.getTypeTag() == ATypeTag.INTEGER) {
                    aInt32.setValue((int) val.getDoubleVal());
                    int32Serde.serialize(aInt32, out);
                } else if (fieldType.getTypeTag() == ATypeTag.BIGINT) {
                    aInt64.setValue((long) val.getDoubleVal());
                    int64Serde.serialize(aInt64, out);
                } else if (fieldType.getTypeTag() == ATypeTag.SMALLINT) {
                    aInt16.setValue((short) val.getDoubleVal());
                    int16Serde.serialize(aInt16, out);
                } else if (fieldType.getTypeTag() == ATypeTag.TINYINT) {
                    aInt8.setValue((byte) val.getDoubleVal());
                    int8Serde.serialize(aInt8, out);
                } else if (fieldType.getTypeTag() == ATypeTag.FLOAT) {
                    aFloat.setValue((float) val.getDoubleVal());
                    floatSerde.serialize(aFloat, out);
                }
            } else if (checkType(ATypeTag.INTEGER, fieldType)) {
                aInt32.setValue((int) val.getDoubleVal());
                int32Serde.serialize(aInt32, out);
            } else if (checkType(ATypeTag.BIGINT, fieldType)) {
                aInt64.setValue((long) val.getDoubleVal());
                int64Serde.serialize(aInt64, out);
            } else if (checkType(ATypeTag.DATETIME, fieldType)) {
                // Classad uses Linux Timestamps (s instead of ms)
                aDateTime.setValue(val.getLongVal() * 1000);
                datetimeSerde.serialize(aDateTime, out);
            } else if (checkType(ATypeTag.DURATION, fieldType)) {
                // Classad uses Linux Timestamps (s instead of ms)
                aDuration.setValue(0, (long) (val.getDoubleVal() * 1000.0));
                durationSerde.serialize(aDuration, out);
            } else {
                throw new HyracksDataException(mismatchErrorMessage + fieldType.getTypeTag());
            }
            break;
        case RELATIVE_TIME_VALUE:
            if (checkType(ATypeTag.DURATION, fieldType)) {
                parseDuration(val, out);
            } else {
                throw new HyracksDataException(mismatchErrorMessage + fieldType.getTypeTag());
            }
            break;
        default:
            throw new HyracksDataException("unknown data type " + val.getValueType());
    }
}
Also used : ClassAd(org.apache.asterix.external.classad.ClassAd) AOrderedListType(org.apache.asterix.om.types.AOrderedListType) TokenValue(org.apache.asterix.external.classad.TokenValue) Value(org.apache.asterix.external.classad.Value) HyracksDataException(org.apache.hyracks.api.exceptions.HyracksDataException) IAType(org.apache.asterix.om.types.IAType)

Example 8 with Value

use of org.apache.asterix.external.classad.Value in project asterixdb by apache.

the class ClassAdParser method shouldEvaluateAtParseTime.

public boolean shouldEvaluateAtParseTime(String functionName, ExprList argList) throws HyracksDataException {
    boolean should_eval = false;
    if (functionName.equalsIgnoreCase("absTime") || functionName.equalsIgnoreCase("relTime")) {
        if (argList.size() == 1 && argList.get(0).getKind() == NodeKind.LITERAL_NODE) {
            Value val = objectPool.valuePool.get();
            AMutableNumberFactor factor = objectPool.numFactorPool.get();
            ((Literal) argList.get(0)).getComponents(val, factor);
            if (val.isStringValue()) {
                should_eval = true;
            }
        }
    }
    return should_eval;
}
Also used : Literal(org.apache.asterix.external.classad.Literal) TokenValue(org.apache.asterix.external.classad.TokenValue) Value(org.apache.asterix.external.classad.Value) AMutableNumberFactor(org.apache.asterix.external.classad.AMutableNumberFactor)

Example 9 with Value

use of org.apache.asterix.external.classad.Value in project asterixdb by apache.

the class FunctionalTester method handle_eval.

/*********************************************************************
     * Function: handle_eval
     * Purpose:
     *
     * @throws IOException
     *********************************************************************/
public static void handle_eval(AMutableString line, State state, Parameters parameters, ClassAdObjectPool objectPool) throws IOException {
    AMutableString variable_name = new AMutableString("");
    ExprTree tree;
    Variable variable;
    if (get_variable_name(line, true, variable_name, state, parameters)) {
        tree = get_expr(line, state, parameters, objectPool);
        if (tree != null) {
            Value value = new Value(objectPool);
            if (!evaluate_expr(tree, value, parameters, objectPool)) {
                print_error_message("Couldn't evaluate rvalue", state);
            } else {
                variable = new Variable(variable_name.getStringValue(), value);
                variables.put(variable_name.getStringValue(), variable);
            }
        }
    }
    return;
}
Also used : Value(org.apache.asterix.external.classad.Value) AMutableString(org.apache.asterix.om.base.AMutableString) ExprTree(org.apache.asterix.external.classad.ExprTree)

Example 10 with Value

use of org.apache.asterix.external.classad.Value in project asterixdb by apache.

the class FunctionalTester method handle_diff.

/*********************************************************************
     * Function: handle_diff
     * Purpose:
     *
     * @throws IOException
     *********************************************************************/
public static void handle_diff(AMutableString line, State state, Parameters parameters, ClassAdObjectPool objectPool) throws IOException {
    ExprTreeHolder tree = new ExprTreeHolder(objectPool);
    ExprTreeHolder tree2 = new ExprTreeHolder(objectPool);
    Value value1 = new Value(objectPool);
    Value value2 = new Value(objectPool);
    get_two_exprs(line, tree, tree2, state, parameters, objectPool);
    if (tree.getInnerTree() != null || tree2.getInnerTree() != null) {
        if (!evaluate_expr(tree, value1, parameters, objectPool)) {
            print_error_message("Couldn't evaluate first expression.\n", state);
        } else if (!evaluate_expr(tree2, value2, parameters, objectPool)) {
            print_error_message("Couldn't evaluate second expressions.\n", state);
        } else if (value1.sameAs(value2)) {
            print_error_message("the expressions are the same.", state);
            assert (false);
        }
    }
    return;
}
Also used : ExprTreeHolder(org.apache.asterix.external.classad.ExprTreeHolder) Value(org.apache.asterix.external.classad.Value)

Aggregations

Value (org.apache.asterix.external.classad.Value)12 ClassAd (org.apache.asterix.external.classad.ClassAd)6 HyracksDataException (org.apache.hyracks.api.exceptions.HyracksDataException)6 ExprTreeHolder (org.apache.asterix.external.classad.ExprTreeHolder)5 TokenValue (org.apache.asterix.external.classad.TokenValue)5 Literal (org.apache.asterix.external.classad.Literal)4 ArrayList (java.util.ArrayList)3 AMutableCharArrayString (org.apache.asterix.external.classad.AMutableCharArrayString)3 ExprList (org.apache.asterix.external.classad.ExprList)3 ExprTree (org.apache.asterix.external.classad.ExprTree)3 ClassAdParser (org.apache.asterix.external.library.ClassAdParser)3 MutableBoolean (org.apache.commons.lang3.mutable.MutableBoolean)3 Path (java.nio.file.Path)2 HashMap (java.util.HashMap)2 AMutableNumberFactor (org.apache.asterix.external.classad.AMutableNumberFactor)2 CaseInsensitiveString (org.apache.asterix.external.classad.CaseInsensitiveString)2 CharArrayLexerSource (org.apache.asterix.external.classad.CharArrayLexerSource)2 TokenType (org.apache.asterix.external.classad.Lexer.TokenType)2 ClassAdObjectPool (org.apache.asterix.external.classad.object.pool.ClassAdObjectPool)2 SemiStructuredRecordReader (org.apache.asterix.external.input.record.reader.stream.SemiStructuredRecordReader)2