Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,7 @@
import com.facebook.presto.common.type.TypeSignature;
import com.facebook.presto.spi.function.AggregationFunctionMetadata;
import com.facebook.presto.spi.function.FunctionKind;
import com.facebook.presto.spi.function.LongVariableConstraint;
import com.facebook.presto.spi.function.RoutineCharacteristics;
import com.facebook.presto.spi.function.SqlFunctionId;
import com.facebook.presto.spi.function.TypeVariableConstraint;
Expand Down Expand Up @@ -73,6 +74,7 @@ public class JsonBasedUdfFunctionMetadata
* Optional list of the typeVariableConstraints.
*/
private final Optional<List<TypeVariableConstraint>> typeVariableConstraints;
private final Optional<List<LongVariableConstraint>> longVariableConstraints;
Comment thread
pdabre12 marked this conversation as resolved.
private final Optional<SqlFunctionId> functionId;
private final Optional<String> version;

Expand All @@ -88,7 +90,8 @@ public JsonBasedUdfFunctionMetadata(
@JsonProperty("aggregateMetadata") Optional<AggregationFunctionMetadata> aggregateMetadata,
@JsonProperty("functionId") Optional<SqlFunctionId> functionId,
@JsonProperty("version") Optional<String> version,
@JsonProperty("typeVariableConstraints") Optional<List<TypeVariableConstraint>> typeVariableConstraints)
@JsonProperty("typeVariableConstraints") Optional<List<TypeVariableConstraint>> typeVariableConstraints,
@JsonProperty("longVariableConstraints") Optional<List<LongVariableConstraint>> longVariableConstraints)
{
this.docString = requireNonNull(docString, "docString is null");
this.functionKind = requireNonNull(functionKind, "functionKind is null");
Expand All @@ -104,6 +107,7 @@ public JsonBasedUdfFunctionMetadata(
this.functionId = requireNonNull(functionId, "functionId is null");
this.version = requireNonNull(version, "version is null");
this.typeVariableConstraints = requireNonNull(typeVariableConstraints, "typeVariableConstraints is null");
this.longVariableConstraints = requireNonNull(longVariableConstraints, "longVariableConstraints is null");
}

@JsonProperty
Expand Down Expand Up @@ -177,4 +181,10 @@ public Optional<List<TypeVariableConstraint>> getTypeVariableConstraints()
{
return typeVariableConstraints;
}

@JsonProperty
public Optional<List<LongVariableConstraint>> getLongVariableConstraints()
{
return longVariableConstraints;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -139,6 +139,7 @@ private SqlInvokedFunction createSqlInvokedFunction(String functionName, JsonBas
qualifiedFunctionName,
parameterBuilder.build(),
emptyList(),
emptyList(),
jsonBasedUdfFunctionMetaData.getOutputType(),
jsonBasedUdfFunctionMetaData.getDocString(),
jsonBasedUdfFunctionMetaData.getRoutineCharacteristics(),
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -146,6 +146,7 @@ public static Map<String, List<JsonBasedUdfFunctionMetadata>> createUdfSignature
Optional.empty(),
Optional.of(new SqlFunctionId(QualifiedObjectName.valueOf("unittest.default.square"), ImmutableList.of(parseTypeSignature("integer")))),
Optional.of("1"),
Optional.of(emptyList()),
Optional.of(emptyList())));
squareFunctions.add(new JsonBasedUdfFunctionMetadata(
"square a double",
Expand All @@ -158,6 +159,7 @@ public static Map<String, List<JsonBasedUdfFunctionMetadata>> createUdfSignature
Optional.empty(),
Optional.of(new SqlFunctionId(QualifiedObjectName.valueOf("unittest.test_schema.square"), ImmutableList.of(parseTypeSignature("double")))),
Optional.of("1"),
Optional.of(emptyList()),
Optional.of(emptyList())));
udfSignatureMap.put("square", squareFunctions);

Expand All @@ -174,6 +176,7 @@ public static Map<String, List<JsonBasedUdfFunctionMetadata>> createUdfSignature
Optional.empty(),
Optional.of(new SqlFunctionId(QualifiedObjectName.valueOf("unittest.default.array_function_1"), ImmutableList.of(parseTypeSignature("ARRAY<ARRAY<BOOLEAN>>"), parseTypeSignature("ARRAY<ARRAY<BOOLEAN>>")))),
Optional.of("1"),
Optional.of(emptyList()),
Optional.of(emptyList())));
arrayFunction1.add(new JsonBasedUdfFunctionMetadata(
"combines two float arrays into one",
Expand All @@ -186,6 +189,7 @@ public static Map<String, List<JsonBasedUdfFunctionMetadata>> createUdfSignature
Optional.empty(),
Optional.of(new SqlFunctionId(QualifiedObjectName.valueOf("unittest.test_schema.array_function_1"), ImmutableList.of(parseTypeSignature("ARRAY<ARRAY<BIGINT>>"), parseTypeSignature("ARRAY<ARRAY<BIGINT>>")))),
Optional.of("1"),
Optional.of(emptyList()),
Optional.of(emptyList())));
arrayFunction1.add(new JsonBasedUdfFunctionMetadata(
"combines two double arrays into one",
Expand All @@ -198,6 +202,7 @@ public static Map<String, List<JsonBasedUdfFunctionMetadata>> createUdfSignature
Optional.empty(),
Optional.of(new SqlFunctionId(QualifiedObjectName.valueOf("unittest.test_schema.array_function_1"), ImmutableList.of(parseTypeSignature("ARRAY<DOUBLE>"), parseTypeSignature("ARRAY<DOUBLE>")))),
Optional.of("1"),
Optional.of(emptyList()),
Optional.of(emptyList())));
udfSignatureMap.put("array_function_1", arrayFunction1);

