Select的where条件解析增加Between解析说明

Select的where条件解析增加Between解析,修改以下部分代码:

       1.路由解析规则接口类RuleAlgorithm增加函数声明

Integer[] calculateRange(String beginValue,String endValue)用于处理between等操作的节点解析。

返回结果为

1)存储了节点编号的数组

2)返回null表明没有节点被路由到

3)返回结果为长度为0的Integer数组表示所有节点都被路由(没有实现该方法的路由规则默认返回此结果)。

2.所有路由函数全部改为继承抽象类AbstractPartionAlgorithm。该类实现了接口RuleAlgorithm,并实现一个默认的Integer[] calculateRange(String beginValue,String endValue)函数,它返回一个长度为0的Integer数组表示所有节点均被路由。这样做是为了兼容之前的路由规则函数。

3.因为将路由规则接口类从RuleAlgorithm改为了AbstractPartionAlgorithm,所以修改了XMLRuleLoader类,该类的作用是读取配置文件并生成路由规则类实例等。

4.新增RangeValue类用于存放范围解析结果。

5.存放条件查询时字段名和查询值的ColumnRoutePair类增加RangeValue类型的变量,并修改了hashCode和equals函数。

6. SelectSQLAnalyser类修改了analyseWhereCondition和tryColumnCondition函数,在其中添加了对SQL解析树BetweenOperatorNode结点的处理,处理操作放在新增函数analyseBetween中。

7. ServerRouterUtil类修改了ruleCalculate 函数,增加了对ColumnRoutePair类RangeValue变量的处理,它将由路由规则的calculateRange函数处理。

8.一个简单的junit测试类TestSelectBetweenSqlParser。因为对long值的范围路由函数没有实现,将默认执行AbstractPartionAlgorithm的范围函数,即返回所有结点。

9.新增一个对日期进行分片的路由规则PartionByDate,可以对时间字段进行路由。使用时需要传入3个参数:sBeginDate即该字段数据中最早的日期。sPartionDay为每个分片结点存放的时间范围,单位为天。dateFormat为日期格式,该参数会传入SimpleDateFormat,如yyyy-MM-dd等。sBeginDate的格式应该与dateFormat参数一致。

其它:ColumnRoutePair中有个属性nodeId,在加入了范围结果后,该属性无法使用,虽在eclipse中未发现有调用该属性,不确定是否会有问题。

你可能感兴趣的:(开发技巧经验分享,数据库)