@ScalarOperator(CAST) @SqlType(StandardTypes.REAL) public static long castToReal(@SqlType(StandardTypes.BOOLEAN) boolean value) { return value ? floatToRawIntBits(1.0f) : floatToRawIntBits(0.0f); }
@ScalarOperator(CAST) @SqlType(StandardTypes.REAL) public static long castToReal(@SqlType(StandardTypes.INTEGER) long value) { return (long) floatToRawIntBits((float) value); }
@ScalarOperator(CAST) @SqlType(StandardTypes.REAL) public static long castToReal(@SqlType(StandardTypes.DOUBLE) double value) { return floatToRawIntBits((float) value); }
@ScalarOperator(SUBTRACT) @SqlType(StandardTypes.REAL) public static long subtract(@SqlType(StandardTypes.REAL) long left, @SqlType(StandardTypes.REAL) long right) { return floatToRawIntBits(intBitsToFloat((int) left) - intBitsToFloat((int) right)); }
@ScalarOperator(DIVIDE) @SqlType(StandardTypes.REAL) public static long divide(@SqlType(StandardTypes.REAL) long left, @SqlType(StandardTypes.REAL) long right) { return floatToRawIntBits(intBitsToFloat((int) left) / intBitsToFloat((int) right)); }
@ScalarOperator(MODULUS) @SqlType(StandardTypes.REAL) public static long modulus(@SqlType(StandardTypes.REAL) long left, @SqlType(StandardTypes.REAL) long right) { return floatToRawIntBits(intBitsToFloat((int) left) % intBitsToFloat((int) right)); }
@ScalarOperator(HASH_CODE) @SqlType(StandardTypes.BIGINT) public static long hashCode(@SqlType(ColorType.NAME) long value) { return (int) value; }
@ScalarOperator(CAST) @SqlType(StandardTypes.BOOLEAN) public static boolean castToBoolean(@SqlType(StandardTypes.SMALLINT) long value) { return value != 0; }
@ScalarOperator(GREATER_THAN) @SqlType(StandardTypes.BOOLEAN) public static boolean greaterThan(@SqlType(StandardTypes.REAL) long left, @SqlType(StandardTypes.REAL) long right) { return intBitsToFloat((int) left) > intBitsToFloat((int) right); }
@ScalarOperator(CAST) @SqlType(StandardTypes.BIGINT) public static long castToBigint(@SqlType(StandardTypes.INTEGER) long value) { return value; }
@ScalarOperator(CAST) @SqlType(StandardTypes.INTEGER) public static long castToInteger(@SqlType(StandardTypes.TINYINT) long value) { return value; }
@ScalarOperator(NEGATION) @SqlType(StandardTypes.INTERVAL_YEAR_TO_MONTH) public static long negate(@SqlType(StandardTypes.INTERVAL_YEAR_TO_MONTH) long value) { return -value; }
@ScalarOperator(CAST) @SqlType(StandardTypes.INTEGER) public static long castToInteger(@SqlType(StandardTypes.BOOLEAN) boolean value) { return value ? 1 : 0; }
@ScalarOperator(CAST) @SqlType(StandardTypes.VARBINARY) public static Slice castToBinaryDouble(@SqlType("qdigest(double)") Slice slice) { return slice; }
@ScalarOperator(CAST) @SqlType("qdigest(double)") public static Slice castFromVarbinaryDouble(@SqlType(StandardTypes.VARBINARY) Slice slice) { return slice; }
@ScalarOperator(CAST) @SqlType(StandardTypes.BIGINT) public static long castToLong(@SqlType(StandardTypes.REAL) long value) { return (long) MathFunctions.round((double) intBitsToFloat((int) value)); }
@ScalarOperator(EQUAL) @SqlType(StandardTypes.BOOLEAN) @SqlNullable public static Boolean equal(@SqlType(StandardTypes.REAL) long left, @SqlType(StandardTypes.REAL) long right) { return intBitsToFloat((int) left) == intBitsToFloat((int) right); }
@ScalarOperator(CAST) @SqlType(StandardTypes.INTEGER) public static long castToInteger(@SqlType(StandardTypes.REAL) long value) { try { return toIntExact((long) MathFunctions.round((double) intBitsToFloat((int) value))); } catch (ArithmeticException e) { throw new PrestoException(NUMERIC_VALUE_OUT_OF_RANGE, "Out of range for integer: " + value, e); } }
@ScalarOperator(ADD) @SqlType(StandardTypes.TIMESTAMP) public static long timestampPlusIntervalDayToSecond(@SqlType(StandardTypes.TIMESTAMP) long left, @SqlType(StandardTypes.INTERVAL_DAY_TO_SECOND) long right) { return left + right; }
@ScalarOperator(ADD) @SqlType(StandardTypes.TIME) public static long intervalYearToMonthPlusTime(@SqlType(StandardTypes.INTERVAL_YEAR_TO_MONTH) long left, @SqlType(StandardTypes.TIME) long right) { return right; }