暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

MySQL——辅助工具之strings

数据库高级技术专家 2021-04-16
706

我先介绍了网络通信的Vio,正常来说,接下来我应该按照SQL的路径,介绍网络协议,再介绍命令接收,SQL解析,计划优化等一路跟踪下去,但我不打算这么干。这主要是因为认识一个庞然大物,往往我们只能看见其冰山一角,整个Mysql来说就是这样的庞然大物,我不可能一下子从头到尾完全整明白全部,所以我打算先看其主要的一些必备工具。


今天我先从strings工具开始:


bchange


参数:

register uchar *dst             目标串开始指针

size_t old_length             目标串长度

register const uchar *src,         新串开始指针

size_t new_length             新串长度

size_t tot_length             总的长度

功能:

用src中的new_length的字符替换dst中的前old_length的字符,其中的tot_length表示原始字符串的总长度。

5.6的代码看起来明显有问题,没有考虑src和desc的开始位置,具体代码如下:

size_t rest=tot_length-old_length;

if (old_length< new_length)

bmove_upp(dst+rest+new_length,dst+tot_length,rest);

else

bmove(dst+new_length,dst+old_length,rest);

memcpy(dst,src,new_length);

我看了一下5.7的最新代码,果然已经对其进行了修改,目前实现如下:

memmove(dst +new_length, dst + old_length, tot_length - old_length);

memcpy(dst,src,new_length);


bmove_upp


参数:

register uchar *dst          目标字符串的结束地址

register const uchar *src       原始字符串的结束地址

register size_t len          拷贝的字符串长度

功能:

将长度为len的src指向的字符串从末尾开始拷贝到dst为结尾的空间。


字符集支持  


Big5bincp932czecheucjpmsextragb2312gbklatin1mbsimplesjistis620ucaucs2ujisutf8win1250ch

其中定义了一些工具宏、静态数组和处理函数


decimal


其中包含decimal的各种处理函数,要详细了解decimal类型可以仔细看次文件。


dtoa


将浮点数和字符串互相转换的处理函数。

要想将一个字符串转换成一个浮点数,我详细大部分人都能写一个函数进行正确的转换,但要实现将一个字符串正确的转换成一个浮点数,还是很有学问的。感兴趣的可以仔细看看这个文件中的dtoa函数,可以看到此函数还是非常复杂的


int2str


int转换成某个进制的字符串,还提供了一个优化了的将int转换成10进制串的函数。

其中llstrlonglong2str也是类似的功能。


is_prefix


判断一个串是两一个串的前缀。


my_strchr


判断一个字符是否在字符串中出现过。


my_strtoll10


将一个字符串转换为10进制的数。

str2int的功能类似,是将字符串转换成一个整数。


str_alloc


给字符串申请内存空间


strappend


将一个字符串末尾填充成指定的字符,我估计这是为char类型准备的。


strcend


在字符串中找到一个字符出现的位置,如果没有找到,就返回字符串的末尾。


strcont


在一个字符串中查找一个子串是否存在,如果存在就返回其指针,否则返回NULL


strend


找到字符串的结束位置。


strfill


将一个字符串的一段空间用某个字符填充。


strmake


将原始字符串拷贝到目的串中,并返回起结束位置,这应该在字符串连接过程中非常有用。

strnmov和次函数的功能类似。


strmov


将原始字符串拷贝到目的字符串,并返回结束位置。


strxmov


n个字符串合并成一个字符串返回。


strxnmov


安全的字符串合并函数。


xml


Xml的一些操作,这里不再详细说明。

 

可以看到这里提供的很多函数,常见系统的库函数中都有此功能,可能不够高效或者为了避免移植性的问题,从而自己实现了这些函数。


文章转载自数据库高级技术专家,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论