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

net.ttddyy.dsproxy.proxy.RepeatableReadResultSetProxyLogicFactory Maven / Gradle / Ivy

There is a newer version: 1.10
Show newest version
package net.ttddyy.dsproxy.proxy;

import net.ttddyy.dsproxy.ConnectionInfo;
import net.ttddyy.dsproxy.DataSourceProxyException;

import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.HashMap;
import java.util.Map;

/**
 * Factory to create {@link RepeatableReadResultSetProxyLogic}.
 *
 * @author Tadaya Tsuyukubo
 * @author Liam Williams
 * @since 1.4.3
 */
public class RepeatableReadResultSetProxyLogicFactory implements ResultSetProxyLogicFactory {

    @Override
    public ResultSetProxyLogic create(ResultSet resultSet, ConnectionInfo connectionInfo, ProxyConfig proxyConfig) {
        Map columnNameToIndex = columnNameToIndex(resultSet);
        return RepeatableReadResultSetProxyLogic.Builder.create()
                .resultSet(resultSet)
                .connectionInfo(connectionInfo)
                .proxyConfig(proxyConfig)
                .columnNameToIndex(columnNameToIndex)
                .columnCount(columnNameToIndex.size())
                .build();
    }

    private Map columnNameToIndex(ResultSet resultSet) {
        try {
            ResultSetMetaData metaData = resultSet.getMetaData();
            int columnCount = metaData.getColumnCount();
            Map columnNameToIndex = new HashMap();
            for (int i = 1; i <= columnCount; i++) {
                columnNameToIndex.put(metaData.getColumnLabel(i), i);
            }
            return columnNameToIndex;
        } catch (SQLException e) {
            throw new DataSourceProxyException("Failed to obtain resultset metadata", e);
        }
    }

}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy