ORCA优化器浅析——CFunctionProp function properties

在这里插入图片描述

CFunctionProp

CFunctionProp代表了function properties函数属性,主要由function stability函数易变性( enum EFuncStbl { EfsImmutable, /* never changes for given input */ EfsStable, /* does not change within a scan */ EfsVolatile, /* can change even within a scan */ EfsSentinel };)、表达式是否含有volatile函数扫描标志m_fHasVolatileFunctionScan、函数是否用作scan operator标志m_fScan成员组成。其中函数易变性EFuncStbl是最关键的function properties

//---------------------------------------------------------------------------
//	@class:
//		CFunctionProp
//	@doc:
//		Representation of function properties
//---------------------------------------------------------------------------
class CFunctionProp : public CRefCount {
private:	IMDFunction::EFuncStbl m_efs; // function stability	BOOL m_fHasVolatileFunctionScan; // does this expression have a volatile Function Scan	BOOL m_fScan; // is this function used as a scan operatorCFunctionProp(const CFunctionProp &); // hidden copy ctor
public:	CFunctionProp(IMDFunction::EFuncStbl func_stability, BOOL fHasVolatileFunctionScan, BOOL fScan); // ctor	virtual ~CFunctionProp(); // dtor	IMDFunction::EFuncStbl Efs() const { return m_efs; }  // function stabilityvirtual BOOL FHasVolatileFunctionScan() const { return m_fHasVolatileFunctionScan; } // does this expression have a volatile Function Scan	BOOL NeedsSingletonExecution() const; // check if must execute on a single host	IOstream &OsPrint(IOstream &os) const; // print};	// class CFunctionProp//---------------------------------------------------------------------------
//	@function:
//		CFunctionProp::SingletonExecution
//	@doc:
//		Check if must execute on a single host based on function properties
//---------------------------------------------------------------------------
BOOL CFunctionProp::NeedsSingletonExecution() const {// a function needs to execute on a single host if any of the following holds:// a) it reads or modifies SQL data// b) it is volatile and used as a scan operator (i.e. in the from clause)// TODO:  - Feb 10, 2014; enable the following line instead of the// current return statement once all function properties are fixed//return (IMDFunction::EfdaContainsSQL < m_efda || (m_fScan && IMDFunction::EfsVolatile == m_efs));return m_fScan && (IMDFunction::EfsVolatile == m_efs || IMDFunction::EfsStable == m_efs);
}

其中NeedsSingletonExecution函数用于检查function properties指明该函数只能在single host上执行。这种函数有如下之一的特征:a) it reads or modifies SQL data b) it is volatile and used as a scan operator (i.e. in the from clause)。

COperator

COperator作为Base class for all operators: logical, physical, scalar, patterns。其提供了两个protected的静态函数和function properties相关的函数,定义如下所示。

class COperator : public CRefCount
{
private:// private copy ctorCOperator(COperator &);protected:// operator id that is unique over all instances of all operator types// for the current queryULONG m_ulOpId;// memory pool for internal allocationsCMemoryPool *m_mp;// is pattern of xformBOOL m_fPattern;// return an addref'ed copy of the operatorvirtual COperator *PopCopyDefault();// derive stability function property from childrenstatic IMDFunction::EFuncStbl EfsDeriveFromChildren(CExpressionHandle &exprhdl, IMDFunction::EFuncStbl efsDefault);// derive function properties from childrenstatic CFunctionProp *PfpDeriveFromChildren(CMemoryPool *mp, CExpressionHandle &exprhdl,IMDFunction::EFuncStbl efsDefault, BOOL fHasVolatileFunctionScan,BOOL fScan);// generate unique operator idsstatic ULONG m_aulOpIdCounter;...
}

COperator::EfsDeriveFromChildren函数用于从子表达式中提取stability function property函数易变属性。从代码实现可以看出其也是通过CExpressionHandle接口来获取对应子表达式的CFunctionProp function properties,从而获取其易变属性值的。从逻辑实现来看EfsImmutable, /* never changes for given input */ EfsStable, /* does not change within a scan */ EfsVolatile, /* can change even within a scan */ EfsSentinel只要子表达式中的函数出现易变属性,将会掩盖其他函数的非易变属性。

//---------------------------------------------------------------------------
//	@function:
//		COperator::EfsDeriveFromChildren
//	@doc:
//		Derive stability function property from child expressions
//---------------------------------------------------------------------------
IMDFunction::EFuncStbl COperator::EfsDeriveFromChildren(CExpressionHandle &exprhdl, IMDFunction::EFuncStbl efsDefault) {IMDFunction::EFuncStbl efs = efsDefault;const ULONG arity = exprhdl.Arity();for (ULONG ul = 0; ul < arity; ul++){IMDFunction::EFuncStbl efsChild = exprhdl.PfpChild(ul)->Efs();if (efsChild > efs){efs = efsChild;}}return efs;
}

