[发明专利]一种独立于数据库的sql语句合并方法及系统在审
申请号: | 201610048596.1 | 申请日: | 2016-01-25 |
公开(公告)号: | CN105740344A | 公开(公告)日: | 2016-07-06 |
发明(设计)人: | 孙建洲;宋莹;孙毓忠 | 申请(专利权)人: | 中国科学院计算技术研究所 |
主分类号: | G06F17/30 | 分类号: | G06F17/30 |
代理公司: | 北京律诚同业知识产权代理有限公司 11006 | 代理人: | 祁建国;梁挥 |
地址: | 100190 北*** | 国省代码: | 北京;11 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | 一种 立于 数据库 sql 语句 合并 方法 系统 | ||
1.一种独立于数据库的sql语句合并方法,其特征在于,包括:
步骤1,根据数据库名称对选定数据库进行数据库扫描,获取所述选的数据库所有表名信息,根据所述表名信息进行队列初始化,生成数量为所述选定数据库中表的总数量的初始化队列;
步骤2,获取sql语句,将所述sql语句放入到全局开放的生产者队列中,并从所述生产者队列中依次提取所述sql语句,同时对每提取的一条所述sql语句进行对象封装处理,并将对象封装处理后的sql语句存入所述初始化队列;
步骤3,对所述初始化队列中所有sql语句进行出队操作,将出队后的sql语句按照合并规则进行合并,使每个所述初始化队列都对应一条总的sql语句,以完成sql语句合并。
2.如权利要求1所述的独立于数据库的sql语句合并方法,其特征在于,所述步骤2中sql语句存入所述初始化队列的规则为若所述sql语句包含的from部分对应的关键字属于一个表的类型,则将所述sql语句封装后的对象放入到与所述表相对应的队列中;若所述sql语句包含的from部分对应的关键字属于多个表联接的类型,则根据所联接的表名创建一个新队列,用于存放表联接之后所发生的相关sql语句。
3.如权利要求1所述的独立于数据库的sql语句合并方法,其特征在于,所述步骤2与所述步骤3之间还包括步骤C1,对于每个从所述生产者队列中提取出来的所述sql语句,对与所述sql语句相对应的所述初始化队列进行sql语句添加,若添加过程中sql语句数量达到所述初始化队列的域值,则获取所述初始化队列,并触发所述初始化队列的合并操作;
步骤C2,以第一次从所述生产者队列中提取所述sql语句为初始开始时间,每当时间间隔达到设定的时间阈值,则进行一次整体合并,将所有所述初始化队列中所述sql语句统一进行一次合并操作。
4.如权利要求1所述的独立于数据库的sql语句合并方法,其特征在于,所述步骤3的所述合并规则为,合并所述sql语句中select部分对应的字段,在未出现*的情况下,对于各所述sql语句之间出现的相同字段,省去相同字段后的字段,若出现不同字段则添加到合并结果中,同时根据SQL92的规范,中间以逗号相隔,如果出现了*,则对于之前参与合并的sql语句的合并结果进行更改,改为*,对于后续参与合并的sql语句不再继续参与合并select部分;
合并where部分对应的字段,其中where部分对应的内容包含以where为头,不包含where关键字本身,以groupby,orderby,limit后续操作关键字最早出现的位置为结尾,不包含所述后续操作关键字。
5.如权利要求1所述的独立于数据库的sql语句合并方法,其特征在于,还包括执行查询步骤,将每个所述初始化队列合并后的sql语句进行数据库查询引擎的投入操作,获取合并语句的查询结果集。
查询结果集拆分步骤,每一个所述查询结果集按照拆分规则进行拆分,拆分到相应所述初始化队列中每一个被对象封装过的sql语句上,其中拆分规则为遍历所述初始化队列中每一个被对象封装过的sql语句,首先根据select部分的内容对所述查询结果集进行一次列定位,然后查询后续内容部分关键字中是否包含有limit关键字,若包含有limit关键字,则首先根据limit关键字筛选出相应的条数,若不包含limit关键字,则搜索where部分所封装起来的对象,根据每一个key,rela以及value的关系对所述查询结果集进行第一次结果筛选,如果所述sql语句封装的对象中where部分内容为空,则跳过对where部分内容的筛选,进行后续内容部分对所述查询结果集的筛选过程,最后,再通过后续内容部分对所述查询结果集进行最后的拆分排序过程,若为orderby,则根据相应关键字对前面已筛选出来的所述查询结果集进行排序操作,若为groupby,则根据相应关键字对前面已筛选出来的所述查询结果集进行分组操作,将每一个操作完成的查询结果集放入与其相对应的最初封装的sql语句中。
6.如权利要求1或4所述的独立于数据库的sql语句合并方法,其特征在于,还包括语句结果集反馈步骤,将所有拆分后的查询结果集对应的ID放入到消费者队列里,上层应用根据所述ID到所述消费者对列中获取相应的查询结果集。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于中国科学院计算技术研究所,未经中国科学院计算技术研究所许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/201610048596.1/1.html,转载请声明来源钻瓜专利网。