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中未发现有调用该属性,不确定是否会有问题。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小小哭包

创作不易,给作者加个鸡腿吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值