当前位置: 首页 > news >正文

建设家具网站外包seo公司

建设家具网站,外包seo公司,品牌设计与vi设计的区别,seo网站推广报价PgSQL技术内幕 - case when表达式实现机制 CASE表达式如同 C语言中的if/else语句一样,为SQL添加了条件逻辑处理能力,可以根据不同条件返回不同结果。PgSQL支持两种语法:简单表达式和搜索表达式。 1、搜索表达式 语法如下: CASE WH…

PgSQL技术内幕 - case when表达式实现机制

CASE表达式如同 C语言中的if/else语句一样,为SQL添加了条件逻辑处理能力,可以根据不同条件返回不同结果。PgSQL支持两种语法:简单表达式和搜索表达式。

1、搜索表达式

语法如下:

CASE WHEN condition THEN result[WHEN ...][ELSE result]
END

表达式计算过程:

1fa4cc6e303f417fb57ae6e61647e5f3.png

按照顺序依次计算WHEN子句的条件表达式:condition1,condition2...,当遇到结果为真的分支就返回相应的THEN结果;若不为真,则继续下一个WHEN条件计算;若所有WHEN都不为真,则返回ELSE默认值;当没有指定ELSE时,就返回NULL。

2、简单表达式

语法如下:

CASE expressionWHEN value THEN result[WHEN ...][ELSE result]
END

表达式计算过程:

7402926e89b3e2fbc9a83fc98307eb19.png

首先计算表达式testexpr的值,然后依次与WHEN中值:value1,value2...进行比较,遇到匹配的就返回THEN对应的结果;如果没有匹配则继续下一个WHEN值比较;若所有WHEN都不匹配则返回ELSE的默认值;如果没有指定ELSE则返回NULL。

3、搜索表达式实现机制

3.1 结构体

18e6c28e9e3eb7ff06493a1a2431c5c2.png

3.2 搜索表达式的实现机制

b7f818831d0913612bf46d616dc0f992.png

首先生成表达式计算步骤:ExecInitExprRec函数的T_CaseExpr分支。大致分为2大部分:

1)所有when的表达式caseExpr->args。首先通过ExecInitExprRec初始化when->expr的表达式计算步骤;然后添加EEOP_JUMP_IF_NOT_TRUE步骤,当when->expr表达式步骤计算为false时需要跳到下一个when,后面的state->steps[whenstep].d.jump.jumpdone = state->steps即为跳转位置;接着ExecInitExprRec初始化THEN的表达式(when->result)计算步骤;最后通过EEOP_JUMP跳到case的结束位置,它的结束位置需要计算完ELSE表达式后进行调整。

2)所有when表达式计算步骤生成后,需要对ELSE表达式进行初始化,即调用ExecInitExprRec对caseExpr->defresult生成计算步骤;最后调整EEOP_JUMP的跳转位置

3.3 简单表达式的实现机制

643907aa65f67e85a897bd6c6be51ba1.png

和搜索表达式不同,需要对CASE的表达式生成计算步骤,即caseExpr->arg的步骤;当该表达式结果类型为变长类型时,需要添加EEOP_MAKE_READONLY步骤进行结果值拷贝。

当没有ELSE时怎么办?

transformCaseExpr...defresult = (Node *) c->defresult;if (defresult == NULL){A_Const    *n = makeNode(A_Const);n->val.type = T_Null;n->location = -1;defresult = (Node *) n;}newc->defresult = (Expr *) transformExprRecurse(pstate, defresult);...

也就是会添加一个const节点表示NULL,caseExpr->defresult总是有值。

参考

https://www.postgresql.org/docs/12/functions-conditional.html

http://www.yayakq.cn/news/206475/

相关文章:

  • 找兼职做网站建设域名是干嘛的
  • 网站模板 安全吗wordpress主题 m1
  • 网站制作一年多少钱微信小程序开发工具手机版
  • 论网站建设情况有什么有趣的网站
  • 简单的网站模板个人网站能做什么
  • 网站程序上传完网站内外链建设
  • 台州做网站哪家好苏州找网络公司建网站
  • 便宜网站开发培训做思维导图的在线网站
  • 宁波自助模板建站品牌设计公司介绍
  • 一起做网店 网站打不开wordpress火车采集
  • 贵阳做网站的公司有哪些海淀做网站好的公司
  • 公司网站文案推广怎么做做药品网站规划方案
  • 专业网站制作推广服务莱芜58同城招聘网最新招聘
  • 给网站做外链要注意哪些深圳网站制作公司深圳app开发
  • 自己做网站需要备案么北京手机站建站
  • Python电影网站开发网页建立
  • 免费好用的网站制作湖州网站制作报价
  • 山东省建设节能协会网站保定网站建设价格低
  • 网站开发怎么写网站免费主机申请
  • 网页传奇新开服seo竞价推广
  • 济南做网站公司哪家好wordpress paginate_links
  • 临沂市建设局网站公示安溪县建设局网站
  • 论坛网站模板下载8小8x人成免费观看网页
  • 阿里云服务器官方网站广州网站建设品牌
  • 做宣传语的网站东莞常平中学
  • 易营宝网站建设wordpress kswapd0
  • 省建设厅网站建筑材料备案申请免费的网站搭建
  • tag做的最好的网站南沙企业网站建设
  • 网站审核备案 几天wordpress固定链接规则文件夹
  • 做专利费减是哪个网站源代码网站怎么建设