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

jp.dodododo.dao.dialect.mysql.MySQLTableNameResolver Maven / Gradle / Ivy

package jp.dodododo.dao.dialect.mysql;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import java.util.List;
import java.util.Map;
import java.util.Objects;
import jp.dodododo.dao.dialect.TableNameResolver;
import jp.dodododo.dao.util.CacheUtil;
import jp.dodododo.dao.util.ConnectionUtil;
import jp.dodododo.dao.util.PreparedStatementUtil;
import jp.dodododo.dao.util.StringUtil;

public class MySQLTableNameResolver implements TableNameResolver {
    private static final List TABLE_NAMES = CacheUtil.cacheList();
    private static final Map TABLE_NAME_MAPS = CacheUtil.cacheMap();

	@Override
	public String resolve(Connection connection, String tableName) throws SQLException {
		String ret = TABLE_NAME_MAPS.get(tableName);
		if (ret != null) {
			return ret;
		}

		String dbTableName = getRealTableName(tableName);
		if (dbTableName != null) {
			return dbTableName;
		}

		synchronized (TABLE_NAMES) {
			PreparedStatement ps = ConnectionUtil.prepareStatement(connection, "show tables");
			ResultSet rs = PreparedStatementUtil.executeQuery(ps);
			while (rs.next()) {
				TABLE_NAMES.add(rs.getString(1));
			}
		}

		dbTableName = getRealTableName(tableName);
		if (dbTableName != null) {
			return dbTableName;
		}

        TABLE_NAME_MAPS.put(tableName, tableName);
		return tableName;
	}

	private static String getRealTableName(String tableName) {
		for (String dbTableName : TABLE_NAMES) {
			if (Objects.equals(tableName, dbTableName)) {
				TABLE_NAME_MAPS.put(tableName, dbTableName);
				return dbTableName;
			}
		}
		for (String dbTableName : TABLE_NAMES) {
			if (StringUtil.equalsIgnoreCase(tableName, dbTableName)) {
				TABLE_NAME_MAPS.put(tableName, dbTableName);
				return dbTableName;
			}
		}
		return null;
	}
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy