package jef.database.query; import java.util.Map; import jef.database.IQueryableEntity; import jef.database.innerpool.PartitionSupport; import jef.database.meta.AbstractMetadata; import jef.database.routing.PartitionResult; /** * 分表规则计算器 * @author Administrator * */ public interface PartitionCalculator { /** * 根据类获得表名列表,支持分表 * * 该方法一般都在查询和更新时使用。 * * @param meta 表结构元数据 * @param instance 对象实例 * @param q 请求 * @param context 上下文 * @return 分表计算结果 * @see PartitionResult */ PartitionResult[] toTableNames(AbstractMetadata meta, IQueryableEntity instance, Query<?> q, PartitionSupport context,boolean filter); /** * 根据从SQL中分析得到的维度矢量进行路由计算 * @param meta * @param val * @param processor * @return */ PartitionResult[] toTableNames(AbstractMetadata meta, Map<String,Dimension> val, PartitionSupport processor,boolean filter); /** * 根据从SQL中分析得到的维度矢量进行路由计算 * @param meta * @param val * @param processor * @return */ PartitionResult toTableName(AbstractMetadata meta, Map<String,Dimension> val,PartitionSupport processor); /** * 在无实例的情况下计算表名,将会计算出全部可能的实现 * * 该方法基本上都在维护表的DDL中使用。其他地方不用。 * * @param meta 表结构数据 * @param context 上下文 * @param operateType 。0基表 1 分表,不含基表 2 分表+基表 3 数据库中的存在表(不含基表) 4所有存在的表 * @return 分表计算结果 */ PartitionResult[] toTableNames(AbstractMetadata meta, PartitionSupport context,int operateType); /** * 计算Query对应的表名,要求落在一个固定存在的表上。 * 该方法一般在插入等操作中使用。此外在Join等明确不支持多表的场合下用于返回单表 * * @param meta 元数据 * @param instance 数据实例 * @param q 请求 * @param context 相关上下文 * @return 计算结果 * @see PartitionResult */ PartitionResult toTableName(AbstractMetadata meta, IQueryableEntity instance, Query<?> q,PartitionSupport context); }