package jef.database.innerpool; import java.sql.SQLException; import java.util.Collection; import jef.database.dialect.DatabaseDialect; import jef.database.meta.ITableMetadata; import jef.database.routing.PartitionResult; /** * 分库分表的环境上下文 * @author jiyi * */ public interface PartitionSupport { /** * 获得目前所有库 * @return 所有数据源名称 */ Collection<String> getDdcNames(); /** * 得到在所有库上,某个表的全部分表。表名结果全部大写 * @param meta 表元模型 * @return 所有库上所有表。 */ PartitionResult[] getSubTableNames(ITableMetadata meta); /** * 获得在指定数据源上的基于某张分表的所有实例表 * @param dbkey 数据源名称 * @param meta 表元模型 * @return 在某个数据源上所有分表 * @throws SQLException */ Collection<String> getSubTableNames(String dbkey,ITableMetadata meta) throws SQLException; /** * 得到某个数据源的数据库方言 * @param dbkey 数据源名称 * @return 方言 */ DatabaseDialect getProfile(String dbkey); /** * 确保表存在,没有就创建 * @param dbkey 数据源名称 * @param table 表名 * @param meta 表元模型 * @throws SQLException */ void ensureTableExists(String dbkey,String table,ITableMetadata meta)throws SQLException; /** * 询问表是否存在 * @param dbkey 数据源名称 * @param table 表名 * @param meta 表元模型 * @return 如果分表存在返回true,反之。 */ boolean isExist(String dbkey, String table,ITableMetadata meta); }