public List<Procedure> getProcedures(String schema) { return ImmutableList.<Procedure>builder() .add(procedure(schema, "test_simple", "simple", ImmutableList.of())) .add(procedure(schema, "test_args", "args", ImmutableList.of( new Argument("x", BIGINT), new Argument("y", DOUBLE), new Argument("z", VARCHAR), new Argument("q", BOOLEAN)))) .add(procedure(schema, "test_nulls", "nulls", ImmutableList.of( new Argument("x", BIGINT), new Argument("y", VARCHAR)))) .add(procedure(schema, "test_arrays", "arrays", ImmutableList.of( new Argument("x", "array(bigint)"), new Argument("y", "array(varchar)")))) .add(procedure(schema, "test_nested", "nested", ImmutableList.of( new Argument("x", "array(array(bigint))")))) .add(procedure(schema, "test_session_first", "sessionFirst", ImmutableList.of( new Argument("x", BIGINT)))) .add(procedure(schema, "test_session_last", "sessionLast", ImmutableList.of( new Argument("x", VARCHAR)))) .add(procedure(schema, "test_exception", "exception", ImmutableList.of())) .add(procedure(schema, "test_error", "error", ImmutableList.of())) .build(); }
public Procedure(String schema, String name, List<Argument> arguments, MethodHandle methodHandle) { this.schema = checkNotNullOrEmpty(schema, "schema").toLowerCase(ENGLISH); this.name = checkNotNullOrEmpty(name, "name").toLowerCase(ENGLISH); this.arguments = unmodifiableList(new ArrayList<>(arguments)); this.methodHandle = requireNonNull(methodHandle, "methodHandle is null"); Set<String> names = new HashSet<>(); for (Argument argument : arguments) { checkArgument(names.add(argument.getName()), "Duplicate argument name: " + argument.getName()); } checkArgument(!methodHandle.isVarargsCollector(), "Method must have fixed arity"); checkArgument(methodHandle.type().returnType() == void.class, "Method must return void"); long parameterCount = methodHandle.type().parameterList().stream() .filter(type -> !ConnectorSession.class.isAssignableFrom(type)) .count(); checkArgument(parameterCount == arguments.size(), "Method parameter count must match arguments"); }
private void validateProcedure(Procedure procedure) { List<Class<?>> parameters = procedure.getMethodHandle().type().parameterList().stream() .filter(type -> !ConnectorSession.class.isAssignableFrom(type)) .collect(toList()); for (int i = 0; i < procedure.getArguments().size(); i++) { Argument argument = procedure.getArguments().get(i); Type type = typeManager.getType(argument.getType()); Class<?> argumentType = Primitives.unwrap(parameters.get(i)); Class<?> expectedType = getObjectType(type); checkArgument(expectedType.equals(argumentType), "Argument '%s' has invalid type %s (expected %s)", argument.getName(), argumentType.getName(), expectedType.getName()); } }
positions.put(procedure.getArguments().get(i).getName(), i); names.put(procedure.getArguments().get(i).getName(), argument); Type type = metadata.getType(argument.getType()); checkCondition(type != null, INVALID_PROCEDURE_DEFINITION, "Unknown procedure argument type: %s", argument.getType()); for (int i = 0; i < procedure.getArguments().size(); i++) { if ((values[i] == null) && methodType.parameterType(i).isPrimitive()) { String name = procedure.getArguments().get(i).getName(); throw new PrestoException(INVALID_PROCEDURE_ARGUMENT, "Procedure argument cannot be null: " + name);
positions.put(procedure.getArguments().get(i).getName(), i); names.put(procedure.getArguments().get(i).getName(), argument); Type type = metadata.getType(argument.getType()); checkCondition(type != null, INVALID_PROCEDURE_DEFINITION, "Unknown procedure argument type: %s", argument.getType()); for (int i = 0; i < procedure.getArguments().size(); i++) { if ((values[i] == null) && methodType.parameterType(i).isPrimitive()) { String name = procedure.getArguments().get(i).getName(); throw new PrestoException(INVALID_PROCEDURE_ARGUMENT, "Procedure argument cannot be null: " + name);
private void validateProcedure(Procedure procedure) { List<Class<?>> parameters = procedure.getMethodHandle().type().parameterList().stream() .filter(type -> !ConnectorSession.class.isAssignableFrom(type)) .collect(toList()); for (int i = 0; i < procedure.getArguments().size(); i++) { Argument argument = procedure.getArguments().get(i); Type type = typeManager.getType(argument.getType()); Class<?> argumentType = Primitives.unwrap(parameters.get(i)); Class<?> expectedType = getObjectType(type); checkArgument(expectedType.equals(argumentType), "Argument '%s' has invalid type %s (expected %s)", argument.getName(), argumentType.getName(), expectedType.getName()); } }
@Override public Procedure get() { return new Procedure( "system", "create_empty_partition", ImmutableList.of( new Argument("schema_name", VARCHAR), new Argument("table_name", VARCHAR), new Argument("partition_columns", "array(varchar)"), new Argument("partition_values", "array(varchar)")), CREATE_EMPTY_PARTITION.bindTo(this)); }