CN104252357A - 一种sql语言解析方法和装置 - Google Patents
一种sql语言解析方法和装置 Download PDFInfo
- 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
Links
Landscapes
- Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
Abstract
本申请提供了一种SQL语言解析方法,包括:获取用户输入的SQL命令;判断所述SQL命令的表达方式;对所述SQL命令中的表达式部分采用自底向上方式解析,对所述SQL命令中的修饰部分采用自顶向下方式解析;结合两部分解析获得所述SQL命令的抽象语法树。本发明还提供了对应的装置。本发明通过对SQL命令中不同的表达方式部分分别采用效率更高的解析方式,结合两种解析方式以更高效的完成SQL命令解析。
Description
技术领域
本申请涉及数据库管理技术领域,特别是涉及一种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命令中的名词构成的修饰部分采用自顶向下方式解析。
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)
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)
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解析及匹配的方法和系统 |
-
2013
- 2013-11-05 CN CN201310538503.XA patent/CN104252357A/zh active Pending
Patent Citations (2)
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)
Title |
---|
周雅倩 等: "自底向上和自顶向下结合的句法分析", 《863计划智能计算机主题学术会议论文集》 * |
孙兆玉 等: "一种SQL语法分析的策略和实现", 《计算机应用》 * |
Cited By (4)
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 |