诊所网站模板二手交易平台 网站开发

news/2025/9/26 6:34:23/文章来源:
诊所网站模板,二手交易平台 网站开发,html5游戏开发,淄博网站优化推广源码分析丨MySQL的多层SP中Cursor相关BUG 一、问题发现 在一次开发中在sp中使用多层cursor的时候想知道每层的m_max_cursor_index值分别是多少#xff0c;以用来做后续开发。于是做了以下的试验#xff0c;但是发现第一个level2那层的m_max_cursor_index的值有点问题。 注以用来做后续开发。于是做了以下的试验但是发现第一个level2那层的m_max_cursor_index的值有点问题。 注本次使用的MySQL数据库版本为最新的debug版本。 SQL语句示例 greatsql CREATE TABLE t1 (a INT, b VARCHAR(10));以下注释里面是该层sp_pcontext的参数值。 DELIMITER $$ CREATE PROCEDURE processnames() -- level0m_max_cursor_index181 BEGINDECLARE nameCursor0 CURSOR FOR SELECT * FROM t1; -- level1m_cursor_offset0m_max_cursor_index181beginDECLARE nameCursor1 CURSOR FOR SELECT * FROM t1; -- level2m_cursor_offset1m_max_cursor_index18 ☆问题点beginDECLARE nameCursor2 CURSOR FOR SELECT * FROM t1; -- level3m_cursor_offset2m_max_cursor_index1DECLARE nameCursor3 CURSOR FOR SELECT * FROM t1; -- level3m_cursor_offset2m_max_cursor_index2DECLARE nameCursor4 CURSOR FOR SELECT * FROM t1; -- level3m_cursor_offset2m_max_cursor_index3DECLARE nameCursor5 CURSOR FOR SELECT * FROM t1; -- level3m_cursor_offset2m_max_cursor_index4end;end;beginDECLARE nameCursor6 CURSOR FOR SELECT * FROM t1; -- level2m_cursor_offset1m_max_cursor_index1end; END $$ DELIMITER ; 首先查看上面的sp的code可以发现nameCursor6和nameCursor1属于同一层因此他们的offset值一样。 greatsql show procedure code processnames; -------------------------------------------- | Pos | Instruction | -------------------------------------------- | 0 | cpush nameCursor00: SELECT * FROM t1 | | 1 | cpush nameCursor11: SELECT * FROM t1 | | 2 | cpush nameCursor22: SELECT * FROM t1 | | 3 | cpush nameCursor33: SELECT * FROM t1 | | 4 | cpush nameCursor44: SELECT * FROM t1 | | 5 | cpush nameCursor55: SELECT * FROM t1 | | 6 | cpop 4 | | 7 | cpop 1 | | 8 | cpush nameCursor61: SELECT * FROM t1 | | 9 | cpop 1 | | 10 | cpop 1 | -------------------------------------------- 11 rows in set (6.02 sec) 然后通过debug查看每层sp_pcontext的参数值相关参数值已经在上面标识出发现第一个level2的sp_pcontext的m_max_cursor_index值多了很多预期值应该是41但是实际是81而上面的层都没错这说明代码最里面那层m_max_cursor_index赋值错了。 二、问题调查过程 1、发现了问题点就看看代码里面对于每层的m_max_cursor_index是怎么赋值的。 1、初始化sp_pcontext的时候所有的参数都为0 sp_pcontext::sp_pcontext(THD *thd) : m_level(0),m_max_var_index(0),m_max_cursor_index(0)...{init(0, 0, 0, 0);}2、每加一层sp_pcontext当前的m_cursor_offset上一层cursor个数 sp_pcontext::sp_pcontext(THD *thd, sp_pcontext *prev, sp_pcontext::enum_scope scope): m_level(prev-m_level 1),m_max_var_index(0),m_max_cursor_index(0)... {init(prev-current_cursor_count());} void sp_pcontext::init(uint cursor_offset) {m_cursor_offset cursor_offset;} uint current_cursor_count() const {return m_cursor_offset static_castuint(m_cursors.size()); }3、退出当前sp_pcontext层需要把当前的max_cursor_index()信息值赋值给上一层的m_max_cursor_index即当前的cursor数量累加给上一层 sp_pcontext *sp_pcontext::pop_context() {uint submax max_cursor_index();if (submax m_parent-m_max_cursor_index)m_parent-m_max_cursor_index submax; } uint max_cursor_index() const {return m_max_cursor_index static_castuint(m_cursors.size());}4、每次增加一个cursorm_max_cursor_index值递增m_max_cursor_index是计数器。 bool sp_pcontext::add_cursor(LEX_STRING name) {if (m_cursors.size() m_max_cursor_index) m_max_cursor_index;return m_cursors.push_back(name); } 2、根据第一步的分析只在最里面那层的m_max_cursor_index累加出来计算错误看看上面的累加过程是用max_cursor_index()值来累加的于是查看max_cursor_index()函数的实现 uint max_cursor_index() const {return m_max_cursor_index static_castuint(m_cursors.size());} 这里是把当前层的m_max_cursor_index值加上m_cursors.size()但是在函数add_cursor里面m_cursors数组每增加一个cursorm_max_cursor_index都要加1也就是说在最里面那层sp_pcontext的计算重复了计算了2遍m_cursors.size()导致上面的level2那层的m_max_cursor_index值变成2*48了。到这里问题点发现。 三、问题解决方案 通过以上代码解析后可以考虑只对最里面那层sp_pcontext的max_cursor_index()取值进行修改最里面那层的sp_pcontext没有m_children因此可以用这个数组值进行判断。代码作如下修改 uint max_cursor_index() const {if(m_children.size() 0) -- 最里面那层sp_pcontext直接返回m_max_cursor_index的值。return m_max_cursor_index; -- 可以改为static_castuint(m_cursors.size())二者值一样。else -- 上层sp_pcontext返回下层所有sp_pcontext的m_max_cursor_index的值再加上当前层的m_cursors.size()值。return m_max_cursor_index static_castuint(m_cursors.size()); } 四、问题总结 在MySQL的sp里面使用cursor的话因为m_max_cursor_index只用于统计不用于实际赋值和计算过程因此不影响使用。但是如果要用这个值用于二次开发就要注意到这个问题。上面的修改方案只是其中一个解决方案也可以根据自己的需要去改add_cursor的m_max_cursor_index的赋值过程。 这次发现的问题属于不参与计算的bug但却影响开源代码的后续开发在实际开发应用中类似的问题也要注意一不小心就会踩坑。 Enjoy GreatSQL :) 关于 GreatSQL GreatSQL是适用于金融级应用的国内自主开源数据库具备高性能、高可靠、高易用性、高安全等多个核心特性可以作为MySQL或Percona Server的可选替换用于线上生产环境且完全免费并兼容MySQL或Percona Server。 相关链接 GreatSQL社区 Gitee GitHub Bilibili GreatSQL社区 社区有奖建议反馈 https://greatsql.cn/thread-54-1-1.html 社区博客有奖征稿详情 https://greatsql.cn/thread-100-1-1.html 对文章有疑问或者有独到见解都可以去社区官网提出或分享哦~ 技术交流群 微信QQ群 QQ群533341697 微信群添加GreatSQL社区助手微信号wanlidbc 好友待社区助手拉您进群。

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

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

