非标准SQL语句的内外连接的转化方法和转化装置制造方法及图纸

技术编号:15437404 阅读:182 留言:0更新日期:2017-05-26 03:29
本发明专利技术提出了一种非标准SQL语句的内外连接的转化方法和转化装置,其中,该转化方法包括:在非标准SQL语句的语法解析树中的过滤条件树中,查找出所有的第一类型表达式和所有的第二类型表达式;为每个所述第二类型表达式生成连接状态树节点;将所有的所述连接状态树节点进行合并,得到连接状态树;将每个所述第一类型表达式链接到所述连接状态树上的所述连接状态树节点的属性中;根据链接有所述第一类型表达式的连接状态树,对所述语法解析树进行修改,以将所述非标准SQL语句的内连接转化成外连接。通过本发明专利技术的技术方案,将非标准SQL语句的内连接转化成与其等价的外连接,以保证数据库移植后查询语句的正确性。

Conversion method and conversion device for internal and external connection of nonstandard SQL statements

The invention provides a method for converting a non connecting internal and external standard SQL statement and conversion device, which includes the transformation method: tree filter conditions in the parsing tree non standard SQL statement in the first to find out all type expressions and all second types of expressions; generating tree node connection status for each of the second types of expression; all the tree nodes are connected with the connection state, get the attribute tree; each of the first type of expression is linked to the connection state of the tree the tree nodes in the connected state; according to the connection state of the first tree link type expressions, are modifications to the syntax tree, the non standard SQL statement in connection into external connection. Through the technical proposal of the invention, the inner connection of the nonstandard SQL statement is transformed into an outer connection which is equivalent to that of the standard sentence to ensure the correctness of the inquiry statement after the database is transplanted.

