Jooq puede reconocer parámetros opcionales para las rutinas y crear sobrecargas en consecuencia?

fhueser:

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!

Lukas Eder:

Se podría ampliar la org.jooq.meta.Databaseclase que usted está utilizando para generar código con el fin de producir adicionales RoutineDefinitioninstancias 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;
    }
}

Supongo que te gusta

Origin http://10.200.1.11:23101/article/api/json?id=477142&siteId=1
Recomendado
Clasificación