ORCA优化器浅析——CXform base class for all transformations

CXform

CXforml类作为所有transformation的基础类,其包含了pattern成员m_pexpr。主要是在exploration和implementation expression流程中使用,主要调用Transform函数。其还包含返回相关xforms的集合函数,比如PbsIndexJoinXforms等。

class CXform : public CRefCount {
private:	CExpression *m_pexpr; // pattern	CXform(CXform &); // private copy ctorpublic:	explicit CXform(CExpression *pexpr); virtual ~CXform(); CExpression *PexprPattern() const { return m_pexpr; } // accessorstatic BOOL FEqualIds(const CHAR *szIdOne, const CHAR *szIdTwo); // equality function over xform idsvirtual EXformId Exfid() const = 0; // ident accessors	virtual const CHAR *SzId() const = 0; // return a string for xform name// the following functions check xform type	virtual BOOL FSubstitution() const { return false; } // is xform substitution?	virtual BOOL FExploration() const { return false; } // is xform exploration?	virtual BOOL FImplementation() const { return false; } // is xform implementation?virtual BOOL FCompatible(CXform::EXformId) { return true; } // check compatibility with another xform// actual transformationvirtual void Transform(CXformContext *pxfctxt, CXformResult *pxfres, CExpression *pexpr) const = 0;// compute xform promise for a given expression handlevirtual EXformPromise Exfp(CExpressionHandle &exprhdl) const = 0;// return true if xform should be applied only once.// for expression of type CPatternTree, in deep trees, the number// of expressions generated for group expression can be significantly// large causing the Xform to be applied many times. This can lead to// significantly long planning time, so such Xform should only be applied oncevirtual BOOL IsApplyOnce();// returns a set containing all xforms related to index join// caller takes ownership of the returned setstatic CBitSet *PbsIndexJoinXforms(CMemoryPool *mp);// returns a set containing all xforms related to bitmap indexes// caller takes ownership of the returned setstatic CBitSet *PbsBitmapIndexXforms(CMemoryPool *mp);// returns a set containing all xforms related to heterogeneous indexes// caller takes ownership of the returned setstatic CBitSet *PbsHeterogeneousIndexXforms(CMemoryPool *mp);// returns a set containing all xforms that generate a plan with a hash join// caller takes ownership of the returned setstatic CBitSet *PbsHashJoinXforms(CMemoryPool *mp);// returns a set containing xforms to use only the join order as available// in the querystatic CBitSet *PbsJoinOrderInQueryXforms(CMemoryPool *mp);// returns a set containing xforms to use combination of greedy xforms// for join orderstatic CBitSet *PbsJoinOrderOnGreedyXforms(CMemoryPool *mp);// returns a set containing xforms to use for exhaustive join orderstatic CBitSet *PbsJoinOrderOnExhaustiveXforms(CMemoryPool *mp);// returns a set containing xforms to use for exhaustive2 join orderstatic CBitSet *PbsJoinOrderOnExhaustive2Xforms(CMemoryPool *mp);
};	// class CXform

CXformExploration和CXformImplementation

CXformExploration类作为Base class for all explorations,其定义如下所示:

