文章分类 -  openGauss源码解析

上一页 1 2 3 4 5 6 7 8 9 ··· 11 下一页
openGauss数据库是华为公司在深度融合技术应用于数据库领域多年经验的基础上,结合企业级场景要求,推出的新一代企业级开源数据库。本文将从各方面对该openGauss数据库源码进行详细介绍。
摘要:openGauss源码解析:执行器解析(18)6. Unique算子Unique算子用于对子计划返回的元组去重,对应的代码源文件是“nodeUnique.cpp”。Unique算子的去重逻辑建立在子计划返回的元组已经按照属性排序之上,如果不重复则输出,并放入缓存元组中(用作下一次迭代去重判断),否则 阅读全文
posted @ 2024-04-30 10:50 openGauss-bot 阅读(5) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:执行器解析(17)4. Group算子Group算子用于处理GROUP BY子句(节点),对满足条件的元组做分组处理,对应的代码源文件是“nodeGroup.cpp”。Group算子对应的子节点返回的元组是按照分组属性排列的结果。算子对应的主要函数如表7-27所示。表7- 阅读全文
posted @ 2024-04-30 10:50 openGauss-bot 阅读(9) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:执行器解析(16)3. Limit算子Limit算子节点主要用来处理LIMIT/OFFSET子句,用于限制子查询语句处理元组的数量,对应的代码源文件是“nodeLimit.cpp”。算子对应的主要函数如表7-26所示。表7-26 Limit算子主要函数主要函数说明Exec 阅读全文
posted @ 2024-04-30 10:50 openGauss-bot 阅读(6) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:执行器解析(15)2. Sort算子Sort算子用于执行排序计划节点(即SQL语句中的ORDER BY命令),对应的代码源文件是“nodeSort.cpp”。算子对应的主要函数如表7-25所示。表7-25 Sort算子主要函数主要函数说明ExecInitSort初始化So 阅读全文
posted @ 2024-04-30 10:50 openGauss-bot 阅读(16) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:执行器解析(14)7.3.3 物化算子物化算子用于把元组缓存起来供后续使用。物化算子有多种类型,将介绍部分物化算子。如表7-23所示。表7-23 物化算子列表算子名称说明Material算子用于缓存子节点执行结果Sort算子用于元组排序(查询包含ORDER BY)Limi 阅读全文
posted @ 2024-04-30 10:50 openGauss-bot 阅读(16) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:执行器解析(20)2. merge join算子merge join算子用于支持排序结果集连接,对应的代码源文件是“nodeMergeJoin.cpp”。通常情况下hash连接的效果都比排序合并连接要好,但如果元组已经被排序,在执行排序合并连接时不需要再排序,这时排序合并 阅读全文
posted @ 2024-04-30 10:50 openGauss-bot 阅读(2) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:执行器解析(21)7.4 表达式计算表达式计算对应的代码源文件是“execQual.cpp”,openGauss处理SQL语句中的函数调用、计算式和条件表达式时需要用到表达式计算。表达式的表示方式和查询计划树的计划节点类似,通过生成表达式计划来对每个表达式节点进行计算。表 阅读全文
posted @ 2024-04-30 10:50 openGauss-bot 阅读(1) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:执行器解析(22)7.4.1 初始化阶段ExecInitExpr函数的作用是在执行的初始化阶段,准备要执行的表达式树。根据传入的表达式node tree,来创建并返回ExprState tree。在真正的执行阶段会根据ExprState tree中记录的处理函数,递归地执 阅读全文
posted @ 2024-04-30 10:50 openGauss-bot 阅读(2) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:执行器解析(23)7.4.2 执行阶段执行阶段主要是根据宏定义ExecEvalExpr递归调用执行函数。在计算时的核心函数包括ExecMakeFunctionResult和ExecMakeFunctionResultNoSets,通过这两个函数计算出表达式的结果并返回。其 阅读全文
posted @ 2024-04-30 10:50 openGauss-bot 阅读(4) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:执行器解析(24)表7-30中列举代码“execQual.cpp”文件中的部分主要函数,下面将依次详细介绍每个函数的功能、核心代码和执行流程。表7-30 表达式计算的主要函数主要函数说明ExecMakeFunctionResultNoSets表达式计算(非集合)ExecM 阅读全文
posted @ 2024-04-30 10:50 openGauss-bot 阅读(3) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:执行器解析(25)ExecMakeFunctionResult函数的执行流程如图7-15所示。(1) 判断funcResultStore是否存在,如果存在则从中获取结果返回(注:如果下文(3)中的模式是SFRM_Materialize,则会直接跳到此处)。(2) 计算出参 阅读全文
posted @ 2024-04-30 10:50 openGauss-bot 阅读(1) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:执行器解析(26)ExecQual函数的作用是检查slot结果是否满足表达式中的子表达式,如果子表达式为false,则返回false否则返回true,表示该结果符合预期,需要输出。核心代码如下:foreach (l, qual) { /* 遍历qual中的子表达式并计算 阅读全文
posted @ 2024-04-30 10:50 openGauss-bot 阅读(2) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:执行器解析(27)ExecTargetList函数主要执行流程如下。(1) 遍历targetlist中的表达式。(2) 计算表达式结果。(3) 判断结果中itemIsDone[resind]参数并生成最后的元组。ExecTargetList函数的执行流程如图7-19所示。 阅读全文
posted @ 2024-04-30 10:50 openGauss-bot 阅读(2) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:执行器解析(28)ExecEvalParamExec函数的作用是获取并返回PARAM_EXEC类型的参数。PARAM_EXEC参数是指内部执行器参数,是需要执行子计划来获取的结果,最后需要将结果返回到上层计划中。核心代码如下:prm = &(econtext->ecxt_ 阅读全文
posted @ 2024-04-30 10:50 openGauss-bot 阅读(3) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:执行器解析(12)6. SubqueryScan算子SubqueryScan算子以子计划为扫描对象,实际执行会转换成调用子节点计划,对应的代码源文件是“nodeSubqueryScan.cpp”。SubqueryScan状态节点初始由ExecInitSubquerySca 阅读全文
posted @ 2024-04-30 10:40 openGauss-bot 阅读(5) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:执行器解析(13)10. WorkTableScan算子WorkTableScan算子用于处理递归项,同RecursiveUnion算子紧密关联,对应的代码源文件是“nodeWorkTableScan.cpp”。WorkTableScan算子处理RecursiveUnio 阅读全文
posted @ 2024-04-30 10:40 openGauss-bot 阅读(3) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:执行器解析(2)7.1.2 火山模型执行器(executor)的输入是优化器产生的计划树(plan tree),计划树经过执行器转换成执行状态树。执行状态树的每一个节点对应一个独立算子,每个算子都完成一项单一功能,所有算子组合起来,实现了用户的查询目标。在火山模型中,多个 阅读全文
posted @ 2024-04-30 10:35 openGauss-bot 阅读(2) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:执行器解析(1)第7章 执行器解析执行器在数据库整个体系结构中起到承上启下的作用,对上承接优化器产生的最优执行计划,并按照执行计划进行流水线式的执行,对底层的存储引擎中的数据进行操作。openGauss数据库将执行的过程抽象成了不同类型的算子,同时结合编译执行、向量化执行 阅读全文
posted @ 2024-04-30 10:35 openGauss-bot 阅读(13) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:SQL引擎源解析(22)5. 适应度计算当得到了新生成的子染色体后,需要通过geqo_eval函数来计算适应度,随后使用spread_chromo函数将染色体加入到种群中。/* 适应度分析*/kid->worth = geqo_eval(root, kid->string 阅读全文
posted @ 2024-04-30 10:35 openGauss-bot 阅读(1) 评论(0) 推荐(0) 编辑
摘要:openGauss源码解析:SQL引擎源解析(21)4. 交叉算子通过选择算子选择出父母染色体之后,则可以对选出的父母染色体进行交叉操作,生成新的子代染色体。openGauss提供了多种交叉方法,包括有基于边的重组交叉方法(edge combination crossover)、部分匹配交叉方法(p 阅读全文
posted @ 2024-04-30 10:35 openGauss-bot 阅读(1) 评论(0) 推荐(0) 编辑

上一页 1 2 3 4 5 6 7 8 9 ··· 11 下一页