CN104252357A - 一种sql语言解析方法和装置 - Google Patents

一种sql语言解析方法和装置 Download PDF

Info

Publication number
CN104252357A
CN104252357A CN201310538503.XA CN201310538503A CN104252357A CN 104252357 A CN104252357 A CN 104252357A CN 201310538503 A CN201310538503 A CN 201310538503A CN 104252357 A CN104252357 A CN 104252357A
Authority
CN
China
Prior art keywords
sql command
sql
resolve
command
expression
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
CN201310538503.XA
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.)
Shenzhen Huaao Data Technology Co Ltd
Original Assignee
Shenzhen Huaao Data Technology 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 Shenzhen Huaao Data Technology Co Ltd filed Critical Shenzhen Huaao Data Technology Co Ltd
Priority to CN201310538503.XA priority Critical patent/CN104252357A/zh
Publication of CN104252357A publication Critical patent/CN104252357A/zh
Pending legal-status Critical Current

Links

Landscapes

  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)

Abstract

本申请提供了一种SQL语言解析方法,包括:获取用户输入的SQL命令;判断所述SQL命令的表达方式;对所述SQL命令中的表达式部分采用自底向上方式解析,对所述SQL命令中的修饰部分采用自顶向下方式解析;结合两部分解析获得所述SQL命令的抽象语法树。本发明还提供了对应的装置。本发明通过对SQL命令中不同的表达方式部分分别采用效率更高的解析方式,结合两种解析方式以更高效的完成SQL命令解析。

Description

一种SQL语言解析方法和装置
技术领域
 本申请涉及数据库管理技术领域,特别是涉及一种SQL语言解析方法和装置。
背景技术
数据库管理系统有多个种类,例如ORACLE、SQL Server、MySQL、PostgreSQL、DB2、Sybase、Teradata和SQLite;对数据库的查询可以采用SQL命令进行查询,该SQL有统一标准,但是各个数据库管理系统并未严格遵守该标准,导致在某些细节上在其中一个数据库管理系统中可被识别的SQL命令,在其它数据库管理系统中不被识别。
为了解决这个问题,数据库管理员如果需要管理多个种类的数据库,则必须对各个被管理的数据库管理系统都有了解,否则会出现管理用输入例如针对ORACLE系统的SQL命令被DB2系统不识别,从而不能工作的情况。而管理员如果需要针对DB2进行查询则必须对DB2的语法规范进行了解。造成了操作不便,管理相对繁琐。但从实际使用过程中可以得知,不管SQL命令具体怎样表达,无非就是表达出一种具体的逻辑,只要解析到该SQL命令的逻辑表达即抽象语法树就可以获知该SQL命令的实际要求。
现有的SQL命令解析多半采用单一的自顶向下的解析方式,在解析过程中效率不高。
发明内容
本申请所要解决的技术问题是提供一种能够高效率完成SQL命令解析的SQL语言解析方法和装置。
为了解决上述问题,本申请公开了一种SQL语言解析方法,包括:
获取用户输入的SQL命令;
判断所述SQL命令的表达方式;
对所述SQL命令中的表达式部分采用自底向上方式解析,对所述SQL命令中的修饰部分采用自顶向下方式解析;
结合两部分解析获得所述SQL命令的抽象语法树。
进一步,所述获取用户输入的SQL命令包括:
获取用户输入的方言SQL命令。
进一步,所述判断SQL命令的表达方式包括:
判断所述SQL命令中的表达式部分和修饰部分。
进一步,所述对SQL命令中的表达式部分采用自底向上方式解析,对SQL命令中的修饰部分采用自顶向下方式解析包括:
对对所述SQL命令中的表示运算的表达式部分采用自底向上方式解析,对所述SQL命令中的名词构成的修饰部分采用自顶向下方式解析。
本申请还提供了一种SQL语言解析装置,包括:
获取模块,用于获取用户输入的SQL命令;
判断模块,用于判断所述SQL命令的表达方式;
解析模块,用于对所述SQL命令中的表达式部分采用自底向上方式解析,对所述SQL命令中的修饰部分采用自顶向下方式解析;
生成模块,用于结合两部分解析获得所述SQL命令的抽象语法树。
进一步,所述获取模块还用于:
获取用户输入的方言SQL命令。
进一步,所述判断模块还用于:
判断所述SQL命令中的表达式部分和修饰部分。
进一步,所述解析模块还用于:
对对所述SQL命令中的表示运算的表达式部分采用自底向上方式解析,对所述SQL命令中的名词构成的修饰部分采用自顶向下方式解析。
与现有技术相比,本申请包括以下优点:通过对SQL命令中不同的表达方式部分分别采用效率更高的解析方式,结合两种解析方式以更高效的完成SQL命令解析。
附图说明                        
图1是本发明一种SQL语言解析方法一实施例的流程图;
图2是本发明一种SQL语言解析装置一实施例的结构示意图。
具体实施方式
为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和具体实施方式对本申请作进一步详细的说明。
参照图1,示出了本申请一种SQL语言解析方法,包括:
步骤S101、获取用户输入的SQL命令;
进一步,所述获取用户输入的SQL命令包括:
获取用户输入的方言SQL命令。
在本发明实施例中首先定义了一套比较折中的SQL语法方案,产品中用到的是这种SQL方案的SQL字符串。该语法方案可以是某一种数据库管理系统的方言,比如是DB2的方言,也可以是标准的SQL语言。
步骤S102、判断所述SQL命令的表达方式;
进一步,所述判断SQL命令的表达方式包括:
判断所述SQL命令中的表达式部分和修饰部分。
由于SQL语法的复杂性,可以采用“向前看”许多单词的方式,判断当前SQL是什么类型的语句 (DDL,DML,DQL)。
步骤S103、对所述SQL命令中的表达式部分采用自底向上方式解析,对所述SQL命令中的修饰部分采用自顶向下方式解析;
进一步,所述对SQL命令中的表达式部分采用自底向上方式解析,对SQL命令中的修饰部分采用自顶向下方式解析包括:
对所述SQL命令中的表示运算的表达式部分采用自底向上方式解析,对所述SQL命令中的名词构成的修饰部分采用自顶向下方式解析。
对SQL语句的解析采用自顶向下分析--LL(1);在使用LL(1)分析过程中,当碰到表达式,立即改成自底向上的基于算符优先分析。
这两中方式的结合,有效的增加了分析器的灵活性,和代码的可维护性,    使得传统的任务编译这一不可接近的领域变的极其简洁、和维护。
相对于使用Antlr来解析SQL2003,生成的代码有6万行之巨,和维护性差,灵活性无从谈起,而且无法国际化;现在使用本发明实施例,代码只有3000多行,简洁和维护,功能比之前更强。
步骤S104、结合两部分解析获得所述SQL命令的抽象语法树。
最后生成定义好的抽象语法树,进一步提供给校验模块使用,采用访问者模式,极大的提高了系统的可扩展性,在产品很多难点问题上,获得很好的解决。
参照图2为本申请一种SQL语言解析装置一实施例的结构示意图;
本申请提供一种SQL语言解析装置,包括:
获取模块21,用于获取用户输入的SQL命令;
判断模块22,用于判断所述SQL命令的表达方式;
解析模块23,用于对所述SQL命令中的表达式部分采用自底向上方式解析,对所述SQL命令中的修饰部分采用自顶向下方式解析;
生成模块24,用于结合两部分解析获得所述SQL命令的抽象语法树。
进一步,所述获取模块21还用于:
获取用户输入的方言SQL命令。
进一步,所述判断模块22还用于:
判断所述SQL命令中的表达式部分和修饰部分。
进一步,所述解析模块23还用于:
对对所述SQL命令中的表示运算的表达式部分采用自底向上方式解析,对所述SQL命令中的名词构成的修饰部分采用自顶向下方式解析。
对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
以上对本申请所提供的一种SQL语言解析方法和装置,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在具体实施方式及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。

