[#3748] Add public Routine T getValue(Parameter<T>) and setValue(Parameter<T>, T) methods

This commit is contained in:
lukaseder 2015-03-02 14:40:58 +01:00
parent cd58f9879a
commit ab8b6a1e54
2 changed files with 36 additions and 12 deletions

View File

@ -89,6 +89,10 @@ import org.jooq.exception.DataAccessException;
*/
public interface Routine<T> extends QueryPart {
// -------------------------------------------------------------------------
// XXX: Meta information
// -------------------------------------------------------------------------
/**
* Get the routine schema
*/
@ -143,15 +147,9 @@ public interface Routine<T> extends QueryPart {
*/
List<Parameter<?>> getParameters();
/**
* @return The routine's return value (if it is a function)
*/
T getReturnValue();
/**
* @return The routine's results (if available)
*/
List<Result<Record>> getResults();
// -------------------------------------------------------------------------
// XXX: Call API
// -------------------------------------------------------------------------
/**
* Execute the stored object using a {@link Configuration} object
@ -166,4 +164,28 @@ public interface Routine<T> extends QueryPart {
* @throws DataAccessException if something went wrong executing the query
*/
int execute() throws DataAccessException;
// -------------------------------------------------------------------------
// XXX: Call data
// -------------------------------------------------------------------------
/**
* Set the routine's IN value for an IN parameter.
*/
<Z> void setValue(Parameter<Z> parameter, Z value);
/**
* @return The routine's OUT value for an OUT parameter.
*/
<Z> Z getValue(Parameter<Z> parameter);
/**
* @return The routine's return value (if it is a function)
*/
T getReturnValue();
/**
* @return The routine's results (if available)
*/
List<Result<Record>> getResults();
}

View File

@ -198,7 +198,7 @@ public abstract class AbstractRoutine<T> extends AbstractQueryPart implements Ro
// Initialise a routine call
// ------------------------------------------------------------------------
protected final void setNumber(Parameter<? extends Number> parameter, Number value) {
protected final <N extends Number> void setNumber(Parameter<N> parameter, Number value) {
setValue(parameter, Convert.convert(value, parameter.getType()));
}
@ -206,7 +206,8 @@ public abstract class AbstractRoutine<T> extends AbstractQueryPart implements Ro
setField(parameter, value);
}
protected final void setValue(Parameter<?> parameter, Object value) {
@Override
public final <Z> void setValue(Parameter<Z> parameter, Z value) {
setField(parameter, val(value, parameter.getDataType()));
}
@ -645,8 +646,9 @@ public abstract class AbstractRoutine<T> extends AbstractQueryPart implements Ro
return results;
}
@Override
@SuppressWarnings("unchecked")
protected final <Z> Z getValue(Parameter<Z> parameter) {
public final <Z> Z getValue(Parameter<Z> parameter) {
return (Z) outValues.get(parameter);
}