fhueser:
我々はtimescaledbにアクセスするにはKotlin / Java環境でjooqを使用しています。我々は再生成時に今、しばしばjooqはそれだけでオプションのパラメータを追加したにもかかわらず、DB上のルーチンのシグニチャーの変更があった場合、我々は、エラーを取得するオブジェクト。私は何とか手動のオプションパラメータのデフォルト値を入力することを避けるために、それぞれのメソッドのオーバーロードを生成するjooqことはできますか?
ありがとう!
ルーカス・エダー:
あなたは拡張することができorg.jooq.meta.Database
ますが、追加生産するためにコードを生成するために使用しているというクラスをRoutineDefinition
各コード生成実行からインスタンスを。あなたはこのために必要な情報があるすべては、あなただけ(、バグがあるかもしれない、私はそれを試していない編集にお気軽に)このような何かをする必要があります:
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;
}
}