【技术实现步骤摘要】
非标准SQL语句的内外连接的转化方法和转化装置
本专利技术涉及数据库
,具体而言,涉及一种非标准SQL语句的内外连接的转化方法和一种非标准SQL语句的内外连接的转化装置。
技术介绍
在数据库移植过程中,有些用户使用了非ANSI(AmericanNationalStandardsInstitute,美国国家标准协会)标准语法编写了SQL(StructuredQueryLanguage,结构化查询语言)语句,下面将使用非ANSI标准语法编写的SQL语句称为非标准SQL语句。由于年代久远,用户无法再次对非标准SQL语句进行修改编译,这就要求后来数据库能够兼容被移植数据库的语法。在Oracle数据库中支持一种特殊的外连接语法,例如:Select*froma,bwherea.c1=b.c1(+);其中(+)是Oracle新增的关键字,c1是表的列,b是被(+)修饰的表,a是未被(+)修饰的表,a.c1=b.c1(+)用来表示a表leftjoinb表,连接条件是a.c1=b.c1,就是以外连接的方式查找出所有表a的c1列等于表b的c1列的行。若用户使用了以上的非标准SQL语句对表进行外连接查询,则当数据库需要移植时,由于应用程序中的非标准SQL语句不能被修改,所以新数据库需要兼容Oracle的这种非标准语法。如果不进行兼容性修改,那么数据库移植后,原有的应用程序将无法正确运行。上面的例子如果忽略掉(+)关键字,按照SQL标准语法,此非标准SQL语句会解析为内连接。但是在Oracle中,此非标准SQL语句会被解析成外连接。因此,如何将非标准SQL语句的内连接转化成与其等价的外连接,从而保证数据库移植后查询语句的正确性成为亟待解决的技术问题。
技术实现思路
本专利技术旨在至少解决现有技术或相关技术中存在的技术问题之一。为此,本专利技术的一个目的在于提出了一种非标准SQL语句的内外连接的转化方法。本专利技术的另一个目的在于提出了一种非标准SQL语句的内外连接的转化装置。为实现上述至少一个目的,根据本专利技术的第一方面的实施例,提出了一种非标准SQL语句的内外连接的转化方法,包括:在非标准SQL语句的语法解析树中的过滤条件树中,查找出所有的第一类型表达式和所有的第二类型表达式,其中,所述第一类型表达式仅包括一个被预设关键字修饰的表,所述第二类型表达式仅包括一个被预设关键字修饰的表和一个未被所述预设关键字修饰的表;为每个所述第二类型表达式生成连接状态树节点;将所有的所述连接状态树节点进行合并,得到连接状态树;将每个所述第一类型表达式链接到所述连接状态树上的所述连接状态树节点的属性中;根据链接有所述第一类型表达式的连接状态树,对所述语法解析树进行修改,以将所述非标准SQL语句的内连接(Innerjoin)转化成外连接(Outerjoin)。在该技术方案中,通过生成能够描述非标准SQL语句的语法解析树中的表与表之间的外连接关系的连接状态树,以根据该连接状态树,将非标准SQL语句的内连接转化成与其等价的外连接,从而保证数据库移植后查询语句的正确性。另外,本方案既不会影响原有的语法解析流程,也不会对优化器造成任何影响,而且在实施本方案时,不会对数据库执行流程做过多的修改,减小了新功能开发的风险。在上述技术方案中,优选地,所述连接状态树节点的属性包括:被所述预设关键字修饰的表、未被所述预设关键字修饰的表、被所述预设关键字修饰的表和未被所述预设关键字修饰的表之间的连接条件、所述连接状态树节点的左侧连接状态树节点、所述连接状态树节点的右侧连接状态树节点以及所述左侧连接状态树节点和所述右侧连接状态树节点是否为空连接。在该技术方案中,根据上述中的连接状态树节点的属性,对所有的连接状态树节点进行合并,从而得到连接状态树,而该连接状态树描述了非标准SQL语句的语法解析树中的表与表之间的外连接关系。在上述任一技术方案中,优选地,所述将每个所述第一类型表达式链接到所述连接状态树上的所述连接状态树节点的属性中的步骤,包括:在所述连接状态树中查找出每个所述第一类型表达式对应的所述连接状态树节点,其中,所述第一类型表达式的被所述预设关键字修饰的表和所述第一类型表达式对应的所述连接状态树节点的被所述预设关键字修饰的表相同;将每个所述第一类型表达式链接到其对应的所述连接状态树节点的所述连接条件中。在该技术方案中,通过将每个第一类型表达式链接到其对应的连接状态树节点的被预设关键字修饰的表和未被预设关键字修饰的表之间的连接条件中,从而实现第一类型表达式在连接状态树上的重分发。在上述任一技术方案中,优选地,所述将所有的所述连接状态树节点进行合并,得到连接状态树的步骤,包括:在将所有的所述连接状态树节点中的第一连接状态树节点和其右侧的第二连接状态树节点进行合并时,将所述第一连接状态树节点作为目标节点,所述第二连接状态树节点作为参与节点,判断所述目标节点和所述参与节点是否满足左合并条件或右合并条件;若所述目标节点和所述参与节点满足所述左合并条件或所述右合并条件,则将所述参与节点向所述目标节点进行合并;若所述目标节点和所述参与节点不满足所述左合并条件和所述右合并条件,则将所述参与节点更改为第一连接状态树节点,将所述目标节点更改为第二连接状态树节点,判断更改后的目标节点和参与节点是否满足所述左合并条件或所述右合并条件;若更改后的目标节点和参与节点满足所述左合并条件或所述右合并条件,则将更改后的参与节点向更改后的目标节点进行合并;若更改后的目标节点和参与节点不满足所述左合并条件和所述右合并条件,则将更改后的目标节点和更改后的参与节点进行空合并。在该技术方案中,按照以上规则对所有的连接状态树节点进行合并,得到一棵完整的连接状态树,以使连接状态树描述了语法解析树中的多个表之间的外连接关系,从而根据该连接状态树将非标准SQL语句的内连接转化成与其等价的外连接。在上述任一技术方案中,优选地,所述转化方法还包括:若在所述过滤条件树中,查找出除所述第一类型表达式和所述第二类型表达式之外的其他类型的表达式,且所述其他类型的表达式中包括被所述预设关键字修饰的表,则提示用户出现错误。在该技术方案中,若查找出包括有被预设关键字修饰的表的其他类型的表达式,则提示用户出现错误,以使用户及时地针对错误采取相应措施。根据本专利技术的第二方面的实施例,提出了一种非标准SQL语句的内外连接的转化装置,包括:查找单元,用于在非标准SQL语句的语法解析树中的过滤条件树中,查找出所有的第一类型表达式和所有的第二类型表达式,其中,所述第一类型表达式仅包括一个被预设关键字修饰的表,所述第二类型表达式仅包括一个被预设关键字修饰的表和一个未被所述预设关键字修饰的表;生成单元,用于为每个所述第二类型表达式生成连接状态树节点;合并单元,用于将所有的所述连接状态树节点进行合并,得到连接状态树;链接单元,用于将每个所述第一类型表达式链接到所述连接状态树上的所述连接状态树节点的属性中;转化单元,用于根据链接有所述第一类型表达式的连接状态树,对所述语法解析树进行修改,以将所述非标准SQL语句的内连接转化成外连接。在该技术方案中,通过生成能够描述非标准SQL语句的语法解析树中的表与表之间的外连接关系的连接状态树,以根据该连接状态树,将非标准本文档来自技高网
...
非标准SQL语句的内外连接的转化方法和转化装置

