一种sql语言解析方法和装置制造方法

文档序号:6517795阅读:136来源:国知局
一种sql语言解析方法和装置制造方法
【专利摘要】本申请提供了一种SQL语言解析方法,包括:获取用户输入的SQL命令;判断所述SQL命令的表达方式;对所述SQL命令中的表达式部分采用自底向上方式解析,对所述SQL命令中的修饰部分采用自顶向下方式解析;结合两部分解析获得所述SQL命令的抽象语法树。本发明还提供了对应的装置。本发明通过对SQL命令中不同的表达方式部分分别采用效率更高的解析方式,结合两种解析方式以更高效的完成SQL命令解析。
【专利说明】 —种SQL语言解析方法和装置

【技术领域】
[0001]本申请涉及数据库管理【技术领域】,特别是涉及一种SQL语言解析方法和装置。

【背景技术】
[0002]数据库管理系统有多个种类,例如ORACLE、SQL Server、MySQL、PostgreSQL、DB2、Sybase、Teradata和SQLite ;对数据库的查询可以采用SQL命令进行查询,该SQL有统一标准,但是各个数据库管理系统并未严格遵守该标准,导致在某些细节上在其中一个数据库管理系统中可被识别的SQL命令,在其它数据库管理系统中不被识别。
[0003]为了解决这个问题,数据库管理员如果需要管理多个种类的数据库,则必须对各个被管理的数据库管理系统都有了解,否则会出现管理用输入例如针对ORACLE系统的SQL命令被DB2系统不识别,从而不能工作的情况。而管理员如果需要针对DB2进行查询则必须对DB2的语法规范进行了解。造成了操作不便,管理相对繁琐。但从实际使用过程中可以得知,不管SQL命令具体怎样表达,无非就是表达出一种具体的逻辑,只要解析到该SQL命令的逻辑表达即抽象语法树就可以获知该SQL命令的实际要求。
[0004]现有的SQL命令解析多半采用单一的自顶向下的解析方式,在解析过程中效率不闻。


【发明内容】

[0005]本申请所要解决的技术问题是提供一种能够高效率完成SQL命令解析的SQL语言解析方法和装置。
[0006]为了解决上述问题,本申请公开了一种SQL语言解析方法,包括:
获取用户输入的SQL命令;
判断所述SQL命令的表达方式;
对所述SQL命令中的表达式部分采用自底向上方式解析,对所述SQL命令中的修饰部分采用自顶向下方式解析;
结合两部分解析获得所述SQL命令的抽象语法树。
[0007]进一步,所述获取用户输入的SQL命令包括:
获取用户输入的方言SQL命令。
[0008]进一步,所述判断SQL命令的表达方式包括:
判断所述SQL命令中的表达式部分和修饰部分。
[0009]进一步,所述对SQL命令中的表达式部分采用自底向上方式解析,对SQL命令中的修饰部分采用自顶向下方式解析包括:
对对所述SQL命令中的表示运算的表达式部分采用自底向上方式解析,对所述SQL命令中的名词构成的修饰部分采用自顶向下方式解析。
[0010]本申请还提供了一种SQL语言解析装置,包括:
获取模块,用于获取用户输入的SQL命令; 判断模块,用于判断所述SQL命令的表达方式;
解析模块,用于对所述SQL命令中的表达式部分采用自底向上方式解析,对所述SQL命令中的修饰部分采用自顶向下方式解析;
生成模块,用于结合两部分解析获得所述SQL命令的抽象语法树。
[0011]进一步,所述获取模块还用于:
获取用户输入的方言SQL命令。
[0012]进一步,所述判断模块还用于:
判断所述SQL命令中的表达式部分和修饰部分。
[0013]进一步,所述解析模块还用于:
对对所述SQL命令中的表示运算的表达式部分采用自底向上方式解析,对所述SQL命令中的名词构成的修饰部分采用自顶向下方式解析。
[0014]与现有技术相比,本申请包括以下优点:通过对SQL命令中不同的表达方式部分分别采用效率更高的解析方式,结合两种解析方式以更高效的完成SQL命令解析。
[0015]

【专利附图】

【附图说明】
图1是本发明一种SQL语言解析方法一实施例的流程图;
图2是本发明一种SQL语言解析装置一实施例的结构示意图。

