[发明专利]在SQL表达式评估的上下文中的第一个Futamura投影在审
申请号: | 202080060776.6 | 申请日: | 2020-08-26 |
公开(公告)号: | CN114341832A | 公开(公告)日: | 2022-04-12 |
发明(设计)人: | P·范德;A·乌尔里希;L·戴恩斯;M·布兰特纳;B·霍斯巴赫;B·斯克勒盖尔;H·查菲 | 申请(专利权)人: | 甲骨文国际公司 |
主分类号: | G06F16/242 | 分类号: | G06F16/242;G06F9/455;G06F16/2453 |
代理公司: | 中国贸促会专利商标事务所有限公司 11038 | 代理人: | 边海梅 |
地址: | 美国加*** | 国省代码: | 暂无信息 |
权利要求书: | 查看更多 | 说明书: | 查看更多 |
摘要: | |||
搜索关键词: | sql 表达式 评估 上下文 中的 一个 futamura 投影 | ||
1.一种方法,包括:
生成表示数据库查询的查询树,该数据库查询包含由查询树的子树表示的表达式;
生成表示子树的域特定语言(DSL)指令的序列;
在数据库查询的执行期间执行DSL指令的序列以评估表达式。
2.如权利要求1所述的方法,其中所述执行DSL指令的序列包括:
由初始解释器第一次执行DSL指令的序列以生成用于数据库查询的结果的第一部分;
应用Futamura投影以基于DSL指令的序列和初始解释器生成优化的解释器;
由所述优化的解释器第二次执行DSL指令的序列以生成用于数据库查询的所述结果的第二部分。
3.如权利要求1所述的方法,其中所述执行DSL指令的序列包括:
生成DSL指令的序列的初始编译;
第一次执行DSL指令的序列的初始编译以生成用于数据库查询的结果的第一部分;
基于所述第一次执行初始编译来记录动态简档数据;
基于动态简档数据和初始编译来生成优化的编译;
第二次执行所述优化的编译以生成用于数据库查询的所述结果的第二部分。
4.如权利要求3所述的方法,其中所述生成优化的编译包括基于动态简档数据对表示DSL指令的所述序列的抽象句法树(AST)进行优化。
5.如权利要求4所述的方法,其中表示DSL指令的所述序列的AST是在所述记录动态简档数据之前生成的。
6.如权利要求4所述的方法,其中:
AST包括多个句法节点;
所述基于动态简档数据生成优化的编译包括生成交织所述多个句法节点中的多个句法节点的处理的机器指令的序列。
7.如权利要求3所述的方法,其中所述基于动态简档数据生成优化的编译包括:
实现类型特化,
重写间接函数调用,
函数的推测性内联,
操作多态内联高速缓存,和/或
执行分支消除。
8.如权利要求7所述的方法,其中所述实现类型特化包括为通用数据类型选择比通用数据类型消耗更少空间的通用数据类型的子类型。
9.如权利要求8所述的方法,其中:
通用数据类型表示数字,和/或
通用数据类型具有可变宽度。
10.如权利要求3所述的方法,其中:
所述基于动态简档数据生成优化的编译包括生成推测性逻辑;
所述第二次执行所述优化的编译包括对优化的编译进行去优化。
11.如权利要求1所述的方法,其中:
数据库查询的所述表达式访问多个表列;
所述生成DSL指令的序列包括为所述多个表列中的每个表列生成相应的局部变量声明。
12.如权利要求1所述的方法,其中:
所述生成DSL指令的序列包括生成包含DSL指令的序列的树节点;
所述生成表示数据库查询的查询树包括用所述树节点替换查询树的所述子树。
13.如权利要求12所述的方法,其中所述树节点和查询树的所述子树包括相同的多个叶子节点。
14.如权利要求1所述的方法,其中:
数据库查询的所述表达式访问数据库表列;
所述生成DSL指令的序列包括基于数据库表列的数据类型生成至少一个特定于类型的指令。
该专利技术资料仅供研究查看技术是否侵权等信息,商用须获得专利权人授权。该专利全部权利属于甲骨文国际公司,未经甲骨文国际公司许可,擅自商用是侵权行为。如果您想购买此专利、获得商业授权和技术合作,请联系【客服】
本文链接:http://www.vipzhuanli.com/pat/books/202080060776.6/1.html,转载请声明来源钻瓜专利网。