【技术保护点】
一种非标准SQL语句的内外连接的转化方法,其特征在于,包括:在非标准SQL语句的语法解析树中的过滤条件树中,查找出所有的第一类型表达式和所有的第二类型表达式,其中,所述第一类型表达式仅包括一个被预设关键字修饰的表,所述第二类型表达式仅包括一个被预设关键字修饰的表和一个未被所述预设关键字修饰的表;为每个所述第二类型表达式生成连接状态树节点;将所有的所述连接状态树节点进行合并,得到连接状态树;将每个所述第一类型表达式链接到所述连接状态树上的所述连接状态树节点的属性中;根据链接有所述第一类型表达式的连接状态树,对所述语法解析树进行修改,以将所述非标准SQL语句的内连接转化成外连接。

【技术特征摘要】
1.一种非标准SQL语句的内外连接的转化方法,其特征在于,包括:在非标准SQL语句的语法解析树中的过滤条件树中,查找出所有的第一类型表达式和所有的第二类型表达式,其中,所述第一类型表达式仅包括一个被预设关键字修饰的表,所述第二类型表达式仅包括一个被预设关键字修饰的表和一个未被所述预设关键字修饰的表;为每个所述第二类型表达式生成连接状态树节点;将所有的所述连接状态树节点进行合并,得到连接状态树;将每个所述第一类型表达式链接到所述连接状态树上的所述连接状态树节点的属性中;根据链接有所述第一类型表达式的连接状态树,对所述语法解析树进行修改,以将所述非标准SQL语句的内连接转化成外连接。2.根据权利要求1所述的非标准SQL语句的内外连接的转化方法,其特征在于,所述连接状态树节点的属性包括:被所述预设关键字修饰的表、未被所述预设关键字修饰的表、被所述预设关键字修饰的表和未被所述预设关键字修饰的表之间的连接条件、所述连接状态树节点的左侧连接状态树节点、所述连接状态树节点的右侧连接状态树节点以及所述左侧连接状态树节点和所述右侧连接状态树节点是否为空连接。3.根据权利要求2所述的非标准SQL语句的内外连接的转化方法,其特征在于,所述将每个所述第一类型表达式链接到所述连接状态树上的所述连接状态树节点的属性中的步骤,包括:在所述连接状态树中查找出每个所述第一类型表达式对应的所述连接状态树节点,其中,所述第一类型表达式的被所述预设关键字修饰的表和所述第一类型表达式对应的所述连接状态树节点的被所述预设关键字修饰的表相同;将每个所述第一类型表达式链接到其对应的所述连接状态树节点的所述连接条件中。4.根据权利要求2所述的非标准SQL语句的内外连接的转化方法,其特征在于,所述将所有的所述连接状态树节点进行合并,得到连接状态树的步骤,包括:在将所有的所述连接状态树节点中的第一连接状态树节点和其右侧的第二连接状态树节点进行合并时,将所述第一连接状态树节点作为目标节点,所述第二连接状态树节点作为参与节点,判断所述目标节点和所述参与节点是否满足左合并条件或右合并条件;若所述目标节点和所述参与节点满足所述左合并条件或所述右合并条件,则将所述参与节点向所述目标节点进行合并;若所述目标节点和所述参与节点不满足所述左合并条件和所述右合并条件,则将所述参与节点更改为第一连接状态树节点,将所述目标节点更改为第二连接状态树节点,判断更改后的目标节点和参与节点是否满足所述左合并条件或所述右合并条件;若更改后的目标节点和参与节点满足所述左合并条件或所述右合并条件,则将更改后的参与节点向更改后的目标节点进行合并;若更改后的目标节点和参与节点不满足所述左合并条件和所述右合并条件,则将更改后的目标节点和更改后的参与节点进行空合并。5.根据权利要求1至4中任一项所述的非标准SQL语句的内外连接的转化方法,其特征在于,所述转化方法还包括:若在所述过滤条件树中,查找出除所述第一类型表达式和所述第二类型表达式之外的其他类型的表达式,且所述其他类型的表达式中包括被所述预设关键字修饰的表,则提示用户...

【专利技术属性】
技术研发人员:杨永亮
申请(专利权)人:北京华胜信泰数据技术有限公司华胜信泰信息产业发展有限公司
类型:发明
国别省市:北京,11

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1