CN108334318B - 自定义深度广度实现sql语句自动生成工具定制化的方法 - Google Patents

自定义深度广度实现sql语句自动生成工具定制化的方法 Download PDF

Info

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
Application number
CN201810087200.3A
Other languages
English (en)
Other versions
CN108334318A (zh
Inventor
吴游颖
林荫峰
蔡世平
方超
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Fujian Sinoregal Software Co ltd
Original Assignee
Fujian Sinoregal Software Co ltd
Priority date (The priority date 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 date listed.)
Filing date
Publication date
Application filed by Fujian Sinoregal Software Co ltd filed Critical Fujian Sinoregal Software Co ltd
Priority to CN201810087200.3A priority Critical patent/CN108334318B/zh
Publication of CN108334318A publication Critical patent/CN108334318A/zh
Application granted granted Critical
Publication of CN108334318B publication Critical patent/CN108334318B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/24Querying
    • G06F16/242Query formulation
    • G06F16/2433Query 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语句自动生成工具定制化的方法
技术领域
本发明涉及数据库领域,特别涉及一种自定义深度广度实现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单元内部不同类型的判断信息的权重,并按照设置的权重分配不同判断信息的选取概率。
CN201810087200.3A 2018-01-30 2018-01-30 自定义深度广度实现sql语句自动生成工具定制化的方法 Active CN108334318B (zh)

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)

* Cited by examiner, † Cited by third party
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

Patent Citations (2)

* Cited by examiner, † Cited by third party
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)

* Cited by examiner, † Cited by third party
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
CN110795455B (zh) 依赖关系解析方法、电子装置、计算机设备及可读存储介质
US20070214104A1 (en) Method and system for locking execution plan during database migration
CN104133772A (zh) 一种自动生成测试数据的方法
CN111078702B (zh) 一种sql语句分类管理及统一查询方法和装置
CN107679071B (zh) 一种面向关系数据库的通用数据服务定制化封装方法
CN112988782A (zh) Hive支持交互式查询的方法、装置及存储介质
CN113672628A (zh) 数据血缘分析方法、终端设备及介质
CN116560642A (zh) 代码生成方法及其装置、电子设备及存储介质
CN113468204A (zh) 一种数据查询方法、装置、设备、介质
CN115982416A (zh) 一种数据处理方法、装置、可读存储介质及电子设备
CN108388589B (zh) 一种数据库sql查询语句自动生成的装置
CN108008947B (zh) 一种编程语句的智能提示方法、装置、服务器及存储介质
CN113792071A (zh) Sql智能生成并调优组件和方法
CN108399196B (zh) 数据库sql语句自动生成工具的sql自动执行方法及系统
CN108334318B (zh) 自定义深度广度实现sql语句自动生成工具定制化的方法
CN108460092B (zh) 包含数据库内置函数的sql查询语句自动生成方法及系统
CN116610694A (zh) 一种基于列和访问语句关系的规则校验方法和系统
CN111782195A (zh) 一种基于在请求参数上添加注解拼接成sql的查询方法
CN108153916B (zh) 利用随机算法实现数据库sql查询语句自动生成工具的方法
CN112541001A (zh) 数据查询方法、装置、存储介质及设备
CN105389340A (zh) 一种信息测试方法及装置
CN115757479A (zh) 数据库的查询优化方法、机器可读存储介质与计算机设备
CN114547083A (zh) 数据处理方法、装置及电子设备
CN114328577A (zh) 数据查询方法和装置
CN114925142A (zh) 一种orm框架的多类型数据库兼容方法、装置、设备及介质

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