Expand All @@ -214,6 +219,7 @@ public static Map<String, List<JsonBasedUdfFunctionMetadata>> createUdfSignature
Optional.empty(),
Optional.of(new SqlFunctionId(QualifiedObjectName.valueOf("unittest.default.array_function_2"), ImmutableList.of(parseTypeSignature("ARRAY<map<BIGINT, DOUBLE>>"), parseTypeSignature("ARRAY<varchar>")))),
Optional.of("1"),
Optional.of(emptyList()),
Optional.of(emptyList())));
arrayFunction2.add(new JsonBasedUdfFunctionMetadata(
"transforms inputs into the output",
Expand All @@ -226,6 +232,7 @@ public static Map<String, List<JsonBasedUdfFunctionMetadata>> createUdfSignature
Optional.empty(),
Optional.of(new SqlFunctionId(QualifiedObjectName.valueOf("unittest.test_schema.array_function_2"), ImmutableList.of(parseTypeSignature("ARRAY<map<BIGINT, DOUBLE>>"), parseTypeSignature("ARRAY<ARRAY<BOOLEAN>>"), parseTypeSignature("ARRAY<varchar>")))),
Optional.of("1"),
Optional.of(emptyList()),
Optional.of(emptyList())));
udfSignatureMap.put("array_function_2", arrayFunction2);

Expand All @@ -249,6 +256,7 @@ public static Map<String, List<JsonBasedUdfFunctionMetadata>> createUpdatedUdfSi
Optional.empty(),
Optional.of(new SqlFunctionId(QualifiedObjectName.valueOf("unittest.default.square"), ImmutableList.of(parseTypeSignature("integer")))),
Optional.of("1"),
Optional.of(emptyList()),
Optional.of(emptyList())));
squareFunctions.add(new JsonBasedUdfFunctionMetadata(
"square a double",
Expand All @@ -261,6 +269,7 @@ public static Map<String, List<JsonBasedUdfFunctionMetadata>> createUpdatedUdfSi
Optional.empty(),
Optional.of(new SqlFunctionId(QualifiedObjectName.valueOf("unittest.test_schema.square"), ImmutableList.of(parseTypeSignature("double")))),
Optional.of("1"),
Optional.of(emptyList()),
Optional.of(emptyList())));
udfSignatureMap.put("square", squareFunctions);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -140,7 +140,8 @@ private static JsonBasedUdfFunctionMetadata sqlFunctionToMetadata(SqlFunction fu
function.getSignature().getName(),
function.getSignature().getArgumentTypes())),
Optional.of("1"),
Optional.of(function.getSignature().getTypeVariableConstraints()));
Optional.of(function.getSignature().getTypeVariableConstraints()),
Optional.ofNullable(function.getSignature().getLongVariableConstraints()));
}

@GET
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -54,6 +54,7 @@
import static com.google.common.collect.ImmutableList.toImmutableList;
import static java.lang.String.format;
import static java.util.Arrays.stream;
import static java.util.Collections.emptyList;

