42 mysql “+“ 操作符的实现

前言

问题来自于 chinaunix, mysql select 子句的小白问题 

mysql 的一些基础的 算术运算符 的计算的实现

这里 整理如下 case, 执行之前 设置如下变量

set @a = 2;
set @b = 3;

select @a + @b;
select 'a' + 'b';
select 1 + 3;
select '1' + '3';
select 'a + b';
select a + b;

 

 

select @a + @b;

解析 sql 的时候, 会将 表达式 解析为一个 Item_func_plus, 左右操作数为 Item_func_get_user_var 变量名分别为 a, b

2f4558e20f6c4237b21983234fff6e5b.png

 

查询的时候 选择列即为 上面解析表达式的时候 resolve 的 Item_func_plus

然后由 Item_func_plus 来计算结果, 以及响应数据 

d5393378c27447878f0c925a4a76a738.png

 

取变量的方式为, 从 user_var_entry 中获取存储的数据值, 这个值是上面 “set @a = 2;” 设置进去的 

bf4e473a662b4116b597880352fbf561.png

 

具体的 计算业务是由这里的 val0 + val1, 以及 之后的符号相关处理 来完成的

得到结果 2 + 3 = 5

2212f124cf4a4aeb89e2be8591985897.png

 

 

select 'a' + 'b';

解析表达式的的时候, 合成一个 Item_func_plus, 左右操作数为 字面量 ”a”, ”b”

7faba5e80214409195e1201fa866f066.png

 

计算的时候, 尝试将 “a” 转换为 int 的时候 “a” 不符合 数字的相关规范, my_strntod 计算为 0

de580d2742744f7290e82bc59f5c10cb.png 

因此 计算结果为 0 + 0 = 0

01090431702646d7a963b9ad08ec784a.png 

 

select 1 + 3; 

解析表达式的的时候, 合成一个 Item_func_plus, 左右操作数为 数字 1, 3

ad97886c8e0f4f61ab11eca25f6c03c6.png

 

计算的时候, 获取数字 1 的值, 为 1

cf12efeb4c1240838cff7270f7ab0b3b.png 

计算结果为 1 + 3 = 4

eef3034d15c742e98ae03b7e41325ca2.png 

 

select '1' + '3';

解析表达式的的时候, 合成一个 Item_func_plus, 左右操作数为 字面量 ”1”, ”3”  

57a5e04b4d9d48068a0ad9faea10f499.png

 

将字面量转换为数字的时候, “1” 转换为 1, “3” 转换为 3

50eb178249e34d15904d6ddad0347aa4.png 

计算结果为 1 + 3 = 4

2f5f07f31f80491eb4afb6dabb95a64c.png 

 

select 'a + b';

解析表达式的时候, 解析为一个 常量字面量 “a + b”

262111575af04d1c8d41248fb1268472.png

 

然后 响应的时候, 直接 响应给定的字面量的字符串

410b1ed6c0324091b13c62b87b06a3e3.png 

 

select a + b;

解析表达式的的时候, 合成一个 Item_func_plus, 左右操作数为 Identifier 标记分别为 “a”, “b”

5d4b1afefe7d4a53b476a6c119acbad9.png

 

如果这里是 表中的两个字段, 这里也是类似的效果 

select field1 + field2 from tz_test;

cc3d844c3a0746ed8f7ba7fd9e7aee0a.png

 

然后后面 setup_fields 的时候, 从数据表中获取 a, b 对应的字段, 不存在 该字段

然后 抛出了 ER_BAD_FIELD_ERROR 其错误码为 1054

4c88b520fe6b45f79d2948da5157c7ae.png

 

 

@a, @b 这些变量取自哪里? 

执行 sql 如下 “set @a = 10;”

可以看到 是通过 “a” 从当前 session 的 user_vars 的一个 Map 中存取的变量 

1f6077209cd04d5aa5a7d663b6e10e71.png

 

 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

实战项目: 负载均衡

0. 前言 这个项目使用了前后端,实现一个丐版的LeetCode刷题网站,并根据每台主机的实际情况,选择对应的主机,负载均衡的调度 0.1 所用技术与开发环境 所用技术: C STL 标准库 Boost 准标准库 ( 字符串切割 ) cpp- httplib 第三方开源网络库 ctemplate 第三方开源前端网…

EarMaster7.5.74官方版安装激活使用教程

EarMaster就是你音乐路上的良师益友。这是一款来自丹麦皇家音乐学院的多媒体音乐教育软件,针对视唱练耳为音乐学生,音乐爱好者以及音乐专业人员都带来了很多的帮助,让你们可以获得音乐家般的耳朵,通过专业视唱练耳培训考试&#x…

使用 PNPM 从零搭建 Monorepo,测试组件并发布

1 目标 通过 PNPM 创建一个 monorepo(多个项目在一个代码仓库)项目,形成一个通用的仓库模板。 这里以在该 monorepo 项目中搭建 web components 类型的组件库为例,介绍从仓库搭建、组件测试到组件发布的整个流程。 这个仓库既可…

10 C++11

10 C11 1、类型推导1.1 auto关键字1.2 auto类型推断本质 2、类型计算2.1 类型计算分类2.2 类型计算的四种规则2.3 返回值类型计算 3、列表初始化4、Lambda表达式4.1 前置知识4.2 Lambda表达式4.3 捕获表 5、右值引用5.1 概念5.2 左值引用和右值引用 6、移动语义 1、类型推导 1…

el-tree回显复选框时半选中和全选中的树

项目需求如下:当我点击“编辑”后,需要在tree树上全勾中和半勾中选项,由于后端接口返回的tree树是含了父级节点id的数组集合,所以我们回显时需要处理好这个全勾中和半勾中的问题。 主要思路如下,我们通过setData方法获…

