ルーチンのためのオプションのパラメータを認識し、それに応じて過負荷作成jooqことはできますか?

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;
    }
}

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=477139&siteId=1