class CXformExploration : public CXform {
private: CXformExploration(const CXformExploration &); // private copy ctor
public:	explicit CXformExploration(CExpression *pexpr); // ctor	virtual ~CXformExploration(); // dtorvirtual BOOL FExploration() const { return true; } // type of operator// is transformation a subquery unnesting (Subquery To Apply) xform?virtual BOOL FSubqueryUnnesting() const { return false; }// is transformation an Apply decorrelation (Apply To Join) xform?virtual BOOL FApplyDecorrelating() const { return false; }// do stats need to be computed before applying xform?virtual BOOL FNeedsStats() const { return false; }// conversion functionstatic CXformExploration *Pxformexp(CXform *pxform) {return dynamic_cast<CXformExploration *>(pxform);}};	// class CXformExploration

CXformImplementation类作为base class for all implementations,其定义如下所示:

class CXformImplementation : public CXform {
private: CXformImplementation(const CXformImplementation &); // private copy ctor
public:	explicit CXformImplementation(CExpression *); // ctor	virtual ~CXformImplementation(); // dtor	virtual BOOL FImplementation() const { // type of operatorreturn true;}};	// class CXformImplementation

请添加图片描述

CLogicalEXformIdCXform subclassPhase
CLogicalAssertCXform::ExfImplementAssert
CLogicalBitmapTableGetCXform::ExfImplementBitmapTableGet
CLogicalConstTableGetCXform::ExfImplementConstTableGet
CLogicalCTEAnchorCXform::ExfCTEAnchor2Sequence、CXform::ExfCTEAnchor2TrivialSelect
CLogicalCTEConsumerCXform::ExfInlineCTEConsumer、CXform::ExfImplementCTEConsumer
CLogicalCTEProducerCXform::ExfImplementCTEProducer
CLogicalDeleteCXform::ExfDelete2DML
CLogicalDifferenceCXform::ExfDifference2LeftAntiSemiJoin
CLogicalDifferenceAllCXform::ExfDifferenceAll2LeftAntiSemiJoin
CLogicalDMLCXform::ExfImplementDML
CLogicalDynamicBitmapTableGetCXform::ExfImplementDynamicBitmapTableGet
CLogicalDynamicGetCXform::ExfDynamicGet2DynamicTableScan、CXform::ExfExpandDynamicGetWithExternalPartitions
CLogicalDynamicIndexGetCXform::ExfDynamicIndexGet2DynamicIndexScan
CLogicalExternalGetCXform::ExfExternalGet2ExternalScan
CLogicalFullOuterJoinCXform::ExfExpandFullOuterJoin、CXform::ExfImplementFullOuterMergeJoin
CLogicalGbAggCXform::ExfSimplifyGbAgg)、CXform::ExfGbAggWithMDQA2Join、CXform::ExfCollapseGbAgg、CXform::ExfPushGbBelowJoin、CXform::ExfPushGbBelowUnion、CXform::ExfPushGbBelowUnionAll、CXform::ExfSplitGbAgg、CXform::ExfSplitDQA、CXform::ExfGbAgg2Apply、CXform::ExfGbAgg2HashAgg、CXform::ExfGbAgg2StreamAgg、CXform::ExfGbAgg2ScalarAgg、CXform::ExfEagerAgg
CLogicalGbAggDeduplicateCXform::ExfPushGbDedupBelowJoin、CXform::ExfSplitGbAggDedup、CXform::ExfGbAggDedup2HashAggDedup、CXform::ExfGbAggDedup2StreamAggDedup
CLogicalGetCXform::ExfGet2TableScan
CLogicalIndexApplyCXform::ExfImplementIndexApply
CLogicalIndexGetCXform::ExfIndexGet2IndexScan、CXform::ExfIndexGet2IndexOnlyScan
CLogicalInnerApplyCXform::ExfInnerApply2InnerJoin、CXform::ExfInnerApply2InnerJoinNoCorrelations、CXform::ExfInnerApplyWithOuterKey2InnerJoin
CLogicalInnerCorrelatedApplyCXform::ExfImplementInnerCorrelatedApply
CLogicalInnerJoinCXform::ExfInnerJoin2NLJoin、CXform::ExfInnerJoin2HashJoin、CXform::ExfSubqJoin2Apply、CXform::ExfInnerJoin2PartialDynamicIndexGetApply、CXform::ExfInnerJoinWithInnerSelect2PartialDynamicIndexGetApply、CXform::ExfJoin2BitmapIndexGetApply、CXform::ExfJoin2IndexGetApply、CXform::ExfJoinCommutativity、CXform::ExfJoinAssociativity、CXform::ExfInnerJoinSemiJoinSwap、CXform::ExfInnerJoinAntiSemiJoinSwap、CXform::ExfInnerJoinAntiSemiJoinNotInSwap
CLogicalInsertCXform::ExfInsert2DML
CLogicalIntersectCXform::ExfIntersect2Join
CLogicalIntersectAllCXform::ExfIntersectAll2LeftSemiJoin
CLogicalLeftAntiSemiApplyCXform::ExfLeftAntiSemiApply2LeftAntiSemiJoin、CXform::ExfLeftAntiSemiApply2LeftAntiSemiJoinNoCorrelations
CLogicalLeftAntiSemiApplyNotInCXform::ExfLeftAntiSemiApplyNotIn2LeftAntiSemiJoinNotIn、CXform::ExfLeftAntiSemiApplyNotIn2LeftAntiSemiJoinNotInNoCorrelations
CLogicalLeftAntiSemiCorrelatedApplyCXform::ExfImplementLeftAntiSemiCorrelatedApply
CLogicalLeftAntiSemiCorrelatedApplyNotInCXform::ExfImplementLeftAntiSemiCorrelatedApplyNotIn
CLogicalLeftAntiSemiJoinCXform::ExfAntiSemiJoinAntiSemiJoinSwap、CXform::ExfAntiSemiJoinAntiSemiJoinNotInSwap、CXform::ExfAntiSemiJoinSemiJoinSwap、CXform::ExfAntiSemiJoinInnerJoinSwap、CXform::ExfLeftAntiSemiJoin2CrossProduct、CXform::ExfLeftAntiSemiJoin2NLJoin、CXform::ExfLeftAntiSemiJoin2HashJoin
CLogicalLeftAntiSemiJoinNotInCXform::ExfAntiSemiJoinNotInAntiSemiJoinNotInSwap、CXform::ExfAntiSemiJoinNotInAntiSemiJoinSwap、CXform::ExfAntiSemiJoinNotInSemiJoinSwap、CXform::ExfAntiSemiJoinNotInInnerJoinSwap、CXform::ExfLeftAntiSemiJoinNotIn2CrossProduct、CXform::ExfLeftAntiSemiJoinNotIn2NLJoinNotIn、CXform::ExfLeftAntiSemiJoinNotIn2HashJoinNotIn
CLogicalLeftOuterApplyCXform::ExfLeftOuterApply2LeftOuterJoin、CXform::ExfLeftOuterApply2LeftOuterJoinNoCorrelations
CLogicalLeftOuterCorrelatedApplyCXform::ExfImplementLeftOuterCorrelatedApply
CLogicalLeftOuterJoinCXform::ExfPushDownLeftOuterJoin、CXform::ExfSimplifyLeftOuterJoin、CXform::ExfLeftOuterJoin2NLJoin、CXform::ExfLeftOuterJoin2HashJoin、CXform::ExfLeftOuter2InnerUnionAllLeftAntiSemiJoin、CXform::ExfJoin2BitmapIndexGetApply、CXform::ExfJoin2IndexGetApply、CXform::ExfLeftJoin2RightJoin
CLogicalLeftSemiApplyCXform::ExfLeftSemiApply2LeftSemiJoin、CXform::ExfLeftSemiApplyWithExternalCorrs2InnerJoin、CXform::ExfLeftSemiApply2LeftSemiJoinNoCorrelations
CLogicalLeftSemiApplyInCXform::ExfLeftSemiApplyIn2LeftSemiJoin、CXform::ExfLeftSemiApplyInWithExternalCorrs2InnerJoin、CXform::ExfLeftSemiApplyIn2LeftSemiJoinNoCorrelations
CLogicalLeftSemiCorrelatedApplyCXform::ExfImplementLeftSemiCorrelatedApply
CLogicalLeftSemiCorrelatedApplyInCXform::ExfImplementLeftSemiCorrelatedApplyIn
CLogicalLeftSemiJoinCXform::ExfSemiJoinSemiJoinSwap、CXform::ExfSemiJoinAntiSemiJoinSwap、CXform::ExfSemiJoinAntiSemiJoinNotInSwap、CXform::ExfSemiJoinInnerJoinSwap、CXform::ExfLeftSemiJoin2InnerJoin、CXform::ExfLeftSemiJoin2InnerJoinUnderGb、CXform::ExfLeftSemiJoin2CrossProduct、CXform::ExfLeftSemiJoin2NLJoin、CXform::ExfLeftSemiJoin2HashJoin
CLogicalLimitCXform::ExfImplementLimit、CXform::ExfSplitLimit
CLogicalMaxOneRowCXform::ExfMaxOneRow2Assert
CLogicalMultiExternalGetCXform::ExfMultiExternalGet2MultiExternalScan
CLogicalNAryJoinCXform::ExfSubqNAryJoin2Apply、CXform::ExfExpandNAryJoin、CXform::ExfExpandNAryJoinMinCard、CXform::ExfExpandNAryJoinDP、CXform::ExfExpandNAryJoinGreedy、CXform::ExfExpandNAryJoinDPv2
CLogicalPartitionSelectorCXform::ExfImplementPartitionSelector
CLogicalProjectCXform::ExfSimplifyProjectWithSubquery、CXform::ExfProject2Apply、CXform::ExfProject2ComputeScalar、CXform::ExfCollapseProject
CLogicalRightOuterJoinCXform::ExfRightOuterJoin2HashJoin
CLogicalRowTriggerCXform::ExfImplementRowTrigger
CLogicalSelectCXform::ExfSelect2Apply、CXform::ExfRemoveSubqDistinct、CXform::ExfInlineCTEConsumerUnderSelect、CXform::ExfPushGbWithHavingBelowJoin、CXform::ExfSelect2IndexGet、CXform::ExfSelect2DynamicIndexGet、CXform::ExfSelect2PartialDynamicIndexGet、CXform::ExfSelect2BitmapBoolOp、CXform::ExfSelect2DynamicBitmapBoolOp、CXform::ExfSimplifySelectWithSubquery、CXform::ExfSelect2Filter
CLogicalSequenceCXform::ExfImplementSequence
CLogicalSequenceProjectCXform::ExfSequenceProject2Apply、CXform::ExfImplementSequenceProject
CLogicalSplitCXform::ExfImplementSplit
CLogicalTVFCXform::ExfUnnestTVF、CXform::ExfImplementTVF、CXform::ExfImplementTVFNoArgs
CLogicalUnionCXform::ExfUnion2UnionAll
CLogicalUnionAllCXform::ExfImplementUnionAll
CLogicalUpdateCXform::ExfUpdate2DML

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

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

相关文章

运算器组成实验

1.实验目的及要求 实验目的 1、熟悉双端口通用寄存器组的读写操作。 2、熟悉运算器的数据传送通路。 3、验证运算器74LS181的算术逻辑功能。 4、按给定数据&#xff0c;完成指定的算术、逻辑运算。 实验要求 1、做好实验预习。掌握运算器的数据传送通路和ALU的功能特性&…

微服务实战项目-学成在线-项目优化(redis缓存优化)

微服务实战项目-学成在线-项目优化(redis缓存优化) 1 优化需求 视频播放页面用户未登录也可以访问&#xff0c;当用户观看试学课程时需要请求服务端查询数据&#xff0c;接口如下&#xff1a; 1、根据课程id查询课程信息。 2、根据文件id查询视频信息。 这些接口在用户未认…

verilog学习笔记5——进制和码制、原码/反码/补码

文章目录 前言一、进制转换1、十进制转二进制2、二进制转十进制3、二进制乘除法 二、原码、反码、补码1、由补码计算十进制数2、计算某个负数的补码 前言 2023.8.13 天气晴 一、进制转换 1、十进制转二进制 整数&#xff1a;除以2&#xff0c;余数倒着写 小数&#xff1a;乘…

QT之时钟

QT之时钟 会用到一个时间类:qtime 定时类:qtimer #------------------------------------------------- # # Project created by QtCreator 2023-08-13T10:49:31 # #-------------------------------------------------QT += core guigreaterThan(QT_MAJOR_VERSION,…

css3新增选择器总结

目录 一、属性选择器 二、结构伪类选择器 三、伪元素选择器 四、UI状态伪类选择器 五、反选伪类选择器 六、target选择器 七、父亲选择器、后代选择器 八、相邻兄弟选择器、兄弟们选择器 一、属性选择器 &#xff08;除IE6外的大部分浏览器支持&#xff09; E&#…

springcloud 基础

面试题 SOA、分布式、微服务之间有什么关系和区别&#xff1f; 1.分布式架构是指将单体架构中的各个部分拆分&#xff0c;然后部署不同的机器或进程中去&#xff0c;SOA和微服务基本上都是分布式架构 师 2.SOA是一种面向服务的架构&#xff0c;系统的所有服务都注册在总线上&…

Multi-object navigation in real environments using hybrid policies 论文阅读

论文信息 题目&#xff1a;Multi-object navigation in real environments using hybrid policies 作者&#xff1a;Assem Sadek, Guillaume Bono 来源&#xff1a;CVPR 时间&#xff1a;2023 Abstract 机器人技术中的导航问题通常是通过 SLAM 和规划的结合来解决的。 最近…

TENNECO EDI 项目——X12与XML之间的转换

近期为了帮助广大用户更好地使用 EDI 系统&#xff0c;我们根据以往的项目实施经验&#xff0c;将成熟的 EDI 项目进行开源。用户安装好知行之桥EDI系统之后&#xff0c;只需要下载我们整理好的示例代码&#xff0c;并放置在知行之桥指定的工作区中&#xff0c;即可开始使用。 …

Vue框架

1.MVVM MVVM 是 Model-View-ViewModel 的简写。MVVM 就是将其中的 View&#xff08;可理解为操作界面&#xff09; 的 状态和行为抽象化&#xff0c;让我们将视图 UI 和业务逻辑分开 它可以取出 Model 的数据同时帮忙处理 View 中由于需要展示内容而涉及的业务逻辑 2…

NO.3 MyBatis获取参数的两种方式

目录 1、两种方式的区别 2、单个字面量类型的参数 2.1 在映射文件中&#xff0c;用#{}加任意名称获取参数的值&#xff1a; 2.2 在映射文件中&#xff0c;用${}加任意名称获取参数的值&#xff1a; 2.3 小结 3、在map集合类型的参数 3.1 使用MyBatis默认的map映射集合 …

【MySQL】Java实现JDBC编程

文章目录 1. JDBC2. 添加驱动包3. 编程3.1 创建数据源3.2 与数据库建立连接3.3 构造SQL语句3.4 执行SQL语句3.5 释放资源&#xff0c;关闭连接 1. JDBC 数据库编程必须掌握至少一门编程语言&#xff0c;一种数据库&#xff0c;会导入数据库驱动包。 操作和连接不同数据库都需要…

《C语言深度解剖》.pdf

&#x1f407; &#x1f525;博客主页&#xff1a; 云曦 &#x1f4cb;系列专栏&#xff1a;深入理解C语言 &#x1f4a8;吾生也有涯&#xff0c;而知也无涯 &#x1f49b; 感谢大家&#x1f44d;点赞 &#x1f60b;关注&#x1f4dd;评论 C语言深度解剖.pdf 提取码:yunx

Jmeter请求接口返回值乱码解决

乱码示例 解决步骤&#xff1a; 1.打开Jmeter安装目录下的bin目录&#xff0c;找到jmeter.properties 2.使用记事本或其他编译工具打开jmeter.properties文件&#xff0c;然后全局搜索sampleresult.default.encoding 3.在文件中添加sampleresult.default.encodingutf-8,保存…

15_基于Flink将pulsar数据写入到ClickHouse

3.8.基于Flink将数据写入到ClickHouse 编写Flink完成数据写入到ClickHouse操作, 后续基于CK完成指标统计操作 3.8.1.ClickHouse基本介绍 ClickHouse 是俄罗斯的Yandex于2016年开源的列式存储数据库&#xff08;DBMS&#xff09;&#xff0c;使用C语言编写&#xff0c;主要用…

C语言快速回顾(一)

前言 在Android音视频开发中&#xff0c;网上知识点过于零碎&#xff0c;自学起来难度非常大&#xff0c;不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》&#xff0c;结合我自己的工作学习经历&#xff0c;我准备写一个音视频系列blog。C/C是音视频必…

MySQL数据库练习

目录 表结构 建表 插入数据 1、用SQL语句创建学生表student&#xff0c;定义主键&#xff0c;姓名不能重名&#xff0c;性别只能输入男或女&#xff0c;所在系的默认值是 “计算机”。 2、修改student 表中年龄&#xff08;age&#xff09;字段属性&#xff0c;数据类型由…

【LangChain概念】了解语言链️:第2部分

一、说明 在LangChain的帮助下创建LLM应用程序可以帮助我们轻松地链接所有内容。LangChain 是一个创新的框架&#xff0c;它正在彻底改变我们开发由语言模型驱动的应用程序的方式。通过结合先进的原则&#xff0c;LangChain正在重新定义通过传统API可以实现的极限。 在上一篇博…

【ts】【cocos creator】excel表格转JSON

需要将表格导出为text格式放到项目resources/text文件夹下 新建场景&#xff0c;挂载到Canvas上运行 表格文件格式&#xff1a; 保存格式选text tableToJson : import CryptoJS require(./FileSaver);const { ccclass, property } cc._decorator;ccclass export default c…

IDEA的常用设置,让你更快速的编程

一、前言 在使用JetBrains的IntelliJ IDEA进行软件开发时&#xff0c;了解和正确配置一些常用设置是非常重要的。IDEA的强大功能和定制性使得开发过程更加高效和舒适。 在本文中&#xff0c;我们将介绍一些常用的IDEA设置&#xff0c;帮助您更好地利用IDEA进行开发。这些设置包…

Kotlin 中的 Lambda 与 Inline

在Kotlin中&#xff0c;有很多很酷很实用的特性&#xff0c;比如Lambda和高阶函数&#xff0c;利用这些特性&#xff0c;我们可以更加快速的实现开发&#xff0c;提升效率。 比如我们实现一个捕获Throwable&#xff0c;安全执行部分代码的高阶函数 fun safeRun(runnable: () …