package jef.database.query; import java.util.Collection; import jef.database.annotation.PartitionFunction; /** * 描述一个查询分表的维度,进行各种区间运算 * 目前已知的维度有三种 * 1、Range. 即一个数学上的区间,左右边界都可以描述开闭。当左边界等于右边界并且为闭区间时,即收敛为一个点(因此也可以表示一个点) * 2、多个区间。表示同时存在多个Range. * @author Administrator * */ public interface Dimension{ /** * 区间是否有效 * @return */ boolean isValid(); /** * 和另一个区间进行AND运算(取交集) * @param d * @return */ Dimension mergeAnd(Dimension d); /** * 和另一个区间进行OR运算(取并集) * @param d * @return */ Dimension mergeOr(Dimension d); /** * 取反(取补集) * @return */ Dimension mergeNot(); /** * 根据指定的枚举算法,将区间采样为有限个数的点。 * @param function * @return */ Collection<?> toEnumationValue(@SuppressWarnings("rawtypes") Collection<PartitionFunction> function); }