System.ArgumentOutOfRangeException: 索引和长度必须引用该字符串内的位置。 参数名: length 在 System.String.Substring(Int32 startIndex, Int32 length) 在 zhuanliShow.Bind() 基于线性整数代数进行SQL等价性自动化证明的方法及系统技术方案_技高网

基于线性整数代数进行SQL等价性自动化证明的方法及系统技术方案

技术编号:39963819 阅读:7 留言:0更新日期:2024-01-09 00:15
本发明专利技术提供一种基于线性整数代数进行SQL等价性自动化证明的方法及系统,包括:计划生成步骤:对输入的SQL查询语句进行解析生成原始逻辑计划;ORDER BY处理步骤:处理原始逻辑计划中的ORDER BY排序操作,生成新的不含ORDER BY排序操作的逻辑计划,交由后续步骤进行等价性验证;U‑expression生成步骤:对逻辑计划进行解析,生成对应的代数表达式U‑expression;正规化步骤:对U‑expression进行正规化化简,生成标准形式的U‑expression;LIA<supgt;*</supgt;转换步骤:根据标准形式的U‑expression,生成LIA<supgt;*</supgt;表达式;一阶逻辑表达式生成步骤:根据LIA<supgt;*</supgt;表达式,生成LIA表达式,借助SMT求解器进行SQL的等价性自动化验证。本发明专利技术完善了对聚合函数等SQL特性的建模,显著增强了SQL等价性自动化验证的能力。

【技术实现步骤摘要】

本专利技术涉及sql等价性证明,具体地,涉及一种基于线性整数代数进行sql等价性自动化证明的方法及系统。


技术介绍

1、关系型数据库常常被互联网应用用于存储和管理数据,通常使用结构化查询语言(structured query language,sql)对数据进行增删改查。如何证明两个sql查询语句的等价性是数据库领域的基础性问题,这种sql等价性证明可用于许多重要场景,例如证明或推翻某些现有的查询重写规则,发现新的重写规则等。因此,数据库开发者一直希望寻找更有效的sql等价性证明方法。

2、现有的sql等价性证明方法主要有两种:基于sql语法的证明方法以及基于sql语义的证明方法。基于sql语法的证明方法通过验证两个sql查询的规范化代数表示的同构性来确定它们的等价性,现有的具有代表性的基于sql语法的证明工具有udp和spes。udp将每条sql转换成u半环表达式(u-semiring expression,u-expression),具体来说,u-expression将sql查询表示为一个代数表达式f(t),它返回查询结果中元组t的数量,然后udp基于语法验证两条sql对应的u-expression表达式是否是同构的,从而判断这两条sql是否等价。而spes将sql查询转换为树结构的代数表示,然后spes调用可满足性模理论(satisfiability modulo theories,smt)求解器来验证两条sql之间的谓词是否等价,之后再基于语法验证两条sql对应的树结构的代数表达式是否同构,从而判断sql是否等价。相比于udp,spes通过调用smt求解器对sql中不同谓词的等价性进行验证,增强了对具体谓词的支持。但是这种基于sql语法的证明方法很难证明两个语法结构明显不同的sql查询的等价性。比如以下两条sql查询语句:

3、q1:(select x from r)union(select x from r)

4、q2:select distinct x from r where exists(select x from r)

5、udp和spes都不能验证以上两条sql的等价性,因为前一条sql查询缺少exists,而后一条sql查询缺少union,这两个sql语句在语法结构上完全不同。但是这两条sql在语义上等价,返回的最终结果是相同的。因此,基于语法进行sql等价性证明的方法缺少对语法结构不同,但语义相同的sql语句进行证明的能力。

6、现有的基于sql语义的证明方法在可处理的查询类型方面仍然非常有限,例如最新的基于sql语义进行sql等价性证明的工具wetune,其使用u-expression在包语义下对sql语句进行建模,然后直接将u-expression转成一阶逻辑表达式,并调用smt求解器进行验证。但是对某些基本的sql特性(如聚合函数)建模,查询的代数表达式最终包含所有可能元组的求和,这也被称为无界限求和,wetune缺少将无界限求和转换为一阶逻辑表达式的方法,只能在某些特定情况下进行启发式的验证,例如两条sql对应的u-expression都只包含一个无界限求和的情况。但是当u-expression中包含其它语法结构的无界限求和时,wetune则难以进行处理。

7、现如今,还没有一种证明sql等价性的证明方法能够把含有任意语法结构无界限求和的u-expression转成一阶逻辑表达式,且基于u-expression表达sql语义的方法难以处理存在order by的语句。因此,先前的工作存在一定局限性。

8、线性整数代数(linear integer algebra,lia)公式是一种一阶逻辑公式,它是本专利技术运用的数学工具之一,定义如下:

9、

10、a∶=t1≤t2|t1=t2

11、t∶=x|c|t1+t2|c×t1|ite(f,t1,t2)

12、其中t表示产生整数结果的表达式,而x表示整数变量,c表示整数常量。因为t是线性的,所以t中不能有变量相乘。其中的表达式ite(f,t1,t2)表示当表达式f值为真时,返回t1,否则返回t2。a表示谓词为“≤”和“=”的一阶逻辑公式。一个lia公式可以是一个原子的一阶逻辑公式,也可以是通过多个逻辑联结词相连的lia公式。

13、lia*公式是lia公式的扩展,也是本专利技术运用的数学工具之一,并且每个lia*公式都有一个可满足性等价的lia公式。因此,对lia*公式的推理可以简化为对lia公式的推理。在正式定义lia*公式之前,需要引入加法闭包算子*。它是在整数向量集合上定义的运算符,如下所示:

14、

