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

【手写数据库核心揭秘系列】第87讲 逻辑表达式,运算符处理函数集合

开源无限 2025-04-25
246

💻 深耕数据库内核架构设计与开发十余年,曾主导多款高性能分布式数据库内核研发,攻克高并发、低延迟等核心技术难题。现倾力打造《从零手写数据库》系列教程,首次系统性公开数据库内核源码级实现细节!

🚀 从存储引擎、查询优化到分布式事务,手把手拆解核心模块;从语法解析树构建到执行计划生成,逐行代码还原设计精髓
🌟 无论你是数据库开发者、系统架构师,还是对底层技术充满好奇的极客,这里都有你想要的“硬核干货”!点击关注,与行业老兵共同探索数据库技术的星辰大海!

一、概述 


两个布尔值之间的运算,如等于,不等于,与,或和非操作,这里只涉及到布尔数据类型,表达式比较的结果也是布尔类型。

 二、逻辑运算操作集 


布尔类型支持的操作集定义如下。

DataTypeProcs BoolDataTypeProcEntry =
{
    DATATYPEPROC_VERSION,
    DT_BOOL,
    {
,
        boolEqualOperator,
        NULL,
        NULL,
        boolNotEqualOperator,
        boolAndOperator,
        boolOrOperator,
        boolNotOperator,
    }   
};

三、运算处理函数 


下面是或操作的实现,获取到左右操作数的值后进行对应的逻辑运算,借助当前编程语言的逻辑运算操作得到结果。

ValuesData* boolOrOperator(ValuesData* leftvalue, ValuesData* rightvalue)
{
    int first = 0;
    int seconde = 0;
    int result = 0;

    /* bool or nill = nill */
    if(rightvalue == NULL)
        returnNULL;
    
    first = leftvalue->dataVal.iData;
    seconde = rightvalue->dataVal.iData;

    if(first || seconde)
        result = 1;
    return GetSimpleValueData(DT_BOOL, &result);
}

在逻辑操作中,右操作数可能为会,当真值或假值与空值进行运算时,这里处理结果仍为空值,这需要在结果处理时进行单独判断。

四、总结 


新增表达式模块,对应的代码位于exam_49目录的expr.h/expr.c文件当中。


🌟 点赞收藏,分享给身边的技术伙伴,关注我们,持续获取数据库内核开发的硬核干货!一起从源码级实现到分布式架构,解锁数据库技术的每一个核心细节!🚀
【往期精彩推荐】
【手写数据库核心揭秘系列】第86讲 比较运算符的实现,基本数据类型的比较操作算子集合
【手写数据库核心揭秘系列】第85讲 构建数据类型的代数系统,算述运算符的实现
【手写数据库核心揭秘系列】第84讲 表达式的运算,表达式类型与实现框架

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

评论