Object getValue()

in HSQL/src/org/hsqldb1/Expression.java [3295:3393]


    Object getValue(Session session) throws HsqlException {

        switch (exprType) {

            case VALUE :
                return valueData;

            case COLUMN :
                try {
                    return tableFilter.currentData[columnIndex];
                } catch (NullPointerException e) {
                    String name = tableName == null ? columnName
                                                    : tableName + '.'
                                                      + columnName;

                    throw Trace.error(Trace.COLUMN_NOT_FOUND, name);
                }
            case FUNCTION :
                return function.getValue(session);

            case QUERY :
                return subQuery.select.getValue(session, dataType);

            case NEGATE :
                return Column.negate(eArg.getValue(session, dataType),
                                     dataType);

            case ALL :
            case ANY :
                return null;

            case AND :
            case OR :
            case LIKE :
            case EXISTS :
            case IN :
            case IS_NULL :
            case NOT :
                return test(session);

            case CONVERT :
                return Column.convertObject(session, eArg.getValue(session),
                                            dataType, precision, scale);

            case CASEWHEN :
                Boolean result = eArg.test(session);

                if (Boolean.TRUE.equals(result)) {
                    return eArg2.eArg.getValue(session, dataType);
                } else {
                    return eArg2.eArg2.getValue(session, dataType);
                }

            // gets here from getAggregatedValue()
            case ALTERNATIVE :
                return new Object[] {
                    eArg.getValue(session, dataType),
                    eArg2.getValue(session, dataType)
                };
        }

        // todo: simplify this
        Object a = null,
               b = null;

        if (eArg != null) {
            a = eArg.getValue(session, dataType);
        }

        if (eArg2 != null) {
            b = eArg2.getValue(session, dataType);
        }

        switch (exprType) {

            case ADD :
                return Column.add(a, b, dataType);

            case SUBTRACT :
                return Column.subtract(a, b, dataType);

            case MULTIPLY :
                return Column.multiply(a, b, dataType);

            case DIVIDE :
                return Column.divide(a, b, dataType);

            case CONCAT :
                return Column.concat(a, b);

            case SEQUENCE :
                return ((NumberSequence) valueData).getValueObject();

            default :

                /** @todo fredt - make sure the expression type is always comparison here */
                return test(session);
        }
    }