相关文章

有哪些html网页设计的比赛优化大师apk

1. grep 简介 grep 是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹配的行打印出来。通常grep有三种版本grep、egrep(等同于grep -E)和fgrep。egrep为扩展的grep,fgrep则为快速grep(使用固定…

专业手表网站四川省工程项目建设投标发布网站

<!DOCTYPE html>Documentposted 2017-12-07 19:33 mysure 阅读(...) 评论(...) 编辑 收藏 刷新评论刷新页面返回顶部转载于:https://www.cnblogs.com/ar13/p/8000718.html

如何在网站后台做超链接到文档wordpress另一更新正在运行

弹框分为两种&#xff1a;模态弹框和非模态弹框一、模态弹框模态弹框和非模态弹框最大的区别就是是否强制用户交互。模态弹框会打断用户的当前操作流程&#xff0c;用户不在弹框上操作的话&#xff0c;其余功能都使用不了。优点是&#xff1a;可以很好的获取的用户的视觉焦点缺…

建设网站企业网上银行廉洁广州在线网站建设

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 O/R Mapping 是 Object Relational Mapping&#xff08;对象关系映射&#xff09;的缩写。通俗点讲&#xff0c;就是将对象与关系数据库绑…

Java 与智慧农业:智能种植与精准农业实践

一、引言 随着 物联网(IoT)、人工智能(AI)、大数据、卫星遥感 等技术的快速发展,农业正在加速走向 数字化、智能化、精准化。智慧农业不仅能够提高作物产量与质量,还能降低资源消耗,实现可持续发展。 在这一过程…

做网站还有希望吗wordpress数据连接失败

知识点1&#xff1a;模板 1.1模板的概念 模板的特点&#xff1a; 模板不可以直接使用&#xff0c;它只是一个框架模板的通用并不是万能的 1.2函数模板 1.2.1函数模板语法 函数模板的引入&#xff1a; 函数模板的举例&#xff1a; 总结&#xff1a; 函数模板利用关键字template…

怎么自己做优惠券网站国外网站案例

目录 1.简介 2.算法原理 2.1 指标正向化 2.2 数据标准化 2.3 计算变异系数 2.4 计算权重以及得分 3.实例分析 3.1 读取数据 3.2 指标正向化 3.3 数据标准化 3.4 计算变异系数 3.5 计算权重 3.6 计算得分 完整代码 1.简介 变异系数法(Coefficient of variation …

设计网站 知乎网页制作图

前言&#xff1a; 针对一个完整的机器学习框架目前还没有总结出来&#xff0c;所以目前只能总结每一个单独的算法。由于现在研究的重点是算法&#xff0c;所以对于数据的处理&#xff0c;数据的分析和可视化呈现&#xff0c;在现阶段并不进行展示&#xff08;这样容易陷入纠结…

大连哪家科技公司做网站好一个人怎么做网站

继win7系统后&#xff0c;微软又推出了win8、win8.1以及win10系统&#xff0c;每个系统在原来的版本上都有了更改和创新。大家都知道&#xff0c;人是一种容易习惯的动物。很多人在使用了win7之后&#xff0c;更换到win8系统会很不习惯、觉得win8无法与win7比拟&#xff0c;这种…

python网站开发流程图文库网站建设

来源&#xff1a;大数据文摘新年伊始&#xff0c;海外媒体VentureBeat电话访谈了包括吴恩达、Yann Lecun在内的四位人工智能领域领军者&#xff0c;询问了他们对于过去一年人工智能领域发展的看法&#xff0c;以及他们认为新一年人工智能和机器学习可能产生的突破。不约而同&am…

怎样做好网站推广flash网站制作下载

一(Date类)&#xff1a; 在JDK的java.util包中&#xff0c;提供了Date类用于表示日期和时间&#xff0c;精确到毫秒。随着JDK版本的不断升级和发展&#xff0c;Date类中的大部分构造方法和普通方法都已经不推荐使用。在JDK8中&#xff0c;Date类只有2个构造方法可以使用&#x…

泰州 做网站网站建设类外文翻译

Golang 教程02 - Print&#xff0c;Formatting Strings Go语言提供了丰富的格式化字符串功能&#xff0c;用于将数据格式化为特定格式的字符串。本课程将详细介绍Go语言中Print和Formatting Strings的用法&#xff0c;并提供代码示例供大家参考。 Print 类型及使用 1.Print …

文章网站的一级二级怎么做上海集团平台

详细布置 今天这三道题都非常难&#xff0c;那么这么难的题&#xff0c;为啥一天做三道&#xff1f; 因为 一刷 也不求大家能把这么难的问题解决&#xff0c;所以 大家一刷的时候&#xff0c;就了解一下题目的要求&#xff0c;了解一下解题思路&#xff0c;不求能直接写出代码…

做电影收费网站群晖 做网站服务器

WebUI automation testing framework based on Selenium and unittest. 基于 selenium 和 unittest 的 Web UI自动化测试框架。 特点 提供更加简单API编写自动化测试。提供脚手架&#xff0c;快速生成自动化测试项目。自动生成HTML测试报告生成。自带断言方法&#xff0c;断言…

我的第一个漏洞:通过密码重置实现邮箱枚举

本文详细介绍了作者在漏洞赏金项目中发现的第一个安全漏洞——通过密码重置功能实现邮箱枚举。文章分析了漏洞原理、危害影响及修复方案,为网络安全初学者提供了实用的技术参考和实践经验。我的第一个漏洞:通过密码重…

免费做橙光封面的网站网站由哪些部分组成部分组成

最近的30年来&#xff0c;宏&#xff08;macros&#xff09;成为了Microsoft Word的关键卖点。WordBASIC最初是在1989年引入的&#xff0c;它能够让受过极少培训的打字员都能进行计算机编程&#xff0c;从而简化他们的日常工作。\\在那个时代&#xff0c;竞争非常激烈。除了Wor…

购物网站后台模板好的手机端网站模板下载

在搭建hadoop伪分布式环境时&#xff0c;开启hdfs-site.sh后&#xff0c;web端访问不到&#xff0c;但是节点已经正常开启&#xff1a; 在尝试关闭防火墙后也没有效果&#xff0c;后来在/etc/hosts文件中加入本机的ip和主机名映射后&#xff0c;重新初始化namenode&#xff0c;…

关键词爱站网关键词挖掘工具做英文网站要会什么

前言: 当开始使用ElementUI框架来搭建网站或Web应用程序时&#xff0c;了解框架的基本结构和组件的使用是至关重要的。ElementUI是一个基于Vue.js的框架&#xff0c;提供了丰富的UI组件和工具&#xff0c;可以帮助开发人员快速构建现代化的用户界面。 在本文中&#xff0c;我…

手表网站 海马300米潜水表网站建设需要会什么软件有哪些方面

七大排序的个人总结&#xff08;二&#xff09; 归并排序&#xff08;Merge 归并排序&#xff08;Merge Sort&#xff09;: 归并排序是一个相当“稳定”的算法对于其它排序算法&#xff0c;比如希尔排序&#xff0c;快速排序和堆排序而言&#xff0c;这些算法有所谓的最好与最…

怎么优化一个网站关键词网络推广方案下拉管家xiala11

视频指路 参考博客笔记 参考笔记二 用来分类的模型 说明&#xff1a;1、 逻辑斯蒂回归和线性模型的明显区别是在线性模型的后面&#xff0c;添加了激活函数(非线性变换) ​ 2、分布的差异&#xff1a;KL散度&#xff0c;cross-entropy交叉熵 现在损失函数衡量不是距离而是分布…