@ScalarFunction("from_unixtime") @SqlType(StandardTypes.TIMESTAMP) public static long fromUnixTime(@SqlType(StandardTypes.DOUBLE) double unixTime) { return Math.round(unixTime * 1000); }
public static List<ScalarImplementationHeader> fromAnnotatedElement(AnnotatedElement annotated) { ScalarFunction scalarFunction = annotated.getAnnotation(ScalarFunction.class); ScalarOperator scalarOperator = annotated.getAnnotation(ScalarOperator.class); Optional<String> description = parseDescription(annotated); ImmutableList.Builder<ScalarImplementationHeader> builder = ImmutableList.builder(); if (scalarFunction != null) { String baseName = scalarFunction.value().isEmpty() ? camelToSnake(annotatedName(annotated)) : scalarFunction.value(); builder.add(new ScalarImplementationHeader(baseName, new ScalarHeader(description, scalarFunction.hidden(), scalarFunction.deterministic()))); for (String alias : scalarFunction.alias()) { builder.add(new ScalarImplementationHeader(alias, new ScalarHeader(description, scalarFunction.hidden(), scalarFunction.deterministic()))); } } if (scalarOperator != null) { builder.add(new ScalarImplementationHeader(scalarOperator.value(), new ScalarHeader(description, true, true))); } List<ScalarImplementationHeader> result = builder.build(); checkArgument(!result.isEmpty()); return result; }
@Description("absolute value") @ScalarFunction("abs") @SqlType(StandardTypes.REAL) public static long absFloat(@SqlType(StandardTypes.REAL) long num) { return floatToRawIntBits(Math.abs(intBitsToFloat((int) num))); }
@Description("logarithm to base 2") @ScalarFunction @SqlType(StandardTypes.DOUBLE) public static double log2(@SqlType(StandardTypes.DOUBLE) double num) { return Math.log(num) / Math.log(2); }
@Description("Euler's number") @ScalarFunction @SqlType(StandardTypes.DOUBLE) public static double e() { return Math.E; }
@ScalarFunction @SqlType("varchar(16)") public static Slice render(@SqlType(StandardTypes.BOOLEAN) boolean value) { return value ? RENDERED_TRUE : RENDERED_FALSE; }
@Description("the constant Pi") @ScalarFunction @SqlType(StandardTypes.DOUBLE) public static double pi() { return Math.PI; }
@Description("arc cosine") @ScalarFunction @SqlType(StandardTypes.DOUBLE) public static double acos(@SqlType(StandardTypes.DOUBLE) double num) { return Math.acos(num); }
@Description("signum") @ScalarFunction @SqlType(StandardTypes.DOUBLE) public static double sign(@SqlType(StandardTypes.DOUBLE) double num) { return Math.signum(num); }
@Description("arc tangent") @ScalarFunction @SqlType(StandardTypes.DOUBLE) public static double atan(@SqlType(StandardTypes.DOUBLE) double num) { return Math.atan(num); }
@Description("tangent") @ScalarFunction @SqlType(StandardTypes.DOUBLE) public static double tan(@SqlType(StandardTypes.DOUBLE) double num) { return Math.tan(num); }
@Description("a pseudo-random number between 0 and value (exclusive)") @ScalarFunction(alias = "rand", deterministic = false) @SqlType(StandardTypes.BIGINT) public static long random(@SqlType(StandardTypes.BIGINT) long value) { checkCondition(value > 0, INVALID_FUNCTION_ARGUMENT, "bound must be positive"); return ThreadLocalRandom.current().nextLong(value); }
@Description("absolute value") @ScalarFunction("abs") @SqlType(StandardTypes.TINYINT) public static long absTinyint(@SqlType(StandardTypes.TINYINT) long num) { checkCondition(num != Byte.MIN_VALUE, NUMERIC_VALUE_OUT_OF_RANGE, "Value -128 is out of range for abs(tinyint)"); return Math.abs(num); }
@Description("value raised to the power of exponent") @ScalarFunction(alias = "pow") @SqlType(StandardTypes.DOUBLE) public static double power(@SqlType(StandardTypes.DOUBLE) double num, @SqlType(StandardTypes.DOUBLE) double exponent) { return Math.pow(num, exponent); }
@Description("round up to nearest integer") @ScalarFunction(value = "ceiling", alias = "ceil") @SqlType(StandardTypes.TINYINT) public static long ceilingTinyint(@SqlType(StandardTypes.TINYINT) long num) { return num; }
@Description("round up to nearest integer") @ScalarFunction(value = "ceiling", alias = "ceil") @SqlType(StandardTypes.INTEGER) public static long ceilingInteger(@SqlType(StandardTypes.INTEGER) long num) { return num; }
@Description("round up to nearest integer") @ScalarFunction(alias = "ceil") @SqlType(StandardTypes.BIGINT) public static long ceiling(@SqlType(StandardTypes.BIGINT) long num) { return num; }
@Description("round to nearest integer") @ScalarFunction("round") @SqlType(StandardTypes.TINYINT) public static long roundTinyint(@SqlType(StandardTypes.TINYINT) long num) { return num; }
@Description("millisecond of the second of the given interval") @ScalarFunction("millisecond") @SqlType(StandardTypes.BIGINT) public static long millisecondFromInterval(@SqlType(StandardTypes.INTERVAL_DAY_TO_SECOND) long milliseconds) { return milliseconds % MILLISECONDS_IN_SECOND; }
@ScalarFunction(value = "non_deterministic_scalar_function", deterministic = false) @Description("Simple scalar with deterministic property reset") public static class NonDeterministicScalarFunction { @SqlType(StandardTypes.DOUBLE) public static double fun(@SqlType(StandardTypes.DOUBLE) double v) { return v; } }