在这里插入图片描述
而COperator::PfpDeriveFromChildren则是调用EfsDeriveFromChildren函数获取易变属性,然后调用CFunctionProp构造函数创建函数属性变量。

//---------------------------------------------------------------------------
//	@function:
//		COperator::PfpDeriveFromChildren
//	@doc:
//		Derive function properties from child expressions
//---------------------------------------------------------------------------
CFunctionProp *COperator::PfpDeriveFromChildren(CMemoryPool *mp, CExpressionHandle &exprhdl, IMDFunction::EFuncStbl efsDefault, BOOL fHasVolatileFunctionScan, BOOL fScan){IMDFunction::EFuncStbl efs = EfsDeriveFromChildren(exprhdl, efsDefault);return GPOS_NEW(mp) CFunctionProp(efs,fHasVolatileFunctionScan || exprhdl.FChildrenHaveVolatileFuncScan(),fScan);
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/80225.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Air32 | 合宙Air001单片机内部FLASH读写示例

Air32 | 合宙Air001单片机内部FLASH读写示例 代码已经通过测试&#xff0c;开发环境KEIL-MDK 5.36。 测试代码 void FLASH_RdWrTest(void) {uint32_t Address;uint32_t PageReadBuffer[FLASH_PAGE_SIZE >> 2];uint32_t PageWriteBuffer[FLASH_PAGE_SIZE >> 2];mem…

【数理知识】协方差,随机变量的的协方差,随机变量分别是单个数字和向量时的协方差

序号内容1【数理知识】自由度 degree of freedom 及自由度的计算方法2【数理知识】刚体 rigid body 及刚体的运动3【数理知识】刚体基本运动&#xff0c;平动&#xff0c;转动4【数理知识】向量数乘&#xff0c;内积&#xff0c;外积&#xff0c;matlab代码实现5【数理知识】协…

java+springboot+mysql日程管理系统

项目介绍&#xff1a; 使用javaspringbootmysql开发的日程管理系统&#xff0c;系统包含超级管理员、管理员、用户角色&#xff0c;功能如下&#xff1a; 超级管理员&#xff1a;管理员管理&#xff1b;用户管理&#xff1b;反馈管理&#xff1b;系统公告&#xff1b;个人信息…

.Net6 Web Core API --- AOP -- log4net 封装 -- MySQL -- txt

目录 一、引入 NuGet 包 二、配置log4net.config 三、编写Log4net封装类 四、编写日志记录类 五、AOP -- 拦截器 -- 封装 六、案例编写 七、结果展示 一、引入 NuGet 包 log4net Microsoft.Extensions.Logging.Log4Net.AspNetCore MySql.Data ---- MySQL…

K8S系列文章之 开源的堡垒机 jumpserver

一、jumpserver作为一款开源的堡垒机&#xff0c;不管是企业还是个人&#xff0c;我觉得都是比较合适的&#xff0c;而且使用也比较简单。 二、这里记录一下安装和使用过程。 1、安装&#xff0c;直接docker不是就行 version: 3 services:xbd-mysql:image: mysql:8.0.19restart…

离散化的两种实现方式【sort或者map】

离散化 定义 把无限空间中有限的个体映射到有限的空间中去&#xff0c;以此提高算法的时空效率。通俗的说&#xff0c;离散化是在不改变数据相对大小的条件下&#xff0c;对数据进行相应的缩小。 适用范围&#xff1a;数组中元素值域很大&#xff0c;但个数不是很多。 比如将…

命令行快捷键Mac Iterm2

原文:Jump forwards, backwards and delete a word in iTerm2 on Mac OS iTerm2并不允许你使用 ⌥← 或 ⌥→ 来跳过单词。 你也不能使用 ⌥backspace 来删除整个单词。 下面是在Mac OS上如何配置iTerm2以便能做到这一点的方法。 退格键 首先&#xff0c;你需要将你的左侧 ⌥…

基于Python++PyQt5马尔科夫模型的智能AI即兴作曲—深度学习算法应用(含全部工程源码+测试数据)

目录 前言总体设计系统整体结构图系统流程图 运行环境Python 环境PC环境配置 模块实现1. 钢琴伴奏制作1&#xff09;和弦的实现2&#xff09;和弦级数转为当前调式音阶3&#xff09;根据预置节奏生成伴奏 2. 乐句生成1&#xff09;添加音符2&#xff09;旋律生成3&#xff09;节…

JVM GC ROOT分析

GC root原理:通过对枚举GCroot对象做引用可达性分析,即从GC root对象开始,向下搜索,形成的路径称之为 引用链。如果一个对象到GC roots对象没有任何引用,没有形成引用链,那么该对象等待GC回收,换而言之,如果减少内存泄漏,也就是切断引用链,常见的GCRoot对象如下: 1、…

配置Picgo图床之COS、OSS、Github图床

简介 PicGo是一款开源的图片上传和管理工具&#xff0c;它提供了简单易用的界面和丰富的功能&#xff0c;方便用户上传、管理和分享图片。 以下是PicGo的一些主要特点和功能&#xff1a; 图片上传&#xff1a;PicGo支持将本地图片快速上传到云存储服务&#xff0c;如七牛云、…

深度学习(34)—— StarGAN(1)

深度学习&#xff08;34&#xff09;—— StarGAN&#xff08;1&#xff09; 文章目录 深度学习&#xff08;34&#xff09;—— StarGAN&#xff08;1&#xff09;1. 背景2. 基本思路3. 整体流程4. StarGAN v2(1) 网络结构(2) mapping network(3) style encoder(4)Loss 和之前…

【bug】记录一次使用Swiper插件时loop属性和slidersPerView属性冲突问题

简言 最近在vue3使用swiper时&#xff0c;突然发现loop属性和slides-per-view属性同时存在启用时&#xff0c;loop生效&#xff0c;下一步只能生效一次的bug&#xff0c;上一步却是好的。非常滴奇怪。 解决过程 分析属性是否使用错误。 loop是循环模式&#xff0c;布尔型。 …

Django之JWT库与SimpleJWT库的使用

Django之JWT库与SimpleJWT库的使用 JWTJWT概述头部(header)载荷(payload)签名(signature) Django使用JWT说明jwt库的使用安装依赖库配置settings.py文件配置urls.py文件创建视图配置权限 SimpleJWT库的使用安装SimpleJWT库配置Django项目配置路由创建用户接口测试身份认证自定义…

c++--二叉树应用

1.根据二叉树创建字符串 力扣 给你二叉树的根节点 root &#xff0c;请你采用前序遍历的方式&#xff0c;将二叉树转化为一个由括号和整数组成的字符串&#xff0c;返回构造出的字符串。 空节点使用一对空括号对 "()" 表示&#xff0c;转化后需要省略所有不影响字符…

SpringBoot集成百度人脸识别实现登陆注册功能Demo(二)

前言 上一篇SpringBoot集成百度人脸demo中我使用的是调用本机摄像头完成人脸注册&#xff0c;本次demo根据业务需求的不同我采用文件上传的方式实现人脸注册。 效果演示 注册 后端响应数据&#xff1a; 登录 后端响应数据&#xff1a; 项目结构 后端代码实现 1、BaiduAiUtil…

SQL 表别名 和 列别名

列表名 列表名之后 order by 可以用别名 也可以用原名&#xff0c; where 中不能用别名的 SQL语句执行顺序&#xff1a; from–>where–>group by -->having — >select --> order 第一步&#xff1a;from语句&#xff0c;选择要操作的表。 第二步&#xff1…

Bug的严重等级和优先级别与分类

一、 Bug的严重等级定义&#xff1a; 1、 Blocker 即系统无法执行、崩溃或严重资源不足、应用模块无法启动或异常退出、无法测试、造成系统不稳定。 严重花屏内存泄漏 用户数据丢失或破坏系统崩溃/死机/冻结模块无法启动或异常退出严重的数值计算错误功能设计与需求严重不符其…

每日一学:什么是 Harbor ?

目录 什么是 Harbor &#xff1f; 一、Harbor 的优势 二、Harbor 架构构成 三、Core services 这是 Harbor 的核心功能 什么是 Harbor &#xff1f; Harbor 是 VMware 公司开源的企业级 Docker Registry 项目&#xff0c;其目标是帮助用户迅速搭建一个企业级的 Docker Reg…

Spring MVCSpring Boot

文章目录 Spring MVC什么是MVC模式Spring MVC优点SpringMVC 运行流程SpringMVC组件SpringMVC常用的注解有哪些SpringMVC的拦截器和过滤器有什么区别&#xff1f;执行顺序是什么 SpringBoot对SpringBoot的理解Spring和SpringBoot的关系&#xff1f;SpringBoot有哪些核心注解Spri…

【PDF密码】PDF文件不能打印,为什么?

正常的PDF文件是可以打印的&#xff0c;如果PDF文件打开之后发现文件不能打印&#xff0c;我们需要先查看一下自己的打印机是否能够正常运行&#xff0c;如果打印机是正常的&#xff0c;我们再查看一下&#xff0c;文件中的打印功能按钮是否是灰色的状态。 如果PDF中的大多数功…