利用随机算法实现数据库sql查询语句自动生成工具的方法与流程

文档序号:14685520发布日期:2018-06-13 00:09阅读:595来源:国知局
本发明涉及数据库领域,特别涉及一种利用随机算法实现数据库sql查询语句自动生成工具的方法。
背景技术
::数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理已不再仅仅是存储和管理数据,且已转变成用户所需要的各种数据管理的方式。近几年来,随着大数据的发展,数据库的类型变得越来越多,sql语法和使用方法也不同,对功能和性能的要求也越来越高。sql查询语句自动化生成工具是在测试数据库功能和性能时经常需要使用到的一种工具。但是,现有的sql查询语句自动生成工具其所生成的sql语句都只有简单的主查询语句,简单的sql语句是无法包含所有的sql查询函数和OLAP语句的,因此,很容易造成测试case的遗漏。技术实现要素:本发明要解决的技术问题,在于提供一种利用随机算法实现数据库sql查询语句自动生成工具的方法,通过该方法来实现多层嵌套式sql查询语句的自动生成,可提高复杂sql查询脚本的制造效率,并节省时间。本发明是这样实现的:利用随机算法实现数据库sql查询语句自动生成工具的方法,所述方法需提供query总生成模块,所述query总生成模块包含select生成模块、from生成模块以及condition生成模块;所述select生成模块包含select子查询单元和funcall单元,所述from生成模块包含from子查询单元和joined_table单元,所述condition生成模块包含condition子查询单元和bool_term单元;所述方法包括如下步骤:步骤S1、从query总生成模块开始进行查询语句生成;步骤S2、执行select生成模块,并利用随机算法对内部单元进行随机选取,且如果选取select子查询单元,则循环进行query总生成模块,从步骤S1开始重新生成查询语句;如果选取funcall单元,则从funcall单元中随机选取操作函数,之后进入步骤S3;步骤S3、执行from生成模块,并利用随机算法对内部单元进行随机选取,且如果选取from子查询单元,则循环进行query总生成模块,从步骤S1开始重新生成查询语句;如果选取joined_table单元,则从joined_table单元中随机选取table信息,之后进入步骤S4;步骤S4、执行condition生成模块,并利用随机算法对内部单元进行随机选取,且如果选取condition子查询单元,则循环进行query总生成模块,从步骤S1开始重新生成查询语句;如果选取bool_term单元,则从bool_term单元中随机选取判断信息,之后进入步骤S5;步骤S5、根据步骤S2、步骤S3以及步骤S4生成所有的查询语句,且将所有的查询语句嵌套拼接成一条完整的sql查询语句并输出。本发明具有如下优点:1、利用随机算法来实现多层嵌套式sql查询语句的自动生成,可提高复杂sql查询脚本的制造效率,并节省时间;2、可包含数据库所有的函数名和函数类型,不会遗漏测试case,可提高测试质量;3、利用随机算法生成的sql查询语句有长有短,针对表的所有数据列,可增加测试case的广度和深度,并实现从多方面评价数据库的质量。附图说明下面参照附图结合实施例对本发明作进一步的说明。图1为本发明利用随机算法实现数据库sql查询语句自动生成工具的方法的执行流程图。图2为本发明中对列与函数进行匹配的原理框图。具体实施方式请参阅图1和图2所示,本发明一种利用随机算法实现数据库sql查询语句自动生成工具的方法,所述方法需提供query总生成模块(即query_spec总生成模块),所述query总生成模块包含select生成模块(select_list生成模块)、from生成模块(即from_clause生成模块)以及condition生成模块(即condition_clause生成模块);所述select生成模块包含select子查询单元(即select_list子查询单元)和包含函数、列信息的funcall单元,所述from生成模块包含from子查询单元(即from_clause子查询单元)和包含各类table信息的joined_table单元,所述condition生成模块包含condition子查询单元(即condition_clause子查询单元)和包含各类句式判断信息的bool_term单元;所述方法包括如下步骤:步骤S1、从query总生成模块开始进行查询语句生成;步骤S2、执行select生成模块,并利用随机算法对内部单元进行随机选取,且如果选取select子查询单元,则循环进行query总生成模块,从步骤S1开始重新生成查询语句,即如果选取select子查询单元,则说明包含有子查询语句,此时就需要从步骤S1开始进行子查询语句的生成;如果选取funcall单元,则从funcall单元中随机选取操作函数,之后进入步骤S3;步骤S3、执行from生成模块,并利用随机算法对内部单元进行随机选取,且如果选取from子查询单元,则循环进行query总生成模块,从步骤S1开始重新生成查询语句,即如果选取from子查询单元,则说明包含有子查询语句,此时就需要从步骤S1开始进行子查询语句的生成;如果选取joined_table单元,则从joined_table单元中随机选取table信息,之后进入步骤S4;步骤S4、执行condition生成模块,并利用随机算法对内部单元进行随机选取,且如果选取condition子查询单元,则循环进行query总生成模块,从步骤S1开始重新生成查询语句,即如果选取condition子查询单元,则说明包含有子查询语句,此时就需要从步骤S1开始进行子查询语句的生成;如果选取bool_term单元,则从bool_term单元中随机选取判断信息,之后进入步骤S5;步骤S5、根据步骤S2、步骤S3以及步骤S4生成所有的查询语句,由于步骤S2的select生成模块、步骤S3的from生成模块或者步骤S4的condition生成模块中都可能存在有子查询语句,因此,在每次完成下级子查询语句的生成后,还需要继续完成上级查询语句的生成,且将所有的查询语句嵌套拼接成一条完整的sql查询语句并输出。在本发明进行步骤S1从query总生成模块开始进行查询语句生成之前,还包括:步骤S11、从数据库中获取要查询的表的表结构信息以及所有支持的内置函数的函数信息,且将获取的表结构信息保存成第一文本文件,将获取的函数信息保存成第二文本文件;其中,所述从数据库中获取要查询的表的表结构信息以及所有支持的内置函数的函数信息具体为:从数据库中获取要查询的表的列名以及表中各个列的类型信息,从数据库中获取所有支持的内置函数的函数名称、函数返回值类型、函数包含的参数个数以及各个参数的类型信息;所述所有支持的内置函数包括操作符(如加号、减号、等号、逗号等)、聚合函数(如MAX、MIN、SUM、AVG等)、OLTP函数或者OLAP函数。步骤S12、修改第一文本文件和第二文本文件的格式,以使第一文本文件和第二文本文件的格式与sql查询语句自动生成工具的输入格式相符合;即需要按照指定的格式来修改第一文本文件和第二文本文件,使sql查询语句自动生成工具的输入和输出得到统一。步骤S13、sql查询语句自动生成工具读取第一文本文件和第二文本文件,并按照规定的格式保存第一文本文件和第二文本文件;步骤S14、sql查询语句自动生成工具对保存的第一文本文件与第二文本文件进行数据类型匹配;所述步骤S14具体为:sql查询语句自动生成工具获取保存的第一文本文件与第二文本文件,并将第一文本文件中各个列的类型信息与第二文本文件中的函数返回值类型和内置函数所包含的各个参数的类型信息进行匹配,且将类型相匹配的列和内置函数保存,类型不匹配的列和内置函数则不进行保存;在具体实施时,sql查询语句自动生成工具在对第一文本文件中各个列的类型信息与第二文本文件中的函数返回值类型和内置函数所包含的各个参数的类型信息进行匹配时,具体包括:将第一文本文件中各个列的类型信息与第二文本文件中函数返回值类型进行比对匹配,且如果类型匹配,则保存列和函数返回值;如果类型不匹配,则不保存列和函数返回值;将第一文本文件中各个列的类型信息与第二文本文件中内置函数所包含的各个参数的类型信息进行比对匹配,且如果各个列的类型信息与内置函数所包含的各个参数的类型信息均对应匹配,则将各个列的类型信息填入内置函数对应的参数表中保存;否则就不将各个列的类型信息填入内置函数对应的参数表中保存。通过将类型匹配的列和函数进行保存后,sql查询语句自动生成工具就可以利用随机算法来随机选取列和函数进行sql查询语句的生成了。综上所述,本发明具有如下优点:1、利用随机算法来实现多层嵌套式sql查询语句的自动生成,可提高复杂sql查询脚本的制造效率,并节省时间;2、可包含数据库所有的函数名和函数类型,不会遗漏测试case,可提高测试质量;3、利用随机算法生成的sql查询语句有长有短,针对表的所有数据列,可增加测试case的广度和深度,并实现从多方面评价数据库的质量。虽然以上描述了本发明的具体实施方式,但是熟悉本
技术领域
:的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。当前第1页1 2 3 当前第1页1 2 3 
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1