【具体实施方式】
[0016]为使本申请的上述目的、特征和优点能够更加明显易懂,下面结合附图和【具体实施方式】对本申请作进一步详细的说明。
[0017]参照图1,示出了本申请一种SQL语言解析方法,包括:
步骤S101、获取用户输入的SQL命令;
进一步,所述获取用户输入的SQL命令包括:
获取用户输入的方言SQL命令。
[0018]在本发明实施例中首先定义了一套比较折中的SQL语法方案,产品中用到的是这种SQL方案的SQL字符串。该语法方案可以是某一种数据库管理系统的方言,比如是DB2的方目,也可以是标准的SQL语目。
[0019]步骤S102、判断所述SQL命令的表达方式;
进一步,所述判断SQL命令的表达方式包括:
判断所述SQL命令中的表达式部分和修饰部分。
[0020]由于SQL语法的复杂性,可以采用“向前看”许多单词的方式,判断当前SQL是什么类型的语句(DDL, DML, DQL)。
[0021]步骤S103、对所述SQL命令中的表达式部分采用自底向上方式解析,对所述SQL命令中的修饰部分采用自顶向下方式解析;
进一步,所述对SQL命令中的表达式部分采用自底向上方式解析,对SQL命令中的修饰部分采用自顶向下方式解析包括:
对所述SQL命令中的表示运算的表达式部分采用自底向上方式解析,对所述SQL命令中的名词构成的修饰部分采用自顶向下方式解析。
[0022]对SQL语句的解析采用自顶向下分析一LL⑴;在使用LL⑴分析过程中,当碰到表达式,立即改成自底向上的基于算符优先分析。
[0023]这两中方式的结合,有效的增加了分析器的灵活性,和代码的可维护性, 使得传统的任务编译这一不可接近的领域变的极其简洁、和维护。
[0024]相对于使用Antlr来解析SQL2003,生成的代码有6万行之巨,和维护性差,灵活性无从谈起,而且无法国际化;现在使用本发明实施例,代码只有3000多行,简洁和维护,功能比之前更强。
[0025]步骤S104、结合两部分解析获得所述SQL命令的抽象语法树。
[0026]最后生成定义好的抽象语法树,进一步提供给校验模块使用,采用访问者模式,极大的提高了系统的可扩展性,在产品很多难点问题上,获得很好的解决。
[0027]参照图2为本申请一种SQL语言解析装置一实施例的结构示意图;
本申请提供一种SQL语言解析装置,包括:
获取模块21,用于获取用户输入的SQL命令;
判断模块22,用于判断所述SQL命令的表达方式;
解析模块23,用于对所述SQL命令中的表达式部分采用自底向上方式解析,对所述SQL命令中的修饰部分采用自顶向下方式解析;
生成模块24,用于结合两部分解析获得所述SQL命令的抽象语法树。
[0028]进一步,所述获取模块21还用于:
获取用户输入的方言SQL命令。
[0029]进一步,所述判断模块22还用于:
判断所述SQL命令中的表达式部分和修饰部分。
[0030]进一步,所述解析模块23还用于:
对对所述SQL命令中的表示运算的表达式部分采用自底向上方式解析,对所述SQL命令中的名词构成的修饰部分采用自顶向下方式解析。
[0031]对于装置实施例而言,由于其与方法实施例基本相似,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
[0032]本说明书中的各个实施例均采用递进的方式描述,每个实施例重点说明的都是与其他实施例的不同之处,各个实施例之间相同相似的部分互相参见即可。
[0033]以上对本申请所提供的一种SQL语言解析方法和装置,进行了详细介绍,本文中应用了具体个例对本申请的原理及实施方式进行了阐述,以上实施例的说明只是用于帮助理解本申请的方法及其核心思想;同时,对于本领域的一般技术人员,依据本申请的思想,在【具体实施方式】及应用范围上均会有改变之处,综上所述,本说明书内容不应理解为对本申请的限制。
【权利要求】
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命令中的名词构成的修饰部分采用自顶向下方式解析。
【文档编号】G06F9/44GK104252357SQ201310538503
【公开日】2014年12月31日 申请日期:2013年11月5日 优先权日:2013年11月5日
【发明者】叶东, 贾西贝 申请人:深圳市华傲数据技术有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1