15、其中s是一个整数向量的集合,和是整数向量,s*是s中任意多个元素的线性组合的集合,n是可取任意值的非负整数,λi和i是整数。lia*公式的标准形式如下,其中为整数向量,f1,f2为lia公式:

16、

17、加法闭包算子可以建模任意多个向量相加的和,也称为无界限求和。lia*理论提供了一种推理具有无界限求和的公式的方法。lia表达式是一种关于整数的逻辑表达式,可以通过现有的smt求解器直接求解,lia*表达式扩展了lia表达式,能够表示任意数量的整数向量的求和,并且每个lia*公式都有一个同可满足的lia公式。因此,对lia*公式的推理可以简化为对不包含无界限求和的lia公式的推理。具体来说,现有工作已经证明对于每一个lia*公式都存在一个可满足性等价的lia公式,有以下定理:给定一个lia*公式存在一个整数k使得该lia*公式与以下公式可满足性等价。

18、

19、现有工作已经设计了一种算法,可以自动把一个给定的lia*公式转为另一个与其可满足性等价的lia公式。


技术实现思路

1、针对现有技术中的缺陷,本专利技术提供一种基于线性整数代数进行sql等价性自动化证明的方法及系统。

2、根据本专利技术提供的一种基于线性整数代数进行sql等价性自动化证明的方法及系统,所述方案如下:

3、第一方面,提供了一种基于线性整数代数进行sql等价性自动化证明的方法,所述方法包括:

4、计划生成步骤:对输入的sql查询语句进行解析生成原始逻辑计划,为转换成对应的u-expression做预先处理;其中,每个sql语句对应一个原始逻辑计划;

5、order by处理步骤:处理原始逻辑计划中的order by排序操作,生成新的不含order by排序操作的逻辑计划,交由后续步骤进行等价性验证;

6、u-expression生成步骤:对逻辑计划进行解析,生成对应的u-expression;

7、正规化步骤:对u-expression进行正规化化简,生成标准形式的u-expression;

8、lia*转换步骤:根据标准形式的u-expression,生成lia*表达式;...

【技术保护点】

1.一种基于线性整数代数进行SQL等价性自动化证明的方法,其特征在于,包括:

2.根据权利要求1所述的基于线性整数代数进行SQL等价性自动化证明的方法,其特征在于,所述ORDER BY处理步骤包括:对任意一对逻辑计划,通过预定义的规则删除与合并其中的ORDER BY操作,再进一步生成不含ORDER BY操作的新的逻辑计划,保证新的逻辑计划如果等价,那么原来的SQL查询语句也等价。

3.根据权利要求1所述的基于线性整数代数进行SQL等价性自动化证明的方法,其特征在于,所述U-expression生成步骤包括:对任意一个逻辑计划,生成对应的U-expression,具体形式为一个函数f(x),表示查询结果中元组x的数量;该代数表达式中包含无界限求和,表示聚合函数等在内的相关SQL特性。

4.根据权利要求1所述的基于线性整数代数进行SQL等价性自动化证明的方法,其特征在于,所述LIA*转换步骤包括:对任意一对U-expression,生成对应的LIA*表达式,具体形式为一个关于整数的逻辑表达式,如果这个逻辑表达式不可满足,那么两条SQL查询语句等价;LIA*表达式中包含加法闭包,对应U-expression中的无界限求和。

5.根据权利要求1所述的基于线性整数代数进行SQL等价性自动化证明的方法,其特征在于,所述一阶逻辑表达式生成步骤包括:对任意一个LIA*表达式,生成对应的一阶逻辑表达式,具体形式为一个命题,如果其不可满足,那么SQL查询语句等价。

6.一种基于线性整数代数进行SQL等价性自动化证明的系统,基于权利要求1-5任意一项所述的基于线性整数代数进行SQL等价性证明的方法,其特征在于,包括:

7.根据权利要求6所述的基于线性整数代数进行SQL等价性自动化证明的系统,其特征在于,所述ORDER BY处理模块包括:

8.根据权利要求6所述的基于线性整数代数进行SQL等价性自动化证明的系统,其特征在于,所述U-expression表达式生成模块包括:

9.根据权利要求8所述的基于线性整数代数进行SQL等价性自动化证明的系统,其特征在于,所述正规化子模块包括:

10.根据权利要求6所述的基于线性整数代数进行SQL等价性自动化证明的系统,其特征在于,所述LIA*验证模块包括:

...

【技术特征摘要】

1.一种基于线性整数代数进行sql等价性自动化证明的方法,其特征在于,包括:

2.根据权利要求1所述的基于线性整数代数进行sql等价性自动化证明的方法,其特征在于,所述order by处理步骤包括:对任意一对逻辑计划,通过预定义的规则删除与合并其中的order by操作,再进一步生成不含order by操作的新的逻辑计划,保证新的逻辑计划如果等价,那么原来的sql查询语句也等价。

3.根据权利要求1所述的基于线性整数代数进行sql等价性自动化证明的方法,其特征在于,所述u-expression生成步骤包括:对任意一个逻辑计划,生成对应的u-expression,具体形式为一个函数f(x),表示查询结果中元组x的数量;该代数表达式中包含无界限求和,表示聚合函数等在内的相关sql特性。

4.根据权利要求1所述的基于线性整数代数进行sql等价性自动化证明的方法,其特征在于,所述lia*转换步骤包括:对任意一对u-expression,生成对应的lia*表达式,具体形式为一个关于整数的逻辑表达式,如果这个逻辑表达式不可满足,那么两条sql查询语句等价;lia*表达...

【专利技术属性】
技术研发人员:王肇国许正霖丁浩然杨逸存魏卓然陈海波
申请(专利权)人:上海交通大学
类型:发明
国别省市:

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

1