CN108334318B - 自定义深度广度实现sql语句自动生成工具定制化的方法 - Google Patents
自定义深度广度实现sql语句自动生成工具定制化的方法 Download PDFInfo
- Publication number
- CN108334318B CN108334318B CN201810087200.3A CN201810087200A CN108334318B CN 108334318 B CN108334318 B CN 108334318B CN 201810087200 A CN201810087200 A CN 201810087200A CN 108334318 B CN108334318 B CN 108334318B
- Authority
- CN
- China
- Prior art keywords
- generation module
- query
- unit
- selecting
- depth value
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
- 238000000034 method Methods 0.000 title claims abstract description 31
- 230000001172 regenerating effect Effects 0.000 claims description 6
- 230000008929 regeneration Effects 0.000 abstract 1
- 238000011069 regeneration method Methods 0.000 abstract 1
- 238000012360 testing method Methods 0.000 description 15
- 238000013523 data management Methods 0.000 description 2
- 239000002699 waste material Substances 0.000 description 2
- 230000002776 aggregation Effects 0.000 description 1
- 238000004220 aggregation Methods 0.000 description 1
- 238000010586 diagram Methods 0.000 description 1
- 238000012986 modification Methods 0.000 description 1
- 230000004048 modification Effects 0.000 description 1
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F8/00—Arrangements for software engineering
- G06F8/30—Creation or generation of source code
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F16/00—Information retrieval; Database structures therefor; File system structures therefor
- G06F16/20—Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
- G06F16/24—Querying
- G06F16/242—Query formulation
- G06F16/2433—Query languages
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- General Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Software Systems (AREA)
- General Physics & Mathematics (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明提供一种自定义深度广度实现sql语句自动生成工具定制化的方法,包括S1、设置模块深度,从query总生成模块进行查询语句生成;S2、执行select生成模块,判断执行次数是否等于select生成模块的循环深度值,若是,则从S1开始重新生成,若否则进入S3;S3、执行from生成模块,判断执行次数是否等于from生成模块的循环深度值,若是,则从S1开始重新生成,若否则进入S4;S4、执行condition生成模块,判断执行次数是否等于condition生成模块的循环深度值,若是,则从S1开始重新生成,若否则进入S5;S5、将所有的查询语句嵌套拼接成一条完整的sql查询语句并输出。本发明可实现多层嵌套式sql查询语句的自定义生成,可提高sql脚本使用灵活性。
Description
技术领域
本发明涉及数据库领域,特别涉及一种自定义深度广度实现sql语句自动生成工具定制化的方法。
背景技术
数据库(Database)是按照数据结构来组织、存储和管理数据的仓库,它产生于距今六十多年前,随着信息技术和市场的发展,特别是二十世纪九十年代以后,数据管理已不再仅仅是存储和管理数据,且已转变成用户所需要的各种数据管理的方式。
近几年来,随着大数据的发展,数据库的类型变得越来越多,sql语法和使用方法也不同,对功能和性能的要求也越来越高。sql查询语句自动化生成工具是在测试数据库功能和性能时经常需要使用到的一种工具。但是,在目前的测试工具中,sql查询语句自动生成工具所生成的sql语句都只有固定格式的查询句式,而没有多层嵌套子查询的sql生成工具,因此,技术人员在对数据库进行具体测试时,需要对每个功能模块都测试一遍,而无法单独对某一个关心的功能模块进行深度测试,这不仅会造成时间浪费,而且还很容易造成系统资源浪费。
发明内容
本发明要解决的技术问题,在于提供一种自定义深度广度实现sql语句自动生成工具定制化的方法,通过该方法来实现多层嵌套式sql查询语句的自定义自动生成,可提高sql查询脚本的使用灵活性,并节约测试时间。
本发明是这样实现的:自定义深度广度实现sql语句自动生成工具定制化的方法,所述方法需提供query总生成模块,所述query总生成模块包含select生成模块、from生成模块以及condition生成模块;所述select生成模块包含select子查询单元和funcall单元,所述from生成模块包含from子查询单元和joined_table单元,所述condition生成模块包含condition子查询单元和bool_term单元;所述方法包括如下步骤:
步骤S1、分别设置select生成模块、from生成模块以及condition生成模块的循环深度值,并从query总生成模块开始进行查询语句生成;
步骤S2、执行select生成模块,根据select生成模块的循环深度值进行内部单元选择,如果当前的执行次数小于设置的select生成模块的循环深度值,则选取select子查询单元,并循环进行query总生成模块,从步骤S1开始重新生成查询语句;如果当前的执行次数等于设置的select生成模块的循环深度值,则选取funcall单元,并从funcall单元中选取操作函数,之后进入步骤S3;
步骤S3、执行from生成模块,根据from生成模块的循环深度值进行内部单元选择,如果当前的执行次数小于设置的from生成模块的循环深度值,则选取from子查询单元,并循环进行query总生成模块,从步骤S1开始重新生成查询语句;如果当前的执行次数等于设置的from生成模块的循环深度值,则选取joined_table单元,并从joined_table单元中选取table信息,之后进入步骤S4;
步骤S4、执行condition生成模块,根据condition生成模块的循环深度值进行内部单元选择,如果当前的执行次数小于设置的condition生成模块的循环深度值,则选取condition子查询单元,并循环进行query总生成模块,从步骤S1开始重新生成查询语句;如果当前的执行次数等于设置的condition生成模块的循环深度值,则选取bool_term单元,并从bool_term单元中选取判断信息;
步骤S5、根据步骤S2、步骤S3以及步骤S4生成所有的查询语句,且将所有的查询语句嵌套拼接成一条完整的sql查询语句并输出。
进一步地,在所述步骤S2中,还包括:设置funcall单元内部不同类型的操作函数的权重,并按照设置的权重分配不同操作函数的选取概率。
进一步地,在所述步骤S3中,还包括:设置joined_table单元内部不同类型的table信息的权重,并按照设置的权重分配不同table信息的选取概率。
进一步地,在所述步骤S4中,还包括:设置bool_term单元内部不同类型的判断信息的权重,并按照设置的权重分配不同判断信息的选取概率。
本发明具有如下优点:1、通过配置深度广度的方式来实现多层嵌套式sql查询语句的自定义自动生成,可提高sql查询脚本的使用灵活性,并节约测试时间;2、可包含数据库所有的函数名和函数类型,不会遗漏测试case,可提高测试质量;3、可以自定义sql查询语句的生成深度,针对表的所有数据列,可以实现对数据库进行有侧重点的评价(例如可以将要重点评价的方面的深度设置的深一些,而其它方面则设置得少一些)。
附图说明
下面参照附图结合实施例对本发明作进一步的说明。
图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、分别设置select生成模块、from生成模块以及condition生成模块的循环深度值(例如,设置select生成模块的循环深度值为A,设置from生成模块的循环深度值为B,设置condition生成模块的循环深度值为C),并从query总生成模块开始进行查询语句生成;
步骤S2、执行select生成模块,根据select生成模块的循环深度值进行内部单元选择,如果当前的执行次数小于设置的select生成模块的循环深度值(当前的执行次数<A),则选取select子查询单元,并循环进行query总生成模块,从步骤S1开始重新生成查询语句,即如果选取select子查询单元,则说明包含有子查询语句,此时就需要从步骤S1开始进行子查询语句的生成;如果当前的执行次数等于设置的select生成模块的循环深度值(当前的执行次数=A),则选取funcall单元,并从funcall单元中选取操作函数,之后进入步骤S3;
步骤S3、执行from生成模块,根据from生成模块的循环深度值进行内部单元选择,如果当前的执行次数小于设置的from生成模块的循环深度值(当前的执行次数<B),则选取from子查询单元,并循环进行query总生成模块,从步骤S1开始重新生成查询语句,即如果选取from子查询单元,则说明包含有子查询语句,此时就需要从步骤S1开始进行子查询语句的生成;如果当前的执行次数等于设置的from生成模块的循环深度值(当前的执行次数=B),则选取joined_table单元,并从joined_table单元中选取table信息,之后进入步骤S4;
步骤S4、执行condition生成模块,根据condition生成模块的循环深度值进行内部单元选择,如果当前的执行次数小于设置的condition生成模块的循环深度值(当前的执行次数<C),则选取condition子查询单元,并循环进行query总生成模块,从步骤S1开始重新生成查询语句,即如果选取condition子查询单元,则说明包含有子查询语句,此时就需要从步骤S1开始进行子查询语句的生成;如果当前的执行次数等于设置的condition生成模块的循环深度值(当前的执行次数=C),则选取bool_term单元,并从bool_term单元中选取判断信息;
步骤S5、根据步骤S2、步骤S3以及步骤S4生成所有的查询语句,由于步骤S2的select生成模块、步骤S3的from生成模块或者步骤S4的condition生成模块中都可能存在有子查询语句,因此,在每次完成下级子查询语句的生成后,还需要继续完成上级查询语句的生成,且将所有的查询语句嵌套拼接成一条完整的sql查询语句并输出。
在所述步骤S2中,还包括:设置funcall单元内部不同类型的操作函数的权重,并按照设置的权重分配不同操作函数的选取概率。也就是说,希望多测试的操作函数可以设置较高的权重,希望少测试的操作函数可以设置较低的权重,例如,可以设置SUM的权重为30%,设置AVG的权重为10%,设置MAX的权重为15%等等,这样,就可以实现根据不同的权重来分配不同操作函数的选取概率了。
在所述步骤S3中,还包括:设置joined_table单元内部不同类型的table信息的权重,并按照设置的权重分配不同table信息的选取概率。也就是说,希望多测试的table信息可以设置较高的权重,希望少测试的table信息可以设置较低的权重。
在所述步骤S4中,还包括:设置bool_term单元内部不同类型的判断信息的权重,并按照设置的权重分配不同判断信息的选取概率。也就是说,希望多测试的判断信息可以设置较高的权重,希望少测试的判断信息可以设置较低的权重。
在本发明进行步骤S1分别设置select生成模块、from生成模块以及condition生成模块的循环深度值,并从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查询语句的生成深度,针对表的所有数据列,可以实现对数据库进行有侧重点的评价(例如可以将要重点评价的方面的深度设置的深一些,而其它方面则设置得少一些)。
虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。
Claims (4)
1.一种自定义深度广度实现sql语句自动生成工具定制化的方法,其特征在于:所述方法需提供query总生成模块,所述query总生成模块包含select生成模块、from生成模块以及condition生成模块;所述select生成模块包含select子查询单元和funcall单元,所述from生成模块包含from子查询单元和joined_table单元,所述condition生成模块包含condition子查询单元和bool_term单元;所述方法包括如下步骤:
步骤S1、分别设置select生成模块、from生成模块以及condition生成模块的循环深度值,并从query总生成模块开始进行查询语句生成;
步骤S2、执行select生成模块,根据select生成模块的循环深度值进行内部单元选择,如果当前的执行次数小于设置的select生成模块的循环深度值,则选取select子查询单元,并循环进行query总生成模块,从步骤S1开始重新生成查询语句;如果当前的执行次数等于设置的select生成模块的循环深度值,则选取funcall单元,并从funcall单元中选取操作函数,之后进入步骤S3;
步骤S3、执行from生成模块,根据from生成模块的循环深度值进行内部单元选择,如果当前的执行次数小于设置的from生成模块的循环深度值,则选取from子查询单元,并循环进行query总生成模块,从步骤S1开始重新生成查询语句;如果当前的执行次数等于设置的from生成模块的循环深度值,则选取joined_table单元,并从joined_table单元中选取table信息,之后进入步骤S4;
步骤S4、执行condition生成模块,根据condition生成模块的循环深度值进行内部单元选择,如果当前的执行次数小于设置的condition生成模块的循环深度值,则选取condition子查询单元,并循环进行query总生成模块,从步骤S1开始重新生成查询语句;如果当前的执行次数等于设置的condition生成模块的循环深度值,则选取bool_term单元,并从bool_term单元中选取判断信息;
步骤S5、根据步骤S2、步骤S3以及步骤S4生成的查询语句,且将所有的查询语句嵌套拼接成一条完整的sql查询语句并输出。
2.根据权利要求1所述的自定义深度广度实现sql语句自动生成工具定制化的方法,其特征在于:在所述步骤S2中,还包括:设置funcall单元内部不同类型的操作函数的权重,并按照设置的权重分配不同操作函数的选取概率。
3.根据权利要求1所述的自定义深度广度实现sql语句自动生成工具定制化的方法,其特征在于:在所述步骤S3中,还包括:设置joined_table单元内部不同类型的table信息的权重,并按照设置的权重分配不同table信息的选取概率。
4.根据权利要求1所述的自定义深度广度实现sql语句自动生成工具定制化的方法,其特征在于:在所述步骤S4中,还包括:设置bool_term单元内部不同类型的判断信息的权重,并按照设置的权重分配不同判断信息的选取概率。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810087200.3A CN108334318B (zh) | 2018-01-30 | 2018-01-30 | 自定义深度广度实现sql语句自动生成工具定制化的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810087200.3A CN108334318B (zh) | 2018-01-30 | 2018-01-30 | 自定义深度广度实现sql语句自动生成工具定制化的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108334318A CN108334318A (zh) | 2018-07-27 |
CN108334318B true CN108334318B (zh) | 2021-01-19 |
Family
ID=62926246
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810087200.3A Active CN108334318B (zh) | 2018-01-30 | 2018-01-30 | 自定义深度广度实现sql语句自动生成工具定制化的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108334318B (zh) |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101826085A (zh) * | 2009-12-30 | 2010-09-08 | 厦门市美亚柏科信息股份有限公司 | 一种基于ajax的网页在线导入/导出大文件的方法 |
US20130080462A1 (en) * | 2011-09-28 | 2013-03-28 | Bmc Software, Inc. | Methods and apparatus for monitoring execution of a database query program |
-
2018
- 2018-01-30 CN CN201810087200.3A patent/CN108334318B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101826085A (zh) * | 2009-12-30 | 2010-09-08 | 厦门市美亚柏科信息股份有限公司 | 一种基于ajax的网页在线导入/导出大文件的方法 |
US20130080462A1 (en) * | 2011-09-28 | 2013-03-28 | Bmc Software, Inc. | Methods and apparatus for monitoring execution of a database query program |
Non-Patent Citations (2)
Title |
---|
Heterogeneous Query Processing through SQL Table Functions;Berthold Reinwald等;《Proceedings 15th International Conference on Data Engineering》;19990326;第1-8页 * |
基于ASP的WEB数据库智能查询;李志勇等;《河南师范大学学报(自然科学版)》;20100131;第38卷(第01期);第164-166页 * |
Also Published As
Publication number | Publication date |
---|---|
CN108334318A (zh) | 2018-07-27 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111078702B (zh) | 一种sql语句分类管理及统一查询方法和装置 | |
US20070214104A1 (en) | Method and system for locking execution plan during database migration | |
CN104133772A (zh) | 一种自动生成测试数据的方法 | |
CN107679071B (zh) | 一种面向关系数据库的通用数据服务定制化封装方法 | |
CN112988782B (zh) | Hive支持交互式查询的方法、装置及存储介质 | |
CN113672628A (zh) | 数据血缘分析方法、终端设备及介质 | |
US20240256613A1 (en) | Data processing method and apparatus, readable storage medium, and electronic device | |
CN116560642A (zh) | 代码生成方法及其装置、电子设备及存储介质 | |
CN108388589B (zh) | 一种数据库sql查询语句自动生成的装置 | |
CN108008947B (zh) | 一种编程语句的智能提示方法、装置、服务器及存储介质 | |
CN113792071A (zh) | Sql智能生成并调优组件和方法 | |
CN113703777A (zh) | 基于数据库表的代码生成方法、装置、存储介质和设备 | |
CN108399196B (zh) | 数据库sql语句自动生成工具的sql自动执行方法及系统 | |
CN108334318B (zh) | 自定义深度广度实现sql语句自动生成工具定制化的方法 | |
CN108460092B (zh) | 包含数据库内置函数的sql查询语句自动生成方法及系统 | |
CN116610694A (zh) | 一种基于列和访问语句关系的规则校验方法和系统 | |
CN108153916B (zh) | 利用随机算法实现数据库sql查询语句自动生成工具的方法 | |
CN105389340A (zh) | 一种信息测试方法及装置 | |
CN115757479A (zh) | 数据库的查询优化方法、机器可读存储介质与计算机设备 | |
CN114547083A (zh) | 数据处理方法、装置及电子设备 | |
CN114328577A (zh) | 数据查询方法和装置 | |
CN112783758B (zh) | 测试案例库与特征库生成方法、设备及存储介质 | |
CN115757083A (zh) | 一种分布式数据库检测方法及装置 | |
CN115687387A (zh) | 一种sql语句生成方法、装置、设备及存储介质 | |
CN117555935B (zh) | 一种低代码平台数据处理方法、装置及设备 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
CB02 | Change of applicant information |
Address after: 350000 21 / F, building 5, f District, Fuzhou Software Park, 89 software Avenue, Gulou District, Fuzhou City, Fujian Province Applicant after: FUJIAN SINOREGAL SOFTWARE Co.,Ltd. Address before: Floor 20-21, building 5, area F, Fuzhou Software Park, 89 software Avenue, Gulou District, Fuzhou City, Fujian Province 350000 Applicant before: FUJIAN SINOREGAL SOFTWARE Co.,Ltd. |
|
CB02 | Change of applicant information | ||
GR01 | Patent grant | ||
GR01 | Patent grant |