Claims (8)

1.一种SQL语言解析方法,其特征在于,包括:
获取用户输入的SQL命令;
判断所述SQL命令的表达方式;
对所述SQL命令中的表达式部分采用自底向上方式解析,对所述SQL命令中的修饰部分采用自顶向下方式解析;
结合两部分解析获得所述SQL命令的抽象语法树。
2.根据权利要求1所述的方法,其特征在于,所述获取用户输入的SQL命令包括:
获取用户输入的方言SQL命令。
3.根据权利要求2所述的方法,其特征在于,所述判断SQL命令的表达方式包括:
判断所述SQL命令中的表达式部分和修饰部分。
4.根据权利要求3所述的方法,其特征在于,所述对SQL命令中的表达式部分采用自底向上方式解析,对SQL命令中的修饰部分采用自顶向下方式解析包括:
对对所述SQL命令中的表示运算的表达式部分采用自底向上方式解析,对所述SQL命令中的名词构成的修饰部分采用自顶向下方式解析。
5.一种SQL语言解析装置,其特征在于,包括:
获取模块,用于获取用户输入的SQL命令;
判断模块,用于判断所述SQL命令的表达方式;
解析模块,用于对所述SQL命令中的表达式部分采用自底向上方式解析,对所述SQL命令中的修饰部分采用自顶向下方式解析;
生成模块,用于结合两部分解析获得所述SQL命令的抽象语法树。
6.根据权利要求5所述的装置,其特征在于,所述获取模块还用于:
获取用户输入的方言SQL命令。
7.根据权利要求6所述的装置,其特征在于,所述判断模块还用于:
判断所述SQL命令中的表达式部分和修饰部分。
8.根据权利要求7所述的装置,其特征在于,所述解析模块还用于:
对对所述SQL命令中的表示运算的表达式部分采用自底向上方式解析,对所述SQL命令中的名词构成的修饰部分采用自顶向下方式解析。
CN201310538503.XA 2013-11-05 2013-11-05 一种sql语言解析方法和装置 Pending CN104252357A (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201310538503.XA CN104252357A (zh) 2013-11-05 2013-11-05 一种sql语言解析方法和装置

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201310538503.XA CN104252357A (zh) 2013-11-05 2013-11-05 一种sql语言解析方法和装置

Publications (1)

Publication Number Publication Date
CN104252357A true CN104252357A (zh) 2014-12-31

Family

ID=52187301

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201310538503.XA Pending CN104252357A (zh) 2013-11-05 2013-11-05 一种sql语言解析方法和装置

Country Status (1)

Country Link
CN (1) CN104252357A (zh)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105787044A (zh) * 2016-02-26 2016-07-20 广州品唯软件有限公司 一种基于MySQL的SQL解析器及其解析方法
CN108255837A (zh) * 2016-12-28 2018-07-06 中国移动通信集团浙江有限公司 一种sql解析器及方法
CN109033410A (zh) * 2018-08-03 2018-12-18 韩雪松 一种基于正则与字符串切割的sql解析方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101158975A (zh) * 2007-11-21 2008-04-09 金蝶软件(中国)有限公司 一种访问不同类型数据库的方法和系统
CN101901222A (zh) * 2009-05-27 2010-12-01 北京启明星辰信息技术股份有限公司 一种sql解析及匹配的方法和系统

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101158975A (zh) * 2007-11-21 2008-04-09 金蝶软件(中国)有限公司 一种访问不同类型数据库的方法和系统
CN101901222A (zh) * 2009-05-27 2010-12-01 北京启明星辰信息技术股份有限公司 一种sql解析及匹配的方法和系统

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
周雅倩 等: "自底向上和自顶向下结合的句法分析", 《863计划智能计算机主题学术会议论文集》 *
孙兆玉 等: "一种SQL语法分析的策略和实现", 《计算机应用》 *

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105787044A (zh) * 2016-02-26 2016-07-20 广州品唯软件有限公司 一种基于MySQL的SQL解析器及其解析方法
CN108255837A (zh) * 2016-12-28 2018-07-06 中国移动通信集团浙江有限公司 一种sql解析器及方法
CN109033410A (zh) * 2018-08-03 2018-12-18 韩雪松 一种基于正则与字符串切割的sql解析方法
CN109033410B (zh) * 2018-08-03 2021-10-29 韩雪松 一种基于正则与字符串切割的sql解析方法

Similar Documents

Publication Publication Date Title
US10649986B2 (en) Systems, methods, and apparatuses for implementing a BY ORGID command term within a multi-tenant aware structured query language
US10803062B2 (en) Systems, methods, and apparatuses for implementing a by partition command term within a multi-tenant aware structured query language
US9280568B2 (en) Zero downtime schema evolution
US20180218031A1 (en) Systems, methods, and apparatuses for implementing dynamic macros within a multi-tenant aware structured query language
US20180218032A1 (en) Systems, methods, and apparatuses for implementing conditional statement execution within a multi-tenant aware structured query language
WO2012151149A4 (en) Managing data queries
US20130311454A1 (en) Data source analytics
CN104123374A (zh) 分布式数据库中聚合查询的方法及装置
CN105868204A (zh) 一种转换Oracle脚本语言SQL的方法及装置
CN104915341A (zh) 可视化多数据库etl集成方法和系统
CN103699638A (zh) 一种基于配置参数实现跨数据库类型同步数据的方法
CN104252510A (zh) 一种sql语言翻译方法和装置
CN103049431B (zh) 基于模型对象化语义的icd检验方法
CN105335479A (zh) 一种基于sql的文本数据统计实现方法
CN103617273B (zh) Sql脚本对象化的方法及系统
CN104598587A (zh) 发票真伪查询方法和系统
CN103246704A (zh) 一种基于通用数据结构描述的实体与关系数据的映射方法
CN102750354A (zh) 一种非结构化数据查询操作语言的解析与处理方法
CN104252357A (zh) 一种sql语言解析方法和装置
CN105373621A (zh) 一种快速的跨数据库系统的数据增量迁移方法
US20080195610A1 (en) Adaptive query expression builder for an on-demand data service
CN103678634A (zh) 一种提高J-Hi开源开发平台中数据查询速度的方法
WO2018090557A1 (zh) 查询数据表的方法和装置
CN104462605B (zh) 一种数据库持久层框架配置、修改方法及系统
CN104252511A (zh) 一种sql命令编译方法和装置

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
RJ01 Rejection of invention patent application after publication
RJ01 Rejection of invention patent application after publication

Application publication date: 20141231