BigDecimal getBigDecimal()

in asterixdb-jdbc/asterix-jdbc-core/src/main/java/org/apache/asterix/jdbc/core/ADBRowStore.java [548:595]


    BigDecimal getBigDecimal(int columnIndex, boolean setScale, int scale) throws SQLException {
        BigDecimal dec;
        ADBDatatype valueType = getColumnType(columnIndex);
        switch (valueType) {
            case MISSING:
            case NULL:
                return null;
            case BOOLEAN:
                dec = getColumnRegisterAsBoolean(columnIndex, 0) ? BigDecimal.ONE : BigDecimal.ZERO;
                break;
            case TINYINT:
            case SMALLINT:
            case INTEGER:
            case BIGINT:
            case DATE:
            case TIME:
            case DATETIME:
            case YEARMONTHDURATION:
            case DAYTIMEDURATION:
                dec = BigDecimal.valueOf(getColumnRegister(columnIndex, 0));
                break;
            case FLOAT:
                try {
                    dec = new BigDecimal(getColumnRegisterAsFloat(columnIndex, 0));
                } catch (NumberFormatException e) {
                    throw getErrorReporter().errorInvalidValueOfType(valueType);
                }
                break;
            case DOUBLE:
                try {
                    dec = new BigDecimal(getColumnRegisterAsDouble(columnIndex, 0));
                } catch (NumberFormatException e) {
                    throw getErrorReporter().errorInvalidValueOfType(valueType);
                }
                break;
            case STRING:
                try {
                    dec = new BigDecimal(getStringFromObjectStore(columnIndex));
                } catch (NumberFormatException e) {
                    throw getErrorReporter().errorInvalidValueOfType(valueType);
                }
                break;
            default:
                throw getErrorReporter().errorUnexpectedType(valueType);
        }

        return setScale ? dec.setScale(scale, RoundingMode.DOWN) : dec;
    }