package com.walker.dbmeta;
import com.walker.connector.Address;
import com.walker.connector.support.DatabaseConnector;
import com.walker.db.DatabaseException;
import com.walker.db.TableInfo;
import com.walker.dbmeta.util.DatabaseMetaEngineUtils;
import com.walker.infrastructure.utils.StringUtils;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import java.util.ArrayList;
import java.util.List;
import java.util.Map;
/**
* 抽象的数据库元数据引擎定义。
* 该引擎仅作为数据库元数据管理,与系统元数据有区别。
* 系统元数据包含了对于业务表和库的管理,不包含具体数据库的详细信息,他也需要此引擎。
* @author shikeying
* @date 2015年12月21日
*
*
* 修改对象,因为每个引擎对象只会有一个DatabaseConnector
引用,所以去掉connector集合对象,
* 保持单例状态。
* @category 时克英
* @date 2019-05-16
*/
public abstract class AbstractDatabaseMetaEngine implements DatabaseMetaEngine {
protected final transient Logger logger = LoggerFactory.getLogger(getClass());
// /* 数据库连接器缓存,key=Address, value=DatabaseConnector */
// private ConcurrentHashMap connectors = new ConcurrentHashMap(8);
private DatabaseConnector connector = null;
/**
* 返回表中字段对象集合
* @param address
* @param tableName
* @return
*/
public List getFieldsObject(Address address, String tableName){
DatabaseConnector conn = getConnector(address);
checkSchema(address.getServiceName());
return loadFieldsObject(conn, tableName);
}
/**
* 加载某个表的所有字段名字集合
// * @param schema
* @param tableName 表名
* @return 字段名集合
*/
protected abstract List loadFieldsObject(DatabaseConnector connector, String tableName);
@Override
public List getFields(Address address, String tableName){
DatabaseConnector conn = getConnector(address);
checkSchema(address.getServiceName());
return loadFields(conn, tableName);
}
@Override
public int getTableSize(Address address) {
DatabaseConnector conn = getConnector(address);
// 注意:此地不应当直接引用Mysql相关信息,这是抽象类,后续优化
checkSchema(address.getServiceName());
return loadSchemaTableSize(conn);
}
@Override
public Map getTableRows(Address address, List tableNameList){
DatabaseConnector conn = getConnector(address);
checkSchema(address.getServiceName());
return this.loadTablesRow(address, conn, tableNameList);
}
@Override
public long getTableRow(Address address, String tableName){
DatabaseConnector conn = getConnector(address);
checkSchema(address.getServiceName());
return this.loadTableRow(conn, tableName);
}
@Override
public List