CN108153916A - 利用随机算法实现数据库sql查询语句自动生成工具的方法 - Google Patents
利用随机算法实现数据库sql查询语句自动生成工具的方法 Download PDFInfo
- Publication number
- CN108153916A CN108153916A CN201810087059.7A CN201810087059A CN108153916A CN 108153916 A CN108153916 A CN 108153916A CN 201810087059 A CN201810087059 A CN 201810087059A CN 108153916 A CN108153916 A CN 108153916A
- Authority
- CN
- China
- Prior art keywords
- units
- generation modules
- query
- random algorithm
- generation
- 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.)
- Granted
Links
Classifications
-
- 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)
- Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Physics (AREA)
- Computational Linguistics (AREA)
- Data Mining & Analysis (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本发明一种利用随机算法实现数据库sql查询语句自动生成工具的方法,包括S1、从query总生成模块进行查询语句生成;S2、执行select生成模块,利用随机算法随机选取,若选取select子查询单元,从S1开始重新生成,若选取funcall单元,进入S3;S3、执行from生成模块,利用随机算法随机选取,若选取from子查询单元,从S1开始重新生成,若选取joined_table单元,进入S4;S4、执行condition生成模块,利用随机算法随机选取,若选取condition子查询单元,从S1开始重新生成,若选取bool_term单元,进入S5;S5、将所有的查询语句嵌套拼接成一条完整的sql查询语句并输出。本发明可实现多层嵌套式sql查询语句自动生成,可提高复杂sql制造效率。
Description
技术领域
本发明涉及数据库领域,特别涉及一种利用随机算法实现数据库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的广度和深度,并实现从多方面评价数据库的质量。
虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。
Claims (1)
1.一种利用随机算法实现数据库sql查询语句自动生成工具的方法,其特征在于:所述方法需提供query总生成模块,所述query总生成模块包含select生成模块、from生成模块以及condition生成模块;所述select生成模块包含select子查询单元和funcall单元,所述from生成模块包含from子查询单元和joined_table单元,所述condition生成模块包含condition子查询单元和bool单元;所述方法包括如下步骤:
步骤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查询语句并输出。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810087059.7A CN108153916B (zh) | 2018-01-30 | 2018-01-30 | 利用随机算法实现数据库sql查询语句自动生成工具的方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201810087059.7A CN108153916B (zh) | 2018-01-30 | 2018-01-30 | 利用随机算法实现数据库sql查询语句自动生成工具的方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108153916A true CN108153916A (zh) | 2018-06-12 |
CN108153916B CN108153916B (zh) | 2021-08-31 |
Family
ID=62459149
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201810087059.7A Active CN108153916B (zh) | 2018-01-30 | 2018-01-30 | 利用随机算法实现数据库sql查询语句自动生成工具的方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108153916B (zh) |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090077050A1 (en) * | 2002-05-10 | 2009-03-19 | International Business Machines Corporation | Querying markup language data sources using a relational query processor |
CN104657440A (zh) * | 2015-01-30 | 2015-05-27 | 欧阳江 | 结构化查询语句生成***及方法 |
CN105446743A (zh) * | 2015-12-12 | 2016-03-30 | 天津南大通用数据技术股份有限公司 | 一种自动生成sql语句的***及方法 |
US20160267294A1 (en) * | 2006-10-03 | 2016-09-15 | Salesforce.Com, Inc. | Methods and Systems for Controlling Access to Custom Objects in a Database |
CN106557563A (zh) * | 2016-11-15 | 2017-04-05 | 北京百度网讯科技有限公司 | 基于人工智能的查询语句推荐方法及装置 |
CN106919678A (zh) * | 2017-02-27 | 2017-07-04 | 武汉珞佳伟业科技有限公司 | 一种数据库查询优化***及方法 |
CN107168977A (zh) * | 2016-03-08 | 2017-09-15 | 阿里巴巴集团控股有限公司 | 一种数据查询的优化方法及装置 |
CN107169033A (zh) * | 2017-04-17 | 2017-09-15 | 东北大学 | 基于数据模式转换和并行框架的关系数据查询优化方法 |
-
2018
- 2018-01-30 CN CN201810087059.7A patent/CN108153916B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20090077050A1 (en) * | 2002-05-10 | 2009-03-19 | International Business Machines Corporation | Querying markup language data sources using a relational query processor |
US20160267294A1 (en) * | 2006-10-03 | 2016-09-15 | Salesforce.Com, Inc. | Methods and Systems for Controlling Access to Custom Objects in a Database |
CN104657440A (zh) * | 2015-01-30 | 2015-05-27 | 欧阳江 | 结构化查询语句生成***及方法 |
CN105446743A (zh) * | 2015-12-12 | 2016-03-30 | 天津南大通用数据技术股份有限公司 | 一种自动生成sql语句的***及方法 |
CN107168977A (zh) * | 2016-03-08 | 2017-09-15 | 阿里巴巴集团控股有限公司 | 一种数据查询的优化方法及装置 |
CN106557563A (zh) * | 2016-11-15 | 2017-04-05 | 北京百度网讯科技有限公司 | 基于人工智能的查询语句推荐方法及装置 |
CN106919678A (zh) * | 2017-02-27 | 2017-07-04 | 武汉珞佳伟业科技有限公司 | 一种数据库查询优化***及方法 |
CN107169033A (zh) * | 2017-04-17 | 2017-09-15 | 东北大学 | 基于数据模式转换和并行框架的关系数据查询优化方法 |
Non-Patent Citations (2)
Title |
---|
SHAHRAM GHANDEHARIZADEH.ET.: "SQL Query to Trigger Translation: A Novel Transparent Consistency Technique for Cache Augmented SQL Systems", 《2017 28TH INTERNATIONAL WORKSHOP ON DATABASE AND EXPERT SYSTEMS APPLICATIONS (DEXA)》 * |
杨高明: "SQL注入的自动化检测技术研究", 《中国优秀硕士学位论文全文数据库 信息科技辑》 * |
Also Published As
Publication number | Publication date |
---|---|
CN108153916B (zh) | 2021-08-31 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102929878B (zh) | 一种数据库变更管理方法及装置 | |
CN102682118B (zh) | 一种多维数据模型访问方法及装置 | |
CN112559554B (zh) | 一种查询语句优化方法及装置 | |
CN104391730B (zh) | 一种软件源码语言翻译***及方法 | |
CN105868204B (zh) | 一种转换Oracle脚本语言SQL的方法及装置 | |
RU2005107522A (ru) | Отображение таблиц с помощью команд на естественном языке | |
CN109508355A (zh) | 一种数据抽取方法、***及终端设备 | |
US20190188302A1 (en) | Group-by-time operations with returned time context | |
CN104715032A (zh) | 一种报表***中英文表名字段名映射***及方法 | |
CN104182405A (zh) | 一种连接查询方法及装置 | |
US20110271137A1 (en) | Unified framework for configuration validation | |
US11269880B2 (en) | Retroreflective clustered join graph generation for relational database queries | |
Bidoit et al. | Immutably Answering {Why-Not} Questions for Equivalent Conjunctive Queries | |
CN109614315A (zh) | 一种数据同步测试用例的自动生成方法及*** | |
CN111367893A (zh) | 数据库版本迭代的方法及装置 | |
CN104714974A (zh) | 一种查询语句解析与再处理的方法和装置 | |
CN111914066A (zh) | 多源数据库全局搜索方法及*** | |
CN111291025B (zh) | 逻辑模型支持多物理模型转换的方法及存储设备 | |
CN111177181A (zh) | Sql文本审核方法、***、存储介质及装置 | |
CN111159381A (zh) | 数据搜索方法及装置 | |
CN108460092B (zh) | 包含数据库内置函数的sql查询语句自动生成方法及*** | |
CN108388589B (zh) | 一种数据库sql查询语句自动生成的装置 | |
CN112183074A (zh) | 一种数据增强方法、装置、设备及介质 | |
CN108153916A (zh) | 利用随机算法实现数据库sql查询语句自动生成工具的方法 | |
CN105320763B (zh) | 一种将xml文件的内容导入数据库的方法和装置 |
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 | ||
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. |
|
GR01 | Patent grant | ||
GR01 | Patent grant |