💻 深耕数据库内核架构设计与开发十余年,曾主导多款高性能分布式数据库内核研发,攻克高并发、低延迟等核心技术难题。现倾力打造《从零手写数据库》系列教程,首次系统性公开数据库内核源码级实现细节!
一、概述
算术运算主要是数值类型支持,比如整型,浮点类型,其它类型不支持。
二、整型
整型数据类型支持所有的算术运算操作:取负、加法、减法、乘法、除法和取模运算。
DataTypeProcs integerDataTypeProcEntry =
{
DATATYPEPROC_VERSION,
DT_INTEGER,
{
NULL,
int32NegtiveOperator,
int32PlusOperator,
int32MinusOperator,
int32MultiOperator,
int32DivisionOperator,
int32ModOperator,
}
};
其中以加法运算操作函数为例,左右操作数传入之后,根据类型取出它实际的数值,再进行运算,最后再包装为结果数据结构。
ValuesData* int32PlusOperator(ValuesData* leftvalue, ValuesData* rightvalue)
{
int l = leftvalue->dataVal.iData;
int r = rightvalue->dataVal.iData;
ValuesData *res = NULL;
if(rightvalue->dataType != DT_INTEGER)
{
printf("Operation is not support between different types(%d-%d).\n", leftvalue->dataType, rightvalue->dataType);
returnNULL;
}
l = l + r;
res = GetSimpleValueData(leftvalue->dataType, &l);
return res;
}
三、浮点类型
浮点数类型支持取负、加法、减法以及乘除算术运算。
DataTypeProcs FloatDataTypeProcEntry =
{
DATATYPEPROC_VERSION,
DT_FLOAT,
{
NULL,
floatNegtiveOperator,
floatPlusOperator,
floatMinusOperator,
floatMultiOperator,
floatDivisionOperator,
}
};
这里的算术运算,更多依赖于基础类型的运算,并没有对异常情况过多的处理。这里以浮点数据的减法运算为例,得到两个操作数后直接进行减法运算,再将结果包装为含有类型信息的结构之后返回。
ValuesData* floatMinusOperator(ValuesData* leftvalue, ValuesData* rightvalue)
{
float first = leftvalue->dataVal.fData;
float seconde = rightvalue->dataVal.fData;
ValuesData *res = NULL;
first = first - seconde;
res = GetSimpleValueData(leftvalue->dataType, &first);
return res;
}
四、总结
新增表达式模块,对应的代码位于exam_49目录的expr.h/expr.c文件当中。
🌟 点赞收藏,分享给身边的技术伙伴,关注我们,持续获取数据库内核开发的硬核干货!一起从源码级实现到分布式架构,解锁数据库技术的每一个核心细节!🚀文章转载自开源无限,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




