All Downloads are FREE. Search and download functionalities are using the official Maven repository.

eu.clarussecure.proxy.protocol.plugins.pgsql.message.PgsqlBindMessage Maven / Gradle / Ivy

The newest version!
package eu.clarussecure.proxy.protocol.plugins.pgsql.message;

import java.util.List;
import java.util.Objects;

import eu.clarussecure.proxy.spi.CString;
import io.netty.buffer.ByteBuf;
import io.netty.util.internal.StringUtil;

public class PgsqlBindMessage extends PgsqlQueryRequestMessage {

    public static final byte TYPE = (byte) 'B';

    private CString portal;
    private CString preparedStatement;
    private List parameterFormats;
    private List parameterValues;
    private List resultColumnFormats;

    public PgsqlBindMessage(CString portal, CString preparedStatement, List parameterFormats,
            List parameterValues, List resultColumnFormats) {
        this.portal = Objects.requireNonNull(portal, "portal must not be null");
        this.preparedStatement = Objects.requireNonNull(preparedStatement, "preparedStatement must not be null");
        this.parameterFormats = Objects.requireNonNull(parameterFormats, "parameterFormats must not be null");
        this.parameterValues = Objects.requireNonNull(parameterValues, "parameterValues must not be null");
        this.resultColumnFormats = Objects.requireNonNull(resultColumnFormats, "resultColumnFormats must not be null");
    }

    public CString getPortal() {
        return portal;
    }

    public void setPortal(CString portal) {
        this.portal = Objects.requireNonNull(portal, "portal must not be null");
    }

    public CString getPreparedStatement() {
        return preparedStatement;
    }

    public void setPreparedStatement(CString preparedStatement) {
        this.preparedStatement = Objects.requireNonNull(preparedStatement, "preparedStatement must not be null");
    }

    public List getParameterFormats() {
        return parameterFormats;
    }

    public void setParameterFormats(List parameterFormats) {
        this.parameterFormats = Objects.requireNonNull(parameterFormats, "parameterFormats must not be null");
    }

    public short getParameterFormat(int index) {
        switch (parameterFormats.size()) {
        case 0: // Text format
            return 0;
        case 1: // Same format for all parameters
            return parameterFormats.get(0);
        default: // Format by parameter
            return parameterFormats.get(index);
        }
    }

    public boolean isParameterTextFormat(int index) {
        return getParameterFormat(index) == 0;
    }

    public boolean isParameterBinaryFormat(int index) {
        return getParameterFormat(index) == 1;
    }

    public List getParameterValues() {
        return parameterValues;
    }

    public void setParameterValues(List parameterValues) {
        this.parameterValues = Objects.requireNonNull(parameterValues, "parameterValues must not be null");
    }

    public ByteBuf getParameterValue(int index) {
        return parameterValues.get(index);
    }

    public CString getParameterValueAsText(int index) {
        if (!isParameterTextFormat(index)) {
            throw new IllegalArgumentException(String.format("parameter value %n is binary", index));
        }
        ByteBuf value = getParameterValue(index);
        return CString.valueOf(value, value.capacity());
    }

    public List getResultColumnFormats() {
        return resultColumnFormats;
    }

    public void setResultColumnFormats(List resultColumnFormats) {
        this.resultColumnFormats = Objects.requireNonNull(resultColumnFormats, "resultColumnFormats must not be null");
    }

    public short getResultColumnFormat(int index) {
        switch (resultColumnFormats.size()) {
        case 0: // Text format
            return 0;
        case 1: // Same format for all result columns
            return resultColumnFormats.get(0);
        default: // Format by result column
            return resultColumnFormats.get(index);
        }
    }

    public boolean isResultColumnTextFormat(int index) {
        return getResultColumnFormat(index) == 0;
    }

    public boolean isResultColumnBinaryFormat(int index) {
        return getResultColumnFormat(index) == 1;
    }

    @Override
    public byte getType() {
        return TYPE;
    }

    @Override
    public String toString() {
        StringBuilder builder = new StringBuilder(StringUtil.simpleClassName(this));
        builder.append(" [");
        builder.append("portal=").append(portal);
        builder.append(", preparedStatement=").append(preparedStatement);
        builder.append(", parameterFormats=").append(parameterFormats);
        builder.append(", parameterValues=").append(parameterValues);
        builder.append(", resultColumnFormats=").append(resultColumnFormats);
        builder.append("]");
        return builder.toString();
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy