CN110633290A - 一种sql语句分析方法及分析装置 - Google Patents

一种sql语句分析方法及分析装置 Download PDF

Info

Publication number
CN110633290A
CN110633290A CN201810636853.2A CN201810636853A CN110633290A CN 110633290 A CN110633290 A CN 110633290A CN 201810636853 A CN201810636853 A CN 201810636853A CN 110633290 A CN110633290 A CN 110633290A
Authority
CN
China
Prior art keywords
sql
module
sql statement
check
ast
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.)
Pending
Application number
CN201810636853.2A
Other languages
English (en)
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.)
Suningcom Group Co Ltd
Original Assignee
Suningcom Group 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 Suningcom Group Co Ltd filed Critical Suningcom Group Co Ltd
Priority to CN201810636853.2A priority Critical patent/CN110633290A/zh
Publication of CN110633290A publication Critical patent/CN110633290A/zh
Pending legal-status Critical Current

Links

Images

Landscapes

  • Stored Programmes (AREA)
  • Debugging And Monitoring (AREA)

Abstract

本发明公开了一种SQL语句分析方法,属于计算机技术领域。具体包括如下步骤:S1:上传发布包并临时保存;S2:解压发布包,识别并提取收集发布包中所有的SQL语句;S3:处理SQL语句中预置模板文件内的变量体;S4:对处理后的SQL语句进行语法解析,生成AST;S5:遍历AST,检查SQL语句成分。本发明可以直接从待部署的发布中提取所有的SQL语句,批量进行解析和检查,方便操作,大大节省了开发人员的时间,提高了效率。

Description

一种SQL语句分析方法及分析装置
技术领域
本发明涉及计算机技术领域,特别涉及一种SQL语句分析方法及分析装置。
背景技术
SQL即结构化查询语言(Structured Query Language),是一种特殊目的的编程语言,主要用于存取数据以及查询、更新和管理关系数据库系统。在SQL系统的构建中,因为系统结构繁杂,参与的开发人员众多,难免会出现SQL语句的语法和性能问题,因此在SQL系统上线前需要进行语法和性能检查,现有的做法是人工检查每条SQL,并且到目标库执行,此工作量巨大且容易遗漏某些SQL。
发明内容
为了解决现有技术的问题,本发明实施例提供了SQL语法及性能分析检测方法。所述技术方案如下:
一种SQL语句分析方法,具体包括如下步骤:
S1:上传发布包并临时保存;
S2:解压发布包,识别并提取收集发布包中所有的SQL语句;
S3:处理SQL语句中预置模板文件内的变量体;
S4:对处理后的SQL语句进行语法解析,生成AST;
S5:遍历AST,检查SQL语句成分。
进一步地,所述S3具体包括:使用预先配置的字符串替换变量体和去除模板文件内的语法标签。
进一步地,所述S4具体包括:通过解析器,把SQL语句的每个成分解析成对应的对象实体;对象实体组成完整的抽象语法树AST。
进一步地,所述检查SQL语句成分包括:SQL静态检查和SQL动态检查。
进一步地,所述SQL静态检查为按照预设的静态检查规则针对SQL语句进行检查;所述SQL动态检查为按照预设的动态检查规则连接数据库对SQL语句运行并分析运行结果,判断性能和合理性。
为了解决上述问题,本发明还公开了一种SQL语句分析装置,包括:
上传模块,用于上传并临时保存发布包,
解压模块,用于解压发布包,识别并提取发布包中所有的SQL语句,
处理模块,用于处理SQL语句中预置模板文件内的变量体,
AST生成模块,用于SQL语法解析,生成AST,
遍历检查模块,用于遍历AST并检查SQL语句成分,
展示模块,用于展示并提示存在疑问的SQL语句。
其中所述解压模块与所述上传模块连接,所述处理模块与所述AST生成模块相连,所述遍历检查模块与所述AST生成模块相连,所述展示模块与所述遍历检查模块相连。
进一步地,所述处理模块包括变量体替换模块和语法标签去除模块。
进一步地,所述遍历检查模块中存储有预先设置好的SQL语句成分检查规则,所述SQL语句成分检查规则包括静态检查规则和动态检查规则。
进一步地,所述展示模块中设有存储子模块以及提示子模块。
本发明的技术方案带来的有益效果是:
目前市面上没有可以自动检查待发布执行的SQL的工具和方法,本发明可以直接从待部署的发布中提取所有的SQL语句,批量进行解析和检查,方便操作,大大节省了开发人员的时间,提高了效率。在发布前不仅能够快速检查出存在的语法错误,同时可以检查出存在性能隐患的SQL语句,结果展示清晰明确,为开发人员提供了SQL改进的依据。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明实施例1提供的SQL语句分析方法流程图;
图2是本发明实施例1提供的SQL语句分析装置模块图;
图3是本发明实施例2提供的SQL语句分析方法流程图;
图4是本发明实施例2提供的SQL语句分析装置模块图。
具体实施方式
为使本发明的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
实施例1
如图1所示,一种SQL语句分析方法,具体包括如下步骤:S1:上传发布包并临时保存;S2:解压发布包,识别并提取收集发布包中所有的SQL语句;S3:处理SQL语句中预置模板文件内的变量体;S4:对处理后的SQL语句进行语法解析,生成AST;S5:遍历AST,检查SQL语句成分。
其中,S1中发布包,又叫做项目工程发布包,其中包含有开发人员编写的基于某种预置模板文件编写的包含有与该预置模板文件相应的语法的SQL模板语句,故含有大量的与该预置模板文件相应的标签及语法,SQL执行前需传入相关变量值生成最终可执行的SQL语句方可执行。上述步骤1~3为获得可以进行语法解析的SQL语句的步骤。
S3包括:使用预先配置的字符串替换变量体以及去除模板文件内的语法标签。
S4中SQL语法解析包括:通过解析器,把语句的每个成分解析成对应的对象实体;所述AST为由对象实体组成完整的抽象语法树。抽象语法树(abstract syntax tree或者缩写为AST),或者语法树(syntax tree),是源代码的抽象语法结构的树状表现形式,指编程语言的源代码。生成AST能够便于逻辑清晰、层次分明的检查SQL语句成分,加快检查效率。
S5中检查SQL语句成分包括:SQL静态检查和SQL动态检查。SQL静态检查为按照预设的静态检查规则针对SQL语句进行检查。SQL动态检查为按照预设的动态检查规则连接数据库对SQL语句运行并分析运行结果,判断SQL语句的性能和合理性。
如图2所示,本发明还公开了一种SQL语句分析装置,包括:上传模块、解压模块、处理模块、AST生成模块、遍历检查模块、展示模块,其中解压模块与上传模块连接,处理模块与AST生成模块相连,遍历检查模块与AST生成模块相连,展示模块与遍历检查模块相连。
处理模块包括变量体替换模块和语法标签去除模块。遍历检查模块中存储有预先设置好的SQL语句成分检查规则。展示模块中设有存储子模块以及提示子模块。展示模块能够通过存储子模块将存在问题的SQL语句存储起来,并通过提示子模块将存在问题的SQL语句标出提示开发人员,还可以给出相应的修改建议。
实施例2
本实施例是基于war包存储的SQL语句,即发布包为war包。SQL语句是基于freemark语法编写的。
如图3所示,一种SQL语句分析方法,具体包括如下步骤:S1:上传war包并临时保存;S2:解压war包,识别并提取收集发布包中所有的SQL语句;S3:处理SQL语句中freemark内的变量体;S4:SQL语法解析,生成AST;S5:遍历AST,使用规则检查SQL语句成分;S6:返回检查结果,并进行保存或展示。
S1中的War包(Web Archive file)网络应用程序文件是与平台无关的文件格式,它允许将许多文件组合成一个压缩文件。这里War包是项目工程发布包,其中包含有开发人员编写的基于freemark模板技术编写的包含有freemark语法的sql模板语句,故含有大量的freemark标签及语法,SQL执行前需传入相关变量值生成最终可执行的SQL语句方可执行。
S2中SQL模板语句可能包含在war包中的jar包中,所以在遇到jar文件时,需要进一步解压jar包,最后收集到所有的SQL模板语句。Jar包是JAVA的程序包,解压以后有JAR和JAD文件。
S3中处理SQL语句中freemark内的变量体包括使用预先配置的字符串替换freemark变量体以及去除freemark内的语法标签。
使用预先配置的字符串替换freemark变量体,具体为:把预先配置好的值通过root参数传入,去除freemark中varName变量的值。例如:形如“${var}”的变量体需要使用预先配置的字符串进行替换,如“${preOrderId}”可以替换成“000735280008”。
去除freemark语法标签,例如:形如<#if varName??>...</#if>的freemark语法标签,可以通过接口FreeMakerParser.process(String expression,Object root)去除,varName变量的值,然后把预先配置好的值通过root参数传入。
S4的具体做法可为通过解析器,把语句的每个成分如Columns FunctionsRelationships Conditions GroupBy子句OrderBy子句等等,解析成对应的对象实体,此处为java对象,若干java对象组成完整的抽象语法树AST。
在S5遍历的过程中,利用预先编写好的各种规则(检查项)对各部分进行检查或校验,发现其中存在的问题和不符合规范的地方,并收集检查的结果。检查的过程中,可以连接数据库,结合实际的数据库对象定义,如作为查询条件的表字段未建立索引,检查出是否存在性能上的风险。
S5中检查SQL语句成分包括:SQL静态检查和SQL动态检查。
SQL静态检查为为针对SQL语句进行检查,其检查规则可以包括:在表字段上使用了函数操作;对表字段进行逻辑运算操作;LIKE条件块中使用前%匹配;避免在where子句中对字段进行null值判断;使用联接条件判断;避免使用!=、<>、or操作符;建议使用exists关键字代替in;建议使用not exists关键字代替not in;建议有序整数字范围条件、使用between and操作;将使用空字符串进行查询改为使用缺省值查询的建议;select语句块中使用*的检查。
SQL动态检查为连接数据库对SQL语句进行检查,其检查规则可以包括:识别条件语句块中存在的隐式类型转换;识别条件中没有索引的字段,建议创建索引;连接到目标库,获取到SQL执行计划,根据结果报告了解SQL执行过程与性能。
本发明有默认参数配置及自定义参数配置两种动态SQL条件配置、可灵活搭配使用针对性的解析SQL,考虑到未来与自动化持续交付平台集成、工具提供对war程序包自动分析,对SQL分析的结果有清晰的分类展示。本发明能有效排除生产系统的SQL隐患。
本发明实施例还公开一种基于上述分析方法的SQL语句分析装置,如图4所示,该装置包括:war包上传模块、解压模块、处理模块、AST生成模块、遍历检查模块、展示模块。其中解压模块与war包上传模块连接,处理模块与解压模块连接,AST生成模块与处理模块连接,遍历检查模块与AST生成模块连接,展示模块与遍历检查模块连接。
其中,war包上传模块,主要执行SQL语法及性能分析检测方法中的S1:上传war包并临时保存。
解压模块,主要执行SQL语法及性能分析检测方法中的S2:解压war包,识别并提取收集war包中所有的SQL语句,遇到jar包时,进一步解压jar包。
处理模块,包括变量体替换模块和语法标签去除模块,主要执行SQL语法及性能分析检测方法中的S3中处理SQL语句中freemark内的变量体。处理模块是将开发人员编写的基于freemark模板技术编写的包含有freemark语法的SQL模板语句转换为可以进行语法解析的SQL语句的关键模块。
AST生成模块,主要执行SQL语法及性能分析检测方法中的S4:SQL语法解析,生成AST。
遍历检查模块,主要执行SQL语法及性能分析检测方法中的S5:遍历AST,使用规则检查SQL语句成分。该模块中存储有预先设置好的SQL语句成分检查规则。
展示模块,主要执行SQL语法及性能分析检测方法中的S6:返回检查结果,并进行保存或展示。该模块中设有存储子模块以及提示子模块,存储子模块主要用于保存检查结果,提示子模块主要用于标出存在问题的SQL语句以及给出修改建议。
上述所有可选技术方案,可以采用任意结合形成本发明的可选实施例,在此不再一一赘述。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。

Claims (9)

1.一种SQL语句分析方法,其特征在于,具体包括如下步骤:
S1:上传发布包并临时保存;
S2:解压发布包,识别并提取收集发布包中所有的SQL语句;
S3:处理SQL语句中预置模板文件内的变量体;
S4:对处理后的SQL语句进行语法解析,生成AST;
S5:遍历AST,检查SQL语句成分。
2.如权利要求1所述的分析方法,其特征在于,所述S3具体包括:使用预先配置的字符串替换变量体和去除模板文件内的语法标签。
3.如权利要求1所述的分析方法,其特征在于,所述S4具体包括:通过解析器,把SQL语句的每个成分解析成对应的对象实体,对象实体组成完整的抽象语法树AST。
4.如权利要求1~3中任意一项所述的分析方法,其特征在于,所述检查SQL语句成分包括:SQL静态检查和SQL动态检查。
5.如权利要求4所述的分析方法,其特征在于,所述SQL静态检查为按照预设的静态检查规则针对SQL语句进行检查;所述SQL动态检查为按照预设的动态检查规则连接数据库对SQL语句运行并分析运行结果,判断性能和合理性。
6.一种SQL语句分析装置,其特征在于,包括:
上传模块,用于上传并临时保存发布包,
解压模块,用于解压发布包,识别并提取发布包中所有的SQL语句,
处理模块,用于处理SQL语句中预置模板文件内的变量体,
AST生成模块,用于SQL语句的语法解析,生成AST,
遍历检查模块,用于遍历AST并检查SQL语句成分,
展示模块,用于展示并提示存在疑问的SQL语句。
7.如权利要求6所述的分析装置,其特征在于,所述处理模块包括变量体替换模块和语法标签去除模块。
8.如权利要求6所述的分析装置,其特征在于,所述遍历检查模块中存储有预先设置好的SQL语句成分检查规则。
9.如权利要求6所述的分析装置,其特征在于,所述展示模块中设有存储子模块以及提示子模块。
CN201810636853.2A 2018-06-20 2018-06-20 一种sql语句分析方法及分析装置 Pending CN110633290A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201810636853.2A CN110633290A (zh) 2018-06-20 2018-06-20 一种sql语句分析方法及分析装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201810636853.2A CN110633290A (zh) 2018-06-20 2018-06-20 一种sql语句分析方法及分析装置

Publications (1)

Publication Number Publication Date
CN110633290A true CN110633290A (zh) 2019-12-31

Family

ID=68967526

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201810636853.2A Pending CN110633290A (zh) 2018-06-20 2018-06-20 一种sql语句分析方法及分析装置

Country Status (1)

Country Link
CN (1) CN110633290A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111797112A (zh) * 2020-06-05 2020-10-20 武汉大学 一种PostgreSQL预备语句执行优化方法
CN112346730A (zh) * 2020-11-04 2021-02-09 星环信息科技(上海)股份有限公司 一种中间表示的生成方法、计算机设备及存储介质
CN112395305A (zh) * 2020-11-11 2021-02-23 中国人寿保险股份有限公司 一种sql语句分析方法、装置、电子设备及存储介质

Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140129582A1 (en) * 2012-11-07 2014-05-08 International Business Machines Corporation Modifying Structured Query Language Statements
CN104391995A (zh) * 2014-12-15 2015-03-04 北京趣拿软件科技有限公司 一种sql语句审核的方法、数据库运维的方法及系统
CN106445795A (zh) * 2016-09-26 2017-02-22 中国工商银行股份有限公司 一种数据库sql效率检测方法及装置
CN107292167A (zh) * 2017-06-27 2017-10-24 北京计算机技术及应用研究所 基于精简语法树的sql语句安全检测方法
CN107391384A (zh) * 2017-08-14 2017-11-24 中国银行股份有限公司 一种sql语句检测方法及系统

Patent Citations (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20140129582A1 (en) * 2012-11-07 2014-05-08 International Business Machines Corporation Modifying Structured Query Language Statements
CN104391995A (zh) * 2014-12-15 2015-03-04 北京趣拿软件科技有限公司 一种sql语句审核的方法、数据库运维的方法及系统
CN106445795A (zh) * 2016-09-26 2017-02-22 中国工商银行股份有限公司 一种数据库sql效率检测方法及装置
CN107292167A (zh) * 2017-06-27 2017-10-24 北京计算机技术及应用研究所 基于精简语法树的sql语句安全检测方法
CN107391384A (zh) * 2017-08-14 2017-11-24 中国银行股份有限公司 一种sql语句检测方法及系统

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
郑洪: "《编译原理 第2版》", 31 January 2010 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN111797112A (zh) * 2020-06-05 2020-10-20 武汉大学 一种PostgreSQL预备语句执行优化方法
CN112346730A (zh) * 2020-11-04 2021-02-09 星环信息科技(上海)股份有限公司 一种中间表示的生成方法、计算机设备及存储介质
CN112395305A (zh) * 2020-11-11 2021-02-23 中国人寿保险股份有限公司 一种sql语句分析方法、装置、电子设备及存储介质
CN112395305B (zh) * 2020-11-11 2024-04-16 中国人寿保险股份有限公司 一种sql语句分析方法、装置、电子设备及存储介质

Similar Documents

Publication Publication Date Title
US11221832B2 (en) Pruning engine
US9122540B2 (en) Transformation of computer programs and eliminating errors
US8914370B2 (en) Generating rules for classifying structured documents
KR20190060725A (ko) Sql 검토 방법, 장치, 서버 및 저장 매체
CN107203468B (zh) 一种基于ast的软件版本演化对比分析方法
CN110502227B (zh) 代码补全的方法及装置、存储介质、电子设备
CN108255837B (zh) 一种sql解析器及方法
CN111309760A (zh) 数据检索方法、系统、设备及存储介质
CN112860727B (zh) 基于大数据查询引擎的数据查询方法、装置、设备及介质
CN110633290A (zh) 一种sql语句分析方法及分析装置
US20150193213A1 (en) Computer Implemented System and Method for Checking a Program Code
CN102298552A (zh) 基于代码查询进行源代码插桩的方法
CN113238937B (zh) 一种基于代码精简与误报过滤的编译器模糊测试方法
CN113297251A (zh) 多源数据检索方法、装置、设备及存储介质
CN117076742A (zh) 数据血缘追踪方法、装置及电子设备
CN112445867A (zh) 一种数据关系智能分析方法和系统
CN110580170A (zh) 软件性能风险的识别方法及装置
EP2535813A1 (en) Method and device for generating an alert during an analysis of performance of a computer application
CN108008947B (zh) 一种编程语句的智能提示方法、装置、服务器及存储介质
CN113032366A (zh) 基于Flex和Bison的SQL语法树解析方法
Yu et al. Design and implementation of fault injection based on abstract syntax tree of C Program
US20210318867A1 (en) Information processing apparatus, analysis system, analysis method, and non-transitory computer readable medium storing analysis program
CN117251477B (zh) 基于sql解析的数据开发脚本标准化检查方法及系统
CN112527880B (zh) 大数据集群元数据信息的采集方法、装置、设备及介质
CN116561756A (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
RJ01 Rejection of invention patent application after publication

Application publication date: 20191231

RJ01 Rejection of invention patent application after publication