session.h 2.6 KB
Newer Older
羽飞's avatar
羽飞 已提交
1
/* Copyright (c) 2021 OceanBase and/or its affiliates. All rights reserved.
羽飞's avatar
羽飞 已提交
2 3 4 5 6 7 8 9 10 11 12 13 14
miniob is licensed under Mulan PSL v2.
You can use this software according to the terms and conditions of the Mulan PSL v2.
You may obtain a copy of Mulan PSL v2 at:
         http://license.coscl.org.cn/MulanPSL2
THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
See the Mulan PSL v2 for more details. */

//
// Created by Wangyunlai on 2021/5/12.
//

W
wangyunlai.wyl 已提交
15
#pragma once
羽飞's avatar
羽飞 已提交
16 17 18 19

#include <string>

class Trx;
W
wangyunlai.wyl 已提交
20
class Db;
羽飞's avatar
羽飞 已提交
21
class SessionEvent;
羽飞's avatar
羽飞 已提交
22

羽飞's avatar
羽飞 已提交
23 24 25 26
/**
 * @brief 表示会话
 * @details 当前一个连接一个会话,没有做特殊的会话管理,这也简化了会话处理
 */
羽飞's avatar
羽飞 已提交
27 28
class Session 
{
羽飞's avatar
羽飞 已提交
29
public:
羽飞's avatar
羽飞 已提交
30 31 32 33
  /**
   * @brief 获取默认的会话数据,新生成的会话都基于默认会话设置参数
   * @note 当前并没有会话参数
   */
羽飞's avatar
羽飞 已提交
34 35 36 37 38 39
  static Session &default_session();

public:
  Session() = default;
  ~Session();

40 41
  Session(const Session &other);
  void operator=(Session &) = delete;
羽飞's avatar
羽飞 已提交
42

W
wangyunlai.wyl 已提交
43 44 45
  const char *get_current_db_name() const;
  Db *get_current_db() const;

羽飞's avatar
羽飞 已提交
46 47 48 49 50
  /**
   * @brief 设置当前会话关联的数据库
   * 
   * @param dbname 数据库名字
   */
羽飞's avatar
羽飞 已提交
51 52
  void set_current_db(const std::string &dbname);

羽飞's avatar
羽飞 已提交
53 54 55
  /**
   * @brief 设置当前事务为多语句模式,需要明确的指出提交或回滚
   */
羽飞's avatar
羽飞 已提交
56
  void set_trx_multi_operation_mode(bool multi_operation_mode);
羽飞's avatar
羽飞 已提交
57 58 59 60

  /**
   * @brief 当前事务是否为多语句模式
   */
羽飞's avatar
羽飞 已提交
61 62
  bool is_trx_multi_operation_mode() const;

羽飞's avatar
羽飞 已提交
63 64 65 66
  /**
   * @brief 当前会话关联的事务
   * 
   */
67
  Trx *current_trx();
羽飞's avatar
羽飞 已提交
68

羽飞's avatar
羽飞 已提交
69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85
  /**
   * @brief 设置当前正在处理的请求
   */
  void set_current_request(SessionEvent *request);

  /**
   * @brief 获取当前正在处理的请求
   */
  SessionEvent *current_request() const;

  void set_sql_debug(bool sql_debug) { sql_debug_ = sql_debug; }
  bool sql_debug_on() const { return sql_debug_; }

  /**
   * @brief 将指定会话设置到线程变量中
   * 
   */
86
  static void set_current_session(Session *session);
羽飞's avatar
羽飞 已提交
87 88 89 90 91

  /**
   * @brief 获取当前的会话
   * @details 当前某个请求开始时,会将会话设置到线程变量中,在整个请求处理过程中不会改变
   */
92 93
  static Session *current_session();
  
羽飞's avatar
羽飞 已提交
94
private:
W
wangyunlai.wyl 已提交
95
  Db *db_ = nullptr;
96
  Trx *trx_ = nullptr;
羽飞's avatar
羽飞 已提交
97 98 99
  SessionEvent *current_request_ = nullptr; ///< 当前正在处理的请求
  bool trx_multi_operation_mode_ = false;   ///< 当前事务的模式,是否多语句模式. 单语句模式自动提交
  bool sql_debug_ = false;                  ///< 是否输出SQL调试信息
羽飞's avatar
羽飞 已提交
100
};