MiniOB 1
MiniOB is one mini database, helping developers to learn how database works.
载入中...
搜索中...
未找到
mysql_communicator.h
1/* Copyright (c) 2021 OceanBase and/or its affiliates. All rights reserved.
2miniob is licensed under Mulan PSL v2.
3You can use this software according to the terms and conditions of the Mulan PSL v2.
4You may obtain a copy of Mulan PSL v2 at:
5 http://license.coscl.org.cn/MulanPSL2
6THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
7EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
8MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
9See the Mulan PSL v2 for more details. */
10
11//
12// Created by Wangyunlai on 2022/11/22.
13//
14
15#pragma once
16
17#include "net/communicator.h"
18
19class SqlResult;
20class BasePacket;
21
31{
32public:
38 virtual RC init(int fd, Session *session, const std::string &addr) override;
39
44 virtual RC read_event(SessionEvent *&event) override;
45
51 virtual RC write_result(SessionEvent *event, bool &need_disconnect) override;
52
53private:
59 RC send_packet(const BasePacket &packet);
60
67 RC write_state(SessionEvent *event, bool &need_disconnect);
68
74 RC send_column_definition(SqlResult *sql_result, bool &need_disconnect);
75
84 RC send_result_rows(SqlResult *sql_result, bool no_column_def, bool &need_disconnect);
85
90 RC handle_version_comment(bool &need_disconnect);
91
92private:
94 bool authed_ = false;
95
98
101 int8_t sequence_id_ = 0;
102};
所有的包都继承自BasePacket
Definition: mysql_communicator.cpp:299
负责与客户端通讯
Definition: communicator.h:42
Session * session() const
关联的会话信息
Definition: communicator.h:69
const char * addr() const
对端地址 如果是unix socket,可能没有意义
Definition: communicator.h:86
struct event & read_event()
libevent使用的数据,参考server.cpp
Definition: communicator.h:77
与客户端通讯
Definition: mysql_communicator.h:31
RC write_state(SessionEvent *event, bool &need_disconnect)
有些情况下不需要给客户端返回一行行的记录结果,而是返回执行是否成功即可,比如create table等
Definition: mysql_communicator.cpp:697
RC send_column_definition(SqlResult *sql_result, bool &need_disconnect)
返回客户端列描述信息
Definition: mysql_communicator.cpp:821
virtual RC write_result(SessionEvent *event, bool &need_disconnect) override
将处理结果返回给客户端
Definition: mysql_communicator.cpp:737
RC handle_version_comment(bool &need_disconnect)
根据实际测试,客户端在连接上来时,会发起一个 version_comment的查询
Definition: mysql_communicator.cpp:601
RC send_result_rows(SqlResult *sql_result, bool no_column_def, bool &need_disconnect)
返回客户端行数据
Definition: mysql_communicator.cpp:941
RC send_packet(const BasePacket &packet)
发送数据包到客户端
Definition: mysql_communicator.cpp:794
uint32_t client_capabilities_flag_
有时需要根据握手包中capabilities字段值的不同,而发送或接收不同的包
Definition: mysql_communicator.h:97
bool authed_
握手阶段(鉴权),需要做一些特殊处理,所以加个字段单独标记
Definition: mysql_communicator.h:94
int8_t sequence_id_
在一次通讯过程中(一个任务的请求与处理),每个包(packet)都有一个sequence id 这个sequence id是递增的
Definition: mysql_communicator.h:101
表示一个SQL请求
Definition: session_event.h:32
表示会话
Definition: session.h:28
SQL执行结果
Definition: sql_result.h:33
virtual RC init(int fd, Session *session, const std::string &addr) override
连接刚开始建立时,进行一些初始化
Definition: mysql_communicator.cpp:574