ConverterJdbcStatement.java

/*
 * SPDX-FileCopyrightText: 2025 kaumei.io
 * SPDX-License-Identifier: Apache-2.0
 */
package io.kaumei.jdbc.anno.java2jdbc;

import com.palantir.javapoet.CodeBlock;
import io.kaumei.jdbc.anno.gen.KaumeiLib;
import io.kaumei.jdbc.anno.gen.TargetMethod;
import io.kaumei.jdbc.anno.model.OptionalFlag;
import io.kaumei.jdbc.anno.store.SourceDV;

import javax.lang.model.type.TypeMirror;
import java.util.Objects;

final class ConverterJdbcStatement extends Java2JdbcConverter {

    private final boolean isPrimitive;
    private final String methodName;

    ConverterJdbcStatement(TypeMirror type, SourceDV source, String methodName) {
        super(type, source);
        this.isPrimitive = type.getKind().isPrimitive();
        this.methodName = Objects.requireNonNull(methodName);
    }

    @Override
    public void setParameter(TargetMethod builder, CodeBlock paramAccess, CodeBlock columnIndex, OptionalFlag optional) {
        builder.addComment("ConverterJdbcStatement", "type", this.type(), "optional", optional);
        if (optional.isNonNull()) {
            if (isPrimitive) {
                builder.addStatement("stmt.$N($L, $L)", methodName, columnIndex, paramAccess);
            } else {
                builder.addStatement("stmt.$N($L, $L)", methodName, columnIndex, KaumeiLib.requireNonNull(paramAccess));
            }
        } else if (isPrimitive) { // sanity-check
            throw new IllegalArgumentException("primitive must always be non-null"); // sanity-check
        } else {
            builder.addStatement("stmt.$N($L, $L)", methodName, columnIndex, paramAccess);
        }
    }
}