public final class SqlInvokedScalarFromAnnotationsParser
{
Expand Down Expand Up @@ -169,6 +170,7 @@ else if (method.isAnnotationPresent(SqlParameters.class)) {
QualifiedObjectName.valueOf(JAVA_BUILTIN_NAMESPACE, name),
parameters,
typeVariableConstraints,
emptyList(),
returnType,
functionDescription,
routineCharacteristics,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -134,6 +134,23 @@ const std::vector<protocol::TypeVariableConstraint> getTypeVariableConstraints(
return typeVariableConstraints;
}

const std::vector<protocol::LongVariableConstraint> getLongVariableConstraints(
const FunctionSignature& functionSignature) {
std::vector<protocol::LongVariableConstraint> longVariableConstraints;
const auto functionVariables = functionSignature.variables();
for (const auto& [name, signature] : functionVariables) {
if (signature.isIntegerParameter() && !signature.constraint().empty()) {
protocol::LongVariableConstraint longVariableConstraint;
longVariableConstraint.name =
boost::algorithm::to_lower_copy(signature.name());
longVariableConstraint.expression =
Comment thread
aditi-pandit marked this conversation as resolved.
boost::algorithm::to_lower_copy(signature.constraint());
longVariableConstraints.emplace_back(longVariableConstraint);
}
}
return longVariableConstraints;
}

std::optional<protocol::JsonBasedUdfFunctionMetadata> buildFunctionMetadata(
const std::string& name,
const std::string& schema,
Expand Down Expand Up @@ -165,6 +182,9 @@ std::optional<protocol::JsonBasedUdfFunctionMetadata> buildFunctionMetadata(
metadata.typeVariableConstraints =
std::make_shared<std::vector<protocol::TypeVariableConstraint>>(
getTypeVariableConstraints(signature));
metadata.longVariableConstraints =
std::make_shared<std::vector<protocol::LongVariableConstraint>>(
getLongVariableConstraints(signature));

if (aggregateSignature) {
metadata.aggregateMetadata =
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -88,6 +88,10 @@ TEST_F(FunctionMetadataTest, lead) {
testFunction("lead", "Lead.json", 3);
}

TEST_F(FunctionMetadataTest, mod) {
testFunction("mod", "Mod.json", 7);
}

TEST_F(FunctionMetadataTest, ntile) {
testFunction("ntile", "Ntile.json", 1);
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
},
"docString": "presto.default.approx_most_frequent",
"functionKind": "AGGREGATE",
"longVariableConstraints":[],
"outputType": "map(boolean,bigint)",
"paramTypes": [
"bigint",
Expand All @@ -29,6 +30,7 @@
},
"docString": "presto.default.approx_most_frequent",
"functionKind": "AGGREGATE",
"longVariableConstraints":[],
"outputType": "map(tinyint,bigint)",
"paramTypes": [
"bigint",
Expand All @@ -51,6 +53,7 @@
},
"docString": "presto.default.approx_most_frequent",
"functionKind": "AGGREGATE",
"longVariableConstraints":[],
"outputType": "map(smallint,bigint)",
"paramTypes": [
"bigint",
Expand All @@ -73,6 +76,7 @@
},
"docString": "presto.default.approx_most_frequent",
"functionKind": "AGGREGATE",
"longVariableConstraints":[],
"outputType": "map(integer,bigint)",
"paramTypes": [
"bigint",
Expand All @@ -95,6 +99,7 @@
},
"docString": "presto.default.approx_most_frequent",
"functionKind": "AGGREGATE",
"longVariableConstraints":[],
"outputType": "map(bigint,bigint)",
"paramTypes": [
"bigint",
Expand All @@ -117,6 +122,7 @@
},
"docString": "presto.default.approx_most_frequent",
"functionKind": "AGGREGATE",
"longVariableConstraints":[],
"outputType": "map(varchar,bigint)",
"paramTypes": [
"bigint",
Expand All @@ -139,6 +145,7 @@
},
"docString": "presto.default.approx_most_frequent",
"functionKind": "AGGREGATE",
"longVariableConstraints":[],
"outputType": "map(json,bigint)",
"paramTypes": [
"bigint",
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@
{
"docString": "presto.default.array_frequency",
"functionKind": "SCALAR",
"longVariableConstraints":[],
"outputType": "map(double,integer)",
"paramTypes": [
"array(double)"
Expand All @@ -19,6 +20,7 @@
{
"docString": "presto.default.array_frequency",
"functionKind": "SCALAR",
"longVariableConstraints":[],
"outputType": "map(real,integer)",
"paramTypes": [
"array(real)"
Expand All @@ -35,6 +37,7 @@
{
"docString": "presto.default.array_frequency",
"functionKind": "SCALAR",
"longVariableConstraints":[],
"outputType": "map(integer,integer)",
"paramTypes": [
"array(integer)"
Expand All @@ -51,6 +54,7 @@
{
"docString": "presto.default.array_frequency",
"functionKind": "SCALAR",
"longVariableConstraints":[],
"outputType": "map(varchar,integer)",
"paramTypes": [
"array(varchar)"
Expand All @@ -67,6 +71,7 @@
{
"docString": "presto.default.array_frequency",
"functionKind": "SCALAR",
"longVariableConstraints":[],
"outputType": "map(bigint,integer)",
"paramTypes": [
"array(bigint)"
Expand All @@ -83,6 +88,7 @@
{
"docString": "presto.default.array_frequency",
"functionKind": "SCALAR",
"longVariableConstraints":[],
"outputType": "map(smallint,integer)",
"paramTypes": [
"array(smallint)"
Expand All @@ -99,6 +105,7 @@
{
"docString": "presto.default.array_frequency",
"functionKind": "SCALAR",
"longVariableConstraints":[],
"outputType": "map(timestamp,integer)",
"paramTypes": [
"array(timestamp)"
Expand All @@ -115,6 +122,7 @@
{
"docString": "presto.default.array_frequency",
"functionKind": "SCALAR",
"longVariableConstraints":[],
"outputType": "map(tinyint,integer)",
"paramTypes": [
"array(tinyint)"
Expand All @@ -131,6 +139,7 @@
{
"docString": "presto.default.array_frequency",
"functionKind": "SCALAR",
"longVariableConstraints":[],
"outputType": "map(date,integer)",
"paramTypes": [
"array(date)"
Expand All @@ -147,6 +156,7 @@
{
"docString": "presto.default.array_frequency",
"functionKind": "SCALAR",
"longVariableConstraints":[],
"outputType": "map(boolean,integer)",
"paramTypes": [
"array(boolean)"
Expand Down
Loading
Loading