【Java】已解决:java.lang.OutOfMemoryError: Java heap space

文章目录 一、问题分析背景二、可能出错的原因三、错误代码示例四、正确代码示例五、注意事项 已解决Java:java.lang.OutOfMemoryError: Java heap space 一、问题分析背景 在Java开发过程中,有时我们会遇到java.lang.OutOfMemoryError: Java heap spa…

在typora中利用正则表达式,批量处理图片

一,png格式 在 Typora 中批量将 HTML 图片标签转换为简化的 Markdown 图片链接,且忽略 alt 和 style 属性,可以按照以下步骤操作: 打开 Typora 并加载你的文档。按下 Ctrl H(在 Windows/Linux 上)或 Cmd…

【Python】理解『下采样』:原理与应用

是你多么温馨的目光 教我坚毅望着前路 叮嘱我跌倒不应放弃 没法解释怎可报尽亲恩 爱意宽大是无限 请准我说声真的爱你 🎵 Beyond《真的爱你》 在数字信号处理、图像处理和机器学习中,下采样(Downsampling)是…

【Java04】引用变量数组初始化的内存机制

引用类型数组指向的元素也是引用。其本质是: 由一个在栈上的引用数组变量指向一块堆内存;这块堆内存里存储的元素是引用,又分别指向其他堆内存。 class Person // Person是一个自定义的类 {public int age;puiblic double height;public vo…

Java课程设计:基于Javaweb的校园订餐系统

文章目录 一、项目介绍二、项目技术栈三、核心代码四、项目展示五、源码获取 一、项目介绍 在当今互联网高速发展的时代,大学校园内的学生生活正在发生着翻天覆地的变化。其中,校园内的餐饮服务无疑是亟需改革和创新的领域之一。 传统的校园食堂模式,往往存在就餐高峰时段拥挤…

使用了代理IP怎么还会被封?代理IP到底有没有效果

代理IP作为一种网络工具,被广泛应用于各种场景,例如网络爬虫、海外购物、规避地区限制等。然而,很多用户在使用代理IP的过程中却发现自己的账号被封禁,这让他们不禁产生疑问:使用了代理IP怎么还会被封?代理…

Web前端项目-交互式3D魔方【附源码】

交互式3D魔方 ​ 3D魔方游戏是一款基于网页技术的三维魔方游戏。它利用HTML、CSS和JavaScript前端技术来实现3D效果&#xff0c;并在网页上呈现出逼真的魔方操作体验。 运行效果&#xff1a; 一&#xff1a;index.html <!DOCTYPE html> <html><head><…

刚入职,写接口用了PUT和DELETE方法,结果被同事喷了,感觉自己被针对了

事情是这样&#xff0c;某社交平台上有个兄弟发帖&#xff0c;说自己刚入职国企&#xff0c;写了个借口&#xff0c;用了PUT和DELETE方法&#xff0c;前段说不能用这两个&#xff0c;这位仁兄感觉很委屈&#xff0c;特地发帖吐槽。 其实站在安全的角度来说&#xff0c;真没冤枉…

爱了爱了,11款超良心App推荐!

AI视频生成&#xff1a;小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频https://aitools.jurilu.com/今天&#xff0c;我们向你推荐十款与众不同但又不错的win10软件&#xff0c;它们都有各自的功能和优点&#xff0c;相信你一定会喜欢。 1.图片处…

第 4 章:从 Spring Framework 到 Spring Boot

通过前面几个章节的介绍&#xff0c;相信大家已经对 Spring Framework 有了一个基本的认识&#xff0c;相比早期那些没有 Spring Framework 加持的项目而言&#xff0c;它让生产力产生了质的飞跃。但人们的追求是无止境的&#xff0c;这也驱动着技术的发展。开发者认为 Spring …

【计算机组成原理】指令系统考研真题详解之拓展操作码!

计算机组成原理&#xff1a;指令系统概述与深入解析 1. 指令系统概述 计算机软硬件界面的概念 在计算机组成原理中&#xff0c;指令系统扮演着至关重要的角色&#xff0c;它是计算机软硬件界面的核心。软件通过指令与硬件进行通信&#xff0c;硬件根据指令执行相应的操作。指…

基于STM32和人工智能的智能气象站系统

目录 引言环境准备智能气象站系统基础代码实现&#xff1a;实现智能气象站系统 4.1 数据采集模块4.2 数据处理与分析4.3 控制系统4.4 用户界面与数据可视化应用场景&#xff1a;智能气象管理与优化问题解决方案与优化收尾与总结 1. 引言 随着气象科技的进步&#xff0c;智能…

定个小目标之刷LeetCode热题(21)

这是道技巧题&#xff0c;利用了 &#xff08;num - 1&#xff09;% n 计算下标的形式来将数组元素与数组索引产生映射关系&#xff0c;代码如下&#xff0c;可以看下注释 class Solution {public List<Integer> findDisappearedNumbers(int[] nums) {int n nums.lengt…

Qt画五角星,简单图表

五角星&#xff1a; 代码&#xff1a; widget.cpp #include "widget.h" #include "ui_widget.h" #include <QPaintEvent> #include <QPainter> #include <QPainterPath> Widget::Widget(QWidget *parent): QWidget(parent), ui(new U…

广东启动“粤企质量提升工作会议” 着力提升产品和服务质量

6月5日,由广东质量峰会组委会牵头,联合相关质量、信用、打假和检验检测等部门共同举办的“粤企质量提升工作会议”在广州正式启动。本次工作会议旨在贯彻落实《质量强国建设纲要》及《广东省质量强省建设纲要》精神,深入开展全民质量行动,弘扬企业家和工匠精神,营造政府重视质量…