utilizamos jooq en un entorno Kotlin / Java para acceder a un timescaledb. Ahora, muchas veces cuando nos regenerar la jooq objetos obtenemos errores si hubo un cambio en la firma de una rutina en el PP a pesar de que acaba de agregar parámetros opcionales. ¿Hay algún modo hacer jooq generar sobrecargas de los métodos respectivos para evitar tener que rellenar manualmente los valores por defecto de los parámetros opcionales?
¡Gracias!
Se podría ampliar la org.jooq.meta.Database
clase que usted está utilizando para generar código con el fin de producir adicionales RoutineDefinition
instancias de cada proceso de generación de código. Toda la información que necesita para esto es que hay, sólo hay que hacer algo como esto (no he probado, puede haber errores, no dude en corregir):
public class MyDatabase extends PostgresDatabase {
@Override
protected List<RoutineDefinition> getRoutines0() throws SQLException {
List<RoutineDefinition> routines = super.getRoutines0();
List<RoutineDefinition> result = new ArrayList<>(routines);
routineLoop:
for (RoutineDefinition routine : routines) {
if (routine.isSQLUsable()) {
List<ParameterDefinition> in = new ArrayList<>(routine.getInParameters());
Iterator<ParameterDefinition> it = in.iterator();
boolean hasDefaulted = false;
while (it.hasNext())
if (it.next().isDefaulted()) {
hasDefaulted = true;
it.remove();
}
// This approach only works if the trailing params are defaulted
else if (hasDefaulted)
continue routineLoop;
if (hasDefaulted)
result.add(new AbstractRoutineDefinition(
routine.getSchema(), null, routine.getName(),
routine.getComment(), "OverloadIndex" // Replace this
) {
@Override
protected void init0() {
addParameter(InOutDefinition.RETURN, routine.getReturnValue());
for (ParameterDefinition p : in)
addParameter(InOutDefinition.IN, p);
}
});
}
}
return result;
}
}