diff --git a/src/observer/catalog/catalog.cpp b/src/observer/catalog/catalog.cpp index 367786a62..e47709921 100644 --- a/src/observer/catalog/catalog.cpp +++ b/src/observer/catalog/catalog.cpp @@ -10,6 +10,8 @@ See the Mulan PSL v2 for more details. */ #include "catalog/catalog.h" +namespace oceanbase { + const TableStats &Catalog::get_table_stats(int table_id) { lock_guard lock(mutex_); @@ -20,4 +22,5 @@ void Catalog::update_table_stats(int table_id, const TableStats &table_stats) { lock_guard lock(mutex_); table_stats_[table_id] = table_stats; -} \ No newline at end of file +} +} // namespace oceanbase diff --git a/src/observer/catalog/catalog.h b/src/observer/catalog/catalog.h index 73d47d778..4d488700c 100644 --- a/src/observer/catalog/catalog.h +++ b/src/observer/catalog/catalog.h @@ -13,6 +13,8 @@ See the Mulan PSL v2 for more details. */ #include "common/lang/mutex.h" #include "catalog/table_stats.h" +namespace oceanbase { + /** * @class Catalog * @brief Store metadata, such as table statistics. @@ -71,4 +73,5 @@ class Catalog * This map is currently not persisted and its persistence is planned via a system table. */ unordered_map table_stats_; ///< Table statistics storage. -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/catalog/table_stats.h b/src/observer/catalog/table_stats.h index 475f47ea5..bf4b01bf6 100644 --- a/src/observer/catalog/table_stats.h +++ b/src/observer/catalog/table_stats.h @@ -10,6 +10,8 @@ See the Mulan PSL v2 for more details. */ #pragma once +namespace oceanbase { + /** * @class TableStats * @brief Represents statistics related to a table. @@ -36,4 +38,5 @@ class TableStats ~TableStats() = default; int row_nums = 0; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/common/global_context.cpp b/src/observer/common/global_context.cpp index da7120188..3747442c4 100644 --- a/src/observer/common/global_context.cpp +++ b/src/observer/common/global_context.cpp @@ -14,6 +14,9 @@ See the Mulan PSL v2 for more details. */ #include "common/global_context.h" +namespace oceanbase { + static GlobalContext global_context; GlobalContext &GlobalContext::instance() { return global_context; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/common/global_context.h b/src/observer/common/global_context.h index acf5c3adf..e1be45471 100644 --- a/src/observer/common/global_context.h +++ b/src/observer/common/global_context.h @@ -14,6 +14,8 @@ See the Mulan PSL v2 for more details. */ #pragma once +namespace oceanbase { + class BufferPoolManager; class DefaultHandler; class TrxKit; @@ -31,4 +33,5 @@ struct GlobalContext static GlobalContext &instance(); }; -#define GCTX GlobalContext::instance() \ No newline at end of file +#define GCTX GlobalContext::instance() +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/common/ini_setting.h b/src/observer/common/ini_setting.h index 74a35de3d..4ace65cb3 100644 --- a/src/observer/common/ini_setting.h +++ b/src/observer/common/ini_setting.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ //! this document is used for ini setting +namespace oceanbase { + #define CLIENT_ADDRESS "CLIENT_ADDRESS" #define MAX_CONNECTION_NUM "MAX_CONNECTION_NUM" #define MAX_CONNECTION_NUM_DEFAULT 8192 @@ -25,3 +27,4 @@ See the Mulan PSL v2 for more details. */ #define SOCKET_BUFFER_SIZE 8192 #define SESSION_STAGE_NAME "SessionStage" +} // namespace oceanbase diff --git a/src/observer/common/init.cpp b/src/observer/common/init.cpp index a48b73499..52b972b39 100644 --- a/src/observer/common/init.cpp +++ b/src/observer/common/init.cpp @@ -32,6 +32,8 @@ See the Mulan PSL v2 for more details. */ using namespace common; +namespace oceanbase { + bool *&_get_init() { static bool util_init = false; @@ -129,10 +131,7 @@ void cleanup_log() } } -int prepare_init_seda() -{ - return 0; -} +int prepare_init_seda() { return 0; } int init_global_objects(ProcessParam *process_param, Ini &properties) { @@ -140,10 +139,10 @@ int init_global_objects(ProcessParam *process_param, Ini &properties) int ret = 0; - RC rc = GCTX.handler_->init("miniob", - process_param->trx_kit_name().c_str(), - process_param->durability_mode().c_str(), - process_param->storage_engine().c_str()); + RC rc = GCTX.handler_->init("miniob", + process_param->trx_kit_name().c_str(), + process_param->durability_mode().c_str(), + process_param->storage_engine().c_str()); if (OB_FAIL(rc)) { LOG_ERROR("failed to init handler. rc=%s", strrc(rc)); return -1; @@ -236,3 +235,4 @@ void cleanup_util() } void cleanup() { cleanup_util(); } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/common/init.h b/src/observer/common/init.h index 466415dbd..9bb82cff5 100644 --- a/src/observer/common/init.h +++ b/src/observer/common/init.h @@ -17,5 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "common/conf/ini.h" #include "common/os/process_param.h" +namespace oceanbase { + int init(common::ProcessParam *processParam); void cleanup(); +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/common/type/attr_type.cpp b/src/observer/common/type/attr_type.cpp index e8af0084a..75aa910eb 100644 --- a/src/observer/common/type/attr_type.cpp +++ b/src/observer/common/type/attr_type.cpp @@ -8,10 +8,11 @@ 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. */ - #include "common/lang/string.h" #include "common/type/attr_type.h" +namespace oceanbase { + const char *ATTR_TYPE_NAME[] = {"undefined", "chars", "ints", "floats", "vectors", "booleans"}; const char *attr_type_to_string(AttrType type) @@ -32,12 +33,7 @@ AttrType attr_type_from_string(const char *s) return AttrType::UNDEFINED; } -bool is_numerical_type(AttrType type) -{ - return (type == AttrType::INTS || type == AttrType::FLOATS); -} +bool is_numerical_type(AttrType type) { return (type == AttrType::INTS || type == AttrType::FLOATS); } -bool is_string_type(AttrType type) -{ - return (type == AttrType::CHARS); -} \ No newline at end of file +bool is_string_type(AttrType type) { return (type == AttrType::CHARS); } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/common/type/attr_type.h b/src/observer/common/type/attr_type.h index d1c07e3a2..8a73a201a 100644 --- a/src/observer/common/type/attr_type.h +++ b/src/observer/common/type/attr_type.h @@ -10,6 +10,8 @@ See the Mulan PSL v2 for more details. */ #pragma once +namespace oceanbase { + /** * @brief 属性的类型 * @details AttrType 枚举列出了属性的各种数据类型。 @@ -29,3 +31,4 @@ const char *attr_type_to_string(AttrType type); AttrType attr_type_from_string(const char *s); bool is_numerical_type(AttrType type); bool is_string_type(AttrType type); +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/common/type/char_type.cpp b/src/observer/common/type/char_type.cpp index 6c93114a9..e98e77110 100644 --- a/src/observer/common/type/char_type.cpp +++ b/src/observer/common/type/char_type.cpp @@ -13,6 +13,8 @@ See the Mulan PSL v2 for more details. */ #include "common/type/char_type.h" #include "common/value.h" +namespace oceanbase { + int CharType::compare(const Value &left, const Value &right) const { ASSERT(left.attr_type() == AttrType::CHARS && right.attr_type() == AttrType::CHARS, "invalid type"); @@ -48,4 +50,5 @@ RC CharType::to_string(const Value &val, string &result) const ss << val.value_.pointer_value_; result = ss.str(); return RC::SUCCESS; -} \ No newline at end of file +} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/common/type/char_type.h b/src/observer/common/type/char_type.h index 74dab5092..9c6968f92 100644 --- a/src/observer/common/type/char_type.h +++ b/src/observer/common/type/char_type.h @@ -13,6 +13,8 @@ See the Mulan PSL v2 for more details. */ #include "common/sys/rc.h" #include "common/type/data_type.h" +namespace oceanbase { + /** * @brief 固定长度的字符串类型 * @ingroup DataType @@ -34,3 +36,4 @@ class CharType : public DataType RC to_string(const Value &val, string &result) const override; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/common/type/data_type.cpp b/src/observer/common/type/data_type.cpp index 6df3fa6ac..71fda2765 100644 --- a/src/observer/common/type/data_type.cpp +++ b/src/observer/common/type/data_type.cpp @@ -14,6 +14,8 @@ See the Mulan PSL v2 for more details. */ #include "common/type/data_type.h" #include "common/type/vector_type.h" +namespace oceanbase { + // Todo: 实现新数据类型 // your code here @@ -24,4 +26,5 @@ array, static_cast(AttrType::MAXTYPE)> DataType::type_ make_unique(), make_unique(), make_unique(AttrType::BOOLEANS), -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/common/type/data_type.h b/src/observer/common/type/data_type.h index 54f0f3dc0..cc7caaeca 100644 --- a/src/observer/common/type/data_type.h +++ b/src/observer/common/type/data_type.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "common/sys/rc.h" #include "common/type/attr_type.h" +namespace oceanbase { + class Value; class Column; @@ -104,3 +106,4 @@ class DataType static array, static_cast(AttrType::MAXTYPE)> type_instances_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/common/type/float_type.cpp b/src/observer/common/type/float_type.cpp index 207f705a7..d35f116b0 100644 --- a/src/observer/common/type/float_type.cpp +++ b/src/observer/common/type/float_type.cpp @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "common/value.h" #include "storage/common/column.h" +namespace oceanbase { + int FloatType::compare(const Value &left, const Value &right) const { ASSERT(left.attr_type() == AttrType::FLOATS, "left type is not float"); @@ -30,8 +32,7 @@ int FloatType::compare(const Column &left, const Column &right, int left_idx, in { ASSERT(left.attr_type() == AttrType::FLOATS, "left type is not float"); ASSERT(right.attr_type() == AttrType::FLOATS, "right type is not float"); - return common::compare_float((void *)&((float*)left.data())[left_idx], - (void *)&((float*)right.data())[right_idx]); + return common::compare_float((void *)&((float *)left.data())[left_idx], (void *)&((float *)right.data())[right_idx]); } RC FloatType::add(const Value &left, const Value &right, Value &result) const @@ -70,7 +71,7 @@ RC FloatType::negative(const Value &val, Value &result) const RC FloatType::set_value_from_str(Value &val, const string &data) const { - RC rc = RC::SUCCESS; + RC rc = RC::SUCCESS; stringstream deserialize_stream; deserialize_stream.clear(); deserialize_stream.str(data); @@ -92,3 +93,4 @@ RC FloatType::to_string(const Value &val, string &result) const result = ss.str(); return RC::SUCCESS; } +} // namespace oceanbase diff --git a/src/observer/common/type/float_type.h b/src/observer/common/type/float_type.h index 9bf0be848..2c63133e3 100644 --- a/src/observer/common/type/float_type.h +++ b/src/observer/common/type/float_type.h @@ -12,6 +12,8 @@ See the Mulan PSL v2 for more details. */ #include "common/type/data_type.h" +namespace oceanbase { + /** * @brief 浮点型数据类型 * @ingroup DataType @@ -34,4 +36,5 @@ class FloatType : public DataType RC set_value_from_str(Value &val, const string &data) const override; RC to_string(const Value &val, string &result) const override; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/common/type/integer_type.cpp b/src/observer/common/type/integer_type.cpp index 48f20f7df..9fa6cf0f4 100644 --- a/src/observer/common/type/integer_type.cpp +++ b/src/observer/common/type/integer_type.cpp @@ -15,6 +15,8 @@ See the Mulan PSL v2 for more details. */ #include "common/value.h" #include "storage/common/column.h" +namespace oceanbase { + int IntegerType::compare(const Value &left, const Value &right) const { ASSERT(left.attr_type() == AttrType::INTS, "left type is not integer"); @@ -33,21 +35,18 @@ int IntegerType::compare(const Column &left, const Column &right, int left_idx, { ASSERT(left.attr_type() == AttrType::INTS, "left type is not integer"); ASSERT(right.attr_type() == AttrType::INTS, "right type is not integer"); - return common::compare_int((void *)&((int*)left.data())[left_idx], - (void *)&((int*)right.data())[right_idx]); + return common::compare_int((void *)&((int *)left.data())[left_idx], (void *)&((int *)right.data())[right_idx]); } RC IntegerType::cast_to(const Value &val, AttrType type, Value &result) const { switch (type) { - case AttrType::FLOATS: { - float float_value = val.get_int(); - result.set_float(float_value); - return RC::SUCCESS; - } - default: - LOG_WARN("unsupported type %d", type); - return RC::SCHEMA_FIELD_TYPE_MISMATCH; + case AttrType::FLOATS: { + float float_value = val.get_int(); + result.set_float(float_value); + return RC::SUCCESS; + } + default: LOG_WARN("unsupported type %d", type); return RC::SCHEMA_FIELD_TYPE_MISMATCH; } } @@ -77,7 +76,7 @@ RC IntegerType::negative(const Value &val, Value &result) const RC IntegerType::set_value_from_str(Value &val, const string &data) const { - RC rc = RC::SUCCESS; + RC rc = RC::SUCCESS; stringstream deserialize_stream; deserialize_stream.clear(); // 清理stream的状态,防止多次解析出现异常 deserialize_stream.str(data); @@ -97,4 +96,5 @@ RC IntegerType::to_string(const Value &val, string &result) const ss << val.value_.int_value_; result = ss.str(); return RC::SUCCESS; -} \ No newline at end of file +} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/common/type/integer_type.h b/src/observer/common/type/integer_type.h index 9b6472e34..6a7528f60 100644 --- a/src/observer/common/type/integer_type.h +++ b/src/observer/common/type/integer_type.h @@ -12,6 +12,8 @@ See the Mulan PSL v2 for more details. */ #include "common/type/data_type.h" +namespace oceanbase { + /** * @brief 整型类型 * @ingroup DataType @@ -45,4 +47,5 @@ class IntegerType : public DataType RC set_value_from_str(Value &val, const string &data) const override; RC to_string(const Value &val, string &result) const override; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/common/type/string_t.h b/src/observer/common/type/string_t.h index bf5cf78e4..3d5f3004c 100644 --- a/src/observer/common/type/string_t.h +++ b/src/observer/common/type/string_t.h @@ -14,6 +14,9 @@ See the Mulan PSL v2 for more details. */ #include using namespace std; + +namespace oceanbase { + struct string_t { public: @@ -101,4 +104,5 @@ struct string_t } pointer; Inlined inlined; } value; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/common/type/vector_type.h b/src/observer/common/type/vector_type.h index 9e9f81509..ac1304d29 100644 --- a/src/observer/common/type/vector_type.h +++ b/src/observer/common/type/vector_type.h @@ -12,6 +12,8 @@ See the Mulan PSL v2 for more details. */ #include "common/type/data_type.h" +namespace oceanbase { + /** * @brief 向量类型 * @ingroup DataType @@ -29,4 +31,5 @@ class VectorType : public DataType RC multiply(const Value &left, const Value &right, Value &result) const override { return RC::UNIMPLEMENTED; } RC to_string(const Value &val, string &result) const override { return RC::UNIMPLEMENTED; } -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/common/types.h b/src/observer/common/types.h index 9c40b7976..d9fd945e9 100644 --- a/src/observer/common/types.h +++ b/src/observer/common/types.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include #include +namespace oceanbase { + /// 磁盘文件,包括存放数据的文件和索引(B+-Tree)文件,都按照页来组织 /// 每一页都有一个编号,称为PageNum using PageNum = int32_t; @@ -75,3 +77,4 @@ enum class ExecutionMode /// page的CRC校验和 using CheckSum = unsigned int; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/common/value.cpp b/src/observer/common/value.cpp index 424c67350..dd2621e23 100644 --- a/src/observer/common/value.cpp +++ b/src/observer/common/value.cpp @@ -20,6 +20,8 @@ See the Mulan PSL v2 for more details. */ #include "common/lang/string.h" #include "common/log/log.h" +namespace oceanbase { + Value::Value(int val) { set_int(val); } Value::Value(float val) { set_float(val); } @@ -28,8 +30,7 @@ Value::Value(bool val) { set_boolean(val); } Value::Value(const char *s, int len /*= 0*/) { set_string(s, len); } -Value::Value(const string_t& s) { set_string(s.data(), s.size()); } - +Value::Value(const string_t &s) { set_string(s.data(), s.size()); } Value::Value(const Value &other) { @@ -183,12 +184,11 @@ void Value::set_empty_string(int len) reset(); attr_type_ = AttrType::CHARS; - own_data_ = true; + own_data_ = true; value_.pointer_value_ = new char[len + 1]; length_ = len; memset(value_.pointer_value_, 0, len); value_.pointer_value_[len] = '\0'; - } void Value::set_value(const Value &value) @@ -245,7 +245,10 @@ string Value::to_string() const return res; } -int Value::compare(const Value &other) const { return DataType::type_instance(this->attr_type_)->compare(*this, other); } +int Value::compare(const Value &other) const +{ + return DataType::type_instance(this->attr_type_)->compare(*this, other); +} int Value::get_int() const { @@ -349,3 +352,4 @@ bool Value::get_boolean() const } return false; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/common/value.h b/src/observer/common/value.h index ca31eedc4..9aeb45a0f 100644 --- a/src/observer/common/value.h +++ b/src/observer/common/value.h @@ -20,6 +20,8 @@ See the Mulan PSL v2 for more details. */ #include "common/type/data_type.h" #include "common/type/string_t.h" +namespace oceanbase { + /** * @brief 属性的值 * @ingroup DataType @@ -135,3 +137,4 @@ class Value final /// 是否申请并占有内存, 目前对于 CHARS 类型 own_data_ 为true, 其余类型 own_data_ 为false bool own_data_ = false; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/event/session_event.cpp b/src/observer/event/session_event.cpp index 41ca80d4f..7874070b9 100644 --- a/src/observer/event/session_event.cpp +++ b/src/observer/event/session_event.cpp @@ -15,6 +15,8 @@ See the Mulan PSL v2 for more details. */ #include "session_event.h" #include "net/communicator.h" +namespace oceanbase { + SessionEvent::SessionEvent(Communicator *comm) : communicator_(comm), sql_result_(communicator_->session()) {} SessionEvent::~SessionEvent() {} @@ -22,3 +24,4 @@ SessionEvent::~SessionEvent() {} Communicator *SessionEvent::get_communicator() const { return communicator_; } Session *SessionEvent::session() const { return communicator_->session(); } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/event/session_event.h b/src/observer/event/session_event.h index 7a279ca36..e76744406 100644 --- a/src/observer/event/session_event.h +++ b/src/observer/event/session_event.h @@ -18,6 +18,8 @@ See the Mulan PSL v2 for more details. */ #include "event/sql_debug.h" #include "sql/executor/sql_result.h" +namespace oceanbase { + class Session; class Communicator; @@ -46,3 +48,4 @@ class SessionEvent SqlDebug sql_debug_; ///< SQL调试信息 string query_; ///< SQL语句 }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/event/sql_debug.cpp b/src/observer/event/sql_debug.cpp index ab68dc17e..910499bdc 100644 --- a/src/observer/event/sql_debug.cpp +++ b/src/observer/event/sql_debug.cpp @@ -18,6 +18,7 @@ See the Mulan PSL v2 for more details. */ #include "event/sql_debug.h" #include "session/session.h" +namespace oceanbase { void SqlDebug::add_debug_info(const string &debug_info) { debug_infos_.push_back(debug_info); } @@ -52,3 +53,4 @@ void sql_debug(const char *fmt, ...) delete[] str; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/event/sql_debug.h b/src/observer/event/sql_debug.h index 66d182466..fc09487bb 100644 --- a/src/observer/event/sql_debug.h +++ b/src/observer/event/sql_debug.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "common/lang/string.h" #include "common/lang/list.h" +namespace oceanbase { + /** * @brief SQL调试信息 * @details @@ -46,3 +48,4 @@ class SqlDebug * 在普通文本场景下,调试信息会直接输出到客户端,并增加 '#' 作为前缀。 */ void sql_debug(const char *fmt, ...); +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/event/sql_event.cpp b/src/observer/event/sql_event.cpp index 6df5fc255..6a310c03f 100644 --- a/src/observer/event/sql_event.cpp +++ b/src/observer/event/sql_event.cpp @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "event/session_event.h" #include "sql/stmt/stmt.h" +namespace oceanbase { + SQLStageEvent::SQLStageEvent(SessionEvent *event, const string &sql) : session_event_(event), sql_(sql) {} SQLStageEvent::~SQLStageEvent() noexcept @@ -30,3 +32,4 @@ SQLStageEvent::~SQLStageEvent() noexcept stmt_ = nullptr; } } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/event/sql_event.h b/src/observer/event/sql_event.h index cd7db0659..99c85dc57 100644 --- a/src/observer/event/sql_event.h +++ b/src/observer/event/sql_event.h @@ -18,6 +18,8 @@ See the Mulan PSL v2 for more details. */ #include "common/lang/memory.h" #include "sql/operator/physical_operator.h" +namespace oceanbase { + class SessionEvent; class Stmt; class ParsedSqlNode; @@ -51,3 +53,4 @@ class SQLStageEvent Stmt *stmt_ = nullptr; ///< Resolver之后生成的数据结构 unique_ptr operator_; ///< 生成的执行计划,也可能没有 }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/event/storage_event.h b/src/observer/event/storage_event.h index 567aca7e1..1570dac22 100644 --- a/src/observer/event/storage_event.h +++ b/src/observer/event/storage_event.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "common/seda/stage_event.h" +namespace oceanbase { + class SQLStageEvent; class StorageEvent : public common::StageEvent @@ -30,3 +32,4 @@ class StorageEvent : public common::StageEvent private: SQLStageEvent *sql_event_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/main.cpp b/src/observer/main.cpp index 09c9d0029..f699b737e 100644 --- a/src/observer/main.cpp +++ b/src/observer/main.cpp @@ -33,6 +33,8 @@ using namespace common; #define NET "NET" +namespace oceanbase { + static Server *g_server = nullptr; void usage() @@ -207,3 +209,5 @@ int main(int argc, char **argv) delete g_server; return 0; } + +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/net/buffered_writer.cpp b/src/observer/net/buffered_writer.cpp index 58d189372..e2678cbd0 100644 --- a/src/observer/net/buffered_writer.cpp +++ b/src/observer/net/buffered_writer.cpp @@ -21,6 +21,8 @@ See the Mulan PSL v2 for more details. */ #include "net/buffered_writer.h" +namespace oceanbase { + BufferedWriter::BufferedWriter(int fd) : fd_(fd), buffer_() {} BufferedWriter::BufferedWriter(int fd, int32_t size) : fd_(fd), buffer_(size) {} @@ -129,3 +131,4 @@ RC BufferedWriter::flush_internal(int32_t size) return rc; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/net/buffered_writer.h b/src/observer/net/buffered_writer.h index 3f7d8fc43..04c5a8c3e 100644 --- a/src/observer/net/buffered_writer.h +++ b/src/observer/net/buffered_writer.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "net/ring_buffer.h" +namespace oceanbase { + /** * @brief 支持以缓存模式写入数据到文件/socket * @details 缓存使用ring buffer实现,当缓存满时会自动刷新缓存。 @@ -69,4 +71,5 @@ class BufferedWriter private: int fd_ = -1; RingBuffer buffer_; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/net/cli_communicator.cpp b/src/observer/net/cli_communicator.cpp index 0e949d900..001bf85c2 100644 --- a/src/observer/net/cli_communicator.cpp +++ b/src/observer/net/cli_communicator.cpp @@ -27,6 +27,8 @@ using common::MiniobLineReader; const std::string LINE_HISTORY_FILE = "./.miniob.history"; +namespace oceanbase { + RC CliCommunicator::init(int fd, unique_ptr session, const string &addr) { RC rc = PlainCommunicator::init(fd, std::move(session), addr); @@ -85,3 +87,4 @@ RC CliCommunicator::write_result(SessionEvent *event, bool &need_disconnect) } CliCommunicator::~CliCommunicator() { LOG_INFO("Command history saved to %s", LINE_HISTORY_FILE.c_str()); } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/net/cli_communicator.h b/src/observer/net/cli_communicator.h index f255ffc6b..1aa518d47 100644 --- a/src/observer/net/cli_communicator.h +++ b/src/observer/net/cli_communicator.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "net/plain_communicator.h" +namespace oceanbase { + /** * @brief 用于命令行模式的通讯器 * @ingroup Communicator @@ -39,3 +41,4 @@ class CliCommunicator : public PlainCommunicator int write_fd_ = -1; ///< 与使用远程通讯模式不同,如果读数据使用标准输入,那么输出应该是标准输出 }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/net/communicator.cpp b/src/observer/net/communicator.cpp index 7f80d805e..1c9ce1545 100644 --- a/src/observer/net/communicator.cpp +++ b/src/observer/net/communicator.cpp @@ -21,6 +21,8 @@ See the Mulan PSL v2 for more details. */ #include "common/lang/mutex.h" +namespace oceanbase { + RC Communicator::init(int fd, unique_ptr session, const string &addr) { fd_ = fd; @@ -62,3 +64,4 @@ Communicator *CommunicatorFactory::create(CommunicateProtocol protocol) } } } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/net/communicator.h b/src/observer/net/communicator.h index 0d47300cb..ad631cfb8 100644 --- a/src/observer/net/communicator.h +++ b/src/observer/net/communicator.h @@ -23,6 +23,8 @@ class SessionEvent; class Session; class BufferedWriter; +namespace oceanbase { + /** * @defgroup Communicator * @brief 负责处理与客户端的通讯 @@ -106,3 +108,4 @@ class CommunicatorFactory public: Communicator *create(CommunicateProtocol protocol); }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/net/java_thread_pool_thread_handler.cpp b/src/observer/net/java_thread_pool_thread_handler.cpp index 476fa916e..9d801233e 100644 --- a/src/observer/net/java_thread_pool_thread_handler.cpp +++ b/src/observer/net/java_thread_pool_thread_handler.cpp @@ -21,17 +21,19 @@ See the Mulan PSL v2 for more details. */ #include "common/thread/runnable.h" #include "common/queue/simple_queue.h" +namespace oceanbase { + using namespace common; /** * @brief libevent 消息回调函数的参数 - * + * */ struct EventCallbackAg { - JavaThreadPoolThreadHandler *host = nullptr; - Communicator *communicator = nullptr; - struct event *ev = nullptr; + JavaThreadPoolThreadHandler *host = nullptr; + Communicator *communicator = nullptr; + struct event *ev = nullptr; }; JavaThreadPoolThreadHandler::~JavaThreadPoolThreadHandler() @@ -59,10 +61,10 @@ RC JavaThreadPoolThreadHandler::start() // 创建线程池 // 这里写死了线程池的大小,实际上可以从配置文件中读取 int ret = executor_.init("SQL", // name - 2, // core size - 8, // max size - 60*1000 // keep alive time - ); + 2, // core size + 8, // max size + 60 * 1000 // keep alive time + ); if (0 != ret) { LOG_ERROR("failed to init thread pool executor"); return RC::INTERNAL; @@ -71,7 +73,7 @@ RC JavaThreadPoolThreadHandler::start() // libevent 的监测消息循环主体,要放在一个线程中执行 // event_loop_thread 是运行libevent 消息监测循环的函数,会长期运行,并且会放到线程池中占据一个线程 auto event_worker = std::bind(&JavaThreadPoolThreadHandler::event_loop_thread, this); - ret = executor_.execute(event_worker); + ret = executor_.execute(event_worker); if (0 != ret) { LOG_ERROR("failed to execute event worker"); return RC::INTERNAL; @@ -94,7 +96,7 @@ static void event_callback(evutil_socket_t fd, short event, void *arg) { if (event & (EV_READ | EV_CLOSED)) { LOG_TRACE("got event. fd=%d, event=%d", fd, event); - EventCallbackAg *ag = (EventCallbackAg *)arg; + EventCallbackAg *ag = (EventCallbackAg *)arg; JavaThreadPoolThreadHandler *handler = ag->host; handler->handle_event(ag); } else { @@ -113,7 +115,7 @@ void JavaThreadPoolThreadHandler::handle_event(EventCallbackAg *ag) // sql_handler 是一个回调函数 auto sql_handler = [this, ag]() { - RC rc = sql_task_handler_.handle_event(ag->communicator); // 这里会有接收消息、处理请求然后返回结果一条龙服务 + RC rc = sql_task_handler_.handle_event(ag->communicator); // 这里会有接收消息、处理请求然后返回结果一条龙服务 if (RC::SUCCESS != rc) { LOG_WARN("failed to handle sql task. rc=%s", strrc(rc)); this->close_connection(ag->communicator); @@ -128,7 +130,7 @@ void JavaThreadPoolThreadHandler::handle_event(EventCallbackAg *ag) // LOG_TRACE("add event. fd=%d, communicator=%p", event_get_fd(ag->ev), this); } }; - + executor_.execute(sql_handler); } @@ -148,9 +150,9 @@ RC JavaThreadPoolThreadHandler::new_connection(Communicator *communicator) int fd = communicator->fd(); LOG_INFO("new connection. fd=%d", fd); EventCallbackAg *ag = new EventCallbackAg; - ag->host = this; - ag->communicator = communicator; - ag->ev = nullptr; + ag->host = this; + ag->communicator = communicator; + ag->ev = nullptr; /// 创建一个libevent事件对象。其中EV_READ表示可读事件,就是客户端发消息时会触发事件。 /// EV_ET 表示边缘触发,有消息时只会触发一次,不会重复触发。这个标识在Linux平台上是支持的,但是有些平台不支持。 /// 使用EV_ET边缘触发时需要注意一个问题,就是每次一定要把客户端发来的消息都读取完,直到read返回EAGAIN为止。 @@ -185,7 +187,7 @@ RC JavaThreadPoolThreadHandler::close_connection(Communicator *communicator) { lock_guard guard(lock_); - auto iter = event_map_.find(communicator); + auto iter = event_map_.find(communicator); if (iter == event_map_.end()) { LOG_ERROR("cannot find event for communicator %p", communicator); return RC::INTERNAL; @@ -196,8 +198,8 @@ RC JavaThreadPoolThreadHandler::close_connection(Communicator *communicator) } if (ag->ev) { - event_del(ag->ev); // 把当前事件从event_base中删除 - event_free(ag->ev); // 释放event对象 + event_del(ag->ev); // 把当前事件从event_base中删除 + event_free(ag->ev); // 释放event对象 ag->ev = nullptr; } delete ag; @@ -245,3 +247,4 @@ RC JavaThreadPoolThreadHandler::await_stop() LOG_INFO("end to await event base stopped"); return RC::SUCCESS; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/net/java_thread_pool_thread_handler.h b/src/observer/net/java_thread_pool_thread_handler.h index 98f68dbb9..ebff4c0ce 100644 --- a/src/observer/net/java_thread_pool_thread_handler.h +++ b/src/observer/net/java_thread_pool_thread_handler.h @@ -19,6 +19,8 @@ See the Mulan PSL v2 for more details. */ #include "common/thread/thread_pool_executor.h" #include "common/lang/mutex.h" +namespace oceanbase { + struct EventCallbackAg; /** @@ -67,4 +69,5 @@ class JavaThreadPoolThreadHandler : public ThreadHandler map event_map_; /// 每个连接与它关联的数据 SqlTaskHandler sql_task_handler_; /// SQL请求处理器 -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/net/mysql_communicator.cpp b/src/observer/net/mysql_communicator.cpp index d543f3a52..bad1d3c83 100644 --- a/src/observer/net/mysql_communicator.cpp +++ b/src/observer/net/mysql_communicator.cpp @@ -22,6 +22,8 @@ See the Mulan PSL v2 for more details. */ #include "net/mysql_communicator.h" #include "sql/operator/string_list_physical_operator.h" +namespace oceanbase { + /** * @brief MySQL协议相关实现 * @defgroup MySQLProtocol @@ -348,7 +350,7 @@ struct HandshakeV10 : public BasePacket char *buf = net_packet.data(); int pos = 0; - pos += 3; // skip packet length + pos += 3; // skip packet length pos += store_int1(buf + pos, packet_header.sequence_id); pos += store_int1(buf + pos, protocol); @@ -379,12 +381,12 @@ struct HandshakeV10 : public BasePacket */ struct OkPacket : public BasePacket { - int8_t header = 0; // 0x00 for ok and 0xFE for EOF - int32_t affected_rows = 0; - int32_t last_insert_id = 0; - int16_t status_flags = 0x22; - int16_t warnings = 0; - string info; // human readable status information + int8_t header = 0; // 0x00 for ok and 0xFE for EOF + int32_t affected_rows = 0; + int32_t last_insert_id = 0; + int16_t status_flags = 0x22; + int16_t warnings = 0; + string info; // human readable status information OkPacket(int8_t sequence = 0) : BasePacket(sequence) {} virtual ~OkPacket() = default; @@ -398,7 +400,7 @@ struct OkPacket : public BasePacket char *buf = net_packet.data(); int pos = 0; - pos += 3; // skip packet length + pos += 3; // skip packet length pos += store_int1(buf + pos, packet_header.sequence_id); pos += store_int1(buf + pos, header); pos += store_lenenc_int(buf + pos, affected_rows); @@ -471,11 +473,11 @@ struct EofPacket : public BasePacket */ struct ErrPacket : public BasePacket { - int8_t header = 0xFF; - int16_t error_code = 0; - char sql_state_marker[1] = {'#'}; - string sql_state{"HY000"}; - string error_message; + int8_t header = 0xFF; + int16_t error_code = 0; + char sql_state_marker[1] = {'#'}; + string sql_state{"HY000"}; + string error_message; ErrPacket(int8_t sequence = 0) : BasePacket(sequence) {} virtual ~ErrPacket() = default; @@ -519,7 +521,7 @@ struct QueryPacket { PacketHeader packet_header; int8_t command; // 0x03: COM_QUERY - string query; // the text of the SQL query to execute + string query; // the text of the SQL query to execute }; /** @@ -695,8 +697,8 @@ RC MysqlCommunicator::write_state(SessionEvent *event, bool &need_disconnect) { SqlResult *sql_result = event->sql_result(); - const int buf_size = 2048; - char *buf = new char[buf_size]; + const int buf_size = 2048; + char *buf = new char[buf_size]; const string &state_string = sql_result->state_string(); if (state_string.empty()) { const char *result = strrc(sql_result->return_code()); @@ -937,16 +939,16 @@ RC MysqlCommunicator::send_column_definition(SqlResult *sql_result, bool &need_d * @param no_column_def 为了特殊处理没有返回值的语句,比如insert/delete,需要做特殊处理。 * 这种语句只需要返回一个ok packet即可 */ -RC MysqlCommunicator::send_result_rows(SessionEvent *event, SqlResult *sql_result, bool no_column_def, bool &need_disconnect) +RC MysqlCommunicator::send_result_rows( + SessionEvent *event, SqlResult *sql_result, bool no_column_def, bool &need_disconnect) { RC rc = RC::SUCCESS; vector packet; packet.resize(4 * 1024 * 1024); // TODO warning: length cannot be fix - int affected_rows = 0; - if (event->session()->get_execution_mode() == ExecutionMode::CHUNK_ITERATOR - && event->session()->used_chunk_mode()) { + int affected_rows = 0; + if (event->session()->get_execution_mode() == ExecutionMode::CHUNK_ITERATOR && event->session()->used_chunk_mode()) { rc = write_chunk_result(sql_result, packet, affected_rows, need_disconnect); } else { rc = write_tuple_result(sql_result, packet, affected_rows, need_disconnect); @@ -971,10 +973,11 @@ RC MysqlCommunicator::send_result_rows(SessionEvent *event, SqlResult *sql_resul return rc; } -RC MysqlCommunicator::write_tuple_result(SqlResult *sql_result, vector &packet, int &affected_rows, bool &need_disconnect) +RC MysqlCommunicator::write_tuple_result( + SqlResult *sql_result, vector &packet, int &affected_rows, bool &need_disconnect) { - Tuple *tuple = nullptr; - RC rc = RC::SUCCESS; + Tuple *tuple = nullptr; + RC rc = RC::SUCCESS; while (RC::SUCCESS == (rc = sql_result->next_tuple(tuple))) { assert(tuple != nullptr); @@ -1016,10 +1019,11 @@ RC MysqlCommunicator::write_tuple_result(SqlResult *sql_result, vector &pa } return rc; } -RC MysqlCommunicator::write_chunk_result(SqlResult *sql_result, vector &packet, int &affected_rows, bool &need_disconnect) +RC MysqlCommunicator::write_chunk_result( + SqlResult *sql_result, vector &packet, int &affected_rows, bool &need_disconnect) { Chunk chunk; - RC rc = RC::SUCCESS; + RC rc = RC::SUCCESS; while (RC::SUCCESS == (rc = sql_result->next_chunk(chunk))) { int column_num = chunk.column_num(); if (column_num == 0) { @@ -1053,3 +1057,4 @@ RC MysqlCommunicator::write_chunk_result(SqlResult *sql_result, vector &pa } return rc; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/net/mysql_communicator.h b/src/observer/net/mysql_communicator.h index 2f69794c0..3c27a4668 100644 --- a/src/observer/net/mysql_communicator.h +++ b/src/observer/net/mysql_communicator.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "net/communicator.h" #include "common/lang/string.h" +namespace oceanbase { + class SqlResult; class BasePacket; @@ -105,3 +107,4 @@ class MysqlCommunicator : public Communicator //! 这个sequence id是递增的 int8_t sequence_id_ = 0; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/net/one_thread_per_connection_thread_handler.cpp b/src/observer/net/one_thread_per_connection_thread_handler.cpp index ae977f337..75801248c 100644 --- a/src/observer/net/one_thread_per_connection_thread_handler.cpp +++ b/src/observer/net/one_thread_per_connection_thread_handler.cpp @@ -25,12 +25,12 @@ See the Mulan PSL v2 for more details. */ using namespace common; +namespace oceanbase { + class Worker { public: - Worker(ThreadHandler &host, Communicator *communicator) - : host_(host), communicator_(communicator) - {} + Worker(ThreadHandler &host, Communicator *communicator) : host_(host), communicator_(communicator) {} ~Worker() { if (thread_ != nullptr) { @@ -55,7 +55,7 @@ class Worker { if (thread_) { if (thread_->get_id() == this_thread::get_id()) { - thread_->detach(); // 如果当前线程join当前线程,就会卡死 + thread_->detach(); // 如果当前线程join当前线程,就会卡死 } else { thread_->join(); } @@ -74,8 +74,8 @@ class Worker } struct pollfd poll_fd; - poll_fd.fd = communicator_->fd(); - poll_fd.events = POLLIN; + poll_fd.fd = communicator_->fd(); + poll_fd.events = POLLIN; poll_fd.revents = 0; while (running_) { @@ -101,15 +101,15 @@ class Worker } LOG_INFO("worker thread stop. communicator = %p", communicator_); - host_.close_connection(communicator_); /// 连接关闭后,当前对象会被删除 + host_.close_connection(communicator_); /// 连接关闭后,当前对象会被删除 } private: ThreadHandler &host_; SqlTaskHandler task_handler_; - Communicator *communicator_ = nullptr; - thread *thread_ = nullptr; - volatile bool running_ = true; + Communicator *communicator_ = nullptr; + thread *thread_ = nullptr; + volatile bool running_ = true; }; OneThreadPerConnectionThreadHandler::~OneThreadPerConnectionThreadHandler() @@ -128,7 +128,7 @@ RC OneThreadPerConnectionThreadHandler::new_connection(Communicator *communicato return RC::FILE_EXIST; } - Worker *worker = new Worker(*this, communicator); + Worker *worker = new Worker(*this, communicator); thread_map_[communicator] = worker; return worker->start(); } @@ -174,3 +174,4 @@ RC OneThreadPerConnectionThreadHandler::await_stop() LOG_INFO("end to await stop one thread per connection thread handler"); return RC::SUCCESS; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/net/one_thread_per_connection_thread_handler.h b/src/observer/net/one_thread_per_connection_thread_handler.h index 12c9f1c4d..44f4b8c64 100644 --- a/src/observer/net/one_thread_per_connection_thread_handler.h +++ b/src/observer/net/one_thread_per_connection_thread_handler.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "common/lang/mutex.h" #include "common/lang/unordered_map.h" +namespace oceanbase { + class Worker; /** @@ -46,4 +48,5 @@ class OneThreadPerConnectionThreadHandler : public ThreadHandler unordered_map thread_map_; // 当前编译器没有支持jthread /// 保护线程安全的锁 mutex lock_; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/net/plain_communicator.cpp b/src/observer/net/plain_communicator.cpp index e16746716..462006139 100644 --- a/src/observer/net/plain_communicator.cpp +++ b/src/observer/net/plain_communicator.cpp @@ -20,6 +20,8 @@ See the Mulan PSL v2 for more details. */ #include "session/session.h" #include "sql/expr/tuple.h" +namespace oceanbase { + PlainCommunicator::PlainCommunicator() { send_message_delimiter_.assign(1, '\0'); @@ -237,8 +239,7 @@ RC PlainCommunicator::write_result_internal(SessionEvent *event, bool &need_disc } rc = RC::SUCCESS; - if (event->session()->get_execution_mode() == ExecutionMode::CHUNK_ITERATOR - && event->session()->used_chunk_mode()) { + if (event->session()->get_execution_mode() == ExecutionMode::CHUNK_ITERATOR && event->session()->used_chunk_mode()) { rc = write_chunk_result(sql_result); } else { rc = write_tuple_result(sql_result); @@ -272,7 +273,7 @@ RC PlainCommunicator::write_result_internal(SessionEvent *event, bool &need_disc RC PlainCommunicator::write_tuple_result(SqlResult *sql_result) { - RC rc = RC::SUCCESS; + RC rc = RC::SUCCESS; Tuple *tuple = nullptr; while (RC::SUCCESS == (rc = sql_result->next_tuple(tuple))) { assert(tuple != nullptr); @@ -326,7 +327,7 @@ RC PlainCommunicator::write_tuple_result(SqlResult *sql_result) RC PlainCommunicator::write_chunk_result(SqlResult *sql_result) { - RC rc = RC::SUCCESS; + RC rc = RC::SUCCESS; Chunk chunk; while (RC::SUCCESS == (rc = sql_result->next_chunk(chunk))) { int col_num = chunk.column_num(); @@ -370,4 +371,5 @@ RC PlainCommunicator::write_chunk_result(SqlResult *sql_result) rc = RC::SUCCESS; } return rc; -} \ No newline at end of file +} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/net/plain_communicator.h b/src/observer/net/plain_communicator.h index 0dfabf9a2..ed6f5e606 100644 --- a/src/observer/net/plain_communicator.h +++ b/src/observer/net/plain_communicator.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "net/communicator.h" #include "common/lang/vector.h" +namespace oceanbase { + class SqlResult; /** @@ -44,3 +46,4 @@ class PlainCommunicator : public Communicator vector send_message_delimiter_; ///< 发送消息分隔符 vector debug_message_prefix_; ///< 调试信息前缀 }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/net/ring_buffer.cpp b/src/observer/net/ring_buffer.cpp index c3b5f74e0..a5b35c218 100644 --- a/src/observer/net/ring_buffer.cpp +++ b/src/observer/net/ring_buffer.cpp @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "common/log/log.h" #include "net/ring_buffer.h" +namespace oceanbase { + const int32_t DEFAULT_BUFFER_SIZE = 16 * 1024; RingBuffer::RingBuffer() : RingBuffer(DEFAULT_BUFFER_SIZE) {} @@ -32,7 +34,7 @@ RC RingBuffer::read(char *buf, int32_t size, int32_t &read_size) RC rc = RC::SUCCESS; read_size = 0; - while (OB_SUCC(rc) && read_sizesize()> 0) { + while (OB_SUCC(rc) && read_size < size && this->size() > 0) { const char *tmp_buf = nullptr; int32_t tmp_size = 0; rc = buffer(tmp_buf, tmp_size); @@ -90,7 +92,7 @@ RC RingBuffer::write(const char *data, int32_t size, int32_t &write_size) RC rc = RC::SUCCESS; write_size = 0; - while (OB_SUCC(rc) && write_sizeremain()> 0) { + while (OB_SUCC(rc) && write_size < size && this->remain() > 0) { const int32_t read_pos = this->read_pos(); const int32_t tmp_buf_size = (read_pos <= write_pos_) ? (capacity() - write_pos_) : (read_pos - write_pos_); @@ -104,3 +106,4 @@ RC RingBuffer::write(const char *data, int32_t size, int32_t &write_size) return rc; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/net/ring_buffer.h b/src/observer/net/ring_buffer.h index 39f241a09..96b1a0304 100644 --- a/src/observer/net/ring_buffer.h +++ b/src/observer/net/ring_buffer.h @@ -19,6 +19,8 @@ See the Mulan PSL v2 for more details. */ #include "common/sys/rc.h" #include "common/lang/vector.h" +namespace oceanbase { + /** * @brief 环形缓存,当前用于通讯写入数据时的缓存 * @ingroup Communicator @@ -93,3 +95,4 @@ class RingBuffer int32_t data_size_ = 0; ///< 已经写入的数据量 int32_t write_pos_ = 0; ///< 当前写指针的位置,范围不会超出[0, capacity) }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/net/server.cpp b/src/observer/net/server.cpp index 53724e2c1..32980b323 100644 --- a/src/observer/net/server.cpp +++ b/src/observer/net/server.cpp @@ -42,6 +42,8 @@ See the Mulan PSL v2 for more details. */ using namespace common; +namespace oceanbase { + ServerParam::ServerParam() { listen_addr = INADDR_ANY; @@ -344,3 +346,4 @@ void CliServer::shutdown() // cleanup started_ = false; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/net/server.h b/src/observer/net/server.h index 2e39cb0ab..f14e5dc47 100644 --- a/src/observer/net/server.h +++ b/src/observer/net/server.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "net/server_param.h" +namespace oceanbase { + class Communicator; class ThreadHandler; @@ -97,4 +99,5 @@ class CliServer : public Server private: volatile bool started_ = false; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/net/server_param.h b/src/observer/net/server_param.h index 2a498a79a..b5aa503b7 100644 --- a/src/observer/net/server_param.h +++ b/src/observer/net/server_param.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "net/communicator.h" #include "common/lang/string.h" +namespace oceanbase { + /** * @brief 服务端启动参数 * @ingroup Communicator @@ -49,3 +51,4 @@ class ServerParam string thread_handling; ///< 线程池模型 }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/net/sql_task_handler.cpp b/src/observer/net/sql_task_handler.cpp index 90f0609b4..66ca60dfa 100644 --- a/src/observer/net/sql_task_handler.cpp +++ b/src/observer/net/sql_task_handler.cpp @@ -18,10 +18,12 @@ See the Mulan PSL v2 for more details. */ #include "event/sql_event.h" #include "session/session.h" +namespace oceanbase { + RC SqlTaskHandler::handle_event(Communicator *communicator) { SessionEvent *event = nullptr; - RC rc = communicator->read_event(event); + RC rc = communicator->read_event(event); if (OB_FAIL(rc)) { return rc; } @@ -88,4 +90,5 @@ RC SqlTaskHandler::handle_sql(SQLStageEvent *sql_event) } return rc; -} \ No newline at end of file +} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/net/sql_task_handler.h b/src/observer/net/sql_task_handler.h index 8c1294ee7..4197c3020 100644 --- a/src/observer/net/sql_task_handler.h +++ b/src/observer/net/sql_task_handler.h @@ -22,6 +22,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/parser/resolve_stage.h" #include "sql/query_cache/query_cache_stage.h" +namespace oceanbase { + class Communicator; class SQLStageEvent; @@ -50,6 +52,7 @@ class SqlTaskHandler QueryCacheStage query_cache_stage_; /// 查询缓存阶段 ParseStage parse_stage_; /// 解析阶段。将SQL解析成语法树 ParsedSqlNode ResolveStage resolve_stage_; /// 解析阶段。将语法树解析成Stmt(statement) - OptimizeStage optimize_stage_; /// 优化阶段。将语句优化成执行计划,包含规则优化和物理优化 - ExecuteStage execute_stage_; /// 执行阶段 + OptimizeStage optimize_stage_; /// 优化阶段。将语句优化成执行计划,包含规则优化和物理优化 + ExecuteStage execute_stage_; /// 执行阶段 }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/net/thread_handler.cpp b/src/observer/net/thread_handler.cpp index 941fcdfd9..7e4c31b11 100644 --- a/src/observer/net/thread_handler.cpp +++ b/src/observer/net/thread_handler.cpp @@ -20,7 +20,9 @@ See the Mulan PSL v2 for more details. */ #include "common/log/log.h" #include "common/lang/string.h" -ThreadHandler * ThreadHandler::create(const char *name) +namespace oceanbase { + +ThreadHandler *ThreadHandler::create(const char *name) { const char *default_name = "one-thread-per-connection"; if (nullptr == name || common::is_blank(name)) { @@ -35,4 +37,5 @@ ThreadHandler * ThreadHandler::create(const char *name) LOG_ERROR("unknown thread handler: %s", name); return nullptr; } -} \ No newline at end of file +} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/net/thread_handler.h b/src/observer/net/thread_handler.h index fd876e63d..5d6ac2ab6 100644 --- a/src/observer/net/thread_handler.h +++ b/src/observer/net/thread_handler.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "common/sys/rc.h" +namespace oceanbase { + class Communicator; /** @@ -63,3 +65,4 @@ class ThreadHandler */ static ThreadHandler *create(const char *name); }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/session/session.cpp b/src/observer/session/session.cpp index a5d3297e6..c11e4e384 100644 --- a/src/observer/session/session.cpp +++ b/src/observer/session/session.cpp @@ -18,6 +18,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/default/default_handler.h" #include "storage/trx/trx.h" +namespace oceanbase { + Session &Session::default_session() { static Session session; @@ -77,12 +79,12 @@ Trx *Session::current_trx() } void Session::destroy_trx() - { - if (trx_ != nullptr) { - db_->trx_kit().destroy_trx(trx_); - trx_ = nullptr; - } +{ + if (trx_ != nullptr) { + db_->trx_kit().destroy_trx(trx_); + trx_ = nullptr; } +} thread_local Session *thread_session = nullptr; @@ -93,3 +95,4 @@ Session *Session::current_session() { return thread_session; } void Session::set_current_request(SessionEvent *request) { current_request_ = request; } SessionEvent *Session::current_request() const { return current_request_; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/session/session.h b/src/observer/session/session.h index e9139eda3..61dabc147 100644 --- a/src/observer/session/session.h +++ b/src/observer/session/session.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "common/types.h" #include "common/lang/string.h" +namespace oceanbase { + class Trx; class Db; class SessionEvent; @@ -124,3 +126,4 @@ class Session ExecutionMode execution_mode_ = ExecutionMode::TUPLE_ITERATOR; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/session/session_stage.cpp b/src/observer/session/session_stage.cpp index eed271357..44955f321 100644 --- a/src/observer/session/session_stage.cpp +++ b/src/observer/session/session_stage.cpp @@ -28,6 +28,8 @@ See the Mulan PSL v2 for more details. */ using namespace common; +namespace oceanbase { + // Destructor SessionStage::~SessionStage() {} @@ -111,3 +113,4 @@ RC SessionStage::handle_sql(SQLStageEvent *sql_event) return rc; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/session/session_stage.h b/src/observer/session/session_stage.h index 2762c66ca..86322b5d3 100644 --- a/src/observer/session/session_stage.h +++ b/src/observer/session/session_stage.h @@ -20,6 +20,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/parser/resolve_stage.h" #include "sql/query_cache/query_cache_stage.h" +namespace oceanbase { + /** * @brief SEDA处理的stage * @defgroup SQLStage @@ -56,3 +58,4 @@ class SessionStage OptimizeStage optimize_stage_; ExecuteStage execute_stage_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/session/thread_data.cpp b/src/observer/session/thread_data.cpp index 96a3d963b..782f45b73 100644 --- a/src/observer/session/thread_data.cpp +++ b/src/observer/session/thread_data.cpp @@ -15,6 +15,9 @@ See the Mulan PSL v2 for more details. */ #include "session/thread_data.h" #include "session/session.h" +namespace oceanbase { + thread_local ThreadData *ThreadData::thread_data_; -Trx *ThreadData::trx() const { return (session_ == nullptr) ? nullptr : session_->current_trx(); } \ No newline at end of file +Trx *ThreadData::trx() const { return (session_ == nullptr) ? nullptr : session_->current_trx(); } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/session/thread_data.h b/src/observer/session/thread_data.h index 698c4b1a5..8ee9d1669 100644 --- a/src/observer/session/thread_data.h +++ b/src/observer/session/thread_data.h @@ -14,6 +14,8 @@ See the Mulan PSL v2 for more details. */ #pragma once +namespace oceanbase { + class Trx; class Session; @@ -37,4 +39,5 @@ class ThreadData private: Session *session_ = nullptr; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/executor/analyze_table_executor.cpp b/src/observer/sql/executor/analyze_table_executor.cpp index cb724da98..7542bd1ca 100644 --- a/src/observer/sql/executor/analyze_table_executor.cpp +++ b/src/observer/sql/executor/analyze_table_executor.cpp @@ -22,6 +22,8 @@ See the Mulan PSL v2 for more details. */ using namespace std; +namespace oceanbase { + RC AnalyzeTableExecutor::execute(SQLStageEvent *sql_event) { RC rc = RC::SUCCESS; @@ -33,8 +35,8 @@ RC AnalyzeTableExecutor::execute(SQLStageEvent *sql_event) static_cast(stmt->type())); AnalyzeTableStmt *analyze_table_stmt = static_cast(stmt); - SqlResult *sql_result = session_event->sql_result(); - const char *table_name = analyze_table_stmt->table_name().c_str(); + SqlResult *sql_result = session_event->sql_result(); + const char *table_name = analyze_table_stmt->table_name().c_str(); Db *db = session->get_current_db(); Table *table = db->find_table(table_name); @@ -44,7 +46,7 @@ RC AnalyzeTableExecutor::execute(SQLStageEvent *sql_event) int table_id = table->table_id(); table->get_record_scanner(scanner_, session->current_trx(), ReadWriteMode::READ_ONLY); Record dummy; - int row_nums = 0; + int row_nums = 0; while (OB_SUCC(rc = scanner_->next(dummy))) { row_nums++; } @@ -53,7 +55,7 @@ RC AnalyzeTableExecutor::execute(SQLStageEvent *sql_event) } else { return rc; } - + TableStats stats(row_nums); Catalog::get_instance().update_table_stats(table_id, stats); } else { @@ -63,10 +65,11 @@ RC AnalyzeTableExecutor::execute(SQLStageEvent *sql_event) return rc; } -AnalyzeTableExecutor::~AnalyzeTableExecutor() +AnalyzeTableExecutor::~AnalyzeTableExecutor() { if (scanner_ != nullptr) { delete scanner_; scanner_ = nullptr; } } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/executor/analyze_table_executor.h b/src/observer/sql/executor/analyze_table_executor.h index 15e8f58b5..52919162a 100644 --- a/src/observer/sql/executor/analyze_table_executor.h +++ b/src/observer/sql/executor/analyze_table_executor.h @@ -12,6 +12,8 @@ See the Mulan PSL v2 for more details. */ #include "common/sys/rc.h" +namespace oceanbase { + class SQLStageEvent; class RecordScanner; @@ -30,3 +32,4 @@ class AnalyzeTableExecutor private: RecordScanner *scanner_ = nullptr; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/executor/command_executor.cpp b/src/observer/sql/executor/command_executor.cpp index de9527afe..c56c6283c 100644 --- a/src/observer/sql/executor/command_executor.cpp +++ b/src/observer/sql/executor/command_executor.cpp @@ -27,6 +27,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/executor/trx_end_executor.h" #include "sql/stmt/stmt.h" +namespace oceanbase { + RC CommandExecutor::execute(SQLStageEvent *sql_event) { Stmt *stmt = sql_event->stmt(); @@ -102,3 +104,4 @@ RC CommandExecutor::execute(SQLStageEvent *sql_event) return rc; } +} // namespace oceanbase diff --git a/src/observer/sql/executor/command_executor.h b/src/observer/sql/executor/command_executor.h index d0114c4c1..b60b083c1 100644 --- a/src/observer/sql/executor/command_executor.h +++ b/src/observer/sql/executor/command_executor.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "common/sys/rc.h" +namespace oceanbase { + class SQLStageEvent; /** @@ -35,3 +37,4 @@ class CommandExecutor RC execute(SQLStageEvent *sql_event); }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/executor/create_index_executor.cpp b/src/observer/sql/executor/create_index_executor.cpp index 6c99dda0b..5ca70e475 100644 --- a/src/observer/sql/executor/create_index_executor.cpp +++ b/src/observer/sql/executor/create_index_executor.cpp @@ -20,6 +20,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/stmt/create_index_stmt.h" #include "storage/table/table.h" +namespace oceanbase { + RC CreateIndexExecutor::execute(SQLStageEvent *sql_event) { Stmt *stmt = sql_event->stmt(); @@ -33,4 +35,5 @@ RC CreateIndexExecutor::execute(SQLStageEvent *sql_event) Trx *trx = session->current_trx(); Table *table = create_index_stmt->table(); return table->create_index(trx, create_index_stmt->field_meta(), create_index_stmt->index_name().c_str()); -} \ No newline at end of file +} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/executor/create_index_executor.h b/src/observer/sql/executor/create_index_executor.h index 6a7c54896..f101ff22a 100644 --- a/src/observer/sql/executor/create_index_executor.h +++ b/src/observer/sql/executor/create_index_executor.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "common/sys/rc.h" +namespace oceanbase { + class SQLStageEvent; /** @@ -31,3 +33,4 @@ class CreateIndexExecutor RC execute(SQLStageEvent *sql_event); }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/executor/create_table_executor.cpp b/src/observer/sql/executor/create_table_executor.cpp index d01d8da76..dac941754 100644 --- a/src/observer/sql/executor/create_table_executor.cpp +++ b/src/observer/sql/executor/create_table_executor.cpp @@ -21,6 +21,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/stmt/create_table_stmt.h" #include "storage/db/db.h" +namespace oceanbase { + RC CreateTableExecutor::execute(SQLStageEvent *sql_event) { Stmt *stmt = sql_event->stmt(); @@ -32,7 +34,11 @@ RC CreateTableExecutor::execute(SQLStageEvent *sql_event) CreateTableStmt *create_table_stmt = static_cast(stmt); const char *table_name = create_table_stmt->table_name().c_str(); - RC rc = session->get_current_db()->create_table(table_name, create_table_stmt->attr_infos(), create_table_stmt->primary_keys(), create_table_stmt->storage_format()); + RC rc = session->get_current_db()->create_table(table_name, + create_table_stmt->attr_infos(), + create_table_stmt->primary_keys(), + create_table_stmt->storage_format()); return rc; -} \ No newline at end of file +} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/executor/create_table_executor.h b/src/observer/sql/executor/create_table_executor.h index 3a7ace584..bc9dff4a3 100644 --- a/src/observer/sql/executor/create_table_executor.h +++ b/src/observer/sql/executor/create_table_executor.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "common/sys/rc.h" +namespace oceanbase { + class SQLStageEvent; /** @@ -30,3 +32,4 @@ class CreateTableExecutor RC execute(SQLStageEvent *sql_event); }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/executor/desc_table_executor.cpp b/src/observer/sql/executor/desc_table_executor.cpp index ea993fa51..589b73d83 100644 --- a/src/observer/sql/executor/desc_table_executor.cpp +++ b/src/observer/sql/executor/desc_table_executor.cpp @@ -25,6 +25,8 @@ See the Mulan PSL v2 for more details. */ using namespace std; +namespace oceanbase { + RC DescTableExecutor::execute(SQLStageEvent *sql_event) { RC rc = RC::SUCCESS; @@ -64,3 +66,4 @@ RC DescTableExecutor::execute(SQLStageEvent *sql_event) } return rc; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/executor/desc_table_executor.h b/src/observer/sql/executor/desc_table_executor.h index 7e6a40951..93905fc90 100644 --- a/src/observer/sql/executor/desc_table_executor.h +++ b/src/observer/sql/executor/desc_table_executor.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "common/sys/rc.h" +namespace oceanbase { + class SQLStageEvent; /** @@ -30,3 +32,4 @@ class DescTableExecutor RC execute(SQLStageEvent *sql_event); }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/executor/execute_stage.cpp b/src/observer/sql/executor/execute_stage.cpp index f4354b32f..66c6fd651 100644 --- a/src/observer/sql/executor/execute_stage.cpp +++ b/src/observer/sql/executor/execute_stage.cpp @@ -25,6 +25,8 @@ See the Mulan PSL v2 for more details. */ using namespace common; +namespace oceanbase { + RC ExecuteStage::handle_request(SQLStageEvent *sql_event) { RC rc = RC::SUCCESS; @@ -58,3 +60,4 @@ RC ExecuteStage::handle_request_with_physical_operator(SQLStageEvent *sql_event) sql_result->set_operator(std::move(physical_operator)); return rc; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/executor/execute_stage.h b/src/observer/sql/executor/execute_stage.h index 5eca68161..f9c00b57c 100644 --- a/src/observer/sql/executor/execute_stage.h +++ b/src/observer/sql/executor/execute_stage.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "common/sys/rc.h" +namespace oceanbase { + class SQLStageEvent; class SessionEvent; class SelectStmt; @@ -32,3 +34,4 @@ class ExecuteStage RC handle_request(SQLStageEvent *event); RC handle_request_with_physical_operator(SQLStageEvent *sql_event); }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/executor/help_executor.h b/src/observer/sql/executor/help_executor.h index c5946aa9b..4865b949a 100644 --- a/src/observer/sql/executor/help_executor.h +++ b/src/observer/sql/executor/help_executor.h @@ -20,6 +20,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/executor/sql_result.h" #include "sql/operator/string_list_physical_operator.h" +namespace oceanbase { + /** * @brief Help语句执行器 * @ingroup Executor @@ -57,3 +59,4 @@ class HelpExecutor return RC::SUCCESS; } }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/executor/load_data_executor.cpp b/src/observer/sql/executor/load_data_executor.cpp index f841a8474..f6b7b9169 100644 --- a/src/observer/sql/executor/load_data_executor.cpp +++ b/src/observer/sql/executor/load_data_executor.cpp @@ -22,6 +22,8 @@ See the Mulan PSL v2 for more details. */ using namespace common; +namespace oceanbase { + RC LoadDataExecutor::execute(SQLStageEvent *sql_event) { RC rc = RC::SUCCESS; @@ -81,9 +83,9 @@ RC insert_record_from_file( return rc; } - // TODO: pax format and row format -void LoadDataExecutor::load_data(Table *table, const char *file_name, char terminated, char enclosed, SqlResult *sql_result) +void LoadDataExecutor::load_data( + Table *table, const char *file_name, char terminated, char enclosed, SqlResult *sql_result) { // your code here stringstream result_string; @@ -102,13 +104,13 @@ void LoadDataExecutor::load_data(Table *table, const char *file_name, char termi const int sys_field_num = table->table_meta().sys_field_num(); const int field_num = table->table_meta().field_num() - sys_field_num; - vector record_values(field_num); - string line; + vector record_values(field_num); + string line; vector file_values; - const string delim("|"); - int line_num = 0; - int insertion_count = 0; - RC rc = RC::SUCCESS; + const string delim("|"); + int line_num = 0; + int insertion_count = 0; + RC rc = RC::SUCCESS; while (!fs.eof() && RC::SUCCESS == rc) { getline(fs, line); line_num++; @@ -147,3 +149,4 @@ void LoadDataExecutor::load_data(Table *table, const char *file_name, char termi LOG_INFO("load data done. row num: %s, result: %s", insertion_count, strrc(rc)); sql_result->set_return_code(RC::SUCCESS); } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/executor/load_data_executor.h b/src/observer/sql/executor/load_data_executor.h index 42f54d7dc..b6c721952 100644 --- a/src/observer/sql/executor/load_data_executor.h +++ b/src/observer/sql/executor/load_data_executor.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "common/sys/rc.h" +namespace oceanbase { + class SQLStageEvent; class Table; class SqlResult; @@ -35,3 +37,4 @@ class LoadDataExecutor private: void load_data(Table *table, const char *file_name, char terminated, char enclosed, SqlResult *sql_result); }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/executor/set_variable_executor.cpp b/src/observer/sql/executor/set_variable_executor.cpp index 28b4a9df8..8fadd35a8 100644 --- a/src/observer/sql/executor/set_variable_executor.cpp +++ b/src/observer/sql/executor/set_variable_executor.cpp @@ -10,105 +10,108 @@ See the Mulan PSL v2 for more details. */ #include "sql/executor/set_variable_executor.h" +namespace oceanbase { + RC SetVariableExecutor::execute(SQLStageEvent *sql_event) { - RC rc = RC::SUCCESS; - - Session *session = sql_event->session_event()->session(); - SetVariableStmt *stmt = (SetVariableStmt *)sql_event->stmt(); - - const char *var_name = stmt->var_name(); - const Value &var_value = stmt->var_value(); - // TODO: refactor the variable configuration - if (strcasecmp(var_name, "sql_debug") == 0) { - bool bool_value = false; - rc = var_value_to_boolean(var_value, bool_value); - if (rc == RC::SUCCESS) { - session->set_sql_debug(bool_value); - LOG_TRACE("set sql_debug to %d", bool_value); - } - } else if (strcasecmp(var_name, "execution_mode") == 0) { - ExecutionMode execution_mode = ExecutionMode::UNKNOWN_MODE; - rc = get_execution_mode(var_value, execution_mode); - if (rc == RC::SUCCESS && execution_mode != ExecutionMode::UNKNOWN_MODE) { - session->set_execution_mode(execution_mode); - } else { - rc = RC::INVALID_ARGUMENT; - } - } else if (strcasecmp(var_name, "hash_join") == 0) { // TODO: remove this configuration - bool bool_value = false; - rc = var_value_to_boolean(var_value, bool_value); - if (rc == RC::SUCCESS) { - session->set_hash_join(bool_value); - LOG_TRACE("set hash_join to %d", bool_value); - } - } else if (strcasecmp(var_name, "use_cascade") == 0) { - // TODO: remove this params, due to the dblab needed, likely to be long-existing - bool bool_value = false; - rc = var_value_to_boolean(var_value, bool_value); - if (rc == RC::SUCCESS) { - session->set_use_cascade(bool_value); - LOG_TRACE("set use_cascade to %d", bool_value); - } - } else { - rc = RC::VARIABLE_NOT_EXISTS; + RC rc = RC::SUCCESS; + + Session *session = sql_event->session_event()->session(); + SetVariableStmt *stmt = (SetVariableStmt *)sql_event->stmt(); + + const char *var_name = stmt->var_name(); + const Value &var_value = stmt->var_value(); + // TODO: refactor the variable configuration + if (strcasecmp(var_name, "sql_debug") == 0) { + bool bool_value = false; + rc = var_value_to_boolean(var_value, bool_value); + if (rc == RC::SUCCESS) { + session->set_sql_debug(bool_value); + LOG_TRACE("set sql_debug to %d", bool_value); + } + } else if (strcasecmp(var_name, "execution_mode") == 0) { + ExecutionMode execution_mode = ExecutionMode::UNKNOWN_MODE; + rc = get_execution_mode(var_value, execution_mode); + if (rc == RC::SUCCESS && execution_mode != ExecutionMode::UNKNOWN_MODE) { + session->set_execution_mode(execution_mode); + } else { + rc = RC::INVALID_ARGUMENT; } + } else if (strcasecmp(var_name, "hash_join") == 0) { // TODO: remove this configuration + bool bool_value = false; + rc = var_value_to_boolean(var_value, bool_value); + if (rc == RC::SUCCESS) { + session->set_hash_join(bool_value); + LOG_TRACE("set hash_join to %d", bool_value); + } + } else if (strcasecmp(var_name, "use_cascade") == 0) { + // TODO: remove this params, due to the dblab needed, likely to be long-existing + bool bool_value = false; + rc = var_value_to_boolean(var_value, bool_value); + if (rc == RC::SUCCESS) { + session->set_use_cascade(bool_value); + LOG_TRACE("set use_cascade to %d", bool_value); + } + } else { + rc = RC::VARIABLE_NOT_EXISTS; + } - return rc; + return rc; } RC SetVariableExecutor::var_value_to_boolean(const Value &var_value, bool &bool_value) const { - RC rc = RC::SUCCESS; + RC rc = RC::SUCCESS; - if (var_value.attr_type() == AttrType::BOOLEANS) { - bool_value = var_value.get_boolean(); - } else if (var_value.attr_type() == AttrType::INTS) { - bool_value = var_value.get_int() != 0; - } else if (var_value.attr_type() == AttrType::FLOATS) { - bool_value = var_value.get_float() != 0.0; - } else if (var_value.attr_type() == AttrType::CHARS) { + if (var_value.attr_type() == AttrType::BOOLEANS) { + bool_value = var_value.get_boolean(); + } else if (var_value.attr_type() == AttrType::INTS) { + bool_value = var_value.get_int() != 0; + } else if (var_value.attr_type() == AttrType::FLOATS) { + bool_value = var_value.get_float() != 0.0; + } else if (var_value.attr_type() == AttrType::CHARS) { - string true_strings[] = {"true", "on", "yes", "t", "1"}; + string true_strings[] = {"true", "on", "yes", "t", "1"}; - string false_strings[] = {"false", "off", "no", "f", "0"}; + string false_strings[] = {"false", "off", "no", "f", "0"}; - for (size_t i = 0; i < sizeof(true_strings) / sizeof(true_strings[0]); i++) { - if (strcasecmp(var_value.get_string().c_str(), true_strings[i].c_str()) == 0) { - bool_value = true; - return rc; - } + for (size_t i = 0; i < sizeof(true_strings) / sizeof(true_strings[0]); i++) { + if (strcasecmp(var_value.get_string().c_str(), true_strings[i].c_str()) == 0) { + bool_value = true; + return rc; } + } - for (size_t i = 0; i < sizeof(false_strings) / sizeof(false_strings[0]); i++) { - if (strcasecmp(var_value.get_string().c_str(), false_strings[i].c_str()) == 0) { - bool_value = false; - return rc; - } + for (size_t i = 0; i < sizeof(false_strings) / sizeof(false_strings[0]); i++) { + if (strcasecmp(var_value.get_string().c_str(), false_strings[i].c_str()) == 0) { + bool_value = false; + return rc; } - rc = RC::VARIABLE_NOT_VALID; } + rc = RC::VARIABLE_NOT_VALID; + } - return rc; + return rc; } RC SetVariableExecutor::get_execution_mode(const Value &var_value, ExecutionMode &execution_mode) const { - RC rc = RC::SUCCESS; - - if (var_value.attr_type() == AttrType::CHARS) { - if (strcasecmp(var_value.get_string().c_str(), "TUPLE_ITERATOR") == 0) { - execution_mode = ExecutionMode::TUPLE_ITERATOR; - } else if (strcasecmp(var_value.get_string().c_str(), "CHUNK_ITERATOR") == 0) { - execution_mode = ExecutionMode::CHUNK_ITERATOR; - } else { - execution_mode = ExecutionMode::UNKNOWN_MODE; - rc = RC::VARIABLE_NOT_VALID; - } - } else { + RC rc = RC::SUCCESS; + + if (var_value.attr_type() == AttrType::CHARS) { + if (strcasecmp(var_value.get_string().c_str(), "TUPLE_ITERATOR") == 0) { + execution_mode = ExecutionMode::TUPLE_ITERATOR; + } else if (strcasecmp(var_value.get_string().c_str(), "CHUNK_ITERATOR") == 0) { + execution_mode = ExecutionMode::CHUNK_ITERATOR; + } else { execution_mode = ExecutionMode::UNKNOWN_MODE; - rc = RC::VARIABLE_NOT_VALID; + rc = RC::VARIABLE_NOT_VALID; } + } else { + execution_mode = ExecutionMode::UNKNOWN_MODE; + rc = RC::VARIABLE_NOT_VALID; + } - return rc; + return rc; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/executor/set_variable_executor.h b/src/observer/sql/executor/set_variable_executor.h index 55e45f757..91c28ec42 100644 --- a/src/observer/sql/executor/set_variable_executor.h +++ b/src/observer/sql/executor/set_variable_executor.h @@ -20,6 +20,8 @@ See the Mulan PSL v2 for more details. */ #include "session/session.h" #include "sql/stmt/set_variable_stmt.h" +namespace oceanbase { + /** * @brief SetVariable语句执行器 * @ingroup Executor @@ -37,3 +39,4 @@ class SetVariableExecutor RC get_execution_mode(const Value &var_value, ExecutionMode &execution_mode) const; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/executor/show_tables_executor.h b/src/observer/sql/executor/show_tables_executor.h index 0b6acf6ca..c1de1774c 100644 --- a/src/observer/sql/executor/show_tables_executor.h +++ b/src/observer/sql/executor/show_tables_executor.h @@ -22,6 +22,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/string_list_physical_operator.h" #include "storage/db/db.h" +namespace oceanbase { + /** * @brief 显示所有表的执行器 * @ingroup Executor @@ -56,3 +58,4 @@ class ShowTablesExecutor return RC::SUCCESS; } }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/executor/sql_result.cpp b/src/observer/sql/executor/sql_result.cpp index 7207679a8..2dd21c0aa 100644 --- a/src/observer/sql/executor/sql_result.cpp +++ b/src/observer/sql/executor/sql_result.cpp @@ -18,6 +18,8 @@ See the Mulan PSL v2 for more details. */ #include "session/session.h" #include "storage/trx/trx.h" +namespace oceanbase { + SqlResult::SqlResult(Session *session) : session_(session) {} void SqlResult::set_tuple_schema(const TupleSchema &schema) { tuple_schema_ = schema; } @@ -82,3 +84,4 @@ void SqlResult::set_operator(unique_ptr oper) operator_ = std::move(oper); operator_->tuple_schema(tuple_schema_); } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/executor/sql_result.h b/src/observer/sql/executor/sql_result.h index e3ac999d5..9a1bc001a 100644 --- a/src/observer/sql/executor/sql_result.h +++ b/src/observer/sql/executor/sql_result.h @@ -19,6 +19,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/expr/tuple.h" #include "sql/operator/physical_operator.h" +namespace oceanbase { + class Session; /** @@ -57,3 +59,4 @@ class SqlResult RC return_code_ = RC::SUCCESS; string state_string_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/executor/trx_begin_executor.h b/src/observer/sql/executor/trx_begin_executor.h index 87f3d2d88..beb403774 100644 --- a/src/observer/sql/executor/trx_begin_executor.h +++ b/src/observer/sql/executor/trx_begin_executor.h @@ -20,6 +20,8 @@ See the Mulan PSL v2 for more details. */ #include "session/session.h" #include "storage/trx/trx.h" +namespace oceanbase { + /** * @brief 事务开始语句的执行器 * @ingroup Executor @@ -42,3 +44,4 @@ class TrxBeginExecutor return trx->start_if_need(); } }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/executor/trx_end_executor.h b/src/observer/sql/executor/trx_end_executor.h index aa149f8c3..258e88958 100644 --- a/src/observer/sql/executor/trx_end_executor.h +++ b/src/observer/sql/executor/trx_end_executor.h @@ -21,6 +21,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/stmt/stmt.h" #include "storage/trx/trx.h" +namespace oceanbase { + /** * @brief 事务结束的执行器,可以是提交或回滚 * @ingroup Executor @@ -50,3 +52,4 @@ class TrxEndExecutor return rc; } }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/expr/aggregate_hash_table.cpp b/src/observer/sql/expr/aggregate_hash_table.cpp index 46aaaf993..2d8becacb 100644 --- a/src/observer/sql/expr/aggregate_hash_table.cpp +++ b/src/observer/sql/expr/aggregate_hash_table.cpp @@ -13,15 +13,17 @@ See the Mulan PSL v2 for more details. */ // ----------------------------------StandardAggregateHashTable------------------ +namespace oceanbase { + RC StandardAggregateHashTable::add_chunk(Chunk &groups_chunk, Chunk &aggrs_chunk) { - if (groups_chunk.rows() != aggrs_chunk.rows()) { + if (groups_chunk.rows() != aggrs_chunk.rows()) { LOG_WARN("groups_chunk and aggrs_chunk have different rows: %d, %d", groups_chunk.rows(), aggrs_chunk.rows()); return RC::INVALID_ARGUMENT; } for (int i = 0; i < groups_chunk.rows(); i++) { - vector group_by_values; - vector aggr_values; + vector group_by_values; + vector aggr_values; for (int j = 0; j < groups_chunk.column_num(); j++) { group_by_values.emplace_back(groups_chunk.get_value(j, i)); @@ -30,18 +32,19 @@ RC StandardAggregateHashTable::add_chunk(Chunk &groups_chunk, Chunk &aggrs_chunk auto it = aggr_values_.find(group_by_values); if (it == aggr_values_.end()) { for (size_t j = 0; j < aggr_types_.size(); j++) { - void * state_ptr = create_aggregate_state(aggr_types_[j], aggr_child_types_[j]); + void *state_ptr = create_aggregate_state(aggr_types_[j], aggr_child_types_[j]); if (state_ptr == nullptr) { LOG_WARN("create aggregate state failed"); return RC::INTERNAL; - } + } aggr_values.emplace_back(state_ptr); } aggr_values_.emplace(group_by_values, aggr_values); } auto &aggr = aggr_values_.find(group_by_values)->second; for (size_t aggr_idx = 0; aggr_idx < aggr.size(); aggr_idx++) { - RC rc = aggregate_state_update_by_value(aggr[aggr_idx], aggr_types_[aggr_idx], aggr_child_types_[aggr_idx], aggrs_chunk.get_value(aggr_idx, i)); + RC rc = aggregate_state_update_by_value( + aggr[aggr_idx], aggr_types_[aggr_idx], aggr_child_types_[aggr_idx], aggrs_chunk.get_value(aggr_idx, i)); if (rc != RC::SUCCESS) { LOG_WARN("update aggregate state failed"); return rc; @@ -70,8 +73,10 @@ RC StandardAggregateHashTable::Scanner::next(Chunk &output_chunk) auto col_idx = output_chunk.column_ids(i); if (col_idx >= static_cast(group_by_values.size())) { int aggr_real_idx = col_idx - group_by_values.size(); - rc = finialize_aggregate_state(aggrs[aggr_real_idx], hash_table_->aggr_types_[aggr_real_idx], - hash_table_->aggr_child_types_[aggr_real_idx], output_chunk.column(i)); + rc = finialize_aggregate_state(aggrs[aggr_real_idx], + hash_table_->aggr_types_[aggr_real_idx], + hash_table_->aggr_child_types_[aggr_real_idx], + output_chunk.column(i)); if (rc != RC::SUCCESS) { LOG_WARN("finialize aggregate state failed"); return rc; @@ -265,16 +270,18 @@ void LinearProbingAggregateHashTable::add_batch(int *input_keys, V *input_val // off 全部初始化为 0 // for (; i + SIMD_WIDTH <= len;) { - // 1: 根据 `inv` 变量的值,从 `input_keys` 中 `selective load` `SIMD_WIDTH` 个不同的输入键值对。 - // 2. 计算 i += |inv|, `|inv|` 表示 `inv` 中有效的个数 - // 3. 计算 hash 值, - // 4. 根据聚合类型(目前只支持 sum),在哈希表中更新聚合结果。如果本次循环,没有找到key[i] 在哈希表中的位置,则不更新聚合结果。 - // 5. gather 操作,根据 hash 值将 keys_ 的 gather 结果写入 table_key 中。 - // 6. 更新 inv 和 off。如果本次循环key[i] 聚合完成,则inv[i]=-1,表示该位置在下次循环中读取新的键值对。 - // 如果本次循环 key[i] 未在哈希表中聚合完成(table_key[i] != key[i]),则inv[i] = 0,表示该位置在下次循环中不需要读取新的键值对。 - // 如果本次循环中,key[i]聚合完成,则off[i] 更新为 0,表示线性探测偏移量为 0,key[i] 未完成聚合,则off[i]++,表示线性探测偏移量加 1。 + // 1: 根据 `inv` 变量的值,从 `input_keys` 中 `selective load` `SIMD_WIDTH` 个不同的输入键值对。 + // 2. 计算 i += |inv|, `|inv|` 表示 `inv` 中有效的个数 + // 3. 计算 hash 值, + // 4. 根据聚合类型(目前只支持 sum),在哈希表中更新聚合结果。如果本次循环,没有找到key[i] + // 在哈希表中的位置,则不更新聚合结果。 + // 5. gather 操作,根据 hash 值将 keys_ 的 gather 结果写入 table_key 中。 + // 6. 更新 inv 和 off。如果本次循环key[i] 聚合完成,则inv[i]=-1,表示该位置在下次循环中读取新的键值对。 + // 如果本次循环 key[i] 未在哈希表中聚合完成(table_key[i] != key[i]),则inv[i] = + // 0,表示该位置在下次循环中不需要读取新的键值对。 如果本次循环中,key[i]聚合完成,则off[i] 更新为 + // 0,表示线性探测偏移量为 0,key[i] 未完成聚合,则off[i]++,表示线性探测偏移量加 1。 // } - //7. 通过标量线性探测,处理剩余键值对 + // 7. 通过标量线性探测,处理剩余键值对 // resize_if_need(); } @@ -287,3 +294,4 @@ const int LinearProbingAggregateHashTable::DEFAULT_CAPACITY = 16384; template class LinearProbingAggregateHashTable; template class LinearProbingAggregateHashTable; #endif +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/expr/aggregate_hash_table.h b/src/observer/sql/expr/aggregate_hash_table.h index 8b47d390f..a77054ee5 100644 --- a/src/observer/sql/expr/aggregate_hash_table.h +++ b/src/observer/sql/expr/aggregate_hash_table.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "common/sys/rc.h" #include "sql/expr/expression.h" +namespace oceanbase { + /** * @brief 用于hash group by 的哈希表实现,不支持并发访问。 */ @@ -176,3 +178,4 @@ class LinearProbingAggregateHashTable : public AggregateHashTable AggregateExpr::Type aggregate_type_; }; #endif // USE_SIMD +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/expr/aggregate_state.cpp b/src/observer/sql/expr/aggregate_state.cpp index 78db6e0c9..5e49e7cfe 100644 --- a/src/observer/sql/expr/aggregate_state.cpp +++ b/src/observer/sql/expr/aggregate_state.cpp @@ -14,6 +14,9 @@ See the Mulan PSL v2 for more details. */ #ifdef USE_SIMD #include "common/math/simd_util.h" #endif + +namespace oceanbase { + template void SumState::update(const T *values, int size) { @@ -25,7 +28,7 @@ void SumState::update(const T *values, int size) } #else for (int i = 0; i < size; ++i) { - value += values[i]; + value += values[i]; } #endif } @@ -34,7 +37,7 @@ template void AvgState::update(const T *values, int size) { for (int i = 0; i < size; ++i) { - value += values[i]; + value += values[i]; } count += size; } @@ -45,9 +48,9 @@ void CountState::update(const T *values, int size) value += size; } -void* create_aggregate_state(AggregateExpr::Type aggr_type, AttrType attr_type) +void *create_aggregate_state(AggregateExpr::Type aggr_type, AttrType attr_type) { - void* state_ptr = nullptr; + void *state_ptr = nullptr; if (aggr_type == AggregateExpr::Type::SUM) { if (attr_type == AttrType::INTS) { state_ptr = malloc(sizeof(SumState)); @@ -77,25 +80,25 @@ void* create_aggregate_state(AggregateExpr::Type aggr_type, AttrType attr_type) return state_ptr; } -RC aggregate_state_update_by_value(void *state, AggregateExpr::Type aggr_type, AttrType attr_type, const Value& val) +RC aggregate_state_update_by_value(void *state, AggregateExpr::Type aggr_type, AttrType attr_type, const Value &val) { RC rc = RC::SUCCESS; if (aggr_type == AggregateExpr::Type::SUM) { if (attr_type == AttrType::INTS) { - static_cast*>(state)->update(val.get_int()); + static_cast *>(state)->update(val.get_int()); } else if (attr_type == AttrType::FLOATS) { - static_cast*>(state)->update(val.get_float()); + static_cast *>(state)->update(val.get_float()); } else { LOG_WARN("unsupported aggregate value type"); return RC::UNIMPLEMENTED; } } else if (aggr_type == AggregateExpr::Type::COUNT) { - static_cast*>(state)->update(1); + static_cast *>(state)->update(1); } else if (aggr_type == AggregateExpr::Type::AVG) { if (attr_type == AttrType::INTS) { - static_cast*>(state)->update(val.get_int()); + static_cast *>(state)->update(val.get_int()); } else if (attr_type == AttrType::FLOATS) { - static_cast*>(state)->update(val.get_float()); + static_cast *>(state)->update(val.get_float()); } else { LOG_WARN("unsupported aggregate value type"); return RC::UNIMPLEMENTED; @@ -111,14 +114,14 @@ template void append_to_column(void *state, Column &column) { STATE *state_ptr = reinterpret_cast(state); - T res = state_ptr->template finalize(); + T res = state_ptr->template finalize(); column.append_one((char *)&res); } -RC finialize_aggregate_state(void *state, AggregateExpr::Type aggr_type, AttrType attr_type, Column& col) +RC finialize_aggregate_state(void *state, AggregateExpr::Type aggr_type, AttrType attr_type, Column &col) { RC rc = RC::SUCCESS; - if ( aggr_type == AggregateExpr::Type::SUM) { + if (aggr_type == AggregateExpr::Type::SUM) { if (attr_type == AttrType::INTS) { append_to_column, int>(state, col); } else if (attr_type == AttrType::FLOATS) { @@ -137,7 +140,7 @@ RC finialize_aggregate_state(void *state, AggregateExpr::Type aggr_type, AttrTyp } else { rc = RC::UNIMPLEMENTED; LOG_WARN("unsupported aggregate value type"); - }// + } // } else { rc = RC::UNIMPLEMENTED; LOG_WARN("unsupported aggregator type"); @@ -149,11 +152,11 @@ template void update_aggregate_state(void *state, const Column &column) { STATE *state_ptr = reinterpret_cast(state); - T * data = (T *)column.data(); + T *data = (T *)column.data(); state_ptr->update(data, column.count()); } -RC aggregate_state_update_by_column(void *state, AggregateExpr::Type aggr_type, AttrType attr_type, Column& col) +RC aggregate_state_update_by_column(void *state, AggregateExpr::Type aggr_type, AttrType attr_type, Column &col) { RC rc = RC::SUCCESS; if (aggr_type == AggregateExpr::Type::SUM) { @@ -190,3 +193,4 @@ template class CountState; template class AvgState; template class AvgState; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/expr/aggregate_state.h b/src/observer/sql/expr/aggregate_state.h index 6a9835ead..3e2b63a0d 100644 --- a/src/observer/sql/expr/aggregate_state.h +++ b/src/observer/sql/expr/aggregate_state.h @@ -10,6 +10,9 @@ See the Mulan PSL v2 for more details. */ #include "sql/expr/expression.h" #include "common/type/attr_type.h" + +namespace oceanbase { + template class SumState { @@ -65,4 +68,5 @@ void *create_aggregate_state(AggregateExpr::Type aggr_type, AttrType attr_type); RC aggregate_state_update_by_value(void *state, AggregateExpr::Type aggr_type, AttrType attr_type, const Value &val); RC aggregate_state_update_by_column(void *state, AggregateExpr::Type aggr_type, AttrType attr_type, Column &col); -RC finialize_aggregate_state(void *state, AggregateExpr::Type aggr_type, AttrType attr_type, Column &col); \ No newline at end of file +RC finialize_aggregate_state(void *state, AggregateExpr::Type aggr_type, AttrType attr_type, Column &col); +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/expr/aggregator.cpp b/src/observer/sql/expr/aggregator.cpp index 29ba468a7..1a6446b18 100644 --- a/src/observer/sql/expr/aggregator.cpp +++ b/src/observer/sql/expr/aggregator.cpp @@ -15,22 +15,25 @@ See the Mulan PSL v2 for more details. */ #include "sql/expr/aggregator.h" #include "common/log/log.h" +namespace oceanbase { + RC SumAggregator::accumulate(const Value &value) { if (value_.attr_type() == AttrType::UNDEFINED) { value_ = value; return RC::SUCCESS; } - + ASSERT(value.attr_type() == value_.attr_type(), "type mismatch. value type: %s, value_.type: %s", attr_type_to_string(value.attr_type()), attr_type_to_string(value_.attr_type())); - + Value::add(value, value_, value_); return RC::SUCCESS; } -RC SumAggregator::evaluate(Value& result) +RC SumAggregator::evaluate(Value &result) { result = value_; return RC::SUCCESS; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/expr/aggregator.h b/src/observer/sql/expr/aggregator.h index 08a9b8ae3..f78f89b6e 100644 --- a/src/observer/sql/expr/aggregator.h +++ b/src/observer/sql/expr/aggregator.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "common/value.h" #include "common/sys/rc.h" +namespace oceanbase { + class Aggregator { public: @@ -35,3 +37,4 @@ class SumAggregator : public Aggregator RC accumulate(const Value &value) override; RC evaluate(Value &result) override; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/expr/arithmetic_operator.hpp b/src/observer/sql/expr/arithmetic_operator.hpp index e5560703a..c3191cc27 100644 --- a/src/observer/sql/expr/arithmetic_operator.hpp +++ b/src/observer/sql/expr/arithmetic_operator.hpp @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/common/column.h" +namespace oceanbase { + struct Equal { template @@ -372,3 +374,4 @@ void compare_result(T *left, T *right, int n, vector &result, CompOp op default: break; } } +} \ No newline at end of file diff --git a/src/observer/sql/expr/composite_tuple.cpp b/src/observer/sql/expr/composite_tuple.cpp index 40ff81284..09d69eda2 100644 --- a/src/observer/sql/expr/composite_tuple.cpp +++ b/src/observer/sql/expr/composite_tuple.cpp @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ using namespace std; +namespace oceanbase { + int CompositeTuple::cell_num() const { int num = 0; @@ -64,8 +66,9 @@ RC CompositeTuple::find_cell(const TupleCellSpec &spec, Value &cell) const void CompositeTuple::add_tuple(unique_ptr tuple) { tuples_.push_back(std::move(tuple)); } -Tuple &CompositeTuple::tuple_at(size_t index) -{ +Tuple &CompositeTuple::tuple_at(size_t index) +{ ASSERT(index < tuples_.size(), "index=%d, tuples_size=%d", index, tuples_.size()); - return *tuples_[index]; -} \ No newline at end of file + return *tuples_[index]; +} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/expr/composite_tuple.h b/src/observer/sql/expr/composite_tuple.h index f8883295d..ffd6b702f 100644 --- a/src/observer/sql/expr/composite_tuple.h +++ b/src/observer/sql/expr/composite_tuple.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/expr/tuple.h" +namespace oceanbase { + /** * @brief 组合的Tuple * @ingroup Tuple @@ -48,3 +50,4 @@ class CompositeTuple : public Tuple private: vector> tuples_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/expr/expression.cpp b/src/observer/sql/expr/expression.cpp index df5d1c807..e0163b160 100644 --- a/src/observer/sql/expr/expression.cpp +++ b/src/observer/sql/expr/expression.cpp @@ -18,6 +18,8 @@ See the Mulan PSL v2 for more details. */ using namespace std; +namespace oceanbase { + RC FieldExpr::get_value(const Tuple &tuple, Value &value) const { return tuple.find_cell(TupleCellSpec(table_name(), field_name()), value); @@ -91,7 +93,7 @@ RC CastExpr::cast(const Value &value, Value &cast_value) const RC CastExpr::get_value(const Tuple &tuple, Value &result) const { Value value; - RC rc = child_->get_value(tuple, value); + RC rc = child_->get_value(tuple, value); if (rc != RC::SUCCESS) { return rc; } @@ -102,7 +104,7 @@ RC CastExpr::get_value(const Tuple &tuple, Value &result) const RC CastExpr::get_column(Chunk &chunk, Column &column) { Column child_column; - RC rc = child_->get_column(chunk, child_column); + RC rc = child_->get_column(chunk, child_column); if (rc != RC::SUCCESS) { return rc; } @@ -122,7 +124,7 @@ RC CastExpr::get_column(Chunk &chunk, Column &column) RC CastExpr::try_get_value(Value &result) const { Value value; - RC rc = child_->try_get_value(value); + RC rc = child_->try_get_value(value); if (rc != RC::SUCCESS) { return rc; } @@ -134,8 +136,7 @@ RC CastExpr::try_get_value(Value &result) const ComparisonExpr::ComparisonExpr(CompOp comp, unique_ptr left, unique_ptr right) : comp_(comp), left_(std::move(left)), right_(std::move(right)) -{ -} +{} ComparisonExpr::~ComparisonExpr() {} @@ -175,8 +176,8 @@ RC ComparisonExpr::compare_value(const Value &left, const Value &right, bool &re RC ComparisonExpr::try_get_value(Value &cell) const { if (left_->type() == ExprType::VALUE && right_->type() == ExprType::VALUE) { - ValueExpr * left_value_expr = static_cast(left_.get()); - ValueExpr * right_value_expr = static_cast(right_.get()); + ValueExpr *left_value_expr = static_cast(left_.get()); + ValueExpr *right_value_expr = static_cast(right_.get()); const Value &left_cell = left_value_expr->get_value(); const Value &right_cell = right_value_expr->get_value(); @@ -250,10 +251,10 @@ RC ComparisonExpr::eval(Chunk &chunk, vector &select) rows = left_column.count(); } for (int i = 0; i < rows; ++i) { - Value left_val = left_column.get_value(i); + Value left_val = left_column.get_value(i); Value right_val = right_column.get_value(i); - bool result = false; - rc = compare_value(left_val, right_val, result); + bool result = false; + rc = compare_value(left_val, right_val, result); if (rc != RC::SUCCESS) { LOG_WARN("failed to compare tuple cells. rc=%s", strrc(rc)); return rc; @@ -346,8 +347,7 @@ AttrType ArithmeticExpr::value_type() const return left_->value_type(); } - if ((left_->value_type() == AttrType::INTS) && - (right_->value_type() == AttrType::INTS) && + if ((left_->value_type() == AttrType::INTS) && (right_->value_type() == AttrType::INTS) && arithmetic_type_ != Type::DIV) { return AttrType::INTS; } @@ -628,3 +628,4 @@ RC AggregateExpr::type_from_string(const char *type_str, AggregateExpr::Type &ty } return rc; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/expr/expression.h b/src/observer/sql/expr/expression.h index 02dc27c2f..2216c1591 100644 --- a/src/observer/sql/expr/expression.h +++ b/src/observer/sql/expr/expression.h @@ -22,6 +22,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/expr/aggregator.h" #include "storage/common/chunk.h" +namespace oceanbase { + class Tuple; /** @@ -528,3 +530,4 @@ class AggregateExpr : public Expression Type aggregate_type_; unique_ptr child_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/expr/expression_iterator.cpp b/src/observer/sql/expr/expression_iterator.cpp index ca8cd6d5e..4a98ba2e2 100644 --- a/src/observer/sql/expr/expression_iterator.cpp +++ b/src/observer/sql/expr/expression_iterator.cpp @@ -18,6 +18,8 @@ See the Mulan PSL v2 for more details. */ using namespace std; +namespace oceanbase { + RC ExpressionIterator::iterate_child_expr(Expression &expr, function &)> callback) { RC rc = RC::SUCCESS; @@ -25,13 +27,13 @@ RC ExpressionIterator::iterate_child_expr(Expression &expr, function(expr); - rc = callback(cast_expr.child()); + rc = callback(cast_expr.child()); } break; case ExprType::COMPARISON: { auto &comparison_expr = static_cast(expr); - rc = callback(comparison_expr.left()); + rc = callback(comparison_expr.left()); if (OB_SUCC(rc)) { rc = callback(comparison_expr.right()); @@ -52,7 +54,7 @@ RC ExpressionIterator::iterate_child_expr(Expression &expr, function(expr); - rc = callback(arithmetic_expr.left()); + rc = callback(arithmetic_expr.left()); if (OB_SUCC(rc)) { rc = callback(arithmetic_expr.right()); } @@ -60,7 +62,7 @@ RC ExpressionIterator::iterate_child_expr(Expression &expr, function(expr); - rc = callback(aggregate_expr.child()); + rc = callback(aggregate_expr.child()); } break; case ExprType::NONE: @@ -77,4 +79,5 @@ RC ExpressionIterator::iterate_child_expr(Expression &expr, function &)> callback); }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/expr/expression_tuple.h b/src/observer/sql/expr/expression_tuple.h index c70cd4fc2..96cf78632 100644 --- a/src/observer/sql/expr/expression_tuple.h +++ b/src/observer/sql/expr/expression_tuple.h @@ -19,6 +19,8 @@ See the Mulan PSL v2 for more details. */ #include "common/value.h" #include "common/sys/rc.h" +namespace oceanbase { + template class ExpressionTuple : public Tuple { @@ -88,3 +90,4 @@ class ExpressionTuple : public Tuple const vector &expressions_; const Tuple *child_tuple_ = nullptr; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/expr/tuple.h b/src/observer/sql/expr/tuple.h index 053aa9a91..c76aab11f 100644 --- a/src/observer/sql/expr/tuple.h +++ b/src/observer/sql/expr/tuple.h @@ -21,6 +21,8 @@ See the Mulan PSL v2 for more details. */ #include "common/value.h" #include "storage/record/record.h" +namespace oceanbase { + class Table; /** @@ -440,3 +442,4 @@ class JoinedTuple : public Tuple Tuple *left_ = nullptr; Tuple *right_ = nullptr; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/expr/tuple_cell.cpp b/src/observer/sql/expr/tuple_cell.cpp index 4646643dd..419630093 100644 --- a/src/observer/sql/expr/tuple_cell.cpp +++ b/src/observer/sql/expr/tuple_cell.cpp @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ using namespace std; +namespace oceanbase { + TupleCellSpec::TupleCellSpec(const char *table_name, const char *field_name, const char *alias) { if (table_name) { @@ -43,5 +45,5 @@ TupleCellSpec::TupleCellSpec(const char *alias) } } -TupleCellSpec::TupleCellSpec(const string &alias) : alias_(alias) -{} +TupleCellSpec::TupleCellSpec(const string &alias) : alias_(alias) {} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/expr/tuple_cell.h b/src/observer/sql/expr/tuple_cell.h index 3268f2f29..88172922a 100644 --- a/src/observer/sql/expr/tuple_cell.h +++ b/src/observer/sql/expr/tuple_cell.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/field/field_meta.h" +namespace oceanbase { + class TupleCellSpec final { public: @@ -38,3 +40,4 @@ class TupleCellSpec final string field_name_; string alias_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/aggregate_vec_physical_operator.cpp b/src/observer/sql/operator/aggregate_vec_physical_operator.cpp index cace563a4..e20ca8db6 100644 --- a/src/observer/sql/operator/aggregate_vec_physical_operator.cpp +++ b/src/observer/sql/operator/aggregate_vec_physical_operator.cpp @@ -17,13 +17,15 @@ See the Mulan PSL v2 for more details. */ using namespace common; +namespace oceanbase { + AggregateVecPhysicalOperator::AggregateVecPhysicalOperator(vector &&expressions) { aggregate_expressions_ = std::move(expressions); value_expressions_.reserve(aggregate_expressions_.size()); ranges::for_each(aggregate_expressions_, [this](Expression *expr) { - auto * aggregate_expr = static_cast(expr); + auto *aggregate_expr = static_cast(expr); Expression *child_expr = aggregate_expr->child().get(); ASSERT(child_expr != nullptr, "aggregation expression must have a child expression"); value_expressions_.emplace_back(child_expr); @@ -57,7 +59,8 @@ RC AggregateVecPhysicalOperator::open(Trx *trx) value_expressions_[aggr_idx]->get_column(chunk_, column); ASSERT(aggregate_expressions_[aggr_idx]->type() == ExprType::AGGREGATION, "expect aggregate expression"); auto *aggregate_expr = static_cast(aggregate_expressions_[aggr_idx]); - rc = aggregate_state_update_by_column(aggr_values_.at(aggr_idx), aggregate_expr->aggregate_type(), aggregate_expr->child()->value_type(), column); + rc = aggregate_state_update_by_column( + aggr_values_.at(aggr_idx), aggregate_expr->aggregate_type(), aggregate_expr->child()->value_type(), column); if (OB_FAIL(rc)) { LOG_INFO("failed to update aggregate state. rc=%s", strrc(rc)); return rc; @@ -76,7 +79,7 @@ template void AggregateVecPhysicalOperator::update_aggregate_state(void *state, const Column &column) { STATE *state_ptr = reinterpret_cast(state); - T * data = (T *)column.data(); + T *data = (T *)column.data(); state_ptr->update(data, column.count()); } @@ -89,7 +92,10 @@ RC AggregateVecPhysicalOperator::next(Chunk &chunk) auto pos = i; ASSERT(aggregate_expressions_[pos]->type() == ExprType::AGGREGATION, "expect aggregation expression"); auto *aggregate_expr = static_cast(aggregate_expressions_[pos]); - RC rc = finialize_aggregate_state(aggr_values_.at(pos), aggregate_expr->aggregate_type(), aggregate_expr->child()->value_type(), output_chunk_.column(i)); + RC rc = finialize_aggregate_state(aggr_values_.at(pos), + aggregate_expr->aggregate_type(), + aggregate_expr->child()->value_type(), + output_chunk_.column(i)); if (OB_FAIL(rc)) { LOG_INFO("failed to finialize aggregate state. rc=%s", strrc(rc)); return rc; @@ -108,3 +114,4 @@ RC AggregateVecPhysicalOperator::close() LOG_INFO("close group by operator"); return RC::SUCCESS; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/aggregate_vec_physical_operator.h b/src/observer/sql/operator/aggregate_vec_physical_operator.h index 1afab13f2..f7911ce15 100644 --- a/src/observer/sql/operator/aggregate_vec_physical_operator.h +++ b/src/observer/sql/operator/aggregate_vec_physical_operator.h @@ -12,6 +12,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/physical_operator.h" +namespace oceanbase { + /** * @brief 聚合物理算子 (Vectorized) * @ingroup PhysicalOperator @@ -66,3 +68,4 @@ class AggregateVecPhysicalOperator : public PhysicalOperator AggregateValues aggr_values_; bool outputed_ = false; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/calc_logical_operator.h b/src/observer/sql/operator/calc_logical_operator.h index 985dd388d..caf2ac751 100644 --- a/src/observer/sql/operator/calc_logical_operator.h +++ b/src/observer/sql/operator/calc_logical_operator.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/logical_operator.h" +namespace oceanbase { + /** * @brief 逻辑算子描述当前执行计划要做什么 * @details 可以看OptimizeStage中相关的代码 @@ -29,3 +31,4 @@ class CalcLogicalOperator : public LogicalOperator LogicalOperatorType type() const override { return LogicalOperatorType::CALC; } OpType get_op_type() const override { return OpType::LOGICALCALCULATE; } }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/calc_physical_operator.h b/src/observer/sql/operator/calc_physical_operator.h index 4b704af80..6d64f0fb8 100644 --- a/src/observer/sql/operator/calc_physical_operator.h +++ b/src/observer/sql/operator/calc_physical_operator.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/expr/expression_tuple.h" #include "sql/operator/physical_operator.h" +namespace oceanbase { + class CalcPhysicalOperator : public PhysicalOperator { public: @@ -73,3 +75,4 @@ class CalcPhysicalOperator : public PhysicalOperator ExpressionTuple> tuple_; bool emitted_ = false; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/delete_logical_operator.cpp b/src/observer/sql/operator/delete_logical_operator.cpp index 5fc03f34e..2952796ba 100644 --- a/src/observer/sql/operator/delete_logical_operator.cpp +++ b/src/observer/sql/operator/delete_logical_operator.cpp @@ -14,4 +14,7 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/delete_logical_operator.h" +namespace oceanbase { + DeleteLogicalOperator::DeleteLogicalOperator(Table *table) : table_(table) {} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/delete_logical_operator.h b/src/observer/sql/operator/delete_logical_operator.h index effc305c9..848a58c6a 100644 --- a/src/observer/sql/operator/delete_logical_operator.h +++ b/src/observer/sql/operator/delete_logical_operator.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/logical_operator.h" +namespace oceanbase { + /** * @brief 逻辑算子,用于执行delete语句 * @ingroup LogicalOperator @@ -33,3 +35,4 @@ class DeleteLogicalOperator : public LogicalOperator private: Table *table_ = nullptr; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/delete_physical_operator.cpp b/src/observer/sql/operator/delete_physical_operator.cpp index ea239a9b0..fe3d1e715 100644 --- a/src/observer/sql/operator/delete_physical_operator.cpp +++ b/src/observer/sql/operator/delete_physical_operator.cpp @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/table/table.h" #include "storage/trx/trx.h" +namespace oceanbase { + RC DeletePhysicalOperator::open(Trx *trx) { if (children_.empty()) { @@ -60,12 +62,7 @@ RC DeletePhysicalOperator::open(Trx *trx) return RC::SUCCESS; } -RC DeletePhysicalOperator::next() -{ - return RC::RECORD_EOF; -} +RC DeletePhysicalOperator::next() { return RC::RECORD_EOF; } -RC DeletePhysicalOperator::close() -{ - return RC::SUCCESS; -} +RC DeletePhysicalOperator::close() { return RC::SUCCESS; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/delete_physical_operator.h b/src/observer/sql/operator/delete_physical_operator.h index 241447985..28d910ffd 100644 --- a/src/observer/sql/operator/delete_physical_operator.h +++ b/src/observer/sql/operator/delete_physical_operator.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/physical_operator.h" +namespace oceanbase { + class Trx; class DeleteStmt; @@ -45,3 +47,4 @@ class DeletePhysicalOperator : public PhysicalOperator Trx *trx_ = nullptr; vector records_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/explain_logical_operator.h b/src/observer/sql/operator/explain_logical_operator.h index c226f0f9b..2b53e7fc4 100644 --- a/src/observer/sql/operator/explain_logical_operator.h +++ b/src/observer/sql/operator/explain_logical_operator.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/logical_operator.h" +namespace oceanbase { + /** * @brief Explain逻辑算子 * @ingroup LogicalOperator @@ -30,3 +32,4 @@ class ExplainLogicalOperator : public LogicalOperator OpType get_op_type() const override { return OpType::LOGICALEXPLAIN; } }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/explain_physical_operator.cpp b/src/observer/sql/operator/explain_physical_operator.cpp index 1ff2933a3..3f565df6c 100644 --- a/src/observer/sql/operator/explain_physical_operator.cpp +++ b/src/observer/sql/operator/explain_physical_operator.cpp @@ -18,6 +18,8 @@ See the Mulan PSL v2 for more details. */ using namespace std; +namespace oceanbase { + RC ExplainPhysicalOperator::open(Trx *) { ASSERT(children_.size() == 1, "explain must has 1 child"); @@ -53,12 +55,12 @@ RC ExplainPhysicalOperator::next(Chunk &chunk) } generate_physical_plan(); - Value cell(physical_plan_.c_str()); - auto column = make_unique(); + Value cell(physical_plan_.c_str()); + auto column = make_unique(); column->init(cell, chunk.rows()); chunk.add_column(std::move(column), 0); return RC::SUCCESS; } Tuple *ExplainPhysicalOperator::current_tuple() { return &tuple_; } - +} // namespace oceanbase diff --git a/src/observer/sql/operator/explain_physical_operator.h b/src/observer/sql/operator/explain_physical_operator.h index 10c1b6d7a..038850619 100644 --- a/src/observer/sql/operator/explain_physical_operator.h +++ b/src/observer/sql/operator/explain_physical_operator.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/physical_operator.h" +namespace oceanbase { + /** * @brief Explain物理算子 * @ingroup PhysicalOperator @@ -54,3 +56,4 @@ class ExplainPhysicalOperator : public PhysicalOperator string physical_plan_; ValueListTuple tuple_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/expr_vec_physical_operator.cpp b/src/observer/sql/operator/expr_vec_physical_operator.cpp index 64a3a99bb..dd9c03b0f 100644 --- a/src/observer/sql/operator/expr_vec_physical_operator.cpp +++ b/src/observer/sql/operator/expr_vec_physical_operator.cpp @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ using namespace std; using namespace common; +namespace oceanbase { + ExprVecPhysicalOperator::ExprVecPhysicalOperator(vector &&expressions) { expressions_ = std::move(expressions); @@ -60,3 +62,4 @@ RC ExprVecPhysicalOperator::close() LOG_INFO("close group by operator"); return RC::SUCCESS; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/expr_vec_physical_operator.h b/src/observer/sql/operator/expr_vec_physical_operator.h index bbd5a9a91..505ad0e6c 100644 --- a/src/observer/sql/operator/expr_vec_physical_operator.h +++ b/src/observer/sql/operator/expr_vec_physical_operator.h @@ -12,6 +12,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/physical_operator.h" +namespace oceanbase { + /** * @brief 表达式物理算子(Vectorized) * @ingroup PhysicalOperator @@ -34,3 +36,4 @@ class ExprVecPhysicalOperator : public PhysicalOperator Chunk chunk_; Chunk evaled_chunk_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/group_by_logical_operator.cpp b/src/observer/sql/operator/group_by_logical_operator.cpp index 5d86d847c..3ac7cfe91 100644 --- a/src/observer/sql/operator/group_by_logical_operator.cpp +++ b/src/observer/sql/operator/group_by_logical_operator.cpp @@ -18,9 +18,12 @@ See the Mulan PSL v2 for more details. */ using namespace std; -GroupByLogicalOperator::GroupByLogicalOperator(vector> &&group_by_exprs, - vector &&expressions) +namespace oceanbase { + +GroupByLogicalOperator::GroupByLogicalOperator( + vector> &&group_by_exprs, vector &&expressions) { - group_by_expressions_ = std::move(group_by_exprs); + group_by_expressions_ = std::move(group_by_exprs); aggregate_expressions_ = std::move(expressions); } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/group_by_logical_operator.h b/src/observer/sql/operator/group_by_logical_operator.h index 6e533e906..e3248d188 100644 --- a/src/observer/sql/operator/group_by_logical_operator.h +++ b/src/observer/sql/operator/group_by_logical_operator.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/logical_operator.h" +namespace oceanbase { + class GroupByLogicalOperator : public LogicalOperator { public: @@ -33,3 +35,4 @@ class GroupByLogicalOperator : public LogicalOperator vector> group_by_expressions_; vector aggregate_expressions_; ///< 输出的表达式,可能包含聚合函数 }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/group_by_physical_operator.cpp b/src/observer/sql/operator/group_by_physical_operator.cpp index 75301f2b6..3457be317 100644 --- a/src/observer/sql/operator/group_by_physical_operator.cpp +++ b/src/observer/sql/operator/group_by_physical_operator.cpp @@ -21,6 +21,8 @@ See the Mulan PSL v2 for more details. */ using namespace std; using namespace common; +namespace oceanbase { + GroupByPhysicalOperator::GroupByPhysicalOperator(vector &&expressions) { aggregate_expressions_ = std::move(expressions); @@ -102,3 +104,4 @@ RC GroupByPhysicalOperator::evaluate(GroupValueType &group_value) return rc; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/group_by_physical_operator.h b/src/observer/sql/operator/group_by_physical_operator.h index 5c7a8f3ef..48a07ed82 100644 --- a/src/observer/sql/operator/group_by_physical_operator.h +++ b/src/observer/sql/operator/group_by_physical_operator.h @@ -18,6 +18,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/physical_operator.h" #include "sql/expr/composite_tuple.h" +namespace oceanbase { + /** * @brief Group By 物理算子基类 * @ingroup PhysicalOperator @@ -56,3 +58,4 @@ class GroupByPhysicalOperator : public PhysicalOperator vector aggregate_expressions_; /// 聚合表达式 vector value_expressions_; /// 计算聚合时的表达式 }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/group_by_vec_physical_operator.h b/src/observer/sql/operator/group_by_vec_physical_operator.h index fe00deec7..3889a5e12 100644 --- a/src/observer/sql/operator/group_by_vec_physical_operator.h +++ b/src/observer/sql/operator/group_by_vec_physical_operator.h @@ -13,6 +13,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/expr/aggregate_hash_table.h" #include "sql/operator/physical_operator.h" +namespace oceanbase { + /** * @brief Group By 物理算子(vectorized) * @ingroup PhysicalOperator @@ -20,7 +22,7 @@ See the Mulan PSL v2 for more details. */ class GroupByVecPhysicalOperator : public PhysicalOperator { public: - GroupByVecPhysicalOperator(vector> &&group_by_exprs, vector &&expressions){}; + GroupByVecPhysicalOperator(vector> &&group_by_exprs, vector &&expressions) {}; virtual ~GroupByVecPhysicalOperator() = default; @@ -32,3 +34,4 @@ class GroupByVecPhysicalOperator : public PhysicalOperator private: }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/hash_group_by_physical_operator.cpp b/src/observer/sql/operator/hash_group_by_physical_operator.cpp index f408c0ec9..e8bb88c1e 100644 --- a/src/observer/sql/operator/hash_group_by_physical_operator.cpp +++ b/src/observer/sql/operator/hash_group_by_physical_operator.cpp @@ -20,11 +20,12 @@ See the Mulan PSL v2 for more details. */ using namespace std; using namespace common; +namespace oceanbase { + HashGroupByPhysicalOperator::HashGroupByPhysicalOperator( vector> &&group_by_exprs, vector &&expressions) : GroupByPhysicalOperator(std::move(expressions)), group_by_exprs_(std::move(group_by_exprs)) -{ -} +{} RC HashGroupByPhysicalOperator::open(Trx *trx) { @@ -61,7 +62,7 @@ RC HashGroupByPhysicalOperator::open(Trx *trx) // 计算聚合值 GroupValueType &group_value = get<1>(*found_group); - rc = aggregate(get<0>(group_value), group_value_expression_tuple); + rc = aggregate(get<0>(group_value), group_value_expression_tuple); if (OB_FAIL(rc)) { LOG_WARN("failed to aggregate values. rc=%s", strrc(rc)); return rc; @@ -80,7 +81,7 @@ RC HashGroupByPhysicalOperator::open(Trx *trx) // 得到最终聚合后的值 for (GroupType &group : groups_) { GroupValueType &group_value = get<1>(group); - rc = evaluate(group_value); + rc = evaluate(group_value); if (OB_FAIL(rc)) { LOG_WARN("failed to evaluate group value. rc=%s", strrc(rc)); return rc; @@ -170,10 +171,11 @@ RC HashGroupByPhysicalOperator::find_group(const Tuple &child_tuple, GroupType * CompositeTuple composite_tuple; composite_tuple.add_tuple(make_unique(std::move(child_tuple_to_value))); - groups_.emplace_back(std::move(group_by_evaluated_tuple), - GroupValueType(std::move(aggregator_list), std::move(composite_tuple))); + groups_.emplace_back( + std::move(group_by_evaluated_tuple), GroupValueType(std::move(aggregator_list), std::move(composite_tuple))); found_group = &groups_.back(); } return rc; -} \ No newline at end of file +} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/hash_group_by_physical_operator.h b/src/observer/sql/operator/hash_group_by_physical_operator.h index 36431d5a9..db85d63f3 100644 --- a/src/observer/sql/operator/hash_group_by_physical_operator.h +++ b/src/observer/sql/operator/hash_group_by_physical_operator.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/group_by_physical_operator.h" #include "sql/expr/composite_tuple.h" +namespace oceanbase { + /** * @brief Group By Hash 方式物理算子 * @ingroup PhysicalOperator @@ -60,3 +62,4 @@ class HashGroupByPhysicalOperator : public GroupByPhysicalOperator vector::iterator current_group_; bool first_emited_ = false; /// 第一条数据是否已经输出 }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/hash_join_physical_operator.h b/src/observer/sql/operator/hash_join_physical_operator.h index 4c7879aaa..287ce0958 100644 --- a/src/observer/sql/operator/hash_join_physical_operator.h +++ b/src/observer/sql/operator/hash_join_physical_operator.h @@ -13,9 +13,12 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/physical_operator.h" #include "sql/parser/parse.h" +namespace oceanbase { + /** * @brief Hash Join 算子 * @ingroup PhysicalOperator */ class HashJoinPhysicalOperator -{}; \ No newline at end of file +{}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/index_scan_physical_operator.cpp b/src/observer/sql/operator/index_scan_physical_operator.cpp index 01cf7eb79..cb78d9bb4 100644 --- a/src/observer/sql/operator/index_scan_physical_operator.cpp +++ b/src/observer/sql/operator/index_scan_physical_operator.cpp @@ -16,13 +16,11 @@ See the Mulan PSL v2 for more details. */ #include "storage/index/index.h" #include "storage/trx/trx.h" -IndexScanPhysicalOperator::IndexScanPhysicalOperator(Table *table, Index *index, ReadWriteMode mode, const Value *left_value, - bool left_inclusive, const Value *right_value, bool right_inclusive) - : table_(table), - index_(index), - mode_(mode), - left_inclusive_(left_inclusive), - right_inclusive_(right_inclusive) +namespace oceanbase { + +IndexScanPhysicalOperator::IndexScanPhysicalOperator(Table *table, Index *index, ReadWriteMode mode, + const Value *left_value, bool left_inclusive, const Value *right_value, bool right_inclusive) + : table_(table), index_(index), mode_(mode), left_inclusive_(left_inclusive), right_inclusive_(right_inclusive) { if (left_value) { left_value_ = *left_value; @@ -139,3 +137,4 @@ string IndexScanPhysicalOperator::param() const { return string(index_->index_meta().name()) + " ON " + table_->name(); } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/index_scan_physical_operator.h b/src/observer/sql/operator/index_scan_physical_operator.h index 405e74716..1d37b99ff 100644 --- a/src/observer/sql/operator/index_scan_physical_operator.h +++ b/src/observer/sql/operator/index_scan_physical_operator.h @@ -18,6 +18,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/physical_operator.h" #include "storage/record/record_manager.h" +namespace oceanbase { + /** * @brief 索引扫描物理算子 * @ingroup PhysicalOperator @@ -63,3 +65,4 @@ class IndexScanPhysicalOperator : public PhysicalOperator vector> predicates_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/insert_logical_operator.cpp b/src/observer/sql/operator/insert_logical_operator.cpp index 51ad27a2e..6b8824eef 100644 --- a/src/observer/sql/operator/insert_logical_operator.cpp +++ b/src/observer/sql/operator/insert_logical_operator.cpp @@ -14,5 +14,7 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/insert_logical_operator.h" -InsertLogicalOperator::InsertLogicalOperator(Table *table, vector values) : table_(table), values_(values) -{} +namespace oceanbase { + +InsertLogicalOperator::InsertLogicalOperator(Table *table, vector values) : table_(table), values_(values) {} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/insert_logical_operator.h b/src/observer/sql/operator/insert_logical_operator.h index 72df40ac5..6e2f23072 100644 --- a/src/observer/sql/operator/insert_logical_operator.h +++ b/src/observer/sql/operator/insert_logical_operator.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/logical_operator.h" #include "sql/parser/parse_defs.h" +namespace oceanbase { + /** * @brief 插入逻辑算子 * @ingroup LogicalOperator @@ -39,3 +41,4 @@ class InsertLogicalOperator : public LogicalOperator Table *table_ = nullptr; vector values_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/insert_physical_operator.cpp b/src/observer/sql/operator/insert_physical_operator.cpp index fd1bc9085..31376b9c8 100644 --- a/src/observer/sql/operator/insert_physical_operator.cpp +++ b/src/observer/sql/operator/insert_physical_operator.cpp @@ -19,6 +19,8 @@ See the Mulan PSL v2 for more details. */ using namespace std; +namespace oceanbase { + InsertPhysicalOperator::InsertPhysicalOperator(Table *table, vector &&values) : table_(table), values_(std::move(values)) {} @@ -42,3 +44,4 @@ RC InsertPhysicalOperator::open(Trx *trx) RC InsertPhysicalOperator::next() { return RC::RECORD_EOF; } RC InsertPhysicalOperator::close() { return RC::SUCCESS; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/insert_physical_operator.h b/src/observer/sql/operator/insert_physical_operator.h index 85aedc6e5..cf5bb2e68 100644 --- a/src/observer/sql/operator/insert_physical_operator.h +++ b/src/observer/sql/operator/insert_physical_operator.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/physical_operator.h" #include "sql/parser/parse.h" +namespace oceanbase { + class InsertStmt; /** @@ -44,3 +46,4 @@ class InsertPhysicalOperator : public PhysicalOperator Table *table_ = nullptr; vector values_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/join_logical_operator.h b/src/observer/sql/operator/join_logical_operator.h index deec7bcd8..02bc85451 100644 --- a/src/observer/sql/operator/join_logical_operator.h +++ b/src/observer/sql/operator/join_logical_operator.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/logical_operator.h" +namespace oceanbase { + /** * @brief 连接算子 * @ingroup LogicalOperator @@ -73,3 +75,4 @@ class JoinLogicalOperator : public LogicalOperator LogicalOperator *predicate_op_ = nullptr; std::vector> join_predicates_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/join_physical_operator.cpp b/src/observer/sql/operator/join_physical_operator.cpp index 0de387301..6d4216490 100644 --- a/src/observer/sql/operator/join_physical_operator.cpp +++ b/src/observer/sql/operator/join_physical_operator.cpp @@ -14,6 +14,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/join_physical_operator.h" +namespace oceanbase { + NestedLoopJoinPhysicalOperator::NestedLoopJoinPhysicalOperator() {} RC NestedLoopJoinPhysicalOperator::open(Trx *trx) @@ -131,3 +133,4 @@ RC NestedLoopJoinPhysicalOperator::right_next() joined_tuple_.set_right(right_tuple_); return rc; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/join_physical_operator.h b/src/observer/sql/operator/join_physical_operator.h index 930d5f194..1cd46f717 100644 --- a/src/observer/sql/operator/join_physical_operator.h +++ b/src/observer/sql/operator/join_physical_operator.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/physical_operator.h" #include "sql/parser/parse.h" +namespace oceanbase { + /** * @brief 最简单的两表(称为左表、右表)join算子 * @details 依次遍历左表的每一行,然后关联右表的每一行 @@ -51,3 +53,4 @@ class NestedLoopJoinPhysicalOperator : public PhysicalOperator bool round_done_ = true; //! 右表遍历的一轮是否结束 bool right_closed_ = true; //! 右表算子是否已经关闭 }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/logical_operator.cpp b/src/observer/sql/operator/logical_operator.cpp index a2fb251db..87ac2248e 100644 --- a/src/observer/sql/operator/logical_operator.cpp +++ b/src/observer/sql/operator/logical_operator.cpp @@ -14,26 +14,21 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/logical_operator.h" +namespace oceanbase { + LogicalOperator::~LogicalOperator() {} -void LogicalOperator::add_child(unique_ptr oper) { - children_.emplace_back(std::move(oper)); -} +void LogicalOperator::add_child(unique_ptr oper) { children_.emplace_back(std::move(oper)); } void LogicalOperator::add_expressions(unique_ptr expr) { expressions_.emplace_back(std::move(expr)); } bool LogicalOperator::can_generate_vectorized_operator(const LogicalOperatorType &type) { bool bool_ret = false; - switch (type) - { - case LogicalOperatorType::CALC: - case LogicalOperatorType::DELETE: - case LogicalOperatorType::INSERT: - bool_ret = false; - break; - - default: - bool_ret = true; - break; + switch (type) { + case LogicalOperatorType::CALC: + case LogicalOperatorType::DELETE: + case LogicalOperatorType::INSERT: bool_ret = false; break; + + default: bool_ret = true; break; } return bool_ret; } @@ -45,4 +40,4 @@ void LogicalOperator::generate_general_child() child->generate_general_child(); } } - +} // namespace oceanbase diff --git a/src/observer/sql/operator/logical_operator.h b/src/observer/sql/operator/logical_operator.h index d212dbcc2..dd8ff4993 100644 --- a/src/observer/sql/operator/logical_operator.h +++ b/src/observer/sql/operator/logical_operator.h @@ -18,6 +18,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/operator_node.h" #include "common/lang/unordered_set.h" +namespace oceanbase { + /** * @brief 逻辑算子 * @defgroup LogicalOperator @@ -72,3 +74,4 @@ class LogicalOperator : public OperatorNode ///< 表达式能是一个常量,也可以是一个函数,也可以是一个列,也可以是一个子查询等等 vector> expressions_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/nested_loop_join_physical_operator.cpp b/src/observer/sql/operator/nested_loop_join_physical_operator.cpp index 5228d23fd..24c7b62c5 100644 --- a/src/observer/sql/operator/nested_loop_join_physical_operator.cpp +++ b/src/observer/sql/operator/nested_loop_join_physical_operator.cpp @@ -14,6 +14,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/nested_loop_join_physical_operator.h" +namespace oceanbase { + NestedLoopJoinPhysicalOperator::NestedLoopJoinPhysicalOperator() {} RC NestedLoopJoinPhysicalOperator::open(Trx *trx) @@ -36,7 +38,7 @@ RC NestedLoopJoinPhysicalOperator::open(Trx *trx) RC NestedLoopJoinPhysicalOperator::next() { - RC rc = RC::SUCCESS; + RC rc = RC::SUCCESS; while (RC::SUCCESS == rc) { bool left_need_step = (left_tuple_ == nullptr); if (round_done_) { @@ -53,7 +55,7 @@ RC NestedLoopJoinPhysicalOperator::next() rc = right_next(); if (rc != RC::SUCCESS) { if (rc == RC::RECORD_EOF) { - rc = RC::SUCCESS; + rc = RC::SUCCESS; round_done_ = true; continue; } else { @@ -131,3 +133,4 @@ RC NestedLoopJoinPhysicalOperator::right_next() joined_tuple_.set_right(right_tuple_); return rc; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/nested_loop_join_physical_operator.h b/src/observer/sql/operator/nested_loop_join_physical_operator.h index 80b455975..edb979f25 100644 --- a/src/observer/sql/operator/nested_loop_join_physical_operator.h +++ b/src/observer/sql/operator/nested_loop_join_physical_operator.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/physical_operator.h" #include "sql/parser/parse.h" +namespace oceanbase { + /** * @brief 最简单的两表(称为左表、右表)join算子 * @details 依次遍历左表的每一行,然后关联右表的每一行 @@ -62,3 +64,4 @@ class NestedLoopJoinPhysicalOperator : public PhysicalOperator bool round_done_ = true; //! 右表遍历的一轮是否结束 bool right_closed_ = true; //! 右表算子是否已经关闭 }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/operator_node.h b/src/observer/sql/operator/operator_node.h index f349f4b00..4f9321024 100644 --- a/src/observer/sql/operator/operator_node.h +++ b/src/observer/sql/operator/operator_node.h @@ -15,6 +15,9 @@ See the Mulan PSL v2 for more details. */ #include "common/lang/memory.h" #include "sql/optimizer/cascade/property.h" #include "sql/optimizer/cascade/cost_model.h" + +namespace oceanbase { + /** * @brief Operator type(including logical and physical) */ @@ -141,4 +144,5 @@ class OperatorNode // TODO: refactor // cascade optimizer 中使用,为了logical/physical operator 可以统一在 cascade 中迭代 vector general_children_; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/physical_operator.cpp b/src/observer/sql/operator/physical_operator.cpp index 7ff99d67c..2406ba7c1 100644 --- a/src/observer/sql/operator/physical_operator.cpp +++ b/src/observer/sql/operator/physical_operator.cpp @@ -14,6 +14,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/physical_operator.h" +namespace oceanbase { + string physical_operator_type_name(PhysicalOperatorType type) { switch (type) { @@ -41,3 +43,4 @@ string physical_operator_type_name(PhysicalOperatorType type) string PhysicalOperator::name() const { return physical_operator_type_name(type()); } string PhysicalOperator::param() const { return ""; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/physical_operator.h b/src/observer/sql/operator/physical_operator.h index 8f2b67ba1..16cbaf443 100644 --- a/src/observer/sql/operator/physical_operator.h +++ b/src/observer/sql/operator/physical_operator.h @@ -22,6 +22,8 @@ class Record; class TupleCellSpec; class Trx; +namespace oceanbase { + /** * @brief 物理算子 * @defgroup PhysicalOperator @@ -93,3 +95,4 @@ class PhysicalOperator : public OperatorNode protected: vector> children_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/predicate_logical_operator.cpp b/src/observer/sql/operator/predicate_logical_operator.cpp index e7db87c77..ea427e1b9 100644 --- a/src/observer/sql/operator/predicate_logical_operator.cpp +++ b/src/observer/sql/operator/predicate_logical_operator.cpp @@ -14,7 +14,10 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/predicate_logical_operator.h" +namespace oceanbase { + PredicateLogicalOperator::PredicateLogicalOperator(unique_ptr expression) { expressions_.emplace_back(std::move(expression)); } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/predicate_logical_operator.h b/src/observer/sql/operator/predicate_logical_operator.h index 115121ff9..05f5901a9 100644 --- a/src/observer/sql/operator/predicate_logical_operator.h +++ b/src/observer/sql/operator/predicate_logical_operator.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/expr/expression.h" #include "sql/operator/logical_operator.h" +namespace oceanbase { + /** * @brief 谓词/过滤逻辑算子 * @ingroup LogicalOperator @@ -31,3 +33,4 @@ class PredicateLogicalOperator : public LogicalOperator OpType get_op_type() const override { return OpType::LOGICALFILTER; } }; +} // namespace oceanbase diff --git a/src/observer/sql/operator/predicate_physical_operator.cpp b/src/observer/sql/operator/predicate_physical_operator.cpp index 61b564451..e911e2fae 100644 --- a/src/observer/sql/operator/predicate_physical_operator.cpp +++ b/src/observer/sql/operator/predicate_physical_operator.cpp @@ -18,6 +18,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/field/field.h" #include "storage/record/record.h" +namespace oceanbase { + PredicatePhysicalOperator::PredicatePhysicalOperator(std::unique_ptr expr) : expression_(std::move(expr)) { ASSERT(expression_->value_type() == AttrType::BOOLEANS, "predicate's expression should be BOOLEAN type"); @@ -67,7 +69,5 @@ RC PredicatePhysicalOperator::close() Tuple *PredicatePhysicalOperator::current_tuple() { return children_[0]->current_tuple(); } -RC PredicatePhysicalOperator::tuple_schema(TupleSchema &schema) const -{ - return children_[0]->tuple_schema(schema); -} +RC PredicatePhysicalOperator::tuple_schema(TupleSchema &schema) const { return children_[0]->tuple_schema(schema); } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/predicate_physical_operator.h b/src/observer/sql/operator/predicate_physical_operator.h index 49bbcbfbd..10ac20d36 100644 --- a/src/observer/sql/operator/predicate_physical_operator.h +++ b/src/observer/sql/operator/predicate_physical_operator.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/expr/expression.h" #include "sql/operator/physical_operator.h" +namespace oceanbase { + class FilterStmt; /** @@ -44,3 +46,4 @@ class PredicatePhysicalOperator : public PhysicalOperator private: unique_ptr expression_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/project_logical_operator.cpp b/src/observer/sql/operator/project_logical_operator.cpp index bbd06d1be..3594e9e34 100644 --- a/src/observer/sql/operator/project_logical_operator.cpp +++ b/src/observer/sql/operator/project_logical_operator.cpp @@ -16,12 +16,14 @@ See the Mulan PSL v2 for more details. */ using namespace std; +namespace oceanbase { + ProjectLogicalOperator::ProjectLogicalOperator(vector> &&expressions) { expressions_ = std::move(expressions); } -unique_ptr ProjectLogicalOperator::find_log_prop(const vector &log_props) +unique_ptr ProjectLogicalOperator::find_log_prop(const vector &log_props) { int card = 0; for (auto log_prop : log_props) { @@ -33,3 +35,4 @@ unique_ptr ProjectLogicalOperator::find_log_prop(const vector(card); } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/project_logical_operator.h b/src/observer/sql/operator/project_logical_operator.h index 6522ac3c1..98369db38 100644 --- a/src/observer/sql/operator/project_logical_operator.h +++ b/src/observer/sql/operator/project_logical_operator.h @@ -18,6 +18,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/logical_operator.h" #include "storage/field/field.h" +namespace oceanbase { + /** * @brief project 表示投影运算 * @ingroup LogicalOperator @@ -36,3 +38,4 @@ class ProjectLogicalOperator : public LogicalOperator vector> &expressions() { return expressions_; } const vector> &expressions() const { return expressions_; } }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/project_physical_operator.cpp b/src/observer/sql/operator/project_physical_operator.cpp index 9c06125b6..265f7a50e 100644 --- a/src/observer/sql/operator/project_physical_operator.cpp +++ b/src/observer/sql/operator/project_physical_operator.cpp @@ -19,10 +19,11 @@ See the Mulan PSL v2 for more details. */ using namespace std; +namespace oceanbase { + ProjectPhysicalOperator::ProjectPhysicalOperator(vector> &&expressions) - : expressions_(std::move(expressions)), tuple_(expressions_) -{ -} + : expressions_(std::move(expressions)), tuple_(expressions_) +{} RC ProjectPhysicalOperator::open(Trx *trx) { @@ -67,4 +68,5 @@ RC ProjectPhysicalOperator::tuple_schema(TupleSchema &schema) const schema.append_cell(expression->name()); } return RC::SUCCESS; -} \ No newline at end of file +} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/project_physical_operator.h b/src/observer/sql/operator/project_physical_operator.h index 781e4ee11..6e4d9e6cc 100644 --- a/src/observer/sql/operator/project_physical_operator.h +++ b/src/observer/sql/operator/project_physical_operator.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/physical_operator.h" #include "sql/expr/expression_tuple.h" +namespace oceanbase { + /** * @brief 选择/投影物理算子 * @ingroup PhysicalOperator @@ -51,3 +53,4 @@ class ProjectPhysicalOperator : public PhysicalOperator vector> expressions_; ExpressionTuple> tuple_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/project_vec_physical_operator.cpp b/src/observer/sql/operator/project_vec_physical_operator.cpp index 06a487cfb..bfc5498d2 100644 --- a/src/observer/sql/operator/project_vec_physical_operator.cpp +++ b/src/observer/sql/operator/project_vec_physical_operator.cpp @@ -15,6 +15,8 @@ See the Mulan PSL v2 for more details. */ using namespace std; +namespace oceanbase { + ProjectVecPhysicalOperator::ProjectVecPhysicalOperator(vector> &&expressions) : expressions_(std::move(expressions)) { @@ -71,3 +73,4 @@ RC ProjectVecPhysicalOperator::tuple_schema(TupleSchema &schema) const } return RC::SUCCESS; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/project_vec_physical_operator.h b/src/observer/sql/operator/project_vec_physical_operator.h index de3f716f6..acb95f5e5 100644 --- a/src/observer/sql/operator/project_vec_physical_operator.h +++ b/src/observer/sql/operator/project_vec_physical_operator.h @@ -13,6 +13,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/physical_operator.h" #include "sql/expr/expression_tuple.h" +namespace oceanbase { + /** * @brief 选择/投影物理算子(vectorized) * @ingroup PhysicalOperator @@ -39,3 +41,4 @@ class ProjectVecPhysicalOperator : public PhysicalOperator vector> expressions_; Chunk chunk_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/scalar_group_by_physical_operator.cpp b/src/observer/sql/operator/scalar_group_by_physical_operator.cpp index d07546dbe..496f9df9c 100644 --- a/src/observer/sql/operator/scalar_group_by_physical_operator.cpp +++ b/src/observer/sql/operator/scalar_group_by_physical_operator.cpp @@ -20,6 +20,8 @@ See the Mulan PSL v2 for more details. */ using namespace std; using namespace common; +namespace oceanbase { + ScalarGroupByPhysicalOperator::ScalarGroupByPhysicalOperator(vector &&expressions) : GroupByPhysicalOperator(std::move(expressions)) {} @@ -65,7 +67,7 @@ RC ScalarGroupByPhysicalOperator::open(Trx *trx) composite_tuple.add_tuple(make_unique(std::move(child_tuple_to_value))); group_value_ = make_unique(std::move(aggregator_list), std::move(composite_tuple)); } - + rc = aggregate(get<0>(*group_value_), group_value_expression_tuple); if (OB_FAIL(rc)) { LOG_WARN("failed to aggregate values. rc=%s", strrc(rc)); @@ -117,4 +119,5 @@ Tuple *ScalarGroupByPhysicalOperator::current_tuple() } return &get<1>(*group_value_); -} \ No newline at end of file +} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/scalar_group_by_physical_operator.h b/src/observer/sql/operator/scalar_group_by_physical_operator.h index d55d3c507..9d1ddb459 100644 --- a/src/observer/sql/operator/scalar_group_by_physical_operator.h +++ b/src/observer/sql/operator/scalar_group_by_physical_operator.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/group_by_physical_operator.h" +namespace oceanbase { + /** * @brief 没有 group by 表达式的 group by 物理算子 * @ingroup PhysicalOperator @@ -39,3 +41,4 @@ class ScalarGroupByPhysicalOperator : public GroupByPhysicalOperator unique_ptr group_value_; bool emitted_ = false; /// 标识是否已经输出过 }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/string_list_physical_operator.h b/src/observer/sql/operator/string_list_physical_operator.h index 038aa0bea..e872f8546 100644 --- a/src/observer/sql/operator/string_list_physical_operator.h +++ b/src/observer/sql/operator/string_list_physical_operator.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "common/lang/initializer_list.h" #include "sql/operator/physical_operator.h" +namespace oceanbase { + /** * @brief 字符串列表物理算子 * @ingroup PhysicalOperator @@ -89,3 +91,4 @@ class StringListPhysicalOperator : public PhysicalOperator bool started_ = false; ValueListTuple tuple_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/table_get_logical_operator.cpp b/src/observer/sql/operator/table_get_logical_operator.cpp index 9917062b0..eaa2d61ff 100644 --- a/src/observer/sql/operator/table_get_logical_operator.cpp +++ b/src/observer/sql/operator/table_get_logical_operator.cpp @@ -16,18 +16,18 @@ See the Mulan PSL v2 for more details. */ #include "sql/optimizer/cascade/property.h" #include "catalog/catalog.h" +namespace oceanbase { + TableGetLogicalOperator::TableGetLogicalOperator(Table *table, ReadWriteMode mode) : LogicalOperator(), table_(table), mode_(mode) {} -void TableGetLogicalOperator::set_predicates(vector> &&exprs) -{ - predicates_ = std::move(exprs); -} +void TableGetLogicalOperator::set_predicates(vector> &&exprs) { predicates_ = std::move(exprs); } -unique_ptr TableGetLogicalOperator::find_log_prop(const vector &log_props) +unique_ptr TableGetLogicalOperator::find_log_prop(const vector &log_props) { int card = Catalog::get_instance().get_table_stats(table_->table_id()).row_nums; // TODO: think about predicates. return make_unique(card); -} \ No newline at end of file +} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/table_get_logical_operator.h b/src/observer/sql/operator/table_get_logical_operator.h index a95c25337..22808cf2e 100644 --- a/src/observer/sql/operator/table_get_logical_operator.h +++ b/src/observer/sql/operator/table_get_logical_operator.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/field/field.h" #include "common/types.h" +namespace oceanbase { + /** * @brief 表示从表中获取数据的算子 * @details 比如使用全表扫描、通过索引获取数据等 @@ -67,3 +69,4 @@ class TableGetLogicalOperator : public LogicalOperator // 如果有多个表达式,他们的关系都是 AND vector> predicates_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/table_scan_physical_operator.cpp b/src/observer/sql/operator/table_scan_physical_operator.cpp index 895966e23..b720ea8b9 100644 --- a/src/observer/sql/operator/table_scan_physical_operator.cpp +++ b/src/observer/sql/operator/table_scan_physical_operator.cpp @@ -18,6 +18,8 @@ See the Mulan PSL v2 for more details. */ using namespace std; +namespace oceanbase { + RC TableScanPhysicalOperator::open(Trx *trx) { RC rc = table_->get_record_scanner(record_scanner_, trx, mode_); @@ -35,7 +37,7 @@ RC TableScanPhysicalOperator::next() bool filter_result = false; while (OB_SUCC(rc = record_scanner_->next(current_record_))) { LOG_TRACE("got a record. rid=%s", current_record_.rid().to_string().c_str()); - + tuple_.set_record(¤t_record_); rc = filter(tuple_, filter_result); if (rc != RC::SUCCESS) { @@ -53,7 +55,8 @@ RC TableScanPhysicalOperator::next() return rc; } -RC TableScanPhysicalOperator::close() { +RC TableScanPhysicalOperator::close() +{ RC rc = RC::SUCCESS; if (record_scanner_ != nullptr) { rc = record_scanner_->close_scan(); @@ -64,7 +67,6 @@ RC TableScanPhysicalOperator::close() { record_scanner_ = nullptr; } return rc; - } Tuple *TableScanPhysicalOperator::current_tuple() @@ -100,3 +102,4 @@ RC TableScanPhysicalOperator::filter(RowTuple &tuple, bool &result) result = true; return rc; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/table_scan_physical_operator.h b/src/observer/sql/operator/table_scan_physical_operator.h index d62e8e483..673206cb7 100644 --- a/src/observer/sql/operator/table_scan_physical_operator.h +++ b/src/observer/sql/operator/table_scan_physical_operator.h @@ -20,6 +20,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/record/record_scanner.h" #include "common/types.h" +namespace oceanbase { + class Table; /** @@ -81,3 +83,4 @@ class TableScanPhysicalOperator : public PhysicalOperator RowTuple tuple_; vector> predicates_; // TODO chang predicate to table tuple filter }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/operator/table_scan_vec_physical_operator.cpp b/src/observer/sql/operator/table_scan_vec_physical_operator.cpp index 9744776cd..9ae9d5260 100644 --- a/src/observer/sql/operator/table_scan_vec_physical_operator.cpp +++ b/src/observer/sql/operator/table_scan_vec_physical_operator.cpp @@ -14,6 +14,8 @@ See the Mulan PSL v2 for more details. */ using namespace std; +namespace oceanbase { + RC TableScanVecPhysicalOperator::open(Trx *trx) { RC rc = table_->get_chunk_scanner(chunk_scanner_, trx, mode_); @@ -53,8 +55,7 @@ RC TableScanVecPhysicalOperator::next(Chunk &chunk) continue; } for (int j = 0; j < all_columns_.column_num(); j++) { - filterd_columns_.column(j).append_value( - all_columns_.column(filterd_columns_.column_ids(j)).get_value(i)); + filterd_columns_.column(j).append_value(all_columns_.column(filterd_columns_.column_ids(j)).get_value(i)); } } chunk.reference(filterd_columns_); @@ -83,3 +84,4 @@ RC TableScanVecPhysicalOperator::filter(Chunk &chunk) } return rc; } +} // namespace oceanbase diff --git a/src/observer/sql/operator/table_scan_vec_physical_operator.h b/src/observer/sql/operator/table_scan_vec_physical_operator.h index 8982055dd..28b21f88b 100644 --- a/src/observer/sql/operator/table_scan_vec_physical_operator.h +++ b/src/observer/sql/operator/table_scan_vec_physical_operator.h @@ -15,6 +15,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/record/record_manager.h" #include "common/types.h" +namespace oceanbase { + class Table; /** @@ -50,3 +52,4 @@ class TableScanVecPhysicalOperator : public PhysicalOperator vector select_; vector> predicates_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/cost_model.cpp b/src/observer/sql/optimizer/cascade/cost_model.cpp index 16f43ec7f..48b296a22 100644 --- a/src/observer/sql/optimizer/cascade/cost_model.cpp +++ b/src/observer/sql/optimizer/cascade/cost_model.cpp @@ -13,18 +13,19 @@ See the Mulan PSL v2 for more details. */ #include "catalog/catalog.h" #include "sql/optimizer/cascade/group_expr.h" -double CostModel::calculate_cost(Memo *memo, - GroupExpr *gexpr) +namespace oceanbase { + +double CostModel::calculate_cost(Memo *memo, GroupExpr *gexpr) { - auto op = gexpr->get_op(); - auto log_prop = memo->get_group_by_id(gexpr->get_group_id())->get_logical_prop(); - int arity = gexpr->get_children_groups_size(); - vector child_log_props; + auto op = gexpr->get_op(); + auto log_prop = memo->get_group_by_id(gexpr->get_group_id())->get_logical_prop(); + int arity = gexpr->get_children_groups_size(); + vector child_log_props; for (int i = 0; i < arity; ++i) { auto child_group_id = gexpr->get_child_group_id(i); - auto child_gexpr = memo->get_group_by_id(child_group_id); + auto child_gexpr = memo->get_group_by_id(child_group_id); child_log_props.push_back(child_gexpr->get_logical_prop()); } return op->calculate_cost(log_prop, child_log_props, this); - -} \ No newline at end of file +} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/cost_model.h b/src/observer/sql/optimizer/cascade/cost_model.h index e64284ec8..2d17e8e5e 100644 --- a/src/observer/sql/optimizer/cascade/cost_model.h +++ b/src/observer/sql/optimizer/cascade/cost_model.h @@ -10,6 +10,8 @@ See the Mulan PSL v2 for more details. */ #pragma once +namespace oceanbase { + class Memo; class GroupExpr; /** @@ -27,7 +29,7 @@ class CostModel public: // TODO: support user-defined - CostModel(){}; + CostModel() {} inline double cpu_op() { return CPU_OP; } @@ -44,4 +46,5 @@ class CostModel inline double io() { return IO; } double calculate_cost(Memo *memo, GroupExpr *gexpr); -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/group.cpp b/src/observer/sql/optimizer/cascade/group.cpp index fab245d1a..2b9cfdbd6 100644 --- a/src/observer/sql/optimizer/cascade/group.cpp +++ b/src/observer/sql/optimizer/cascade/group.cpp @@ -12,24 +12,26 @@ See the Mulan PSL v2 for more details. */ #include "sql/optimizer/cascade/group_expr.h" #include "sql/optimizer/cascade/memo.h" -Group::Group(int id, GroupExpr* expr, Memo *memo) - : id_(id), winner_(std::make_tuple(numeric_limits::max(), nullptr)), has_explored_(false) +namespace oceanbase { + +Group::Group(int id, GroupExpr *expr, Memo *memo) + : id_(id), winner_(std::make_tuple(numeric_limits::max(), nullptr)), has_explored_(false) { - int arity = expr->get_children_groups_size(); - vector input_prop; - if(arity == 0) { + int arity = expr->get_children_groups_size(); + vector input_prop; + if (arity == 0) { + logical_prop_ = (expr->get_op())->find_log_prop(input_prop); + } else { + for (int i = 0; i < arity; i++) { + auto group = memo->get_group_by_id(expr->get_child_group_id(i)); + input_prop.push_back(group->get_logical_prop()); + } + logical_prop_ = (expr->get_op())->find_log_prop(input_prop); - } else { - for(int i=0; iget_group_by_id(expr->get_child_group_id(i)); - input_prop.push_back(group->get_logical_prop()); - } - - logical_prop_ = (expr->get_op())->find_log_prop(input_prop); } } -Group::~Group() { +Group::~Group() +{ for (auto expr : logical_expressions_) { delete expr; } @@ -48,8 +50,8 @@ void Group::add_expr(GroupExpr *expr) } } -bool Group::set_expr_cost(GroupExpr *expr, double cost) { - +bool Group::set_expr_cost(GroupExpr *expr, double cost) +{ if (std::get<0>(winner_) > cost) { // this is lower cost @@ -59,11 +61,10 @@ bool Group::set_expr_cost(GroupExpr *expr, double cost) { return false; } -GroupExpr *Group::get_winner() { - return std::get<1>(winner_); -} +GroupExpr *Group::get_winner() { return std::get<1>(winner_); } -GroupExpr *Group::get_logical_expression() { +GroupExpr *Group::get_logical_expression() +{ ASSERT(logical_expressions_.size() == 1, "There should exist only 1 logical expression"); ASSERT(physical_expressions_.empty(), "No physical expressions should be present"); return logical_expressions_[0]; @@ -73,4 +74,5 @@ void Group::dump() const { LOG_TRACE("Group %d has %lu logical expressions and %lu physical expressions", id_, logical_expressions_.size(), physical_expressions_.size(), physical_expressions_.size()); -} \ No newline at end of file +} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/group.h b/src/observer/sql/optimizer/cascade/group.h index bcecf58b1..eb50572f9 100644 --- a/src/observer/sql/optimizer/cascade/group.h +++ b/src/observer/sql/optimizer/cascade/group.h @@ -18,6 +18,8 @@ See the Mulan PSL v2 for more details. */ #include "common/lang/unordered_map.h" #include "sql/optimizer/cascade/property_set.h" +namespace oceanbase { + class GroupExpr; class Memo; /** @@ -110,4 +112,5 @@ class Group std::vector physical_expressions_; unique_ptr logical_prop_ = nullptr; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/group_expr.cpp b/src/observer/sql/optimizer/cascade/group_expr.cpp index be0e4aeba..96446ec6c 100644 --- a/src/observer/sql/optimizer/cascade/group_expr.cpp +++ b/src/observer/sql/optimizer/cascade/group_expr.cpp @@ -10,11 +10,14 @@ See the Mulan PSL v2 for more details. */ #include "sql/optimizer/cascade/group_expr.h" +namespace oceanbase { + uint64_t GroupExpr::hash() const { auto hash = contents_->hash(); for (const auto &child : child_groups_) { - hash ^= std::hash()(child) + 0x9e3779b9 + (hash << 6) + (hash >> 2);; + hash ^= std::hash()(child) + 0x9e3779b9 + (hash << 6) + (hash >> 2); + ; } return hash; } @@ -26,4 +29,5 @@ void GroupExpr::dump() const ss << child << " "; } LOG_TRACE("GroupExpr contents: %d child groups: %s", static_cast(contents_->get_op_type()), ss.str().c_str()); -} \ No newline at end of file +} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/group_expr.h b/src/observer/sql/optimizer/cascade/group_expr.h index c3d752dfb..ea913710d 100644 --- a/src/observer/sql/optimizer/cascade/group_expr.h +++ b/src/observer/sql/optimizer/cascade/group_expr.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/optimizer/cascade/rules.h" #include "sql/optimizer/cascade/property_set.h" +namespace oceanbase { + // TODO: rename to m_expr(in columbia)? /* GroupExpr used to represent a particular logical or physical * operator expression. @@ -84,4 +86,5 @@ class GroupExpr std::bitset(RuleType::NUM_RULES)> rule_mask_; double lowest_cost_ = std::numeric_limits::max(); -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/implementation_rules.cpp b/src/observer/sql/optimizer/cascade/implementation_rules.cpp index 740f44381..470dcf6c1 100644 --- a/src/observer/sql/optimizer/cascade/implementation_rules.cpp +++ b/src/observer/sql/optimizer/cascade/implementation_rules.cpp @@ -28,27 +28,30 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/scalar_group_by_physical_operator.h" #include "sql/operator/hash_group_by_physical_operator.h" +namespace oceanbase { + // ------------------------------------------------------------------------------------------------- // PhysicalSeqScan // ------------------------------------------------------------------------------------------------- -LogicalGetToPhysicalSeqScan::LogicalGetToPhysicalSeqScan() { - type_ = RuleType::GET_TO_SEQ_SCAN; +LogicalGetToPhysicalSeqScan::LogicalGetToPhysicalSeqScan() +{ + type_ = RuleType::GET_TO_SEQ_SCAN; match_pattern_ = unique_ptr(new Pattern(OpType::LOGICALGET)); } -void LogicalGetToPhysicalSeqScan::transform(OperatorNode* input, - std::vector> *transformed, - OptimizerContext *context) const { - TableGetLogicalOperator* table_get_oper = dynamic_cast(input); +void LogicalGetToPhysicalSeqScan::transform( + OperatorNode *input, std::vector> *transformed, OptimizerContext *context) const +{ + TableGetLogicalOperator *table_get_oper = dynamic_cast(input); vector> &log_preds = table_get_oper->predicates(); - vector> phys_preds; + vector> phys_preds; for (auto &pred : log_preds) { phys_preds.push_back(pred->copy()); } - Table *table = table_get_oper->table(); - auto table_scan_oper = new TableScanPhysicalOperator(table, table_get_oper->read_write_mode()); + Table *table = table_get_oper->table(); + auto table_scan_oper = new TableScanPhysicalOperator(table, table_get_oper->read_write_mode()); table_scan_oper->set_predicates(std::move(phys_preds)); auto oper = unique_ptr(table_scan_oper); @@ -58,18 +61,19 @@ void LogicalGetToPhysicalSeqScan::transform(OperatorNode* input, // ------------------------------------------------------------------------------------------------- // LogicalProjectionToProjection // ------------------------------------------------------------------------------------------------- -LogicalProjectionToProjection::LogicalProjectionToProjection() { - type_ = RuleType::PROJECTION_TO_PHYSOCAL; +LogicalProjectionToProjection::LogicalProjectionToProjection() +{ + type_ = RuleType::PROJECTION_TO_PHYSOCAL; match_pattern_ = unique_ptr(new Pattern(OpType::LOGICALPROJECTION)); - auto child = new Pattern(OpType::LEAF); + auto child = new Pattern(OpType::LEAF); match_pattern_->add_child(child); } -void LogicalProjectionToProjection::transform(OperatorNode* input, - std::vector> *transformed, - OptimizerContext *context) const { - auto project_oper = dynamic_cast(input); - vector> &child_opers = project_oper->children(); +void LogicalProjectionToProjection::transform( + OperatorNode *input, std::vector> *transformed, OptimizerContext *context) const +{ + auto project_oper = dynamic_cast(input); + vector> &child_opers = project_oper->children(); ASSERT(child_opers.size() == 1, "only one child is supported for now"); unique_ptr child_phy_oper; @@ -85,20 +89,20 @@ void LogicalProjectionToProjection::transform(OperatorNode* input, // ------------------------------------------------------------------------------------------------- // PhysicalInsert // ------------------------------------------------------------------------------------------------- -LogicalInsertToInsert::LogicalInsertToInsert() { - type_ = RuleType::INSERT_TO_PHYSICAL; +LogicalInsertToInsert::LogicalInsertToInsert() +{ + type_ = RuleType::INSERT_TO_PHYSICAL; match_pattern_ = unique_ptr(new Pattern(OpType::LOGICALINSERT)); } +void LogicalInsertToInsert::transform( + OperatorNode *input, std::vector> *transformed, OptimizerContext *context) const +{ + InsertLogicalOperator *insert_oper = dynamic_cast(input); -void LogicalInsertToInsert::transform(OperatorNode* input, - std::vector> *transformed, - OptimizerContext *context) const { - InsertLogicalOperator* insert_oper = dynamic_cast(input); - - Table *table = insert_oper->table(); - vector &values = insert_oper->values(); - auto insert_phy_oper = make_unique(table, std::move(values)); + Table *table = insert_oper->table(); + vector &values = insert_oper->values(); + auto insert_phy_oper = make_unique(table, std::move(values)); transformed->emplace_back(std::move(insert_phy_oper)); } @@ -108,17 +112,16 @@ void LogicalInsertToInsert::transform(OperatorNode* input, // ------------------------------------------------------------------------------------------------- LogicalExplainToExplain::LogicalExplainToExplain() { - type_ = RuleType::EXPLAIN_TO_PHYSICAL; + type_ = RuleType::EXPLAIN_TO_PHYSICAL; match_pattern_ = unique_ptr(new Pattern(OpType::LOGICALEXPLAIN)); - auto child = new Pattern(OpType::LEAF); + auto child = new Pattern(OpType::LEAF); match_pattern_->add_child(child); } -void LogicalExplainToExplain::transform(OperatorNode* input, - std::vector> *transformed, - OptimizerContext *context) const +void LogicalExplainToExplain::transform( + OperatorNode *input, std::vector> *transformed, OptimizerContext *context) const { - auto explain_oper = dynamic_cast(input); + auto explain_oper = dynamic_cast(input); unique_ptr explain_physical_oper(new ExplainPhysicalOperator()); for (auto &child : explain_oper->children()) { explain_physical_oper->add_general_child(child.get()); @@ -132,15 +135,14 @@ void LogicalExplainToExplain::transform(OperatorNode* input, // ------------------------------------------------------------------------------------------------- LogicalCalcToCalc::LogicalCalcToCalc() { - type_ = RuleType::CALC_TO_PHYSICAL; + type_ = RuleType::CALC_TO_PHYSICAL; match_pattern_ = unique_ptr(new Pattern(OpType::LOGICALCALCULATE)); } -void LogicalCalcToCalc::transform(OperatorNode* input, - std::vector> *transformed, - OptimizerContext *context) const +void LogicalCalcToCalc::transform( + OperatorNode *input, std::vector> *transformed, OptimizerContext *context) const { - auto calc_oper = dynamic_cast(input); + auto calc_oper = dynamic_cast(input); unique_ptr calc_phys_oper(new CalcPhysicalOperator(std::move(calc_oper->expressions()))); transformed->emplace_back(std::move(calc_phys_oper)); @@ -151,17 +153,16 @@ void LogicalCalcToCalc::transform(OperatorNode* input, // ------------------------------------------------------------------------------------------------- LogicalDeleteToDelete::LogicalDeleteToDelete() { - type_ = RuleType::DELETE_TO_PHYSICAL; + type_ = RuleType::DELETE_TO_PHYSICAL; match_pattern_ = unique_ptr(new Pattern(OpType::LOGICALDELETE)); - auto child = new Pattern(OpType::LEAF); + auto child = new Pattern(OpType::LEAF); match_pattern_->add_child(child); } -void LogicalDeleteToDelete::transform(OperatorNode* input, - std::vector> *transformed, - OptimizerContext *context) const +void LogicalDeleteToDelete::transform( + OperatorNode *input, std::vector> *transformed, OptimizerContext *context) const { - auto delete_oper = dynamic_cast(input); + auto delete_oper = dynamic_cast(input); auto delete_phys_oper = unique_ptr(new DeletePhysicalOperator(delete_oper->table())); for (auto &child : delete_oper->children()) { @@ -176,23 +177,23 @@ void LogicalDeleteToDelete::transform(OperatorNode* input, // ------------------------------------------------------------------------------------------------- LogicalPredicateToPredicate::LogicalPredicateToPredicate() { - type_ = RuleType::PREDICATE_TO_PHYSICAL; + type_ = RuleType::PREDICATE_TO_PHYSICAL; match_pattern_ = unique_ptr(new Pattern(OpType::LOGICALFILTER)); - auto child = new Pattern(OpType::LEAF); + auto child = new Pattern(OpType::LEAF); match_pattern_->add_child(child); } -void LogicalPredicateToPredicate::transform(OperatorNode* input, - std::vector> *transformed, - OptimizerContext *context) const +void LogicalPredicateToPredicate::transform( + OperatorNode *input, std::vector> *transformed, OptimizerContext *context) const { - auto predicate_oper = dynamic_cast(input); + auto predicate_oper = dynamic_cast(input); vector> &expressions = predicate_oper->expressions(); ASSERT(expressions.size() == 1, "predicate logical operator's children should be 1"); - unique_ptr expression = std::move(expressions.front()); - unique_ptr oper = unique_ptr(new PredicatePhysicalOperator(std::move(expression))); + unique_ptr expression = std::move(expressions.front()); + unique_ptr oper = + unique_ptr(new PredicatePhysicalOperator(std::move(expression))); for (auto &child : predicate_oper->children()) { oper->add_general_child(child.get()); } @@ -210,7 +211,6 @@ void LogicalPredicateToPredicate::transform(OperatorNode* input, // match_pattern_->add_child(child); // } - // void LogicalGroupByToAggregation::transform(OperatorNode* input, // std::vector> *transformed, // OptimizerContext *context) const @@ -230,7 +230,6 @@ void LogicalPredicateToPredicate::transform(OperatorNode* input, // transformed->emplace_back(std::move(groupby_phys_oper)); // } - // ------------------------------------------------------------------------------------------------- // Physical Hash Group By // ------------------------------------------------------------------------------------------------- @@ -242,7 +241,6 @@ void LogicalPredicateToPredicate::transform(OperatorNode* input, // match_pattern_->add_child(child); // } - // void LogicalGroupByToHashGroupBy::transform(OperatorNode* input, // std::vector> *transformed, // OptimizerContext *context) const @@ -261,4 +259,5 @@ void LogicalPredicateToPredicate::transform(OperatorNode* input, // } // transformed->emplace_back(std::move(groupby_phys_oper)); -// } \ No newline at end of file +// } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/implementation_rules.h b/src/observer/sql/optimizer/cascade/implementation_rules.h index d82182ce6..daac7efda 100644 --- a/src/observer/sql/optimizer/cascade/implementation_rules.h +++ b/src/observer/sql/optimizer/cascade/implementation_rules.h @@ -12,6 +12,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/optimizer/cascade/rules.h" +namespace oceanbase { + /** * Rule transforms Logical Scan -> Physical Scan */ @@ -125,4 +127,5 @@ class LogicalPredicateToPredicate : public Rule // void transform(OperatorNode* input, // std::vector> *transformed, // OptimizerContext *context) const override; -// }; \ No newline at end of file +// }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/memo.cpp b/src/observer/sql/optimizer/cascade/memo.cpp index 677d34ab6..0119ee974 100644 --- a/src/observer/sql/optimizer/cascade/memo.cpp +++ b/src/observer/sql/optimizer/cascade/memo.cpp @@ -10,6 +10,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/optimizer/cascade/memo.h" +namespace oceanbase { + GroupExpr *Memo::insert_expression(GroupExpr *gexpr, int target_group) { gexpr->set_group_id(target_group); @@ -50,4 +52,5 @@ void Memo::dump() const for (const auto &group : groups_) { group->dump(); } -} \ No newline at end of file +} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/memo.h b/src/observer/sql/optimizer/cascade/memo.h index cef553795..0ddbf5af5 100644 --- a/src/observer/sql/optimizer/cascade/memo.h +++ b/src/observer/sql/optimizer/cascade/memo.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/optimizer/cascade/group_expr.h" #include "sql/optimizer/cascade/group.h" +namespace oceanbase { + const int UNDEFINED_GROUP = -1; /** @@ -90,4 +92,5 @@ class Memo // 过程中生成的临时物理算子节点的,有些物理算子节点的所有权会转移到外面,有些物理算子的所有权还在memo,需要删除。 用 // shared_ptr 更加合适,但是改动比较大,先暂时不改了。 std::unordered_map> operator_nodes_; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/optimizer.cpp b/src/observer/sql/optimizer/cascade/optimizer.cpp index dd6b26a68..b6c29857a 100644 --- a/src/observer/sql/optimizer/cascade/optimizer.cpp +++ b/src/observer/sql/optimizer/cascade/optimizer.cpp @@ -12,11 +12,13 @@ See the Mulan PSL v2 for more details. */ #include "sql/optimizer/cascade/tasks/o_group_task.h" #include "sql/optimizer/cascade/memo.h" -std::unique_ptr Optimizer::optimize(OperatorNode* op_tree) +namespace oceanbase { + +std::unique_ptr Optimizer::optimize(OperatorNode *op_tree) { // Generate initial operator tree from query tree - GroupExpr *gexpr = nullptr; - bool insert = context_->record_node_into_group(op_tree, &gexpr); + GroupExpr *gexpr = nullptr; + bool insert = context_->record_node_into_group(op_tree, &gexpr); ASSERT(insert && gexpr, "Logical expression tree should insert"); context_->get_memo().dump(); @@ -30,7 +32,7 @@ std::unique_ptr Optimizer::optimize(OperatorNode* op_tree) std::unique_ptr Optimizer::choose_best_plan(int root_group_id) { - auto &memo = context_->get_memo(); + auto &memo = context_->get_memo(); Group *root_group = memo.get_group_by_id(root_group_id); ASSERT(root_group != nullptr, "Root group should not be null"); @@ -42,9 +44,9 @@ std::unique_ptr Optimizer::choose_best_plan(int root_group_id) } auto winner_contents = winner->get_op(); context_->get_memo().release_operator(winner_contents); - PhysicalOperator* winner_phys = dynamic_cast(winner_contents); + PhysicalOperator *winner_phys = dynamic_cast(winner_contents); LOG_TRACE("winner: %d", winner_phys->type()); - for (const auto& child : winner->get_child_group_ids()) { + for (const auto &child : winner->get_child_group_ids()) { winner_phys->add_child(choose_best_plan(child)); } @@ -70,3 +72,4 @@ void Optimizer::execute_task_stack(PendingTasks *task_stack, int root_group_id, delete task; } } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/optimizer.h b/src/observer/sql/optimizer/cascade/optimizer.h index 724d4a9de..c6dd7cf54 100644 --- a/src/observer/sql/optimizer/cascade/optimizer.h +++ b/src/observer/sql/optimizer/cascade/optimizer.h @@ -15,6 +15,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/physical_operator.h" #include "sql/optimizer/cascade/property_set.h" +namespace oceanbase { + /** * @brief cascade optimizer * TODO: currently, Optimizer is used for CBO optimization. need to unify the optimizer in miniob @@ -35,4 +37,5 @@ class Optimizer CostModel cost_model_; std::unique_ptr context_; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/optimizer_context.cpp b/src/observer/sql/optimizer/cascade/optimizer_context.cpp index 4dce30d85..fbd0fa4b1 100644 --- a/src/observer/sql/optimizer/cascade/optimizer_context.cpp +++ b/src/observer/sql/optimizer/cascade/optimizer_context.cpp @@ -12,26 +12,33 @@ See the Mulan PSL v2 for more details. */ #include "sql/optimizer/cascade/memo.h" #include "sql/optimizer/cascade/rules.h" +namespace oceanbase { + OptimizerContext::OptimizerContext() - : memo_(new Memo()), rule_set_(new RuleSet()), cost_model_(), task_pool_(nullptr), - cost_upper_bound_(std::numeric_limits::max()) {} + : memo_(new Memo()), + rule_set_(new RuleSet()), + cost_model_(), + task_pool_(nullptr), + cost_upper_bound_(std::numeric_limits::max()) +{} -OptimizerContext::~OptimizerContext() { - if (task_pool_ != nullptr) { - delete task_pool_; - task_pool_ = nullptr; - } - if (memo_ != nullptr) { - delete memo_; - memo_ = nullptr; - } - if (rule_set_ != nullptr) { - delete rule_set_; - rule_set_ = nullptr; - } +OptimizerContext::~OptimizerContext() +{ + if (task_pool_ != nullptr) { + delete task_pool_; + task_pool_ = nullptr; + } + if (memo_ != nullptr) { + delete memo_; + memo_ = nullptr; + } + if (rule_set_ != nullptr) { + delete rule_set_; + rule_set_ = nullptr; } +} -GroupExpr *OptimizerContext::make_group_expression(OperatorNode* node) +GroupExpr *OptimizerContext::make_group_expression(OperatorNode *node) { std::vector child_groups; for (auto &child : node->get_general_children()) { @@ -50,21 +57,22 @@ GroupExpr *OptimizerContext::make_group_expression(OperatorNode* node) return new GroupExpr(node, std::move(child_groups)); } - bool OptimizerContext::record_node_into_group(OperatorNode* node, GroupExpr **gexpr, - int target_group) { - auto new_gexpr = make_group_expression(node); - auto ptr = memo_->insert_expression(new_gexpr, target_group); - ASSERT(ptr, "Root of expr should not fail insertion"); +bool OptimizerContext::record_node_into_group(OperatorNode *node, GroupExpr **gexpr, int target_group) +{ + auto new_gexpr = make_group_expression(node); + auto ptr = memo_->insert_expression(new_gexpr, target_group); + ASSERT(ptr, "Root of expr should not fail insertion"); - (*gexpr) = ptr; - return (ptr == new_gexpr); - } + (*gexpr) = ptr; + return (ptr == new_gexpr); +} - Memo &OptimizerContext::get_memo() { return *memo_; } +Memo &OptimizerContext::get_memo() { return *memo_; } - RuleSet &OptimizerContext::get_rule_set() { return *rule_set_; } +RuleSet &OptimizerContext::get_rule_set() { return *rule_set_; } - void OptimizerContext::record_operator_node_in_memo(unique_ptr&& node) - { - memo_->record_operator(std::move(node)); - } \ No newline at end of file +void OptimizerContext::record_operator_node_in_memo(unique_ptr &&node) +{ + memo_->record_operator(std::move(node)); +} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/optimizer_context.h b/src/observer/sql/optimizer/cascade/optimizer_context.h index a77fc8162..ae81af119 100644 --- a/src/observer/sql/optimizer/cascade/optimizer_context.h +++ b/src/observer/sql/optimizer/cascade/optimizer_context.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/operator_node.h" #include "sql/optimizer/cascade/property_set.h" +namespace oceanbase { + class Memo; class RuleSet; /** @@ -62,4 +64,5 @@ class OptimizerContext CostModel cost_model_; PendingTasks *task_pool_; double cost_upper_bound_; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/pattern.h b/src/observer/sql/optimizer/cascade/pattern.h index 204bac204..414c2d5d4 100644 --- a/src/observer/sql/optimizer/cascade/pattern.h +++ b/src/observer/sql/optimizer/cascade/pattern.h @@ -14,6 +14,8 @@ See the Mulan PSL v2 for more details. */ #include "common/lang/vector.h" #include "common/lang/memory.h" +namespace oceanbase { + class Pattern { public: @@ -32,4 +34,5 @@ class Pattern OpType type_; vector> children_; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/pending_tasks.h b/src/observer/sql/optimizer/cascade/pending_tasks.h index 1e6494d82..8783a1dad 100644 --- a/src/observer/sql/optimizer/cascade/pending_tasks.h +++ b/src/observer/sql/optimizer/cascade/pending_tasks.h @@ -14,6 +14,8 @@ See the Mulan PSL v2 for more details. */ #include "common/log/log.h" #include "sql/optimizer/cascade/tasks/cascade_task.h" +namespace oceanbase { + /** * @brief This collection of undone cascade tasks is currently stored as a stack. */ @@ -50,4 +52,5 @@ class PendingTasks * Stack for tracking tasks */ std::stack task_stack_; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/property.h b/src/observer/sql/optimizer/cascade/property.h index 965e034db..692f78340 100644 --- a/src/observer/sql/optimizer/cascade/property.h +++ b/src/observer/sql/optimizer/cascade/property.h @@ -10,6 +10,8 @@ See the Mulan PSL v2 for more details. */ #pragma once +namespace oceanbase { + class Property {}; @@ -27,4 +29,5 @@ class LogicalProperty private: int card_ = 0; /// cardinality -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/property_set.h b/src/observer/sql/optimizer/cascade/property_set.h index b6808d9fe..9e4479028 100644 --- a/src/observer/sql/optimizer/cascade/property_set.h +++ b/src/observer/sql/optimizer/cascade/property_set.h @@ -12,6 +12,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/optimizer/cascade/property.h" +namespace oceanbase { + class PropertySet; struct PropSetPtrHash { @@ -40,4 +42,5 @@ class PropertySet private: std::vector properties_; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/rules.cpp b/src/observer/sql/optimizer/cascade/rules.cpp index c78fbf596..2b701465c 100644 --- a/src/observer/sql/optimizer/cascade/rules.cpp +++ b/src/observer/sql/optimizer/cascade/rules.cpp @@ -12,6 +12,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/optimizer/cascade/implementation_rules.h" #include "sql/optimizer/cascade/group_expr.h" +namespace oceanbase { + RuleSet::RuleSet() { add_rule(RuleSetName::PHYSICAL_IMPLEMENTATION, new LogicalProjectionToProjection()); @@ -21,4 +23,5 @@ RuleSet::RuleSet() add_rule(RuleSetName::PHYSICAL_IMPLEMENTATION, new LogicalCalcToCalc()); add_rule(RuleSetName::PHYSICAL_IMPLEMENTATION, new LogicalDeleteToDelete()); add_rule(RuleSetName::PHYSICAL_IMPLEMENTATION, new LogicalPredicateToPredicate()); -} \ No newline at end of file +} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/rules.h b/src/observer/sql/optimizer/cascade/rules.h index b60547a31..26a0dc53d 100644 --- a/src/observer/sql/optimizer/cascade/rules.h +++ b/src/observer/sql/optimizer/cascade/rules.h @@ -14,6 +14,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/optimizer/cascade/optimizer_context.h" #include "sql/optimizer/cascade/pattern.h" +namespace oceanbase { + /** * @brief: Enum defining the types of rules */ @@ -193,4 +195,5 @@ class RuleSet * TODO: use unique_ptr */ std::unordered_map> rules_map_; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/tasks/apply_rule_task.cpp b/src/observer/sql/optimizer/cascade/tasks/apply_rule_task.cpp index d40c0e570..61c4031f8 100644 --- a/src/observer/sql/optimizer/cascade/tasks/apply_rule_task.cpp +++ b/src/observer/sql/optimizer/cascade/tasks/apply_rule_task.cpp @@ -15,6 +15,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/optimizer/cascade/rules.h" #include "common/log/log.h" +namespace oceanbase { + void ApplyRule::perform() { LOG_TRACE("ApplyRule::perform() for rule: {%d}", rule_->get_rule_idx()); @@ -22,7 +24,7 @@ void ApplyRule::perform() return; } // TODO: expr binding, currently group_expr_->get_op() is enough - OperatorNode* before = group_expr_->get_op(); + OperatorNode *before = group_expr_->get_op(); // TODO: check condition @@ -30,7 +32,7 @@ void ApplyRule::perform() rule_->transform(before, &after, context_); for (const auto &new_expr : after) { GroupExpr *new_gexpr = nullptr; - auto g_id = group_expr_->get_group_id(); + auto g_id = group_expr_->get_group_id(); if (context_->record_node_into_group(new_expr.get(), &new_gexpr, g_id)) { if (new_gexpr->get_op()->is_logical()) { // further optimize new expr @@ -44,11 +46,12 @@ void ApplyRule::perform() new_gexpr->dump(); } } - + // TODO: FIXME, better way for record memory allocation for (size_t i = 0; i < after.size(); i++) { context_->record_operator_node_in_memo(std::move(after[i])); } group_expr_->set_rule_explored(rule_); -} \ No newline at end of file +} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/tasks/apply_rule_task.h b/src/observer/sql/optimizer/cascade/tasks/apply_rule_task.h index 124bf2974..8f2fef4f2 100644 --- a/src/observer/sql/optimizer/cascade/tasks/apply_rule_task.h +++ b/src/observer/sql/optimizer/cascade/tasks/apply_rule_task.h @@ -13,6 +13,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/optimizer/cascade/tasks/cascade_task.h" #include "sql/optimizer/cascade/rules.h" +namespace oceanbase { + /** * @brief ApplyRule task */ @@ -28,4 +30,5 @@ class ApplyRule : public CascadeTask private: GroupExpr *group_expr_; Rule *rule_; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/tasks/cascade_task.cpp b/src/observer/sql/optimizer/cascade/tasks/cascade_task.cpp index aa304930a..ca4dfbfd5 100644 --- a/src/observer/sql/optimizer/cascade/tasks/cascade_task.cpp +++ b/src/observer/sql/optimizer/cascade/tasks/cascade_task.cpp @@ -14,8 +14,11 @@ See the Mulan PSL v2 for more details. */ #include "sql/optimizer/cascade/rules.h" #include "sql/optimizer/cascade/memo.h" -Memo &CascadeTask::get_memo() const {return context_->get_memo(); } +namespace oceanbase { + +Memo &CascadeTask::get_memo() const { return context_->get_memo(); } RuleSet &CascadeTask::get_rule_set() const { return context_->get_rule_set(); } -void CascadeTask::push_task(CascadeTask *task) { context_->push_task(task); } \ No newline at end of file +void CascadeTask::push_task(CascadeTask *task) { context_->push_task(task); } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/tasks/cascade_task.h b/src/observer/sql/optimizer/cascade/tasks/cascade_task.h index da7987f5b..71845145c 100644 --- a/src/observer/sql/optimizer/cascade/tasks/cascade_task.h +++ b/src/observer/sql/optimizer/cascade/tasks/cascade_task.h @@ -12,6 +12,8 @@ See the Mulan PSL v2 for more details. */ #include "common/lang/vector.h" +namespace oceanbase { + class Rule; class GroupExpr; class RuleSet; @@ -46,4 +48,5 @@ class CascadeTask protected: CascadeTaskType type_; OptimizerContext *context_; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/tasks/e_group_task.cpp b/src/observer/sql/optimizer/cascade/tasks/e_group_task.cpp index 426f2e904..f10c08cb3 100644 --- a/src/observer/sql/optimizer/cascade/tasks/e_group_task.cpp +++ b/src/observer/sql/optimizer/cascade/tasks/e_group_task.cpp @@ -12,6 +12,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/optimizer/cascade/tasks/o_expr_task.h" #include "common/log/log.h" +namespace oceanbase { + void ExploreGroup::perform() { LOG_TRACE("ExploreGroup::perform() "); @@ -24,4 +26,5 @@ void ExploreGroup::perform() } group_->set_explored(); -} \ No newline at end of file +} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/tasks/e_group_task.h b/src/observer/sql/optimizer/cascade/tasks/e_group_task.h index f1534127f..89eee3a1c 100644 --- a/src/observer/sql/optimizer/cascade/tasks/e_group_task.h +++ b/src/observer/sql/optimizer/cascade/tasks/e_group_task.h @@ -13,6 +13,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/optimizer/cascade/tasks/cascade_task.h" #include "sql/optimizer/cascade/group.h" +namespace oceanbase { + /** * @brief ExploreGroup */ @@ -27,4 +29,5 @@ class ExploreGroup : public CascadeTask private: Group *group_; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/tasks/o_expr_task.cpp b/src/observer/sql/optimizer/cascade/tasks/o_expr_task.cpp index 8e45af9e2..4445ef193 100644 --- a/src/observer/sql/optimizer/cascade/tasks/o_expr_task.cpp +++ b/src/observer/sql/optimizer/cascade/tasks/o_expr_task.cpp @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "common/log/log.h" #include +namespace oceanbase { + void OptimizeExpression::perform() { std::vector valid_rules; @@ -59,3 +61,4 @@ void OptimizeExpression::perform() } } } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/tasks/o_expr_task.h b/src/observer/sql/optimizer/cascade/tasks/o_expr_task.h index afd71029b..0ec6805a2 100644 --- a/src/observer/sql/optimizer/cascade/tasks/o_expr_task.h +++ b/src/observer/sql/optimizer/cascade/tasks/o_expr_task.h @@ -12,6 +12,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/optimizer/cascade/tasks/cascade_task.h" +namespace oceanbase { + /** * OptimizeExpression */ @@ -26,4 +28,5 @@ class OptimizeExpression : public CascadeTask private: GroupExpr *group_expr_; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/tasks/o_group_task.cpp b/src/observer/sql/optimizer/cascade/tasks/o_group_task.cpp index 47f06bdcc..61fb4f14b 100644 --- a/src/observer/sql/optimizer/cascade/tasks/o_group_task.cpp +++ b/src/observer/sql/optimizer/cascade/tasks/o_group_task.cpp @@ -13,6 +13,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/optimizer/cascade/tasks/o_expr_task.h" #include "sql/optimizer/cascade/optimizer_context.h" +namespace oceanbase { + void OptimizeGroup::perform() { LOG_TRACE("OptimizeGroup::perform() group %d", group_->get_id()); @@ -35,4 +37,5 @@ void OptimizeGroup::perform() } group_->set_explored(); -} \ No newline at end of file +} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/tasks/o_group_task.h b/src/observer/sql/optimizer/cascade/tasks/o_group_task.h index afad210e0..405a3e14b 100644 --- a/src/observer/sql/optimizer/cascade/tasks/o_group_task.h +++ b/src/observer/sql/optimizer/cascade/tasks/o_group_task.h @@ -13,6 +13,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/optimizer/cascade/tasks/cascade_task.h" #include "sql/optimizer/cascade/group.h" +namespace oceanbase { + /** * @brief: OptimizeGroup, find the best plan for a group */ @@ -27,4 +29,5 @@ class OptimizeGroup : public CascadeTask private: Group *group_; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/tasks/o_input_task.cpp b/src/observer/sql/optimizer/cascade/tasks/o_input_task.cpp index 9ad9b7c7e..c14b3dda9 100644 --- a/src/observer/sql/optimizer/cascade/tasks/o_input_task.cpp +++ b/src/observer/sql/optimizer/cascade/tasks/o_input_task.cpp @@ -15,6 +15,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/optimizer/cascade/memo.h" #include "common/log/log.h" +namespace oceanbase { + void OptimizeInputs::perform() { LOG_TRACE("OptimizeInputs::perform()"); @@ -23,19 +25,18 @@ void OptimizeInputs::perform() cur_child_idx_ = 0; // only calculate once for current group expr - cur_total_cost_ += context_->get_cost_model()->calculate_cost( - &context_->get_memo(), group_expr_); + cur_total_cost_ += context_->get_cost_model()->calculate_cost(&context_->get_memo(), group_expr_); } for (; cur_child_idx_ < static_cast(group_expr_->get_children_groups_size()); cur_child_idx_++) { - auto child_group = - context_->get_memo().get_group_by_id(group_expr_->get_child_group_id(cur_child_idx_)); + auto child_group = context_->get_memo().get_group_by_id(group_expr_->get_child_group_id(cur_child_idx_)); // check whether the child group is already optimized auto child_best_expr = child_group->get_winner(); if (child_best_expr != nullptr) { cur_total_cost_ += child_best_expr->get_cost(); LOG_INFO("cur_total_cost_ = %f", cur_total_cost_); - if (cur_total_cost_ > context_->get_cost_upper_bound()) break; + if (cur_total_cost_ > context_->get_cost_upper_bound()) + break; } else if (prev_child_idx_ != cur_child_idx_) { // we haven't optimized child group prev_child_idx_ = cur_child_idx_; push_task(new OptimizeInputs(this)); @@ -44,10 +45,11 @@ void OptimizeInputs::perform() } } - if (cur_child_idx_ == static_cast(group_expr_->get_children_groups_size())) { - group_expr_->set_local_cost(cur_total_cost_); + if (cur_child_idx_ == static_cast(group_expr_->get_children_groups_size())) { + group_expr_->set_local_cost(cur_total_cost_); - auto cur_group = get_memo().get_group_by_id(group_expr_->get_group_id()); - cur_group->set_expr_cost(group_expr_, cur_total_cost_); - } -} \ No newline at end of file + auto cur_group = get_memo().get_group_by_id(group_expr_->get_group_id()); + cur_group->set_expr_cost(group_expr_, cur_total_cost_); + } +} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/cascade/tasks/o_input_task.h b/src/observer/sql/optimizer/cascade/tasks/o_input_task.h index 0c3100bad..a67ba0b1c 100644 --- a/src/observer/sql/optimizer/cascade/tasks/o_input_task.h +++ b/src/observer/sql/optimizer/cascade/tasks/o_input_task.h @@ -13,6 +13,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/optimizer/cascade/tasks/cascade_task.h" #include "sql/optimizer/cascade/property_set.h" +namespace oceanbase { + /** * OptimizeInputs */ @@ -48,4 +50,5 @@ class OptimizeInputs : public CascadeTask * keep track of the previous optimized input idx */ int prev_child_idx_ = -1; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/comparison_simplification_rule.cpp b/src/observer/sql/optimizer/comparison_simplification_rule.cpp index 99a7655ce..9c0977a9f 100644 --- a/src/observer/sql/optimizer/comparison_simplification_rule.cpp +++ b/src/observer/sql/optimizer/comparison_simplification_rule.cpp @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "common/log/log.h" #include "sql/expr/expression.h" +namespace oceanbase { + RC ComparisonSimplificationRule::rewrite(unique_ptr &expr, bool &change_made) { RC rc = RC::SUCCESS; @@ -36,3 +38,4 @@ RC ComparisonSimplificationRule::rewrite(unique_ptr &expr, bool &cha } return rc; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/comparison_simplification_rule.h b/src/observer/sql/optimizer/comparison_simplification_rule.h index f46e70d6e..85f4ca1f5 100644 --- a/src/observer/sql/optimizer/comparison_simplification_rule.h +++ b/src/observer/sql/optimizer/comparison_simplification_rule.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "common/sys/rc.h" #include "sql/optimizer/rewrite_rule.h" +namespace oceanbase { + class LogicalOperator; /** @@ -35,3 +37,4 @@ class ComparisonSimplificationRule : public ExpressionRewriteRule private: }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/conjunction_simplification_rule.cpp b/src/observer/sql/optimizer/conjunction_simplification_rule.cpp index 5ba4e4148..450eaf5eb 100644 --- a/src/observer/sql/optimizer/conjunction_simplification_rule.cpp +++ b/src/observer/sql/optimizer/conjunction_simplification_rule.cpp @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "common/log/log.h" #include "sql/expr/expression.h" +namespace oceanbase { + RC try_to_get_bool_constant(unique_ptr &expr, bool &constant_value) { if (expr->type() == ExprType::VALUE && expr->value_type() == AttrType::BOOLEANS) { @@ -32,17 +34,17 @@ RC ConjunctionSimplificationRule::rewrite(unique_ptr &expr, bool &ch return rc; } - change_made = false; - auto conjunction_expr = static_cast(expr.get()); + change_made = false; + auto conjunction_expr = static_cast(expr.get()); - vector> &child_exprs = conjunction_expr->children(); + vector> &child_exprs = conjunction_expr->children(); // 先看看有没有能够直接去掉的表达式。比如AND时恒为true的表达式可以删除 // 或者是否可以直接计算出当前表达式的值。比如AND时,如果有一个表达式为false,那么整个表达式就是false for (auto iter = child_exprs.begin(); iter != child_exprs.end();) { bool constant_value = false; - rc = try_to_get_bool_constant(*iter, constant_value); + rc = try_to_get_bool_constant(*iter, constant_value); if (rc != RC::SUCCESS) { rc = RC::SUCCESS; ++iter; @@ -83,3 +85,4 @@ RC ConjunctionSimplificationRule::rewrite(unique_ptr &expr, bool &ch return rc; } +} // namespace oceanbase diff --git a/src/observer/sql/optimizer/conjunction_simplification_rule.h b/src/observer/sql/optimizer/conjunction_simplification_rule.h index c855f0141..104a82246 100644 --- a/src/observer/sql/optimizer/conjunction_simplification_rule.h +++ b/src/observer/sql/optimizer/conjunction_simplification_rule.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/optimizer/rewrite_rule.h" +namespace oceanbase { + class LogicalOperator; /** @@ -33,3 +35,4 @@ class ConjunctionSimplificationRule : public ExpressionRewriteRule private: }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/expression_rewriter.cpp b/src/observer/sql/optimizer/expression_rewriter.cpp index b0c6d2455..3b3cd2d66 100644 --- a/src/observer/sql/optimizer/expression_rewriter.cpp +++ b/src/observer/sql/optimizer/expression_rewriter.cpp @@ -19,6 +19,8 @@ See the Mulan PSL v2 for more details. */ using namespace std; +namespace oceanbase { + ExpressionRewriter::ExpressionRewriter() { expr_rewrite_rules_.emplace_back(new ComparisonSimplificationRule); @@ -69,7 +71,7 @@ RC ExpressionRewriter::rewrite_expression(unique_ptr &expr, bool &ch for (unique_ptr &rule : expr_rewrite_rules_) { bool sub_change_made = false; - rc = rule->rewrite(expr, sub_change_made); + rc = rule->rewrite(expr, sub_change_made); if (sub_change_made && !change_made) { change_made = true; } @@ -91,25 +93,25 @@ RC ExpressionRewriter::rewrite_expression(unique_ptr &expr, bool &ch case ExprType::CAST: { unique_ptr &child_expr = (static_cast(expr.get()))->child(); - rc = rewrite_expression(child_expr, change_made); + rc = rewrite_expression(child_expr, change_made); } break; case ExprType::COMPARISON: { - auto comparison_expr = static_cast(expr.get()); + auto comparison_expr = static_cast(expr.get()); - unique_ptr &left_expr = comparison_expr->left(); - unique_ptr &right_expr = comparison_expr->right(); + unique_ptr &left_expr = comparison_expr->left(); + unique_ptr &right_expr = comparison_expr->right(); bool left_change_made = false; - rc = rewrite_expression(left_expr, left_change_made); + rc = rewrite_expression(left_expr, left_change_made); if (rc != RC::SUCCESS) { return rc; } bool right_change_made = false; - rc = rewrite_expression(right_expr, right_change_made); + rc = rewrite_expression(right_expr, right_change_made); if (rc != RC::SUCCESS) { return rc; } @@ -120,13 +122,13 @@ RC ExpressionRewriter::rewrite_expression(unique_ptr &expr, bool &ch } break; case ExprType::CONJUNCTION: { - auto conjunction_expr = static_cast(expr.get()); + auto conjunction_expr = static_cast(expr.get()); - vector> &children = conjunction_expr->children(); + vector> &children = conjunction_expr->children(); for (unique_ptr &child_expr : children) { bool sub_change_made = false; - rc = rewrite_expression(child_expr, sub_change_made); + rc = rewrite_expression(child_expr, sub_change_made); if (rc != RC::SUCCESS) { LOG_WARN("failed to rewriter conjunction sub expression. rc=%s", strrc(rc)); @@ -145,3 +147,4 @@ RC ExpressionRewriter::rewrite_expression(unique_ptr &expr, bool &ch } return rc; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/expression_rewriter.h b/src/observer/sql/optimizer/expression_rewriter.h index 3376b1db8..a59c0be60 100644 --- a/src/observer/sql/optimizer/expression_rewriter.h +++ b/src/observer/sql/optimizer/expression_rewriter.h @@ -20,6 +20,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/logical_operator.h" #include "sql/optimizer/rewrite_rule.h" +namespace oceanbase { + class ExpressionRewriter : public RewriteRule { public: @@ -34,3 +36,4 @@ class ExpressionRewriter : public RewriteRule private: vector> expr_rewrite_rules_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/logical_plan_generator.cpp b/src/observer/sql/optimizer/logical_plan_generator.cpp index f9da53f3a..40fe3a0c6 100644 --- a/src/observer/sql/optimizer/logical_plan_generator.cpp +++ b/src/observer/sql/optimizer/logical_plan_generator.cpp @@ -40,6 +40,8 @@ See the Mulan PSL v2 for more details. */ using namespace std; using namespace common; +namespace oceanbase { + RC LogicalPlanGenerator::create(Stmt *stmt, unique_ptr &logical_operator) { RC rc = RC::SUCCESS; @@ -114,7 +116,6 @@ RC LogicalPlanGenerator::create_plan(SelectStmt *select_stmt, unique_ptradd_child(std::move(*last_oper)); @@ -138,7 +139,8 @@ RC LogicalPlanGenerator::create_plan(SelectStmt *select_stmt, unique_ptr project_oper = make_unique(std::move(select_stmt->query_expressions())); + unique_ptr project_oper = + make_unique(std::move(select_stmt->query_expressions())); if (*last_oper) { project_oper->add_child(std::move(*last_oper)); } @@ -151,7 +153,7 @@ RC LogicalPlanGenerator::create_plan(SelectStmt *select_stmt, unique_ptr &logical_operator) { - RC rc = RC::SUCCESS; + RC rc = RC::SUCCESS; vector> cmp_exprs; const vector &filter_units = filter_stmt->filter_units(); for (const FilterUnit *filter_unit : filter_units) { @@ -171,11 +173,10 @@ RC LogicalPlanGenerator::create_plan(FilterStmt *filter_stmt, unique_ptrvalue_type(), left->value_type()); if (left_to_right_cost <= right_to_left_cost && left_to_right_cost != INT32_MAX) { ExprType left_type = left->type(); - auto cast_expr = make_unique(std::move(left), right->value_type()); + auto cast_expr = make_unique(std::move(left), right->value_type()); if (left_type == ExprType::VALUE) { Value left_val; - if (OB_FAIL(rc = cast_expr->try_get_value(left_val))) - { + if (OB_FAIL(rc = cast_expr->try_get_value(left_val))) { LOG_WARN("failed to get value from left child", strrc(rc)); return rc; } @@ -185,11 +186,10 @@ RC LogicalPlanGenerator::create_plan(FilterStmt *filter_stmt, unique_ptrtype(); - auto cast_expr = make_unique(std::move(right), left->value_type()); + auto cast_expr = make_unique(std::move(right), left->value_type()); if (right_type == ExprType::VALUE) { Value right_val; - if (OB_FAIL(rc = cast_expr->try_get_value(right_val))) - { + if (OB_FAIL(rc = cast_expr->try_get_value(right_val))) { LOG_WARN("failed to get value from right child", strrc(rc)); return rc; } @@ -282,10 +282,10 @@ RC LogicalPlanGenerator::create_plan(ExplainStmt *explain_stmt, unique_ptr &logical_operator) { - vector> &group_by_expressions = select_stmt->group_by(); - vector aggregate_expressions; - vector> &query_expressions = select_stmt->query_expressions(); - function&)> collector = [&](unique_ptr &expr) -> RC { + vector> &group_by_expressions = select_stmt->group_by(); + vector aggregate_expressions; + vector> &query_expressions = select_stmt->query_expressions(); + function &)> collector = [&](unique_ptr &expr) -> RC { RC rc = RC::SUCCESS; if (expr->type() == ExprType::AGGREGATION) { expr->set_pos(aggregate_expressions.size() + group_by_expressions.size()); @@ -295,7 +295,7 @@ RC LogicalPlanGenerator::create_group_by_plan(SelectStmt *select_stmt, unique_pt return rc; }; - function&)> bind_group_by_expr = [&](unique_ptr &expr) -> RC { + function &)> bind_group_by_expr = [&](unique_ptr &expr) -> RC { RC rc = RC::SUCCESS; for (size_t i = 0; i < group_by_expressions.size(); i++) { auto &group_by = group_by_expressions[i]; @@ -311,8 +311,8 @@ RC LogicalPlanGenerator::create_group_by_plan(SelectStmt *select_stmt, unique_pt return rc; }; - bool found_unbound_column = false; - function&)> find_unbound_column = [&](unique_ptr &expr) -> RC { + bool found_unbound_column = false; + function &)> find_unbound_column = [&](unique_ptr &expr) -> RC { RC rc = RC::SUCCESS; if (expr->type() == ExprType::AGGREGATION) { // do nothing @@ -320,12 +320,11 @@ RC LogicalPlanGenerator::create_group_by_plan(SelectStmt *select_stmt, unique_pt // do nothing } else if (expr->type() == ExprType::FIELD) { found_unbound_column = true; - }else { + } else { rc = ExpressionIterator::iterate_child_expr(*expr, find_unbound_column); } return rc; }; - for (unique_ptr &expression : query_expressions) { bind_group_by_expr(expression); @@ -352,8 +351,9 @@ RC LogicalPlanGenerator::create_group_by_plan(SelectStmt *select_stmt, unique_pt // 如果只需要聚合,但是没有group by 语句,需要生成一个空的group by 语句 - auto group_by_oper = make_unique(std::move(group_by_expressions), - std::move(aggregate_expressions)); + auto group_by_oper = + make_unique(std::move(group_by_expressions), std::move(aggregate_expressions)); logical_operator = std::move(group_by_oper); return RC::SUCCESS; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/logical_plan_generator.h b/src/observer/sql/optimizer/logical_plan_generator.h index e0707deff..20746ba1b 100644 --- a/src/observer/sql/optimizer/logical_plan_generator.h +++ b/src/observer/sql/optimizer/logical_plan_generator.h @@ -18,6 +18,8 @@ See the Mulan PSL v2 for more details. */ #include "common/sys/rc.h" #include "common/type/attr_type.h" +namespace oceanbase { + class Stmt; class CalcStmt; class SelectStmt; @@ -47,3 +49,4 @@ class LogicalPlanGenerator int implicit_cast_cost(AttrType from, AttrType to); }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/optimize_stage.cpp b/src/observer/sql/optimizer/optimize_stage.cpp index a0560541f..bd6207827 100644 --- a/src/observer/sql/optimizer/optimize_stage.cpp +++ b/src/observer/sql/optimizer/optimize_stage.cpp @@ -30,6 +30,8 @@ See the Mulan PSL v2 for more details. */ using namespace std; using namespace common; +namespace oceanbase { + RC OptimizeStage::handle_request(SQLStageEvent *sql_event) { unique_ptr logical_operator; @@ -89,10 +91,11 @@ RC OptimizeStage::generate_physical_plan( unique_ptr &logical_operator, unique_ptr &physical_operator, Session *session) { RC rc = RC::SUCCESS; - if (session->get_execution_mode() == ExecutionMode::CHUNK_ITERATOR && LogicalOperator::can_generate_vectorized_operator(logical_operator->type())) { + if (session->get_execution_mode() == ExecutionMode::CHUNK_ITERATOR && + LogicalOperator::can_generate_vectorized_operator(logical_operator->type())) { LOG_TRACE("use chunk iterator"); session->set_used_chunk_mode(true); - rc = physical_plan_generator_.create_vec(*logical_operator, physical_operator, session); + rc = physical_plan_generator_.create_vec(*logical_operator, physical_operator, session); } else { LOG_TRACE("use tuple iterator"); session->set_used_chunk_mode(false); @@ -130,3 +133,4 @@ RC OptimizeStage::create_logical_plan(SQLStageEvent *sql_event, unique_ptr& children) +namespace oceanbase { + +string OptimizerUtils::dump_physical_plan(const unique_ptr &children) { - std::function &)> to_string = [&]( - ostream &os, PhysicalOperator *oper, int level, bool last_child, vector &ends) - { - for (int i = 0; i < level - 1; i++) { - if (ends[i]) { - os << " "; - } else { - os << "│ "; - } - } - if (level > 0) { - if (last_child) { - os << "└─"; - ends[level - 1] = 1; - } else { - os << "├─"; - } - } + std::function &)> to_string = + [&](ostream &os, PhysicalOperator *oper, int level, bool last_child, vector &ends) { + for (int i = 0; i < level - 1; i++) { + if (ends[i]) { + os << " "; + } else { + os << "│ "; + } + } + if (level > 0) { + if (last_child) { + os << "└─"; + ends[level - 1] = 1; + } else { + os << "├─"; + } + } - os << oper->name(); - string param = oper->param(); - if (!param.empty()) { - os << "(" << param << ")"; - } - os << '\n'; + os << oper->name(); + string param = oper->param(); + if (!param.empty()) { + os << "(" << param << ")"; + } + os << '\n'; - if (static_cast(ends.size()) < level + 2) { - ends.resize(level + 2); - } - ends[level + 1] = 0; + if (static_cast(ends.size()) < level + 2) { + ends.resize(level + 2); + } + ends[level + 1] = 0; - vector> &children = oper->children(); - const auto size = static_cast(children.size()); - for (auto i = 0; i < size - 1; i++) { - to_string(os, children[i].get(), level + 1, false /*last_child*/, ends); - } - if (size > 0) { - to_string(os, children[size - 1].get(), level + 1, true /*last_child*/, ends); - } - }; + vector> &children = oper->children(); + const auto size = static_cast(children.size()); + for (auto i = 0; i < size - 1; i++) { + to_string(os, children[i].get(), level + 1, false /*last_child*/, ends); + } + if (size > 0) { + to_string(os, children[size - 1].get(), level + 1, true /*last_child*/, ends); + } + }; stringstream ss; ss << "OPERATOR(NAME)\n"; - int level = 0; + int level = 0; vector ends; ends.push_back(true); to_string(ss, children.get(), level, true /*last_child*/, ends); return ss.str(); -} \ No newline at end of file +} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/optimizer_utils.h b/src/observer/sql/optimizer/optimizer_utils.h index 6cb2c6529..502253c93 100644 --- a/src/observer/sql/optimizer/optimizer_utils.h +++ b/src/observer/sql/optimizer/optimizer_utils.h @@ -14,8 +14,11 @@ See the Mulan PSL v2 for more details. */ #include "common/lang/memory.h" #include "sql/operator/physical_operator.h" +namespace oceanbase { + class OptimizerUtils { public: static string dump_physical_plan(const unique_ptr &root); -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/physical_plan_generator.cpp b/src/observer/sql/optimizer/physical_plan_generator.cpp index 4ce64a24b..994e1b59a 100644 --- a/src/observer/sql/optimizer/physical_plan_generator.cpp +++ b/src/observer/sql/optimizer/physical_plan_generator.cpp @@ -46,7 +46,10 @@ See the Mulan PSL v2 for more details. */ using namespace std; -RC PhysicalPlanGenerator::create(LogicalOperator &logical_operator, unique_ptr &oper, Session* session) +namespace oceanbase { + +RC PhysicalPlanGenerator::create( + LogicalOperator &logical_operator, unique_ptr &oper, Session *session) { RC rc = RC::SUCCESS; @@ -95,7 +98,8 @@ RC PhysicalPlanGenerator::create(LogicalOperator &logical_operator, unique_ptr

&oper, Session* session) +RC PhysicalPlanGenerator::create_vec( + LogicalOperator &logical_operator, unique_ptr &oper, Session *session) { RC rc = RC::SUCCESS; @@ -120,7 +124,8 @@ RC PhysicalPlanGenerator::create_vec(LogicalOperator &logical_operator, unique_p return rc; } -RC PhysicalPlanGenerator::create_plan(TableGetLogicalOperator &table_get_oper, unique_ptr &oper, Session* session) +RC PhysicalPlanGenerator::create_plan( + TableGetLogicalOperator &table_get_oper, unique_ptr &oper, Session *session) { vector> &predicates = table_get_oper.predicates(); // 看看是否有可以用于索引查找的表达式 @@ -191,7 +196,8 @@ RC PhysicalPlanGenerator::create_plan(TableGetLogicalOperator &table_get_oper, u return RC::SUCCESS; } -RC PhysicalPlanGenerator::create_plan(PredicateLogicalOperator &pred_oper, unique_ptr &oper, Session* session) +RC PhysicalPlanGenerator::create_plan( + PredicateLogicalOperator &pred_oper, unique_ptr &oper, Session *session) { vector> &children_opers = pred_oper.children(); ASSERT(children_opers.size() == 1, "predicate logical operator's sub oper number should be 1"); @@ -214,7 +220,8 @@ RC PhysicalPlanGenerator::create_plan(PredicateLogicalOperator &pred_oper, uniqu return rc; } -RC PhysicalPlanGenerator::create_plan(ProjectLogicalOperator &project_oper, unique_ptr &oper, Session* session) +RC PhysicalPlanGenerator::create_plan( + ProjectLogicalOperator &project_oper, unique_ptr &oper, Session *session) { vector> &child_opers = project_oper.children(); @@ -242,7 +249,8 @@ RC PhysicalPlanGenerator::create_plan(ProjectLogicalOperator &project_oper, uniq return rc; } -RC PhysicalPlanGenerator::create_plan(InsertLogicalOperator &insert_oper, unique_ptr &oper, Session* session) +RC PhysicalPlanGenerator::create_plan( + InsertLogicalOperator &insert_oper, unique_ptr &oper, Session *session) { Table *table = insert_oper.table(); vector &values = insert_oper.values(); @@ -251,7 +259,8 @@ RC PhysicalPlanGenerator::create_plan(InsertLogicalOperator &insert_oper, unique return RC::SUCCESS; } -RC PhysicalPlanGenerator::create_plan(DeleteLogicalOperator &delete_oper, unique_ptr &oper, Session* session) +RC PhysicalPlanGenerator::create_plan( + DeleteLogicalOperator &delete_oper, unique_ptr &oper, Session *session) { vector> &child_opers = delete_oper.children(); @@ -276,7 +285,8 @@ RC PhysicalPlanGenerator::create_plan(DeleteLogicalOperator &delete_oper, unique return rc; } -RC PhysicalPlanGenerator::create_plan(ExplainLogicalOperator &explain_oper, unique_ptr &oper, Session* session) +RC PhysicalPlanGenerator::create_plan( + ExplainLogicalOperator &explain_oper, unique_ptr &oper, Session *session) { vector> &child_opers = explain_oper.children(); @@ -298,7 +308,8 @@ RC PhysicalPlanGenerator::create_plan(ExplainLogicalOperator &explain_oper, uniq return rc; } -RC PhysicalPlanGenerator::create_plan(JoinLogicalOperator &join_oper, unique_ptr &oper, Session* session) +RC PhysicalPlanGenerator::create_plan( + JoinLogicalOperator &join_oper, unique_ptr &oper, Session *session) { RC rc = RC::SUCCESS; @@ -333,7 +344,8 @@ bool PhysicalPlanGenerator::can_use_hash_join(JoinLogicalOperator &join_oper) return false; } -RC PhysicalPlanGenerator::create_plan(CalcLogicalOperator &logical_oper, unique_ptr &oper, Session* session) +RC PhysicalPlanGenerator::create_plan( + CalcLogicalOperator &logical_oper, unique_ptr &oper, Session *session) { RC rc = RC::SUCCESS; @@ -342,17 +354,18 @@ RC PhysicalPlanGenerator::create_plan(CalcLogicalOperator &logical_oper, unique_ return rc; } -RC PhysicalPlanGenerator::create_plan(GroupByLogicalOperator &logical_oper, unique_ptr &oper, Session* session) +RC PhysicalPlanGenerator::create_plan( + GroupByLogicalOperator &logical_oper, unique_ptr &oper, Session *session) { RC rc = RC::SUCCESS; - vector> &group_by_expressions = logical_oper.group_by_expressions(); + vector> &group_by_expressions = logical_oper.group_by_expressions(); unique_ptr group_by_oper; if (group_by_expressions.empty()) { group_by_oper = make_unique(std::move(logical_oper.aggregate_expressions())); } else { - group_by_oper = make_unique(std::move(logical_oper.group_by_expressions()), - std::move(logical_oper.aggregate_expressions())); + group_by_oper = make_unique( + std::move(logical_oper.group_by_expressions()), std::move(logical_oper.aggregate_expressions())); } ASSERT(logical_oper.children().size() == 1, "group by operator should have 1 child"); @@ -371,11 +384,13 @@ RC PhysicalPlanGenerator::create_plan(GroupByLogicalOperator &logical_oper, uniq return rc; } -RC PhysicalPlanGenerator::create_vec_plan(TableGetLogicalOperator &table_get_oper, unique_ptr &oper, Session* session) +RC PhysicalPlanGenerator::create_vec_plan( + TableGetLogicalOperator &table_get_oper, unique_ptr &oper, Session *session) { vector> &predicates = table_get_oper.predicates(); - Table *table = table_get_oper.table(); - TableScanVecPhysicalOperator *table_scan_oper = new TableScanVecPhysicalOperator(table, table_get_oper.read_write_mode()); + Table *table = table_get_oper.table(); + TableScanVecPhysicalOperator *table_scan_oper = + new TableScanVecPhysicalOperator(table, table_get_oper.read_write_mode()); table_scan_oper->set_predicates(std::move(predicates)); oper = unique_ptr(table_scan_oper); LOG_TRACE("use vectorized table scan"); @@ -383,16 +398,16 @@ RC PhysicalPlanGenerator::create_vec_plan(TableGetLogicalOperator &table_get_ope return RC::SUCCESS; } -RC PhysicalPlanGenerator::create_vec_plan(GroupByLogicalOperator &logical_oper, unique_ptr &oper, Session* session) +RC PhysicalPlanGenerator::create_vec_plan( + GroupByLogicalOperator &logical_oper, unique_ptr &oper, Session *session) { - RC rc = RC::SUCCESS; + RC rc = RC::SUCCESS; unique_ptr physical_oper = nullptr; if (logical_oper.group_by_expressions().empty()) { physical_oper = make_unique(std::move(logical_oper.aggregate_expressions())); } else { physical_oper = make_unique( - std::move(logical_oper.group_by_expressions()), std::move(logical_oper.aggregate_expressions())); - + std::move(logical_oper.group_by_expressions()), std::move(logical_oper.aggregate_expressions())); } ASSERT(logical_oper.children().size() == 1, "group by operator should have 1 child"); @@ -413,7 +428,8 @@ RC PhysicalPlanGenerator::create_vec_plan(GroupByLogicalOperator &logical_oper, return RC::SUCCESS; } -RC PhysicalPlanGenerator::create_vec_plan(ProjectLogicalOperator &project_oper, unique_ptr &oper, Session* session) +RC PhysicalPlanGenerator::create_vec_plan( + ProjectLogicalOperator &project_oper, unique_ptr &oper, Session *session) { vector> &child_opers = project_oper.children(); @@ -447,8 +463,8 @@ RC PhysicalPlanGenerator::create_vec_plan(ProjectLogicalOperator &project_oper, return rc; } - -RC PhysicalPlanGenerator::create_vec_plan(ExplainLogicalOperator &explain_oper, unique_ptr &oper, Session* session) +RC PhysicalPlanGenerator::create_vec_plan( + ExplainLogicalOperator &explain_oper, unique_ptr &oper, Session *session) { vector> &child_opers = explain_oper.children(); @@ -469,3 +485,4 @@ RC PhysicalPlanGenerator::create_vec_plan(ExplainLogicalOperator &explain_oper, oper = std::move(explain_physical_oper); return rc; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/physical_plan_generator.h b/src/observer/sql/optimizer/physical_plan_generator.h index 85f2e27d2..eae58dad6 100644 --- a/src/observer/sql/optimizer/physical_plan_generator.h +++ b/src/observer/sql/optimizer/physical_plan_generator.h @@ -18,6 +18,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/logical_operator.h" #include "sql/operator/physical_operator.h" +namespace oceanbase { + class Session; class TableGetLogicalOperator; class PredicateLogicalOperator; @@ -62,3 +64,4 @@ class PhysicalPlanGenerator // TODO: remove this and add CBO rules bool can_use_hash_join(JoinLogicalOperator &logical_oper); }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/predicate_pushdown_rewriter.cpp b/src/observer/sql/optimizer/predicate_pushdown_rewriter.cpp index f67cc551d..592fc3791 100644 --- a/src/observer/sql/optimizer/predicate_pushdown_rewriter.cpp +++ b/src/observer/sql/optimizer/predicate_pushdown_rewriter.cpp @@ -18,6 +18,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/operator/logical_operator.h" #include "sql/operator/table_get_logical_operator.h" +namespace oceanbase { + RC PredicatePushdownRewriter::rewrite(unique_ptr &oper, bool &change_made) { RC rc = RC::SUCCESS; @@ -41,7 +43,7 @@ RC PredicatePushdownRewriter::rewrite(unique_ptr &oper, bool &c return rc; } - unique_ptr &predicate_expr = predicate_oper_exprs.front(); + unique_ptr &predicate_expr = predicate_oper_exprs.front(); vector> pushdown_exprs; rc = get_exprs_can_pushdown(predicate_expr, pushdown_exprs); if (rc != RC::SUCCESS) { @@ -124,3 +126,4 @@ RC PredicatePushdownRewriter::get_exprs_can_pushdown( } return rc; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/predicate_pushdown_rewriter.h b/src/observer/sql/optimizer/predicate_pushdown_rewriter.h index 5fbc4510a..ccf8f1e1e 100644 --- a/src/observer/sql/optimizer/predicate_pushdown_rewriter.h +++ b/src/observer/sql/optimizer/predicate_pushdown_rewriter.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "common/lang/vector.h" #include "sql/optimizer/rewrite_rule.h" +namespace oceanbase { + /** * @brief 将一些谓词表达式下推到表数据扫描中 * @ingroup Rewriter @@ -34,3 +36,4 @@ class PredicatePushdownRewriter : public RewriteRule RC get_exprs_can_pushdown(unique_ptr &expr, vector> &pushdown_exprs); bool is_empty_predicate(unique_ptr &expr); }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/predicate_rewrite.cpp b/src/observer/sql/optimizer/predicate_rewrite.cpp index 7444efd68..a0c0a1e73 100644 --- a/src/observer/sql/optimizer/predicate_rewrite.cpp +++ b/src/observer/sql/optimizer/predicate_rewrite.cpp @@ -15,6 +15,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/optimizer/predicate_rewrite.h" #include "sql/operator/logical_operator.h" +namespace oceanbase { + RC PredicateRewriteRule::rewrite(unique_ptr &oper, bool &change_made) { vector> &child_opers = oper->children(); @@ -56,3 +58,4 @@ RC PredicateRewriteRule::rewrite(unique_ptr &oper, bool &change change_made = true; return RC::SUCCESS; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/predicate_rewrite.h b/src/observer/sql/optimizer/predicate_rewrite.h index 193742dfa..1c16ff32f 100644 --- a/src/observer/sql/optimizer/predicate_rewrite.h +++ b/src/observer/sql/optimizer/predicate_rewrite.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/optimizer/rewrite_rule.h" +namespace oceanbase { + /** * @brief 谓词重写规则 * @ingroup Rewriter @@ -29,3 +31,4 @@ class PredicateRewriteRule : public RewriteRule RC rewrite(unique_ptr &oper, bool &change_made) override; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/predicate_to_join_rule.h b/src/observer/sql/optimizer/predicate_to_join_rule.h index 4a91f3eb9..5ad6ea1dd 100644 --- a/src/observer/sql/optimizer/predicate_to_join_rule.h +++ b/src/observer/sql/optimizer/predicate_to_join_rule.h @@ -13,9 +13,12 @@ See the Mulan PSL v2 for more details. */ #include "common/lang/vector.h" #include "sql/optimizer/rewrite_rule.h" +namespace oceanbase { + /** * @brief 将一些谓词表达式下推到join中 * @ingroup Rewriter */ class PredicateToJoinRewriter {}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/rewrite_rule.h b/src/observer/sql/optimizer/rewrite_rule.h index 894273d4a..bd2efeb00 100644 --- a/src/observer/sql/optimizer/rewrite_rule.h +++ b/src/observer/sql/optimizer/rewrite_rule.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "common/sys/rc.h" #include "common/lang/memory.h" +namespace oceanbase { + class LogicalOperator; class Expression; @@ -44,3 +46,4 @@ class ExpressionRewriteRule virtual RC rewrite(unique_ptr &expr, bool &change_made) = 0; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/rewriter.cpp b/src/observer/sql/optimizer/rewriter.cpp index fcb189b1b..ac4d8e326 100644 --- a/src/observer/sql/optimizer/rewriter.cpp +++ b/src/observer/sql/optimizer/rewriter.cpp @@ -19,6 +19,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/optimizer/predicate_pushdown_rewriter.h" #include "sql/optimizer/predicate_rewrite.h" +namespace oceanbase { + Rewriter::Rewriter() { rewrite_rules_.emplace_back(new ExpressionRewriter); @@ -64,3 +66,4 @@ RC Rewriter::rewrite(unique_ptr &oper, bool &change_made) } return rc; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/optimizer/rewriter.h b/src/observer/sql/optimizer/rewriter.h index b54fc71f6..e53ed217f 100644 --- a/src/observer/sql/optimizer/rewriter.h +++ b/src/observer/sql/optimizer/rewriter.h @@ -18,6 +18,8 @@ See the Mulan PSL v2 for more details. */ #include "common/lang/memory.h" #include "common/lang/vector.h" +namespace oceanbase { + class LogicalOperator; /** @@ -50,3 +52,4 @@ class Rewriter private: vector> rewrite_rules_; }; +} // namespace oceanbase diff --git a/src/observer/sql/optimizer/statistics/table_statistics.h b/src/observer/sql/optimizer/statistics/table_statistics.h index c1e75e7a6..6fd3698fc 100644 --- a/src/observer/sql/optimizer/statistics/table_statistics.h +++ b/src/observer/sql/optimizer/statistics/table_statistics.h @@ -10,5 +10,8 @@ See the Mulan PSL v2 for more details. */ #pragma once +namespace oceanbase { + class TableStatistics -{}; \ No newline at end of file +{}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/parser/expression_binder.cpp b/src/observer/sql/parser/expression_binder.cpp index 684ecf468..8ff77c7b1 100644 --- a/src/observer/sql/parser/expression_binder.cpp +++ b/src/observer/sql/parser/expression_binder.cpp @@ -20,6 +20,8 @@ See the Mulan PSL v2 for more details. */ using namespace common; +namespace oceanbase { + Table *BinderContext::find_table(const char *table_name) const { auto pred = [table_name](Table *table) { return 0 == strcasecmp(table_name, table->name()); }; @@ -384,7 +386,7 @@ RC check_aggregate_expression(AggregateExpr &expression) } // 子表达式中不能再包含聚合表达式 - function&)> check_aggregate_expr = [&](unique_ptr &expr) -> RC { + function &)> check_aggregate_expr = [&](unique_ptr &expr) -> RC { RC rc = RC::SUCCESS; if (expr->type() == ExprType::AGGREGATION) { LOG_WARN("aggregate expression cannot be nested"); @@ -406,10 +408,10 @@ RC ExpressionBinder::bind_aggregate_expression( return RC::SUCCESS; } - auto unbound_aggregate_expr = static_cast(expr.get()); - const char *aggregate_name = unbound_aggregate_expr->aggregate_name(); + auto unbound_aggregate_expr = static_cast(expr.get()); + const char *aggregate_name = unbound_aggregate_expr->aggregate_name(); AggregateExpr::Type aggregate_type; - RC rc = AggregateExpr::type_from_string(aggregate_name, aggregate_type); + RC rc = AggregateExpr::type_from_string(aggregate_name, aggregate_type); if (OB_FAIL(rc)) { LOG_WARN("invalid aggregate name: %s", aggregate_name); return rc; @@ -447,3 +449,4 @@ RC ExpressionBinder::bind_aggregate_expression( bound_expressions.emplace_back(std::move(aggregate_expr)); return RC::SUCCESS; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/parser/expression_binder.h b/src/observer/sql/parser/expression_binder.h index 9a5e7c9cd..2accb78a2 100644 --- a/src/observer/sql/parser/expression_binder.h +++ b/src/observer/sql/parser/expression_binder.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/expr/expression.h" +namespace oceanbase { + class BinderContext { public: @@ -63,3 +65,4 @@ class ExpressionBinder private: BinderContext &context_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/parser/parse.cpp b/src/observer/sql/parser/parse.cpp index 5762452be..3ef65c261 100644 --- a/src/observer/sql/parser/parse.cpp +++ b/src/observer/sql/parser/parse.cpp @@ -16,16 +16,15 @@ See the Mulan PSL v2 for more details. */ #include "common/log/log.h" #include "sql/expr/expression.h" +namespace oceanbase { + RC parse(char *st, ParsedSqlNode *sqln); ParsedSqlNode::ParsedSqlNode() : flag(SCF_ERROR) {} ParsedSqlNode::ParsedSqlNode(SqlCommandFlag _flag) : flag(_flag) {} -void ParsedSqlResult::add_sql_node(unique_ptr sql_node) -{ - sql_nodes_.emplace_back(std::move(sql_node)); -} +void ParsedSqlResult::add_sql_node(unique_ptr sql_node) { sql_nodes_.emplace_back(std::move(sql_node)); } //////////////////////////////////////////////////////////////////////////////// @@ -36,3 +35,4 @@ RC parse(const char *st, ParsedSqlResult *sql_result) sql_parse(st, sql_result); return RC::SUCCESS; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/parser/parse.h b/src/observer/sql/parser/parse.h index 5aaeda3f7..3c99a892d 100644 --- a/src/observer/sql/parser/parse.h +++ b/src/observer/sql/parser/parse.h @@ -17,4 +17,7 @@ See the Mulan PSL v2 for more details. */ #include "common/sys/rc.h" #include "sql/parser/parse_defs.h" +namespace oceanbase { + RC parse(const char *st, ParsedSqlResult *sql_result); +} \ No newline at end of file diff --git a/src/observer/sql/parser/parse_defs.h b/src/observer/sql/parser/parse_defs.h index 7d9ab7e5a..c07dd07e1 100644 --- a/src/observer/sql/parser/parse_defs.h +++ b/src/observer/sql/parser/parse_defs.h @@ -20,6 +20,8 @@ See the Mulan PSL v2 for more details. */ #include "common/value.h" #include "common/lang/utility.h" +namespace oceanbase { + class Expression; /** @@ -337,3 +339,4 @@ class ParsedSqlResult private: vector> sql_nodes_; ///< 这里记录SQL命令。虽然看起来支持多个,但是当前仅处理一个 }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/parser/parse_stage.cpp b/src/observer/sql/parser/parse_stage.cpp index ec92cb46a..f8093cc1e 100644 --- a/src/observer/sql/parser/parse_stage.cpp +++ b/src/observer/sql/parser/parse_stage.cpp @@ -26,11 +26,13 @@ See the Mulan PSL v2 for more details. */ using namespace common; +namespace oceanbase { + RC ParseStage::handle_request(SQLStageEvent *sql_event) { RC rc = RC::SUCCESS; - SqlResult *sql_result = sql_event->session_event()->sql_result(); + SqlResult *sql_result = sql_event->session_event()->sql_result(); const string &sql = sql_event->sql(); ParsedSqlResult parsed_sql_result; @@ -59,3 +61,4 @@ RC ParseStage::handle_request(SQLStageEvent *sql_event) return RC::SUCCESS; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/parser/parse_stage.h b/src/observer/sql/parser/parse_stage.h index 6d0706949..275a32267 100644 --- a/src/observer/sql/parser/parse_stage.h +++ b/src/observer/sql/parser/parse_stage.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "common/sys/rc.h" +namespace oceanbase { + class SQLStageEvent; /** @@ -27,3 +29,4 @@ class ParseStage public: RC handle_request(SQLStageEvent *sql_event); }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/parser/resolve_stage.cpp b/src/observer/sql/parser/resolve_stage.cpp index 810617058..e6e223031 100644 --- a/src/observer/sql/parser/resolve_stage.cpp +++ b/src/observer/sql/parser/resolve_stage.cpp @@ -27,6 +27,8 @@ See the Mulan PSL v2 for more details. */ using namespace common; +namespace oceanbase { + RC ResolveStage::handle_request(SQLStageEvent *sql_event) { RC rc = RC::SUCCESS; @@ -56,3 +58,4 @@ RC ResolveStage::handle_request(SQLStageEvent *sql_event) return rc; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/parser/resolve_stage.h b/src/observer/sql/parser/resolve_stage.h index a049b7951..dff4aa52c 100644 --- a/src/observer/sql/parser/resolve_stage.h +++ b/src/observer/sql/parser/resolve_stage.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "common/sys/rc.h" +namespace oceanbase { + class SQLStageEvent; /** @@ -27,3 +29,4 @@ class ResolveStage public: RC handle_request(SQLStageEvent *sql_event); }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/plan_cache/plan_cache_stage.h b/src/observer/sql/plan_cache/plan_cache_stage.h index e4ea51fca..797eceee4 100644 --- a/src/observer/sql/plan_cache/plan_cache_stage.h +++ b/src/observer/sql/plan_cache/plan_cache_stage.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "common/sys/rc.h" +namespace oceanbase { + /** * @brief 尝试从Plan的缓存中获取Plan,如果没有命中,则执行Optimizer * @ingroup SQLStage @@ -24,3 +26,4 @@ See the Mulan PSL v2 for more details. */ */ class PlanCacheStage {}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/query_cache/query_cache_stage.cpp b/src/observer/sql/query_cache/query_cache_stage.cpp index ef6ab09f8..f2daf5239 100644 --- a/src/observer/sql/query_cache/query_cache_stage.cpp +++ b/src/observer/sql/query_cache/query_cache_stage.cpp @@ -23,7 +23,7 @@ See the Mulan PSL v2 for more details. */ using namespace common; -RC QueryCacheStage::handle_request(SQLStageEvent *sql_event) -{ - return RC::SUCCESS; -} +namespace oceanbase { + +RC QueryCacheStage::handle_request(SQLStageEvent *sql_event) { return RC::SUCCESS; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/query_cache/query_cache_stage.h b/src/observer/sql/query_cache/query_cache_stage.h index 2ffa3979c..7a0eb0229 100644 --- a/src/observer/sql/query_cache/query_cache_stage.h +++ b/src/observer/sql/query_cache/query_cache_stage.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "common/sys/rc.h" +namespace oceanbase { + class SQLStageEvent; /** @@ -32,3 +34,4 @@ class QueryCacheStage public: RC handle_request(SQLStageEvent *sql_event); }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/stmt/analyze_table_stmt.cpp b/src/observer/sql/stmt/analyze_table_stmt.cpp index 9cb029e57..f028c18a2 100644 --- a/src/observer/sql/stmt/analyze_table_stmt.cpp +++ b/src/observer/sql/stmt/analyze_table_stmt.cpp @@ -11,6 +11,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/stmt/analyze_table_stmt.h" #include "storage/db/db.h" +namespace oceanbase { + RC AnalyzeTableStmt::create(Db *db, const AnalyzeTableSqlNode &analyze_table, Stmt *&stmt) { if (db->find_table(analyze_table.relation_name.c_str()) == nullptr) { @@ -19,3 +21,4 @@ RC AnalyzeTableStmt::create(Db *db, const AnalyzeTableSqlNode &analyze_table, St stmt = new AnalyzeTableStmt(analyze_table.relation_name); return RC::SUCCESS; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/stmt/analyze_table_stmt.h b/src/observer/sql/stmt/analyze_table_stmt.h index 7730e5c04..7d7952a71 100644 --- a/src/observer/sql/stmt/analyze_table_stmt.h +++ b/src/observer/sql/stmt/analyze_table_stmt.h @@ -12,6 +12,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/stmt/stmt.h" +namespace oceanbase { + class Db; /** @@ -33,3 +35,4 @@ class AnalyzeTableStmt : public Stmt private: string table_name_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/stmt/calc_stmt.h b/src/observer/sql/stmt/calc_stmt.h index 4b5fcdf54..ad35a204c 100644 --- a/src/observer/sql/stmt/calc_stmt.h +++ b/src/observer/sql/stmt/calc_stmt.h @@ -18,6 +18,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/expr/expression.h" #include "sql/stmt/stmt.h" +namespace oceanbase { + class Db; class Table; @@ -48,3 +50,4 @@ class CalcStmt : public Stmt private: vector> expressions_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/stmt/create_index_stmt.cpp b/src/observer/sql/stmt/create_index_stmt.cpp index 93fae6630..a01ed62b6 100644 --- a/src/observer/sql/stmt/create_index_stmt.cpp +++ b/src/observer/sql/stmt/create_index_stmt.cpp @@ -21,6 +21,8 @@ See the Mulan PSL v2 for more details. */ using namespace std; using namespace common; +namespace oceanbase { + RC CreateIndexStmt::create(Db *db, const CreateIndexSqlNode &create_index, Stmt *&stmt) { stmt = nullptr; @@ -56,3 +58,4 @@ RC CreateIndexStmt::create(Db *db, const CreateIndexSqlNode &create_index, Stmt stmt = new CreateIndexStmt(table, field_meta, create_index.index_name); return RC::SUCCESS; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/stmt/create_index_stmt.h b/src/observer/sql/stmt/create_index_stmt.h index cbdd8f4d1..57ebb1948 100644 --- a/src/observer/sql/stmt/create_index_stmt.h +++ b/src/observer/sql/stmt/create_index_stmt.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/stmt/stmt.h" +namespace oceanbase { + struct CreateIndexSqlNode; class Table; class FieldMeta; @@ -47,3 +49,4 @@ class CreateIndexStmt : public Stmt const FieldMeta *field_meta_ = nullptr; string index_name_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/stmt/create_table_stmt.cpp b/src/observer/sql/stmt/create_table_stmt.cpp index d8a8944c5..29cba6537 100644 --- a/src/observer/sql/stmt/create_table_stmt.cpp +++ b/src/observer/sql/stmt/create_table_stmt.cpp @@ -17,18 +17,22 @@ See the Mulan PSL v2 for more details. */ #include "sql/stmt/create_table_stmt.h" #include "event/sql_debug.h" +namespace oceanbase { + RC CreateTableStmt::create(Db *db, const CreateTableSqlNode &create_table, Stmt *&stmt) { StorageFormat storage_format = get_storage_format(create_table.storage_format.c_str()); if (storage_format == StorageFormat::UNKNOWN_FORMAT) { return RC::INVALID_ARGUMENT; } - stmt = new CreateTableStmt(create_table.relation_name, create_table.attr_infos, create_table.primary_keys, storage_format); + stmt = new CreateTableStmt( + create_table.relation_name, create_table.attr_infos, create_table.primary_keys, storage_format); sql_debug("create table statement: table name %s", create_table.relation_name.c_str()); return RC::SUCCESS; } -StorageFormat CreateTableStmt::get_storage_format(const char *format_str) { +StorageFormat CreateTableStmt::get_storage_format(const char *format_str) +{ StorageFormat format = StorageFormat::UNKNOWN_FORMAT; if (strlen(format_str) == 0) { format = StorageFormat::ROW_FORMAT; @@ -41,3 +45,4 @@ StorageFormat CreateTableStmt::get_storage_format(const char *format_str) { } return format; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/stmt/create_table_stmt.h b/src/observer/sql/stmt/create_table_stmt.h index 3dd7b17b0..62495f6a9 100644 --- a/src/observer/sql/stmt/create_table_stmt.h +++ b/src/observer/sql/stmt/create_table_stmt.h @@ -18,6 +18,8 @@ See the Mulan PSL v2 for more details. */ #include "common/lang/vector.h" #include "sql/stmt/stmt.h" +namespace oceanbase { + class Db; /** @@ -50,3 +52,4 @@ class CreateTableStmt : public Stmt vector primary_keys_; StorageFormat storage_format_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/stmt/delete_stmt.cpp b/src/observer/sql/stmt/delete_stmt.cpp index 89dce0db8..dec59b169 100644 --- a/src/observer/sql/stmt/delete_stmt.cpp +++ b/src/observer/sql/stmt/delete_stmt.cpp @@ -18,6 +18,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/db/db.h" #include "storage/table/table.h" +namespace oceanbase { + DeleteStmt::DeleteStmt(Table *table, FilterStmt *filter_stmt) : table_(table), filter_stmt_(filter_stmt) {} DeleteStmt::~DeleteStmt() @@ -57,3 +59,4 @@ RC DeleteStmt::create(Db *db, const DeleteSqlNode &delete_sql, Stmt *&stmt) stmt = new DeleteStmt(table, filter_stmt); return rc; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/stmt/delete_stmt.h b/src/observer/sql/stmt/delete_stmt.h index 33cda12a6..b4232e3a7 100644 --- a/src/observer/sql/stmt/delete_stmt.h +++ b/src/observer/sql/stmt/delete_stmt.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/parser/parse_defs.h" #include "sql/stmt/stmt.h" +namespace oceanbase { + class Table; class FilterStmt; @@ -42,3 +44,4 @@ class DeleteStmt : public Stmt Table *table_ = nullptr; FilterStmt *filter_stmt_ = nullptr; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/stmt/desc_table_stmt.cpp b/src/observer/sql/stmt/desc_table_stmt.cpp index 1f1e65a13..6bcdef616 100644 --- a/src/observer/sql/stmt/desc_table_stmt.cpp +++ b/src/observer/sql/stmt/desc_table_stmt.cpp @@ -15,6 +15,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/stmt/desc_table_stmt.h" #include "storage/db/db.h" +namespace oceanbase { + RC DescTableStmt::create(Db *db, const DescTableSqlNode &desc_table, Stmt *&stmt) { if (db->find_table(desc_table.relation_name.c_str()) == nullptr) { @@ -23,3 +25,4 @@ RC DescTableStmt::create(Db *db, const DescTableSqlNode &desc_table, Stmt *&stmt stmt = new DescTableStmt(desc_table.relation_name); return RC::SUCCESS; } +} // namespace oceanbase diff --git a/src/observer/sql/stmt/desc_table_stmt.h b/src/observer/sql/stmt/desc_table_stmt.h index 9e57a8a67..bfccd6236 100644 --- a/src/observer/sql/stmt/desc_table_stmt.h +++ b/src/observer/sql/stmt/desc_table_stmt.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/stmt/stmt.h" +namespace oceanbase { + class Db; /** @@ -38,3 +40,4 @@ class DescTableStmt : public Stmt private: string table_name_; }; +} // namespace oceanbase diff --git a/src/observer/sql/stmt/exit_stmt.h b/src/observer/sql/stmt/exit_stmt.h index 228223bd6..4efa2460a 100644 --- a/src/observer/sql/stmt/exit_stmt.h +++ b/src/observer/sql/stmt/exit_stmt.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/stmt/stmt.h" +namespace oceanbase { + /** * @brief Exit 语句,表示断开连接,现在什么成员都没有 * @ingroup Statement @@ -33,4 +35,5 @@ class ExitStmt : public Stmt stmt = new ExitStmt(); return RC::SUCCESS; } -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/stmt/explain_stmt.cpp b/src/observer/sql/stmt/explain_stmt.cpp index 7efea6a2b..6a085b9e1 100644 --- a/src/observer/sql/stmt/explain_stmt.cpp +++ b/src/observer/sql/stmt/explain_stmt.cpp @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "common/log/log.h" #include "sql/stmt/stmt.h" +namespace oceanbase { + ExplainStmt::ExplainStmt(unique_ptr child_stmt) : child_stmt_(std::move(child_stmt)) {} RC ExplainStmt::create(Db *db, const ExplainSqlNode &explain, Stmt *&stmt) @@ -28,6 +30,7 @@ RC ExplainStmt::create(Db *db, const ExplainSqlNode &explain, Stmt *&stmt) } unique_ptr child_stmt_ptr = unique_ptr(child_stmt); - stmt = new ExplainStmt(std::move(child_stmt_ptr)); + stmt = new ExplainStmt(std::move(child_stmt_ptr)); return rc; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/stmt/explain_stmt.h b/src/observer/sql/stmt/explain_stmt.h index 3634f07cd..23763fdd3 100644 --- a/src/observer/sql/stmt/explain_stmt.h +++ b/src/observer/sql/stmt/explain_stmt.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/stmt/stmt.h" +namespace oceanbase { + /** * @brief explain语句 * @ingroup Statement @@ -35,3 +37,4 @@ class ExplainStmt : public Stmt private: unique_ptr child_stmt_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/stmt/filter_stmt.cpp b/src/observer/sql/stmt/filter_stmt.cpp index aa078bcbb..9a27f8c64 100644 --- a/src/observer/sql/stmt/filter_stmt.cpp +++ b/src/observer/sql/stmt/filter_stmt.cpp @@ -19,6 +19,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/db/db.h" #include "storage/table/table.h" +namespace oceanbase { + FilterStmt::~FilterStmt() { for (FilterUnit *unit : filter_units_) { @@ -50,8 +52,8 @@ RC FilterStmt::create(Db *db, Table *default_table, unordered_map *tables, - const RelAttrSqlNode &attr, Table *&table, const FieldMeta *&field) +RC get_table_and_field(Db *db, Table *default_table, unordered_map *tables, const RelAttrSqlNode &attr, + Table *&table, const FieldMeta *&field) { if (common::is_blank(attr.relation_name.c_str())) { table = default_table; @@ -130,3 +132,4 @@ RC FilterStmt::create_filter_unit(Db *db, Table *default_table, unordered_map filter_units_; // 默认当前都是AND关系 }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/stmt/help_stmt.h b/src/observer/sql/stmt/help_stmt.h index 1946b56cb..b63bc2c4b 100644 --- a/src/observer/sql/stmt/help_stmt.h +++ b/src/observer/sql/stmt/help_stmt.h @@ -19,6 +19,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/stmt/stmt.h" +namespace oceanbase { + /** * @brief Help 语句,现在什么成员都没有 * @ingroup Statement @@ -36,4 +38,5 @@ class HelpStmt : public Stmt stmt = new HelpStmt(); return RC::SUCCESS; } -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/stmt/insert_stmt.cpp b/src/observer/sql/stmt/insert_stmt.cpp index 96ced424f..61c53c987 100644 --- a/src/observer/sql/stmt/insert_stmt.cpp +++ b/src/observer/sql/stmt/insert_stmt.cpp @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/db/db.h" #include "storage/table/table.h" +namespace oceanbase { + InsertStmt::InsertStmt(Table *table, const Value *values, int value_amount) : table_(table), values_(values), value_amount_(value_amount) {} @@ -51,3 +53,4 @@ RC InsertStmt::create(Db *db, const InsertSqlNode &inserts, Stmt *&stmt) stmt = new InsertStmt(table, values, value_num); return RC::SUCCESS; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/stmt/insert_stmt.h b/src/observer/sql/stmt/insert_stmt.h index 51c162ac8..19d823f1b 100644 --- a/src/observer/sql/stmt/insert_stmt.h +++ b/src/observer/sql/stmt/insert_stmt.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "common/sys/rc.h" #include "sql/stmt/stmt.h" +namespace oceanbase { + class Table; class Db; @@ -45,3 +47,4 @@ class InsertStmt : public Stmt const Value *values_ = nullptr; int value_amount_ = 0; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/stmt/load_data_stmt.cpp b/src/observer/sql/stmt/load_data_stmt.cpp index 37335dfa7..e5a07dbfe 100644 --- a/src/observer/sql/stmt/load_data_stmt.cpp +++ b/src/observer/sql/stmt/load_data_stmt.cpp @@ -20,6 +20,8 @@ See the Mulan PSL v2 for more details. */ using namespace common; +namespace oceanbase { + RC LoadDataStmt::create(Db *db, const LoadDataSqlNode &load_data, Stmt *&stmt) { RC rc = RC::SUCCESS; @@ -55,3 +57,4 @@ RC LoadDataStmt::create(Db *db, const LoadDataSqlNode &load_data, Stmt *&stmt) stmt = new LoadDataStmt(table, load_data.file_name.c_str(), load_data.terminated[1], load_data.enclosed[1]); return rc; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/stmt/load_data_stmt.h b/src/observer/sql/stmt/load_data_stmt.h index 5e5c49b67..8472792f5 100644 --- a/src/observer/sql/stmt/load_data_stmt.h +++ b/src/observer/sql/stmt/load_data_stmt.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/stmt/stmt.h" +namespace oceanbase { + class Table; class LoadDataStmt : public Stmt @@ -41,3 +43,4 @@ class LoadDataStmt : public Stmt char terminated_; char enclosed_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/stmt/select_stmt.cpp b/src/observer/sql/stmt/select_stmt.cpp index a51d9e794..1d68247e6 100644 --- a/src/observer/sql/stmt/select_stmt.cpp +++ b/src/observer/sql/stmt/select_stmt.cpp @@ -23,6 +23,8 @@ See the Mulan PSL v2 for more details. */ using namespace std; using namespace common; +namespace oceanbase { + SelectStmt::~SelectStmt() { if (nullptr != filter_stmt_) { @@ -63,8 +65,8 @@ RC SelectStmt::create(Db *db, SelectSqlNode &select_sql, Stmt *&stmt) // collect query fields in `select` statement vector> bound_expressions; - ExpressionBinder expression_binder(binder_context); - + ExpressionBinder expression_binder(binder_context); + for (unique_ptr &expression : select_sql.expressions) { RC rc = expression_binder.bind_expression(expression, bound_expressions); if (OB_FAIL(rc)) { @@ -107,6 +109,7 @@ RC SelectStmt::create(Db *db, SelectSqlNode &select_sql, Stmt *&stmt) select_stmt->query_expressions_.swap(bound_expressions); select_stmt->filter_stmt_ = filter_stmt; select_stmt->group_by_.swap(group_by_expressions); - stmt = select_stmt; + stmt = select_stmt; return RC::SUCCESS; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/stmt/select_stmt.h b/src/observer/sql/stmt/select_stmt.h index 5a736d9d0..ba0544120 100644 --- a/src/observer/sql/stmt/select_stmt.h +++ b/src/observer/sql/stmt/select_stmt.h @@ -18,6 +18,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/stmt/stmt.h" #include "storage/field/field.h" +namespace oceanbase { + class FieldMeta; class FilterStmt; class Db; @@ -51,3 +53,4 @@ class SelectStmt : public Stmt FilterStmt *filter_stmt_ = nullptr; vector> group_by_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/stmt/set_variable_stmt.h b/src/observer/sql/stmt/set_variable_stmt.h index 93eb82aaa..51701610c 100644 --- a/src/observer/sql/stmt/set_variable_stmt.h +++ b/src/observer/sql/stmt/set_variable_stmt.h @@ -19,6 +19,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/stmt/stmt.h" +namespace oceanbase { + /** * @brief SetVairable 语句,设置变量,当前是会话变量,但是只有会话变量,没有全局变量 * @ingroup Statement @@ -43,4 +45,5 @@ class SetVariableStmt : public Stmt private: SetVariableSqlNode set_variable_; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/stmt/show_tables_stmt.h b/src/observer/sql/stmt/show_tables_stmt.h index 601a1d568..ec00f6a25 100644 --- a/src/observer/sql/stmt/show_tables_stmt.h +++ b/src/observer/sql/stmt/show_tables_stmt.h @@ -19,6 +19,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/stmt/stmt.h" +namespace oceanbase { + class Db; /** @@ -39,4 +41,5 @@ class ShowTablesStmt : public Stmt stmt = new ShowTablesStmt(); return RC::SUCCESS; } -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/stmt/stmt.cpp b/src/observer/sql/stmt/stmt.cpp index 2664aaf60..d2cde730c 100644 --- a/src/observer/sql/stmt/stmt.cpp +++ b/src/observer/sql/stmt/stmt.cpp @@ -31,6 +31,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/stmt/trx_begin_stmt.h" #include "sql/stmt/trx_end_stmt.h" +namespace oceanbase { + bool stmt_type_ddl(StmtType type) { switch (type) { @@ -76,7 +78,7 @@ RC Stmt::create_stmt(Db *db, ParsedSqlNode &sql_node, Stmt *&stmt) return DescTableStmt::create(db, sql_node.desc_table, stmt); } - case SCF_ANALYZE_TABLE: { + case SCF_ANALYZE_TABLE: { return AnalyzeTableStmt::create(db, sql_node.analyze_table, stmt); } @@ -119,3 +121,4 @@ RC Stmt::create_stmt(Db *db, ParsedSqlNode &sql_node, Stmt *&stmt) } return RC::UNIMPLEMENTED; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/stmt/stmt.h b/src/observer/sql/stmt/stmt.h index 4c9b4b03e..e40730957 100644 --- a/src/observer/sql/stmt/stmt.h +++ b/src/observer/sql/stmt/stmt.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "common/sys/rc.h" #include "sql/parser/parse_defs.h" +namespace oceanbase { + class Db; /** @@ -92,3 +94,4 @@ class Stmt private: }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/stmt/trx_begin_stmt.h b/src/observer/sql/stmt/trx_begin_stmt.h index afdfaf104..74c1f2d4b 100644 --- a/src/observer/sql/stmt/trx_begin_stmt.h +++ b/src/observer/sql/stmt/trx_begin_stmt.h @@ -19,6 +19,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/stmt/stmt.h" +namespace oceanbase { + /** * @brief 事务的Begin 语句,现在什么成员都没有 * @ingroup Statement @@ -36,4 +38,5 @@ class TrxBeginStmt : public Stmt stmt = new TrxBeginStmt(); return RC::SUCCESS; } -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/stmt/trx_end_stmt.h b/src/observer/sql/stmt/trx_end_stmt.h index 30454ecf6..6214b4f51 100644 --- a/src/observer/sql/stmt/trx_end_stmt.h +++ b/src/observer/sql/stmt/trx_end_stmt.h @@ -19,6 +19,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/stmt/stmt.h" +namespace oceanbase { + /** * @brief 事务的 Commit/Rollback 语句,现在什么成员都没有 * @ingroup Statement @@ -40,4 +42,5 @@ class TrxEndStmt : public Stmt private: StmtType type_; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/stmt/update_stmt.cpp b/src/observer/sql/stmt/update_stmt.cpp index 92df6a6dc..46810ae91 100644 --- a/src/observer/sql/stmt/update_stmt.cpp +++ b/src/observer/sql/stmt/update_stmt.cpp @@ -14,6 +14,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/stmt/update_stmt.h" +namespace oceanbase { + UpdateStmt::UpdateStmt(Table *table, Value *values, int value_amount) : table_(table), values_(values), value_amount_(value_amount) {} @@ -24,3 +26,4 @@ RC UpdateStmt::create(Db *db, const UpdateSqlNode &update, Stmt *&stmt) stmt = nullptr; return RC::INTERNAL; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/sql/stmt/update_stmt.h b/src/observer/sql/stmt/update_stmt.h index 28e13268e..50b679545 100644 --- a/src/observer/sql/stmt/update_stmt.h +++ b/src/observer/sql/stmt/update_stmt.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "common/sys/rc.h" #include "sql/stmt/stmt.h" +namespace oceanbase { + class Table; /** @@ -42,3 +44,4 @@ class UpdateStmt : public Stmt Value *values_ = nullptr; int value_amount_ = 0; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/buffer/buffer_pool_log.cpp b/src/observer/storage/buffer/buffer_pool_log.cpp index b0fb2c961..70f42e7ce 100644 --- a/src/observer/storage/buffer/buffer_pool_log.cpp +++ b/src/observer/storage/buffer/buffer_pool_log.cpp @@ -17,10 +17,11 @@ See the Mulan PSL v2 for more details. */ #include "storage/clog/log_handler.h" #include "storage/clog/log_entry.h" +namespace oceanbase { + string BufferPoolLogEntry::to_string() const { - return string("buffer_pool_id=") + std::to_string(buffer_pool_id) + - ", page_num=" + std::to_string(page_num) + + return string("buffer_pool_id=") + std::to_string(buffer_pool_id) + ", page_num=" + std::to_string(page_num) + ", operation_type=" + BufferPoolOperation(operation_type).to_string(); } @@ -40,25 +41,22 @@ RC BufferPoolLogHandler::deallocate_page(PageNum page_num, LSN &lsn) return append_log(BufferPoolOperation::Type::DEALLOCATE, page_num, lsn); } -RC BufferPoolLogHandler::flush_page(Page &page) -{ - return log_handler_.wait_lsn(page.lsn); -} +RC BufferPoolLogHandler::flush_page(Page &page) { return log_handler_.wait_lsn(page.lsn); } RC BufferPoolLogHandler::append_log(BufferPoolOperation::Type type, PageNum page_num, LSN &lsn) { BufferPoolLogEntry log; log.buffer_pool_id = buffer_pool_.id(); - log.page_num = page_num; + log.page_num = page_num; log.operation_type = BufferPoolOperation(type).type_id(); - return log_handler_.append(lsn, LogModule::Id::BUFFER_POOL, span(reinterpret_cast(&log), sizeof(log))); + return log_handler_.append( + lsn, LogModule::Id::BUFFER_POOL, span(reinterpret_cast(&log), sizeof(log))); } //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// // BufferPoolLogReplayer -BufferPoolLogReplayer::BufferPoolLogReplayer(BufferPoolManager &bp_manager) : bp_manager_(bp_manager) -{} +BufferPoolLogReplayer::BufferPoolLogReplayer(BufferPoolManager &bp_manager) : bp_manager_(bp_manager) {} RC BufferPoolLogReplayer::replay(const LogEntry &entry) { @@ -71,10 +69,10 @@ RC BufferPoolLogReplayer::replay(const LogEntry &entry) auto log = reinterpret_cast(entry.data()); LOG_TRACE("replay buffer pool log. entry=%s, log=%s", entry.to_string().c_str(), log->to_string().c_str()); - - int32_t buffer_pool_id = log->buffer_pool_id; - DiskBufferPool *buffer_pool = nullptr; - RC rc = bp_manager_.get_buffer_pool(buffer_pool_id, buffer_pool); + + int32_t buffer_pool_id = log->buffer_pool_id; + DiskBufferPool *buffer_pool = nullptr; + RC rc = bp_manager_.get_buffer_pool(buffer_pool_id, buffer_pool); if (OB_FAIL(rc) || buffer_pool == nullptr) { LOG_ERROR("failed to get buffer pool. rc=%s, buffer pool=%p, log=%s, %s", strrc(rc), buffer_pool, entry.to_string().c_str(), log->to_string().c_str()); @@ -82,15 +80,13 @@ RC BufferPoolLogReplayer::replay(const LogEntry &entry) } BufferPoolOperation operation(log->operation_type); - switch (operation.type()) - { - case BufferPoolOperation::Type::ALLOCATE: - return buffer_pool->redo_allocate_page(entry.lsn(), log->page_num); - case BufferPoolOperation::Type::DEALLOCATE: - return buffer_pool->redo_deallocate_page(entry.lsn(), log->page_num); + switch (operation.type()) { + case BufferPoolOperation::Type::ALLOCATE: return buffer_pool->redo_allocate_page(entry.lsn(), log->page_num); + case BufferPoolOperation::Type::DEALLOCATE: return buffer_pool->redo_deallocate_page(entry.lsn(), log->page_num); default: LOG_ERROR("unknown buffer pool operation. operation=%s", operation.to_string().c_str()); return RC::INTERNAL; } return RC::SUCCESS; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/buffer/buffer_pool_log.h b/src/observer/storage/buffer/buffer_pool_log.h index 604c01971..af87b7033 100644 --- a/src/observer/storage/buffer/buffer_pool_log.h +++ b/src/observer/storage/buffer/buffer_pool_log.h @@ -19,6 +19,8 @@ See the Mulan PSL v2 for more details. */ #include "common/sys/rc.h" #include "storage/clog/log_replayer.h" +namespace oceanbase { + class DiskBufferPool; class BufferPoolManager; class LogHandler; @@ -127,3 +129,4 @@ class BufferPoolLogReplayer final : public LogReplayer private: BufferPoolManager &bp_manager_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/buffer/disk_buffer_pool.cpp b/src/observer/storage/buffer/disk_buffer_pool.cpp index df656d76c..183d5befc 100644 --- a/src/observer/storage/buffer/disk_buffer_pool.cpp +++ b/src/observer/storage/buffer/disk_buffer_pool.cpp @@ -25,6 +25,8 @@ See the Mulan PSL v2 for more details. */ using namespace common; +namespace oceanbase { + static const int MEM_POOL_ITEM_NUM = 20; //////////////////////////////////////////////////////////////////////////////// @@ -103,7 +105,7 @@ int BPFrameManager::purge_frames(int count, function purger) Frame *BPFrameManager::get(int buffer_pool_id, PageNum page_num) { - FrameId frame_id(buffer_pool_id, page_num); + FrameId frame_id(buffer_pool_id, page_num); lock_guard lock_guard(lock_); return get_internal(frame_id); @@ -126,7 +128,7 @@ Frame *BPFrameManager::alloc(int buffer_pool_id, PageNum page_num) lock_guard lock_guard(lock_); - Frame *frame = get_internal(frame_id); + Frame *frame = get_internal(frame_id); if (frame != nullptr) { return frame; } @@ -172,7 +174,7 @@ list BPFrameManager::find_list(int buffer_pool_id) lock_guard lock_guard(lock_); list frames; - auto fetcher = [&frames, buffer_pool_id](const FrameId &frame_id, Frame *const frame) -> bool { + auto fetcher = [&frames, buffer_pool_id](const FrameId &frame_id, Frame *const frame) -> bool { if (buffer_pool_id == frame_id.buffer_pool_id()) { frame->pin(); frames.push_back(frame); @@ -215,9 +217,12 @@ RC BufferPoolIterator::reset() } //////////////////////////////////////////////////////////////////////////////// -DiskBufferPool::DiskBufferPool( - BufferPoolManager &bp_manager, BPFrameManager &frame_manager, DoubleWriteBuffer &dblwr_manager, LogHandler &log_handler) - : bp_manager_(bp_manager), frame_manager_(frame_manager), dblwr_manager_(dblwr_manager), log_handler_(*this, log_handler) +DiskBufferPool::DiskBufferPool(BufferPoolManager &bp_manager, BPFrameManager &frame_manager, + DoubleWriteBuffer &dblwr_manager, LogHandler &log_handler) + : bp_manager_(bp_manager), + frame_manager_(frame_manager), + dblwr_manager_(dblwr_manager), + log_handler_(*this, log_handler) {} DiskBufferPool::~DiskBufferPool() @@ -239,7 +244,7 @@ RC DiskBufferPool::open_file(const char *file_name) file_desc_ = fd; Page header_page; - int ret = readn(file_desc_, &header_page, sizeof(header_page)); + int ret = readn(file_desc_, &header_page, sizeof(header_page)); if (ret != 0) { LOG_ERROR("Failed to read first page of %s, due to %s.", file_name, strerror(errno)); close(fd); @@ -248,7 +253,7 @@ RC DiskBufferPool::open_file(const char *file_name) } BPFileHeader *tmp_file_header = reinterpret_cast(header_page.data); - buffer_pool_id_ = tmp_file_header->buffer_pool_id; + buffer_pool_id_ = tmp_file_header->buffer_pool_id; RC rc = allocate_frame(BP_HEADER_PAGE, &hdr_frame_); if (rc != RC::SUCCESS) { @@ -366,7 +371,7 @@ RC DiskBufferPool::allocate_page(Frame **frame) // TODO, do we need clean the loaded page's data? hdr_frame_->mark_dirty(); LSN lsn = 0; - rc = log_handler_.allocate_page(i, lsn); + rc = log_handler_.allocate_page(i, lsn); if (OB_FAIL(rc)) { LOG_ERROR("Failed to log allocate page %d, rc=%s", i, strrc(rc)); // 忽略了错误 @@ -390,7 +395,7 @@ RC DiskBufferPool::allocate_page(Frame **frame) } LSN lsn = 0; - rc = log_handler_.allocate_page(file_header_->page_count, lsn); + rc = log_handler_.allocate_page(file_header_->page_count, lsn); if (OB_FAIL(rc)) { LOG_ERROR("Failed to log allocate page %d, rc=%s", file_header_->page_count, strrc(rc)); // 忽略了错误 @@ -440,9 +445,9 @@ RC DiskBufferPool::dispose_page(PageNum page_num) LOG_ERROR("Failed to dispose page %d, because it is the first page. filename=%s", page_num, file_name_.c_str()); return RC::INTERNAL; } - + scoped_lock lock_guard(lock_); - Frame *used_frame = frame_manager_.get(id(), page_num); + Frame *used_frame = frame_manager_.get(id(), page_num); if (used_frame != nullptr) { ASSERT("the page try to dispose is in use. frame:%s", used_frame->to_string().c_str()); frame_manager_.free(id(), page_num, used_frame); @@ -451,7 +456,7 @@ RC DiskBufferPool::dispose_page(PageNum page_num) } LSN lsn = 0; - RC rc = log_handler_.deallocate_page(page_num, lsn); + RC rc = log_handler_.deallocate_page(page_num, lsn); if (OB_FAIL(rc)) { LOG_ERROR("Failed to log deallocate page %d, rc=%s", page_num, strrc(rc)); // ignore error handle @@ -496,7 +501,7 @@ RC DiskBufferPool::purge_page(PageNum page_num) { scoped_lock lock_guard(lock_); - Frame *used_frame = frame_manager_.get(id(), page_num); + Frame *used_frame = frame_manager_.get(id(), page_num); if (used_frame != nullptr) { return purge_frame(page_num, used_frame); } @@ -651,7 +656,7 @@ RC DiskBufferPool::redo_allocate_page(LSN lsn, PageNum page_num) file_header_->page_count++; hdr_frame_->set_lsn(lsn); hdr_frame_->mark_dirty(); - + // TODO 应该检查文件是否足够大,包含了当前新分配的页面 Bitmap bitmap(file_header_->bitmap, file_header_->page_count); @@ -735,13 +740,13 @@ RC DiskBufferPool::check_page_num(PageNum page_num) RC DiskBufferPool::load_page(PageNum page_num, Frame *frame) { Page &page = frame->page(); - RC rc = dblwr_manager_.read_page(this, page_num, page); + RC rc = dblwr_manager_.read_page(this, page_num, page); if (OB_SUCC(rc)) { return rc; } scoped_lock lock_guard(wr_lock_); - int64_t offset = ((int64_t)page_num) * BP_PAGE_SIZE; + int64_t offset = ((int64_t)page_num) * BP_PAGE_SIZE; if (lseek(file_desc_, offset, SEEK_SET) == -1) { LOG_ERROR("Failed to load page %s:%d, due to failed to lseek:%s.", file_name_.c_str(), page_num, strerror(errno)); @@ -895,7 +900,7 @@ RC BufferPoolManager::flush_page(Frame &frame) int buffer_pool_id = frame.buffer_pool_id(); scoped_lock lock_guard(lock_); - auto iter = id_to_buffer_pools_.find(buffer_pool_id); + auto iter = id_to_buffer_pools_.find(buffer_pool_id); if (iter == id_to_buffer_pools_.end()) { LOG_WARN("unknown buffer pool of id %d", buffer_pool_id); return RC::INTERNAL; @@ -916,8 +921,9 @@ RC BufferPoolManager::get_buffer_pool(int32_t id, DiskBufferPool *&bp) LOG_WARN("unknown buffer pool of id %d", id); return RC::INTERNAL; } - + bp = iter->second; return RC::SUCCESS; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/buffer/disk_buffer_pool.h b/src/observer/storage/buffer/disk_buffer_pool.h index d41d1bd0c..b3c4e4706 100644 --- a/src/observer/storage/buffer/disk_buffer_pool.h +++ b/src/observer/storage/buffer/disk_buffer_pool.h @@ -37,6 +37,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/buffer/page.h" #include "storage/buffer/buffer_pool_log.h" +namespace oceanbase { + class BufferPoolManager; class DiskBufferPool; class DoubleWriteBuffer; @@ -352,5 +354,6 @@ class BufferPoolManager final common::Mutex lock_; unordered_map buffer_pools_; unordered_map id_to_buffer_pools_; - atomic next_buffer_pool_id_{1}; // 系统启动时,会打开所有的表,这样就可以知道当前系统最大的ID是多少了 + atomic next_buffer_pool_id_{1}; // 系统启动时,会打开所有的表,这样就可以知道当前系统最大的ID是多少了 }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/buffer/double_write_buffer.cpp b/src/observer/storage/buffer/double_write_buffer.cpp index 9cfae43cb..714cc79b2 100644 --- a/src/observer/storage/buffer/double_write_buffer.cpp +++ b/src/observer/storage/buffer/double_write_buffer.cpp @@ -22,6 +22,8 @@ See the Mulan PSL v2 for more details. */ using namespace common; +namespace oceanbase { + struct DoubleWritePage { public: @@ -30,25 +32,24 @@ struct DoubleWritePage public: DoubleWritePageKey key; - int32_t page_index = -1; /// 页面在double write buffer文件中的页索引 - bool valid = true; /// 表示页面是否有效,在页面被删除时,需要同时标记磁盘上的值。 + int32_t page_index = -1; /// 页面在double write buffer文件中的页索引 + bool valid = true; /// 表示页面是否有效,在页面被删除时,需要同时标记磁盘上的值。 Page page; static const int32_t SIZE; }; DoubleWritePage::DoubleWritePage(int32_t buffer_pool_id, PageNum page_num, int32_t page_index, Page &_page) - : key{buffer_pool_id, page_num}, page_index(page_index), page(_page) + : key{buffer_pool_id, page_num}, page_index(page_index), page(_page) {} const int32_t DoubleWritePage::SIZE = sizeof(DoubleWritePage); const int32_t DoubleWriteBufferHeader::SIZE = sizeof(DoubleWriteBufferHeader); -DiskDoubleWriteBuffer::DiskDoubleWriteBuffer(BufferPoolManager &bp_manager, int max_pages /*=16*/) - : max_pages_(max_pages), bp_manager_(bp_manager) -{ -} +DiskDoubleWriteBuffer::DiskDoubleWriteBuffer(BufferPoolManager &bp_manager, int max_pages /*=16*/) + : max_pages_(max_pages), bp_manager_(bp_manager) +{} DiskDoubleWriteBuffer::~DiskDoubleWriteBuffer() { @@ -62,7 +63,7 @@ RC DiskDoubleWriteBuffer::open_file(const char *filename) LOG_ERROR("Double write buffer has already opened. file desc=%d", file_desc_); return RC::BUFFERPOOL_OPEN; } - + int fd = open(filename, O_CREAT | O_RDWR, 0644); if (fd < 0) { LOG_ERROR("Failed to open or creat %s, due to %s.", filename, strerror(errno)); @@ -95,9 +96,9 @@ RC DiskDoubleWriteBuffer::flush_page() RC DiskDoubleWriteBuffer::add_page(DiskBufferPool *bp, PageNum page_num, Page &page) { - scoped_lock lock_guard(lock_); + scoped_lock lock_guard(lock_); DoubleWritePageKey key{bp->id(), page_num}; - auto iter = dblwr_pages_.find(key); + auto iter = dblwr_pages_.find(key); if (iter != dblwr_pages_.end()) { iter->second->page = page; LOG_TRACE("[cache hit]add page into double write buffer. buffer_pool_id:%d,page_num:%d,lsn=%d, dwb size=%d", @@ -145,7 +146,7 @@ RC DiskDoubleWriteBuffer::add_page(DiskBufferPool *bp, PageNum page_num, Page &p RC DiskDoubleWriteBuffer::write_page_internal(DoubleWritePage *page) { int32_t page_index = page->page_index; - int64_t offset = page_index * DoubleWritePage::SIZE + DoubleWriteBufferHeader::SIZE; + int64_t offset = page_index * DoubleWritePage::SIZE + DoubleWriteBufferHeader::SIZE; if (lseek(file_desc_, offset, SEEK_SET) == -1) { LOG_ERROR("Failed to add page %lld of %d due to failed to seek %s.", offset, file_desc_, strerror(errno)); return RC::IOERR_SEEK; @@ -179,9 +180,9 @@ RC DiskDoubleWriteBuffer::write_page(DoubleWritePage *dblwr_page) RC DiskDoubleWriteBuffer::read_page(DiskBufferPool *bp, PageNum page_num, Page &page) { - scoped_lock lock_guard(lock_); + scoped_lock lock_guard(lock_); DoubleWritePageKey key{bp->id(), page_num}; - auto iter = dblwr_pages_.find(key); + auto iter = dblwr_pages_.find(key); if (iter != dblwr_pages_.end()) { page = iter->second->page; LOG_TRACE("double write buffer read page success. bp id=%d, page_num:%d, lsn:%d", bp->id(), page_num, page.lsn); @@ -194,7 +195,7 @@ RC DiskDoubleWriteBuffer::read_page(DiskBufferPool *bp, PageNum page_num, Page & RC DiskDoubleWriteBuffer::clear_pages(DiskBufferPool *buffer_pool) { vector spec_pages; - + auto remove_pred = [&spec_pages, buffer_pool](const pair &pair) { DoubleWritePage *dbl_page = pair.second; if (buffer_pool->id() == dbl_page->key.buffer_pool_id) { @@ -265,9 +266,9 @@ RC DiskDoubleWriteBuffer::load_pages() return RC::IOERR_SEEK; } - auto dblwr_page = make_unique(); - Page &page = dblwr_page->page; - page.check_sum = (CheckSum)-1; + auto dblwr_page = make_unique(); + Page &page = dblwr_page->page; + page.check_sum = (CheckSum)-1; ret = readn(file_desc_, dblwr_page.get(), DoubleWritePage::SIZE); if (ret != 0) { @@ -289,10 +290,7 @@ RC DiskDoubleWriteBuffer::load_pages() return RC::SUCCESS; } -RC DiskDoubleWriteBuffer::recover() -{ - return flush_page(); -} +RC DiskDoubleWriteBuffer::recover() { return flush_page(); } //////////////////////////////////////////////////////////////// RC VacuousDoubleWriteBuffer::add_page(DiskBufferPool *bp, PageNum page_num, Page &page) @@ -300,3 +298,4 @@ RC VacuousDoubleWriteBuffer::add_page(DiskBufferPool *bp, PageNum page_num, Page return bp->write_page(page_num, page); } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/buffer/double_write_buffer.h b/src/observer/storage/buffer/double_write_buffer.h index ce42c96a5..9d373f1ab 100644 --- a/src/observer/storage/buffer/double_write_buffer.h +++ b/src/observer/storage/buffer/double_write_buffer.h @@ -20,6 +20,8 @@ See the Mulan PSL v2 for more details. */ #include "common/sys/rc.h" #include "storage/buffer/page.h" +namespace oceanbase { + class DiskBufferPool; struct DoubleWritePage; class BufferPoolManager; @@ -167,3 +169,4 @@ class VacuousDoubleWriteBuffer : public DoubleWriteBuffer */ RC clear_pages(DiskBufferPool *bp) override { return RC::SUCCESS; } }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/buffer/frame.cpp b/src/observer/storage/buffer/frame.cpp index c61972e3a..d99ea076a 100644 --- a/src/observer/storage/buffer/frame.cpp +++ b/src/observer/storage/buffer/frame.cpp @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "session/session.h" #include "session/thread_data.h" +namespace oceanbase { + FrameId::FrameId(int buffer_pool_id, PageNum page_num) : buffer_pool_id_(buffer_pool_id), page_num_(page_num) {} bool FrameId::equal_to(const FrameId &other) const @@ -81,7 +83,13 @@ void Frame::write_latch(intptr_t xid) ++write_recursive_count_; TRACE("frame write lock success." "this=%p, pin=%d, frameId=%s, write locker=%lx(recursive=%d), xid=%lx, lbt=%s", - this, pin_count_.load(), frame_id_.to_string().c_str(), write_locker_, write_recursive_count_, xid, lbt()); + this, + pin_count_.load(), + frame_id_.to_string().c_str(), + write_locker_, + write_recursive_count_, + xid, + lbt()); #endif } @@ -103,7 +111,11 @@ void Frame::write_unlatch(intptr_t xid) write_locker_, this, pin_count_.load(), frame_id_.to_string().c_str(), xid, lbt()); TRACE("frame write unlock success. this=%p, pin=%d, frameId=%s, xid=%lx, lbt=%s", - this, pin_count_.load(), frame_id_.to_string().c_str(), xid, lbt()); + this, + pin_count_.load(), + frame_id_.to_string().c_str(), + xid, + lbt()); if (--write_recursive_count_ == 0) { write_locker_ = 0; @@ -138,7 +150,12 @@ void Frame::read_latch(intptr_t xid) ++read_lockers_[xid]; TRACE("frame read lock success." "this=%p, pin=%d, frameId=%s, xid=%lx, recursive=%d, lbt=%s", - this, pin_count_.load(), frame_id_.to_string().c_str(), xid, read_lockers_[xid], lbt()); + this, + pin_count_.load(), + frame_id_.to_string().c_str(), + xid, + read_lockers_[xid], + lbt()); #endif } } @@ -166,7 +183,12 @@ bool Frame::try_read_latch() ++read_lockers_[xid]; TRACE("frame read lock success." "this=%p, pin=%d, frameId=%s, xid=%lx, recursive=%d, lbt=%s", - this, pin_count_.load(), frame_id_.to_string().c_str(), xid, read_lockers_[xid], lbt()); + this, + pin_count_.load(), + frame_id_.to_string().c_str(), + xid, + read_lockers_[xid], + lbt()); debug_lock_.unlock(); #endif } @@ -203,7 +225,11 @@ void Frame::read_unlatch(intptr_t xid) TRACE("frame read unlock success." "this=%p, pin=%d, frameId=%s, xid=%lx, lbt=%s", - this, pin_count_.load(), frame_id_.to_string().c_str(), xid, lbt()); + this, + pin_count_.load(), + frame_id_.to_string().c_str(), + xid, + lbt()); lock_.unlock_shared(); } @@ -217,8 +243,13 @@ void Frame::pin() TRACE("after frame pin. " "this=%p, write locker=%lx, read locker has xid %d? pin=%d, frameId=%s, xid=%lx, lbt=%s", - this, write_locker_, read_lockers_.find(xid) != read_lockers_.end(), - pin_count, frame_id_.to_string().c_str(), xid, lbt()); + this, + write_locker_, + read_lockers_.find(xid) != read_lockers_.end(), + pin_count, + frame_id_.to_string().c_str(), + xid, + lbt()); } int Frame::unpin() @@ -235,8 +266,13 @@ int Frame::unpin() int pin_count = --pin_count_; TRACE("after frame unpin. " "this=%p, write locker=%lx, read locker has xid? %d, pin=%d, frameId=%s, xid=%lx, lbt=%s", - this, write_locker_, read_lockers_.find(xid) != read_lockers_.end(), - pin_count, frame_id_.to_string().c_str(), xid, lbt()); + this, + write_locker_, + read_lockers_.find(xid) != read_lockers_.end(), + pin_count, + frame_id_.to_string().c_str(), + xid, + lbt()); if (0 == pin_count) { ASSERT(write_locker_ == 0, @@ -261,7 +297,8 @@ void Frame::access() { acc_time_ = current_time(); } string Frame::to_string() const { stringstream ss; - ss << "frame id:" << frame_id().to_string() << ", dirty=" << dirty() << ", pin=" << pin_count() - << ", lsn=" << lsn() << ", this=" << this; + ss << "frame id:" << frame_id().to_string() << ", dirty=" << dirty() << ", pin=" << pin_count() << ", lsn=" << lsn() + << ", this=" << this; return ss.str(); } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/buffer/frame.h b/src/observer/storage/buffer/frame.h index 2c2e7d182..ceeb9b137 100644 --- a/src/observer/storage/buffer/frame.h +++ b/src/observer/storage/buffer/frame.h @@ -25,6 +25,8 @@ See the Mulan PSL v2 for more details. */ #include "common/types.h" #include "storage/buffer/page.h" +namespace oceanbase { + /** * @brief 页帧标识符 * @ingroup BufferPool @@ -187,3 +189,4 @@ class Frame int write_recursive_count_ = 0; unordered_map read_lockers_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/buffer/page.h b/src/observer/storage/buffer/page.h index cc7b02293..d0de43743 100644 --- a/src/observer/storage/buffer/page.h +++ b/src/observer/storage/buffer/page.h @@ -26,6 +26,8 @@ static constexpr PageNum BP_HEADER_PAGE = 0; static constexpr const int BP_PAGE_SIZE = (1 << 13); static constexpr const int BP_PAGE_DATA_SIZE = (BP_PAGE_SIZE - sizeof(LSN) - sizeof(CheckSum)); +namespace oceanbase { + /** * @brief 表示一个页面,可能放在内存或磁盘上 * @ingroup BufferPool @@ -36,3 +38,4 @@ struct Page CheckSum check_sum; char data[BP_PAGE_DATA_SIZE]; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/clog/disk_log_handler.cpp b/src/observer/storage/clog/disk_log_handler.cpp index fdce4672f..5c64efc80 100644 --- a/src/observer/storage/clog/disk_log_handler.cpp +++ b/src/observer/storage/clog/disk_log_handler.cpp @@ -23,6 +23,8 @@ using namespace common; //////////////////////////////////////////////////////////////////////////////// // LogHandler +namespace oceanbase { + RC DiskLogHandler::init(const char *path) { const int max_entry_number_per_file = 1000; @@ -75,7 +77,7 @@ RC DiskLogHandler::await_termination() RC DiskLogHandler::replay(LogReplayer &replayer, LSN start_lsn) { - LSN max_lsn = 0; + LSN max_lsn = 0; auto replay_callback = [&replayer, &max_lsn](LogEntry &entry) -> RC { if (entry.lsn() > max_lsn) { max_lsn = entry.lsn(); @@ -99,10 +101,10 @@ RC DiskLogHandler::replay(LogReplayer &replayer, LSN start_lsn) return rc; } -RC DiskLogHandler::iterate(function consumer, LSN start_lsn) +RC DiskLogHandler::iterate(function consumer, LSN start_lsn) { vector log_files; - RC rc = file_manager_.list_files(log_files, start_lsn); + RC rc = file_manager_.list_files(log_files, start_lsn); if (OB_FAIL(rc)) { LOG_WARN("failed to list clog files. rc=%s", strrc(rc)); return rc; @@ -172,7 +174,7 @@ void DiskLogHandler::thread_func() LOG_INFO("log handler thread started"); LogFileWriter file_writer; - + RC rc = RC::SUCCESS; while (running_.load() || entry_buffer_.entry_number() > 0) { if (!file_writer.valid() || rc == RC::LOG_FILE_FULL) { @@ -193,7 +195,7 @@ void DiskLogHandler::thread_func() } int flush_count = 0; - rc = entry_buffer_.flush(file_writer, flush_count); + rc = entry_buffer_.flush(file_writer, flush_count); if (OB_FAIL(rc) && RC::LOG_FILE_FULL != rc) { LOG_WARN("failed to flush log entry buffer. rc=%s", strrc(rc)); } @@ -206,3 +208,4 @@ void DiskLogHandler::thread_func() LOG_INFO("log handler thread stopped"); } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/clog/disk_log_handler.h b/src/observer/storage/clog/disk_log_handler.h index ff378df2d..369fcba95 100644 --- a/src/observer/storage/clog/disk_log_handler.h +++ b/src/observer/storage/clog/disk_log_handler.h @@ -25,6 +25,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/clog/log_buffer.h" #include "storage/clog/log_handler.h" +namespace oceanbase { + class LogReplayer; /** @@ -127,3 +129,4 @@ class DiskLogHandler : public LogHandler string path_; /// 日志文件存放的目录 }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/clog/integrated_log_replayer.cpp b/src/observer/storage/clog/integrated_log_replayer.cpp index 008fa14ff..a50f7a24a 100644 --- a/src/observer/storage/clog/integrated_log_replayer.cpp +++ b/src/observer/storage/clog/integrated_log_replayer.cpp @@ -15,6 +15,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/clog/integrated_log_replayer.h" #include "storage/clog/log_entry.h" +namespace oceanbase { + IntegratedLogReplayer::IntegratedLogReplayer(BufferPoolManager &bpm) : buffer_pool_log_replayer_(bpm), record_log_replayer_(bpm), @@ -66,4 +68,5 @@ RC IntegratedLogReplayer::on_done() } return RC::SUCCESS; -} \ No newline at end of file +} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/clog/integrated_log_replayer.h b/src/observer/storage/clog/integrated_log_replayer.h index a281839c1..7b4883739 100644 --- a/src/observer/storage/clog/integrated_log_replayer.h +++ b/src/observer/storage/clog/integrated_log_replayer.h @@ -20,6 +20,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/index/bplus_tree_log.h" #include "storage/trx/mvcc_trx_log.h" +namespace oceanbase { + class BufferPoolManager; /** @@ -57,4 +59,5 @@ class IntegratedLogReplayer : public LogReplayer RecordLogReplayer record_log_replayer_; ///< record manager 日志回放器 BplusTreeLogReplayer bplus_tree_log_replayer_; ///< bplus tree 日志回放器 unique_ptr trx_log_replayer_; ///< trx 日志回放器 -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/clog/log_buffer.cpp b/src/observer/storage/clog/log_buffer.cpp index 4cbb10604..335d62174 100644 --- a/src/observer/storage/clog/log_buffer.cpp +++ b/src/observer/storage/clog/log_buffer.cpp @@ -18,6 +18,8 @@ See the Mulan PSL v2 for more details. */ using namespace common; +namespace oceanbase { + RC LogEntryBuffer::init(LSN lsn, int32_t max_bytes /*= 0*/) { current_lsn_.store(lsn); @@ -44,7 +46,7 @@ RC LogEntryBuffer::append(LSN &lsn, LogModule module, vector &&data) } LogEntry entry; - RC rc = entry.init(lsn, module, std::move(data)); + RC rc = entry.init(lsn, module, std::move(data)); if (OB_FAIL(rc)) { LOG_WARN("failed to init log entry. rc=%s", strrc(rc)); return rc; @@ -78,7 +80,7 @@ RC LogEntryBuffer::flush(LogFileWriter &writer, int &count) entries_.pop_front(); bytes_ -= entry.total_size(); } - + RC rc = writer.write(entry); if (OB_FAIL(rc)) { lock_guard guard(mutex_); @@ -91,16 +93,11 @@ RC LogEntryBuffer::flush(LogFileWriter &writer, int &count) flushed_lsn_ = entry.lsn(); } } - + return RC::SUCCESS; } -int64_t LogEntryBuffer::bytes() const -{ - return bytes_.load(); -} +int64_t LogEntryBuffer::bytes() const { return bytes_.load(); } -int32_t LogEntryBuffer::entry_number() const -{ - return entries_.size(); -} +int32_t LogEntryBuffer::entry_number() const { return entries_.size(); } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/clog/log_buffer.h b/src/observer/storage/clog/log_buffer.h index 815af9144..2cc731a1e 100644 --- a/src/observer/storage/clog/log_buffer.h +++ b/src/observer/storage/clog/log_buffer.h @@ -23,6 +23,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/clog/log_module.h" #include "storage/clog/log_entry.h" +namespace oceanbase { + class LogFileWriter; /** @@ -68,7 +70,7 @@ class LogEntryBuffer LSN flushed_lsn() const { return flushed_lsn_.load(); } private: - mutex mutex_; /// 当前数据结构一定会在多线程中访问,所以强制使用有效的锁,而不是有条件生效的common::Mutex + mutex mutex_; /// 当前数据结构一定会在多线程中访问,所以强制使用有效的锁,而不是有条件生效的common::Mutex deque entries_; /// 日志缓冲区 atomic bytes_; /// 当前缓冲区中的日志数据大小 @@ -77,3 +79,4 @@ class LogEntryBuffer int32_t max_bytes_ = 4 * 1024 * 1024; /// 缓冲区最大字节数 }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/clog/log_entry.cpp b/src/observer/storage/clog/log_entry.cpp index 0fbf27882..7d528a002 100644 --- a/src/observer/storage/clog/log_entry.cpp +++ b/src/observer/storage/clog/log_entry.cpp @@ -15,6 +15,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/clog/log_entry.h" #include "common/log/log.h" +namespace oceanbase { + //////////////////////////////////////////////////////////////////////////////// // struct LogHeader @@ -23,9 +25,7 @@ const int32_t LogHeader::SIZE = sizeof(LogHeader); string LogHeader::to_string() const { stringstream ss; - ss << "lsn=" << lsn - << ", size=" << size - << ", module_id=" << module_id << ":" << LogModule(module_id).name(); + ss << "lsn=" << lsn << ", size=" << size << ", module_id=" << module_id << ":" << LogModule(module_id).name(); return ss.str(); } @@ -34,16 +34,16 @@ string LogHeader::to_string() const // class LogEntry LogEntry::LogEntry() { - header_.lsn = 0; + header_.lsn = 0; header_.size = 0; } LogEntry::LogEntry(LogEntry &&other) { header_ = other.header_; - data_ = std::move(other.data_); + data_ = std::move(other.data_); - other.header_.lsn = 0; + other.header_.lsn = 0; other.header_.size = 0; } @@ -54,9 +54,9 @@ LogEntry &LogEntry::operator=(LogEntry &&other) } header_ = other.header_; - data_ = std::move(other.data_); + data_ = std::move(other.data_); - other.header_.lsn = 0; + other.header_.lsn = 0; other.header_.size = 0; return *this; @@ -74,14 +74,12 @@ RC LogEntry::init(LSN lsn, LogModule module, vector &&data) return RC::INVALID_ARGUMENT; } - header_.lsn = lsn; + header_.lsn = lsn; header_.module_id = module.index(); - header_.size = static_cast(data.size()); - data_ = std::move(data); + header_.size = static_cast(data.size()); + data_ = std::move(data); return RC::SUCCESS; } -string LogEntry::to_string() const -{ - return header_.to_string(); -} +string LogEntry::to_string() const { return header_.to_string(); } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/clog/log_entry.h b/src/observer/storage/clog/log_entry.h index d4d2981a3..2cd3a607a 100644 --- a/src/observer/storage/clog/log_entry.h +++ b/src/observer/storage/clog/log_entry.h @@ -21,6 +21,8 @@ See the Mulan PSL v2 for more details. */ #include "common/lang/string.h" #include "common/lang/memory.h" +namespace oceanbase { + /** * @brief 描述一条日志头 * @ingroup CLog @@ -87,3 +89,4 @@ class LogEntry LogHeader header_; /// 日志头 vector data_; /// 日志数据 }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/clog/log_file.cpp b/src/observer/storage/clog/log_file.cpp index c15d0ac14..6b39fc5ba 100644 --- a/src/observer/storage/clog/log_file.cpp +++ b/src/observer/storage/clog/log_file.cpp @@ -23,6 +23,8 @@ See the Mulan PSL v2 for more details. */ using namespace common; +namespace oceanbase { + RC LogFileReader::open(const char *filename) { filename_ = filename; @@ -141,10 +143,7 @@ RC LogFileReader::skip_to(LSN start_lsn) } //////////////////////////////////////////////////////////////////////////////// // LogFileWriter -LogFileWriter::~LogFileWriter() -{ - (void)this->close(); -} +LogFileWriter::~LogFileWriter() { (void)this->close(); } RC LogFileWriter::open(const char *filename, int end_lsn) { @@ -153,7 +152,7 @@ RC LogFileWriter::open(const char *filename, int end_lsn) } filename_ = filename; - end_lsn_ = end_lsn; + end_lsn_ = end_lsn; fd_ = ::open(filename, O_WRONLY | O_APPEND | O_CREAT | O_SYNC, 0644); if (fd_ < 0) { @@ -214,27 +213,18 @@ RC LogFileWriter::write(LogEntry &entry) return RC::SUCCESS; } -bool LogFileWriter::valid() const -{ - return fd_ >= 0; -} +bool LogFileWriter::valid() const { return fd_ >= 0; } -bool LogFileWriter::full() const -{ - return last_lsn_ >= end_lsn_; -} +bool LogFileWriter::full() const { return last_lsn_ >= end_lsn_; } -string LogFileWriter::to_string() const -{ - return filename_; -} +string LogFileWriter::to_string() const { return filename_; } //////////////////////////////////////////////////////////////////////////////// // LogFileManager RC LogFileManager::init(const char *directory, int max_entry_number_per_file) { - directory_ = filesystem::absolute(filesystem::path(directory)); + directory_ = filesystem::absolute(filesystem::path(directory)); max_entry_number_per_file_ = max_entry_number_per_file; // 检查目录是否存在,不存在就创建出来 @@ -242,7 +232,7 @@ RC LogFileManager::init(const char *directory, int max_entry_number_per_file) LOG_INFO("directory is not exist. directory=%s", directory_.c_str()); error_code ec; - bool ret = filesystem::create_directories(directory_, ec); + bool ret = filesystem::create_directories(directory_, ec); if (!ret) { LOG_WARN("create directory failed. directory=%s, error=%s", directory_.c_str(), ec.message().c_str()); return RC::FILE_CREATE; @@ -256,8 +246,8 @@ RC LogFileManager::init(const char *directory, int max_entry_number_per_file) } string filename = dir_entry.path().filename().string(); - LSN lsn = 0; - RC rc = get_lsn_from_filename(filename, lsn); + LSN lsn = 0; + RC rc = get_lsn_from_filename(filename, lsn); if (OB_FAIL(rc)) { LOG_TRACE("invalid log file name. filename=%s", filename.c_str()); continue; @@ -283,7 +273,8 @@ RC LogFileManager::get_lsn_from_filename(const string &filename, LSN &lsn) return RC::INVALID_ARGUMENT; } - string_view lsn_str(filename.data() + strlen(file_prefix_), filename.length() - strlen(file_suffix_) - strlen(file_prefix_)); + string_view lsn_str( + filename.data() + strlen(file_prefix_), filename.length() - strlen(file_suffix_) - strlen(file_prefix_)); from_chars_result result = from_chars(lsn_str.data(), lsn_str.data() + lsn_str.size(), lsn); if (result.ec != errc()) { LOG_TRACE("invalid log file name: cannot calc lsn. filename=%s, error=%s", @@ -318,8 +309,7 @@ RC LogFileManager::last_file(LogFileWriter &file_writer) file_writer.close(); auto last_file_item = log_files_.rbegin(); - return file_writer.open(last_file_item->second.c_str(), - last_file_item->first + max_entry_number_per_file_ - 1); + return file_writer.open(last_file_item->second.c_str(), last_file_item->first + max_entry_number_per_file_ - 1); } RC LogFileManager::next_file(LogFileWriter &file_writer) @@ -331,9 +321,10 @@ RC LogFileManager::next_file(LogFileWriter &file_writer) lsn = log_files_.rbegin()->first + max_entry_number_per_file_; } - string filename = file_prefix_ + to_string(lsn) + file_suffix_; + string filename = file_prefix_ + to_string(lsn) + file_suffix_; filesystem::path file_path = directory_ / filename; log_files_.emplace(lsn, file_path); return file_writer.open(file_path.c_str(), lsn + max_entry_number_per_file_ - 1); } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/clog/log_file.h b/src/observer/storage/clog/log_file.h index f5014d42c..77a107074 100644 --- a/src/observer/storage/clog/log_file.h +++ b/src/observer/storage/clog/log_file.h @@ -22,6 +22,8 @@ See the Mulan PSL v2 for more details. */ #include "common/lang/fstream.h" #include "common/lang/string.h" +namespace oceanbase { + class LogEntry; /** @@ -153,3 +155,4 @@ class LogFileManager map log_files_; /// 日志文件名和第一个LSN的映射 }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/clog/log_handler.cpp b/src/observer/storage/clog/log_handler.cpp index 14c49a576..0770e2a74 100644 --- a/src/observer/storage/clog/log_handler.cpp +++ b/src/observer/storage/clog/log_handler.cpp @@ -19,6 +19,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/clog/disk_log_handler.h" #include "storage/clog/vacuous_log_handler.h" +namespace oceanbase { + RC LogHandler::append(LSN &lsn, LogModule::Id module, span data) { vector data_vec(data.begin(), data.end()); @@ -44,4 +46,5 @@ RC LogHandler::create(const char *name, LogHandler *&log_handler) return RC::INVALID_ARGUMENT; } return RC::SUCCESS; -} \ No newline at end of file +} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/clog/log_handler.h b/src/observer/storage/clog/log_handler.h index 141df1537..20a59ff6a 100644 --- a/src/observer/storage/clog/log_handler.h +++ b/src/observer/storage/clog/log_handler.h @@ -22,6 +22,8 @@ See the Mulan PSL v2 for more details. */ #include "common/lang/vector.h" #include "storage/clog/log_module.h" +namespace oceanbase { + /** * @defgroup CLog commit log/redo log */ @@ -105,3 +107,4 @@ class LogHandler */ virtual RC _append(LSN &lsn, LogModule module, vector &&data) = 0; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/clog/log_module.h b/src/observer/storage/clog/log_module.h index 120617cde..e01ebeab6 100644 --- a/src/observer/storage/clog/log_module.h +++ b/src/observer/storage/clog/log_module.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include +namespace oceanbase { + /** * @brief 日志模块 * @ingroup CLog @@ -51,4 +53,5 @@ class LogModule private: Id id_; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/clog/log_replayer.h b/src/observer/storage/clog/log_replayer.h index 6ef1292a2..57e83a714 100644 --- a/src/observer/storage/clog/log_replayer.h +++ b/src/observer/storage/clog/log_replayer.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "common/sys/rc.h" +namespace oceanbase { + class LogEntry; /** @@ -40,3 +42,4 @@ class LogReplayer */ virtual RC on_done() { return RC::SUCCESS; } }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/clog/vacuous_log_handler.h b/src/observer/storage/clog/vacuous_log_handler.h index dbc31c213..567234513 100644 --- a/src/observer/storage/clog/vacuous_log_handler.h +++ b/src/observer/storage/clog/vacuous_log_handler.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/clog/log_handler.h" +namespace oceanbase { + /** * @brief VacuousLogHandler is a log handler implenmentation that do nothing in all methods. * It is used for testing. @@ -44,4 +46,5 @@ class VacuousLogHandler : public LogHandler lsn = 0; return RC::SUCCESS; } -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/common/arena_allocator.cpp b/src/observer/storage/common/arena_allocator.cpp index 342392a00..36643304a 100644 --- a/src/observer/storage/common/arena_allocator.cpp +++ b/src/observer/storage/common/arena_allocator.cpp @@ -14,43 +14,46 @@ See the Mulan PSL v2 for more details. */ #include "storage/common/arena_allocator.h" +namespace oceanbase { + static const int kBlockSize = 4096; -Arena::Arena() - : alloc_ptr_(nullptr), alloc_bytes_remaining_(0), memory_usage_(0) {} +Arena::Arena() : alloc_ptr_(nullptr), alloc_bytes_remaining_(0), memory_usage_(0) {} -Arena::~Arena() { +Arena::~Arena() +{ for (size_t i = 0; i < blocks_.size(); i++) { delete[] blocks_[i]; } } -char* Arena::AllocateFallback(size_t bytes) { +char *Arena::AllocateFallback(size_t bytes) +{ if (bytes > kBlockSize / 4) { // Object is more than a quarter of our block size. Allocate it separately // to avoid wasting too much space in leftover bytes. - char* result = AllocateNewBlock(bytes); + char *result = AllocateNewBlock(bytes); return result; } // We waste the remaining space in the current block. - alloc_ptr_ = AllocateNewBlock(kBlockSize); + alloc_ptr_ = AllocateNewBlock(kBlockSize); alloc_bytes_remaining_ = kBlockSize; - char* result = alloc_ptr_; + char *result = alloc_ptr_; alloc_ptr_ += bytes; alloc_bytes_remaining_ -= bytes; return result; } -char* Arena::AllocateAligned(size_t bytes) { - const int align = (sizeof(void*) > 8) ? sizeof(void*) : 8; - static_assert((align & (align - 1)) == 0, - "Pointer size should be a power of 2"); +char *Arena::AllocateAligned(size_t bytes) +{ + const int align = (sizeof(void *) > 8) ? sizeof(void *) : 8; + static_assert((align & (align - 1)) == 0, "Pointer size should be a power of 2"); size_t current_mod = reinterpret_cast(alloc_ptr_) & (align - 1); - size_t slop = (current_mod == 0 ? 0 : align - current_mod); - size_t needed = bytes + slop; - char* result; + size_t slop = (current_mod == 0 ? 0 : align - current_mod); + size_t needed = bytes + slop; + char *result; if (needed <= alloc_bytes_remaining_) { result = alloc_ptr_ + slop; alloc_ptr_ += needed; @@ -63,10 +66,11 @@ char* Arena::AllocateAligned(size_t bytes) { return result; } -char* Arena::AllocateNewBlock(size_t block_bytes) { - char* result = new char[block_bytes]; +char *Arena::AllocateNewBlock(size_t block_bytes) +{ + char *result = new char[block_bytes]; blocks_.push_back(result); - memory_usage_.fetch_add(block_bytes + sizeof(char*), - std::memory_order_relaxed); + memory_usage_.fetch_add(block_bytes + sizeof(char *), std::memory_order_relaxed); return result; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/common/arena_allocator.h b/src/observer/storage/common/arena_allocator.h index c9ad05d50..f405e66db 100644 --- a/src/observer/storage/common/arena_allocator.h +++ b/src/observer/storage/common/arena_allocator.h @@ -20,6 +20,8 @@ See the Mulan PSL v2 for more details. */ #include #include +namespace oceanbase { + class Arena { public: @@ -72,3 +74,4 @@ inline char *Arena::Allocate(size_t bytes) } return AllocateFallback(bytes); } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/common/chunk.cpp b/src/observer/storage/common/chunk.cpp index 9c7d5bd9d..30a02a14f 100644 --- a/src/observer/storage/common/chunk.cpp +++ b/src/observer/storage/common/chunk.cpp @@ -10,6 +10,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/common/chunk.h" +namespace oceanbase { + void Chunk::add_column(unique_ptr col, int col_id) { columns_.push_back(std::move(col)); @@ -57,4 +59,5 @@ void Chunk::reset() { columns_.clear(); column_ids_.clear(); -} \ No newline at end of file +} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/common/chunk.h b/src/observer/storage/common/chunk.h index 71c53b541..544985a7b 100644 --- a/src/observer/storage/common/chunk.h +++ b/src/observer/storage/common/chunk.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "common/lang/vector.h" #include "storage/common/column.h" +namespace oceanbase { + /** * @brief A Chunk represents a set of columns. */ @@ -100,3 +102,4 @@ class Chunk // `columnd_ids` store the ids of child operator that need to be output vector column_ids_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/common/codec.cpp b/src/observer/storage/common/codec.cpp index a8e363b00..093373c87 100644 --- a/src/observer/storage/common/codec.cpp +++ b/src/observer/storage/common/codec.cpp @@ -10,8 +10,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/common/codec.h" -const byte_t OrderedCode::term[] = {0x00, 0x01}; +const byte_t OrderedCode::term[] = {0x00, 0x01}; const byte_t OrderedCode::lit00[] = {0x00, 0xff}; const byte_t OrderedCode::litff[] = {0xff, 0x00}; -const byte_t OrderedCode::inf[] = {0xff, 0xff}; -const byte_t OrderedCode::msb[] = {0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe}; \ No newline at end of file +const byte_t OrderedCode::inf[] = {0xff, 0xff}; +const byte_t OrderedCode::msb[] = {0x00, 0x80, 0xc0, 0xe0, 0xf0, 0xf8, 0xfc, 0xfe}; diff --git a/src/observer/storage/common/codec.h b/src/observer/storage/common/codec.h index ed373de70..e1261b67d 100644 --- a/src/observer/storage/common/codec.h +++ b/src/observer/storage/common/codec.h @@ -24,6 +24,8 @@ using byte_t = unsigned char; using bytes = vector; using float64_t = double_t; +namespace oceanbase { + // reference: https://github.com/code0xff/orderedcodepp class OrderedCode { @@ -503,3 +505,4 @@ class Codec // } // return rc; // } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/common/column.cpp b/src/observer/storage/common/column.cpp index 3bea72665..9acc66eb5 100644 --- a/src/observer/storage/common/column.cpp +++ b/src/observer/storage/common/column.cpp @@ -11,6 +11,8 @@ See the Mulan PSL v2 for more details. */ #include "common/log/log.h" #include "storage/common/column.h" +namespace oceanbase { + Column::Column(const FieldMeta &meta, size_t size) : data_(nullptr), count_(0), @@ -21,16 +23,16 @@ Column::Column(const FieldMeta &meta, size_t size) column_type_(Type::NORMAL_COLUMN) { // TODO: optimized the memory usage if it doesn't need to allocate memory - data_ = new char[size * attr_len_]; + data_ = new char[size * attr_len_]; memset(data_, 0, size * attr_len_); capacity_ = size; } Column::Column(AttrType attr_type, int attr_len, size_t capacity) { - attr_type_ = attr_type; - attr_len_ = attr_len; - data_ = new char[capacity * attr_len_]; + attr_type_ = attr_type; + attr_len_ = attr_len; + data_ = new char[capacity * attr_len_]; memset(data_, 0, capacity * attr_len_); count_ = 0; capacity_ = capacity; @@ -41,7 +43,7 @@ Column::Column(AttrType attr_type, int attr_len, size_t capacity) void Column::init(const FieldMeta &meta, size_t size) { reset(); - data_ = new char[size * meta.len()]; + data_ = new char[size * meta.len()]; memset(data_, 0, size * meta.len()); count_ = 0; capacity_ = size; @@ -54,7 +56,7 @@ void Column::init(const FieldMeta &meta, size_t size) void Column::init(AttrType attr_type, int attr_len, size_t capacity) { reset(); - data_ = new char[capacity * attr_len]; + data_ = new char[capacity * attr_len]; memset(data_, 0, capacity * attr_len); count_ = 0; capacity_ = capacity; @@ -70,14 +72,14 @@ void Column::init(const Value &value, size_t size) attr_type_ = value.attr_type(); attr_len_ = value.length(); if (attr_len_ == 0) { - data_ = new char[1]; + data_ = new char[1]; data_[0] = '\0'; } else { - data_ = new char[attr_len_]; + data_ = new char[attr_len_]; } - count_ = size; - capacity_ = 1; - own_ = true; + count_ = size; + capacity_ = 1; + own_ = true; memcpy(data_, value.data(), attr_len_); column_type_ = Type::CONSTANT_COLUMN; } @@ -149,7 +151,7 @@ string_t Column::add_text(const char *data, int length) Value Column::get_value(int index) const { if (column_type_ == Type::CONSTANT_COLUMN) { - index = 0; + index = 0; } if (index >= count_ || index < 0) { return Value(); @@ -173,3 +175,4 @@ void Column::reference(const Column &column) this->attr_type_ = column.attr_type(); this->attr_len_ = column.attr_len(); } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/common/column.h b/src/observer/storage/common/column.h index 1eecba7ee..51b6e99ce 100644 --- a/src/observer/storage/common/column.h +++ b/src/observer/storage/common/column.h @@ -15,6 +15,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/field/field_meta.h" #include "storage/common/vector_buffer.h" +namespace oceanbase { + /** * @brief A column contains multiple values in contiguous memory with a specified type. */ @@ -143,3 +145,4 @@ class Column Type column_type_ = Type::NORMAL_COLUMN; unique_ptr vector_buffer_ = nullptr; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/common/condition_filter.cpp b/src/observer/storage/common/condition_filter.cpp index 5a62bb10f..2d1bb8d5e 100644 --- a/src/observer/storage/common/condition_filter.cpp +++ b/src/observer/storage/common/condition_filter.cpp @@ -22,6 +22,8 @@ See the Mulan PSL v2 for more details. */ using namespace common; +namespace oceanbase { + ConditionFilter::~ConditionFilter() {} DefaultConditionFilter::DefaultConditionFilter() @@ -211,3 +213,4 @@ bool CompositeConditionFilter::filter(const Record &rec) const } return true; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/common/condition_filter.h b/src/observer/storage/common/condition_filter.h index 8fb4e5d18..e31d90dc6 100644 --- a/src/observer/storage/common/condition_filter.h +++ b/src/observer/storage/common/condition_filter.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "sql/parser/parse.h" +namespace oceanbase { + class Record; class Table; @@ -88,3 +90,4 @@ class CompositeConditionFilter : public ConditionFilter int filter_num_ = 0; bool memory_owner_ = false; // filters_的内存是否由自己来控制 }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/common/meta_util.cpp b/src/observer/storage/common/meta_util.cpp index e11842d9a..5ad35da22 100644 --- a/src/observer/storage/common/meta_util.cpp +++ b/src/observer/storage/common/meta_util.cpp @@ -14,6 +14,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/common/meta_util.h" #include "common/lang/filesystem.h" +namespace oceanbase { + string db_meta_file(const char *base_dir, const char *db_name) { filesystem::path db_dir = filesystem::path(base_dir); @@ -38,4 +40,5 @@ string table_index_file(const char *base_dir, const char *table_name, const char string table_lob_file(const char *base_dir, const char *table_name) { return filesystem::path(base_dir) / (string(table_name) + TABLE_LOB_SUFFIX); -} \ No newline at end of file +} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/common/meta_util.h b/src/observer/storage/common/meta_util.h index 0a299a3e1..e41c46700 100644 --- a/src/observer/storage/common/meta_util.h +++ b/src/observer/storage/common/meta_util.h @@ -15,6 +15,8 @@ See the Mulan PSL v2 for more details. */ #include "common/lang/string.h" +namespace oceanbase { + static constexpr const char *DB_META_SUFFIX = ".db"; static constexpr const char *TABLE_META_SUFFIX = ".table"; static constexpr const char *TABLE_META_FILE_PATTERN = ".*\\.table$"; @@ -27,3 +29,4 @@ string table_meta_file(const char *base_dir, const char *table_name); string table_data_file(const char *base_dir, const char *table_name); string table_index_file(const char *base_dir, const char *table_name, const char *index_name); string table_lob_file(const char *base_dir, const char *table_name); +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/common/vector_buffer.h b/src/observer/storage/common/vector_buffer.h index cfd33228f..a7987ea18 100644 --- a/src/observer/storage/common/vector_buffer.h +++ b/src/observer/storage/common/vector_buffer.h @@ -4,6 +4,8 @@ #include "common/type/string_t.h" #include "common/log/log.h" +namespace oceanbase { + class VectorBuffer { public: @@ -31,4 +33,5 @@ class VectorBuffer private: Arena heap; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/db/db.cpp b/src/observer/storage/db/db.cpp index a0661fa00..0180598c1 100644 --- a/src/observer/storage/db/db.cpp +++ b/src/observer/storage/db/db.cpp @@ -30,6 +30,8 @@ See the Mulan PSL v2 for more details. */ using namespace common; +namespace oceanbase { + Db::~Db() { for (auto &iter : opened_tables_) { @@ -49,7 +51,8 @@ Db::~Db() LOG_INFO("Db has been closed: %s", name_.c_str()); } -RC Db::init(const char *name, const char *dbpath, const char *trx_kit_name, const char *log_handler_name, const char *storage_engine) +RC Db::init(const char *name, const char *dbpath, const char *trx_kit_name, const char *log_handler_name, + const char *storage_engine) { RC rc = RC::SUCCESS; @@ -64,7 +67,7 @@ RC Db::init(const char *name, const char *dbpath, const char *trx_kit_name, cons } oceanbase::ObLsmOptions options; - filesystem::path lsm_path = filesystem::path(dbpath) / "lsm"; + filesystem::path lsm_path = filesystem::path(dbpath) / "lsm"; filesystem::create_directory(lsm_path); rc = oceanbase::ObLsm::open(options, lsm_path, &lsm_); @@ -150,7 +153,8 @@ RC Db::init(const char *name, const char *dbpath, const char *trx_kit_name, cons return rc; } -RC Db::create_table(const char *table_name, span attributes, const vector& primary_keys, const StorageFormat storage_format) +RC Db::create_table(const char *table_name, span attributes, const vector &primary_keys, + const StorageFormat storage_format) { RC rc = RC::SUCCESS; // check table_name @@ -163,8 +167,15 @@ RC Db::create_table(const char *table_name, span attribut string table_file_path = table_meta_file(path_.c_str(), table_name); Table *table = new Table(); int32_t table_id = next_table_id_++; - rc = table->create(this, table_id, table_file_path.c_str(), table_name, path_.c_str(), attributes, primary_keys, storage_format, - get_storage_engine()); + rc = table->create(this, + table_id, + table_file_path.c_str(), + table_name, + path_.c_str(), + attributes, + primary_keys, + storage_format, + get_storage_engine()); if (rc != RC::SUCCESS) { LOG_ERROR("Failed to create table %s.", table_name); delete table; @@ -415,3 +426,4 @@ RC Db::init_dblwr_buffer() LogHandler &Db::log_handler() { return *log_handler_; } BufferPoolManager &Db::buffer_pool_manager() { return *buffer_pool_manager_; } TrxKit &Db::trx_kit() { return *trx_kit_; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/db/db.h b/src/observer/storage/db/db.h index 51afce10a..7cad886d1 100644 --- a/src/observer/storage/db/db.h +++ b/src/observer/storage/db/db.h @@ -26,6 +26,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/buffer/double_write_buffer.h" #include "oblsm/include/ob_lsm.h" +namespace oceanbase { + class Table; class LogHandler; class BufferPoolManager; @@ -148,3 +150,4 @@ class Db LSN check_point_lsn_ = 0; ///< 当前数据库的检查点LSN。会记录到磁盘中。 string storage_engine_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/default/default_handler.cpp b/src/observer/storage/default/default_handler.cpp index 48f9e0098..7a513f34b 100644 --- a/src/observer/storage/default/default_handler.cpp +++ b/src/observer/storage/default/default_handler.cpp @@ -26,11 +26,14 @@ See the Mulan PSL v2 for more details. */ using namespace std; +namespace oceanbase { + DefaultHandler::DefaultHandler() {} DefaultHandler::~DefaultHandler() noexcept { destroy(); } -RC DefaultHandler::init(const char *base_dir, const char *trx_kit_name, const char *log_handler_name, const char *storage_engine) +RC DefaultHandler::init( + const char *base_dir, const char *trx_kit_name, const char *log_handler_name, const char *storage_engine) { // 检查目录是否存在,或者创建 filesystem::path db_dir(base_dir); @@ -41,11 +44,11 @@ RC DefaultHandler::init(const char *base_dir, const char *trx_kit_name, const ch return RC::INTERNAL; } - base_dir_ = base_dir; - db_dir_ = db_dir; - trx_kit_name_ = trx_kit_name; + base_dir_ = base_dir; + db_dir_ = db_dir; + trx_kit_name_ = trx_kit_name; log_handler_name_ = log_handler_name; - storage_engine_ = storage_engine; + storage_engine_ = storage_engine; const char *sys_db = "sys"; @@ -121,7 +124,9 @@ RC DefaultHandler::open_db(const char *dbname) // open db Db *db = new Db(); RC ret = RC::SUCCESS; - if ((ret = db->init(dbname, dbpath.c_str(), trx_kit_name_.c_str(), log_handler_name_.c_str(), storage_engine_.c_str())) != RC::SUCCESS) { + if ((ret = db->init( + dbname, dbpath.c_str(), trx_kit_name_.c_str(), log_handler_name_.c_str(), storage_engine_.c_str())) != + RC::SUCCESS) { LOG_ERROR("Failed to open db: %s. error=%s", dbname, strrc(ret)); delete db; } else { @@ -180,3 +185,4 @@ RC DefaultHandler::sync() } return rc; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/default/default_handler.h b/src/observer/storage/default/default_handler.h index c63119510..cb129bac9 100644 --- a/src/observer/storage/default/default_handler.h +++ b/src/observer/storage/default/default_handler.h @@ -19,6 +19,8 @@ See the Mulan PSL v2 for more details. */ #include "common/lang/string.h" #include "common/lang/memory.h" +namespace oceanbase { + class Trx; class TrxKit; @@ -98,3 +100,4 @@ class DefaultHandler map opened_dbs_; ///< 打开的数据库 string storage_engine_; ///< 存储引擎的名称 }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/field/field.cpp b/src/observer/storage/field/field.cpp index b554787d8..934a05eff 100644 --- a/src/observer/storage/field/field.cpp +++ b/src/observer/storage/field/field.cpp @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "common/value.h" #include "storage/record/record.h" +namespace oceanbase { + void Field::set_int(Record &record, int value) { ASSERT(field_->type() == AttrType::INTS, "could not set int value to a non-int field"); @@ -32,4 +34,5 @@ int Field::get_int(const Record &record) return value.get_int(); } -const char *Field::get_data(const Record &record) { return record.data() + field_->offset(); } \ No newline at end of file +const char *Field::get_data(const Record &record) { return record.data() + field_->offset(); } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/field/field.h b/src/observer/storage/field/field.h index 7022eb5f1..ed279e375 100644 --- a/src/observer/storage/field/field.h +++ b/src/observer/storage/field/field.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/field/field_meta.h" #include "storage/table/table.h" +namespace oceanbase { + /** * @brief 字段 * @@ -48,3 +50,4 @@ class Field const Table *table_ = nullptr; const FieldMeta *field_ = nullptr; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/field/field_meta.cpp b/src/observer/storage/field/field_meta.cpp index 571861b69..2b509b0eb 100644 --- a/src/observer/storage/field/field_meta.cpp +++ b/src/observer/storage/field/field_meta.cpp @@ -19,6 +19,8 @@ See the Mulan PSL v2 for more details. */ #include "json/json.h" +namespace oceanbase { + const static Json::StaticString FIELD_NAME("name"); const static Json::StaticString FIELD_TYPE("type"); const static Json::StaticString FIELD_OFFSET("offset"); @@ -26,7 +28,8 @@ const static Json::StaticString FIELD_LEN("len"); const static Json::StaticString FIELD_VISIBLE("visible"); const static Json::StaticString FIELD_FIELD_ID("FIELD_id"); -FieldMeta::FieldMeta() : attr_type_(AttrType::UNDEFINED), attr_offset_(-1), attr_len_(0), visible_(false), field_id_(0) {} +FieldMeta::FieldMeta() : attr_type_(AttrType::UNDEFINED), attr_offset_(-1), attr_len_(0), visible_(false), field_id_(0) +{} FieldMeta::FieldMeta(const char *name, AttrType attr_type, int attr_offset, int attr_len, bool visible, int field_id) { @@ -52,7 +55,7 @@ RC FieldMeta::init(const char *name, AttrType attr_type, int attr_offset, int at attr_len_ = attr_len; attr_offset_ = attr_offset; visible_ = visible; - field_id_ = field_id; + field_id_ = field_id; LOG_INFO("Init a field with name=%s", name); return RC::SUCCESS; @@ -78,11 +81,11 @@ void FieldMeta::desc(ostream &os) const void FieldMeta::to_json(Json::Value &json_value) const { - json_value[FIELD_NAME] = name_; - json_value[FIELD_TYPE] = attr_type_to_string(attr_type_); - json_value[FIELD_OFFSET] = attr_offset_; - json_value[FIELD_LEN] = attr_len_; - json_value[FIELD_VISIBLE] = visible_; + json_value[FIELD_NAME] = name_; + json_value[FIELD_TYPE] = attr_type_to_string(attr_type_); + json_value[FIELD_OFFSET] = attr_offset_; + json_value[FIELD_LEN] = attr_len_; + json_value[FIELD_VISIBLE] = visible_; json_value[FIELD_FIELD_ID] = field_id_; } @@ -93,11 +96,11 @@ RC FieldMeta::from_json(const Json::Value &json_value, FieldMeta &field) return RC::INTERNAL; } - const Json::Value &name_value = json_value[FIELD_NAME]; - const Json::Value &type_value = json_value[FIELD_TYPE]; - const Json::Value &offset_value = json_value[FIELD_OFFSET]; - const Json::Value &len_value = json_value[FIELD_LEN]; - const Json::Value &visible_value = json_value[FIELD_VISIBLE]; + const Json::Value &name_value = json_value[FIELD_NAME]; + const Json::Value &type_value = json_value[FIELD_TYPE]; + const Json::Value &offset_value = json_value[FIELD_OFFSET]; + const Json::Value &len_value = json_value[FIELD_LEN]; + const Json::Value &visible_value = json_value[FIELD_VISIBLE]; const Json::Value &field_id_value = json_value[FIELD_FIELD_ID]; if (!name_value.isString()) { @@ -132,10 +135,11 @@ RC FieldMeta::from_json(const Json::Value &json_value, FieldMeta &field) return RC::INTERNAL; } - const char *name = name_value.asCString(); - int offset = offset_value.asInt(); - int len = len_value.asInt(); - bool visible = visible_value.asBool(); - int field_id = field_id_value.asInt(); + const char *name = name_value.asCString(); + int offset = offset_value.asInt(); + int len = len_value.asInt(); + bool visible = visible_value.asBool(); + int field_id = field_id_value.asInt(); return field.init(name, type, offset, len, visible, field_id); } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/field/field_meta.h b/src/observer/storage/field/field_meta.h index 2166b719f..7b4249f48 100644 --- a/src/observer/storage/field/field_meta.h +++ b/src/observer/storage/field/field_meta.h @@ -18,6 +18,8 @@ See the Mulan PSL v2 for more details. */ #include "common/lang/string.h" #include "sql/parser/parse_defs.h" +namespace oceanbase { + namespace Json { class Value; } // namespace Json @@ -58,3 +60,4 @@ class FieldMeta bool visible_; int field_id_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/index/bplus_tree.cpp b/src/observer/storage/index/bplus_tree.cpp index 606135ebc..7acb6d8fa 100644 --- a/src/observer/storage/index/bplus_tree.cpp +++ b/src/observer/storage/index/bplus_tree.cpp @@ -22,6 +22,8 @@ See the Mulan PSL v2 for more details. */ using namespace common; +namespace oceanbase { + /** * @brief B+树的第一个页面存放的位置 * @details B+树数据放到Buffer Pool中,Buffer Pool把文件按照固定大小的页面拆分。 @@ -77,15 +79,12 @@ int IndexNodeHandler::min_size() const return max - max / 2; } -void IndexNodeHandler::increase_size(int n) -{ - node_->key_num += n; -} +void IndexNodeHandler::increase_size(int n) { node_->key_num += n; } PageNum IndexNodeHandler::parent_page_num() const { return node_->parent; } -RC IndexNodeHandler::set_parent_page_num(PageNum page_num) -{ +RC IndexNodeHandler::set_parent_page_num(PageNum page_num) +{ RC rc = mtr_.logger().set_parent_page(*this, page_num, this->node_->parent); if (OB_FAIL(rc)) { LOG_WARN("failed to log set parent page. rc=%s", strrc(rc)); @@ -192,20 +191,20 @@ RC LeafIndexNodeHandler::init_empty() LOG_WARN("failed to log init empty leaf node. rc=%s", strrc(rc)); return rc; } - IndexNodeHandler::init_empty(true/*leaf*/); + IndexNodeHandler::init_empty(true /*leaf*/); leaf_node_->next_brother = BP_INVALID_PAGE_NUM; return RC::SUCCESS; } -RC LeafIndexNodeHandler::set_next_page(PageNum page_num) -{ +RC LeafIndexNodeHandler::set_next_page(PageNum page_num) +{ RC rc = mtr_.logger().leaf_set_next_page(*this, page_num, leaf_node_->next_brother); if (OB_FAIL(rc)) { LOG_WARN("failed to log set next page. rc=%s", strrc(rc)); return rc; } - leaf_node_->next_brother = page_num; + leaf_node_->next_brother = page_num; return RC::SUCCESS; } @@ -275,13 +274,16 @@ int LeafIndexNodeHandler::remove(const char *key, const KeyComparator &comparato RC LeafIndexNodeHandler::move_half_to(LeafIndexNodeHandler &other) { - const int size = this->size(); - const int move_index = size / 2; + const int size = this->size(); + const int move_index = size / 2; const int move_item_num = size - move_index; other.append(__item_at(move_index), move_item_num); - RC rc = mtr_.logger().node_remove_items(*this, move_index, span(__item_at(move_index), static_cast(move_item_num) * item_size()), move_item_num); + RC rc = mtr_.logger().node_remove_items(*this, + move_index, + span(__item_at(move_index), static_cast(move_item_num) * item_size()), + move_item_num); if (OB_FAIL(rc)) { LOG_WARN("failed to log shrink leaf node. rc=%s", strrc(rc)); return rc; @@ -312,7 +314,10 @@ RC LeafIndexNodeHandler::move_to(LeafIndexNodeHandler &other) other.append(__item_at(0), this->size()); other.set_next_page(this->next_page()); - RC rc = mtr_.logger().node_remove_items(*this, 0, span(__item_at(0), static_cast(this->size()) * static_cast(item_size())), this->size()); + RC rc = mtr_.logger().node_remove_items(*this, + 0, + span(__item_at(0), static_cast(this->size()) * static_cast(item_size())), + this->size()); if (OB_FAIL(rc)) { LOG_WARN("failed to log shrink leaf node. rc=%s", strrc(rc)); @@ -325,7 +330,8 @@ RC LeafIndexNodeHandler::move_to(LeafIndexNodeHandler &other) // 复制一些数据到当前节点的最右边 RC LeafIndexNodeHandler::append(const char *items, int num) { - RC rc = mtr_.logger().node_insert_items(*this, size(), span(items, static_cast(num) * static_cast(item_size())), num); + RC rc = mtr_.logger().node_insert_items( + *this, size(), span(items, static_cast(num) * static_cast(item_size())), num); if (OB_FAIL(rc)) { LOG_WARN("failed to log append items. rc=%d:%s", rc, strrc(rc)); return rc; @@ -334,15 +340,9 @@ RC LeafIndexNodeHandler::append(const char *items, int num) return recover_insert_items(size(), items, num); } -RC LeafIndexNodeHandler::append(const char *item) -{ - return append(item, 1); -} +RC LeafIndexNodeHandler::append(const char *item) { return append(item, 1); } -RC LeafIndexNodeHandler::preappend(const char *item) -{ - return insert(0, item, item + key_size()); -} +RC LeafIndexNodeHandler::preappend(const char *item) { return insert(0, item, item + key_size()); } char *LeafIndexNodeHandler::__item_at(int index) const { return leaf_node_->array + (index * item_size()); } @@ -380,7 +380,7 @@ bool LeafIndexNodeHandler::validate(const KeyComparator &comparator, DiskBufferP } Frame *parent_frame = nullptr; - RC rc = bp->get_this_page(parent_page_num, &parent_frame); + RC rc = bp->get_this_page(parent_page_num, &parent_frame); if (OB_FAIL(rc)) { LOG_WARN("failed to fetch parent page. page num=%d, rc=%d:%s", parent_page_num, rc, strrc(rc)); return false; @@ -421,7 +421,8 @@ bool LeafIndexNodeHandler::validate(const KeyComparator &comparator, DiskBufferP } ///////////////////////////////////////////////////////////////////////////////// -InternalIndexNodeHandler::InternalIndexNodeHandler(BplusTreeMiniTransaction &mtr, const IndexFileHeader &header, Frame *frame) +InternalIndexNodeHandler::InternalIndexNodeHandler( + BplusTreeMiniTransaction &mtr, const IndexFileHeader &header, Frame *frame) : IndexNodeHandler(mtr, header, frame), internal_node_((InternalIndexNode *)frame->data()) {} @@ -440,13 +441,13 @@ string to_string(const InternalIndexNodeHandler &node, const KeyPrinter &printer return ss.str(); } -RC InternalIndexNodeHandler::init_empty() +RC InternalIndexNodeHandler::init_empty() { RC rc = mtr_.logger().internal_init_empty(*this); if (OB_FAIL(rc)) { LOG_WARN("failed to log init empty internal node. rc=%s", strrc(rc)); } - IndexNodeHandler::init_empty(false/*leaf*/); + IndexNodeHandler::init_empty(false /*leaf*/); return RC::SUCCESS; } RC InternalIndexNodeHandler::create_new_root(PageNum first_page_num, const char *key, PageNum page_num) @@ -501,7 +502,8 @@ RC InternalIndexNodeHandler::move_half_to(InternalIndexNodeHandler &other) return rc; } - mtr_.logger().node_remove_items(*this, move_index, span(__item_at(move_index), move_num * item_size()), move_num); + mtr_.logger().node_remove_items( + *this, move_index, span(__item_at(move_index), move_num * item_size()), move_num); increase_size(-(size - move_index)); return rc; } @@ -549,7 +551,8 @@ void InternalIndexNodeHandler::set_key_at(int index, const char *key) { assert(index >= 0 && index < size()); - mtr_.logger().internal_update_key(*this, index, span(key, key_size()), span(__key_at(index), key_size())); + mtr_.logger().internal_update_key( + *this, index, span(key, key_size()), span(__key_at(index), key_size())); memcpy(__key_at(index), key, key_size()); } @@ -574,7 +577,7 @@ void InternalIndexNodeHandler::remove(int index) assert(index >= 0 && index < size()); BplusTreeLogger &logger = mtr_.logger(); - RC rc = logger.node_remove_items(*this, index, span(__item_at(index), item_size()), 1); + RC rc = logger.node_remove_items(*this, index, span(__item_at(index), item_size()), 1); if (OB_FAIL(rc)) { LOG_WARN("failed to log remove item. rc=%s. node=%s", strrc(rc), to_string(*this).c_str()); } @@ -630,7 +633,8 @@ RC InternalIndexNodeHandler::move_last_to_front(InternalIndexNodeHandler &other) RC InternalIndexNodeHandler::insert_items(int index, const char *items, int num) { - RC rc = mtr_.logger().node_insert_items(*this, index, span(items, static_cast(item_size()) * static_cast(num)), num); + RC rc = mtr_.logger().node_insert_items( + *this, index, span(items, static_cast(item_size()) * static_cast(num)), num); if (OB_FAIL(rc)) { LOG_WARN("failed to log insert item. rc=%s", strrc(rc)); return rc; @@ -638,22 +642,22 @@ RC InternalIndexNodeHandler::insert_items(int index, const char *items, int num) recover_insert_items(index, items, num); - LatchMemo &latch_memo = mtr_.latch_memo(); - PageNum this_page_num = this->page_num(); - Frame *frame = nullptr; + LatchMemo &latch_memo = mtr_.latch_memo(); + PageNum this_page_num = this->page_num(); + Frame *frame = nullptr; // 设置所有页面的父页面为当前页面 // 这里会访问大量的页面,可能会将他们从磁盘加载到内存中而占用大量的buffer pool页面 for (int i = 0; i < num; i++) { const PageNum page_num = *(const PageNum *)((items + i * item_size()) + key_size()); - rc = latch_memo.get_page(page_num, frame); + rc = latch_memo.get_page(page_num, frame); if (OB_FAIL(rc)) { LOG_WARN("failed to set child's page num. child page num:%d, this page num=%d, rc=%d:%s", page_num, this_page_num, rc, strrc(rc)); return rc; } IndexNodeHandler child_node(mtr_, header_, frame); - child_node.set_parent_page_num(this_page_num); // 这里虽然对页面做了修改,但是并没有加写锁,因为父页面加了锁 + child_node.set_parent_page_num(this_page_num); // 这里虽然对页面做了修改,但是并没有加写锁,因为父页面加了锁 frame->mark_dirty(); } @@ -663,17 +667,11 @@ RC InternalIndexNodeHandler::insert_items(int index, const char *items, int num) /** * copy items from other node to self's right */ -RC InternalIndexNodeHandler::append(const char *items, int num) -{ - return insert_items(size(), items, num); -} +RC InternalIndexNodeHandler::append(const char *items, int num) { return insert_items(size(), items, num); } RC InternalIndexNodeHandler::append(const char *item) { return this->append(item, 1); } -RC InternalIndexNodeHandler::preappend(const char *item) -{ - return this->insert_items(0, item, 1); -} +RC InternalIndexNodeHandler::preappend(const char *item) { return this->insert_items(0, item, 1); } char *InternalIndexNodeHandler::__item_at(int index) const { return internal_node_->array + (index * item_size()); } @@ -703,7 +701,7 @@ bool InternalIndexNodeHandler::validate(const KeyComparator &comparator, DiskBuf LOG_WARN("this page num=%d, got invalid child page. page num=%d", this->page_num(), page_num); } else { Frame *child_frame = nullptr; - RC rc = bp->get_this_page(page_num, &child_frame); + RC rc = bp->get_this_page(page_num, &child_frame); if (OB_FAIL(rc)) { LOG_WARN("failed to fetch child page while validate internal page. page num=%d, rc=%d:%s", page_num, rc, strrc(rc)); @@ -729,7 +727,7 @@ bool InternalIndexNodeHandler::validate(const KeyComparator &comparator, DiskBuf } Frame *parent_frame = nullptr; - RC rc = bp->get_this_page(parent_page_num, &parent_frame); + RC rc = bp->get_this_page(parent_page_num, &parent_frame); if (OB_FAIL(rc)) { LOG_WARN("failed to fetch parent page. page num=%d, rc=%d:%s", parent_page_num, rc, strrc(rc)); return false; @@ -793,13 +791,8 @@ RC BplusTreeHandler::sync() return disk_buffer_pool_->flush_all_pages(); } -RC BplusTreeHandler::create(LogHandler &log_handler, - BufferPoolManager &bpm, - const char *file_name, - AttrType attr_type, - int attr_length, - int internal_max_size /* = -1*/, - int leaf_max_size /* = -1 */) +RC BplusTreeHandler::create(LogHandler &log_handler, BufferPoolManager &bpm, const char *file_name, AttrType attr_type, + int attr_length, int internal_max_size /* = -1*/, int leaf_max_size /* = -1 */) { RC rc = bpm.create_file(file_name); if (OB_FAIL(rc)) { @@ -827,12 +820,8 @@ RC BplusTreeHandler::create(LogHandler &log_handler, return rc; } -RC BplusTreeHandler::create(LogHandler &log_handler, - DiskBufferPool &buffer_pool, - AttrType attr_type, - int attr_length, - int internal_max_size /* = -1 */, - int leaf_max_size /* = -1 */) +RC BplusTreeHandler::create(LogHandler &log_handler, DiskBufferPool &buffer_pool, AttrType attr_type, int attr_length, + int internal_max_size /* = -1 */, int leaf_max_size /* = -1 */) { if (internal_max_size < 0) { internal_max_size = calc_internal_page_capacity(attr_length); @@ -911,7 +900,7 @@ RC BplusTreeHandler::open(LogHandler &log_handler, BufferPoolManager &bpm, const return RC::RECORD_OPENNED; } - DiskBufferPool *disk_buffer_pool = nullptr; + DiskBufferPool *disk_buffer_pool = nullptr; RC rc = bpm.open_file(log_handler, file_name, disk_buffer_pool); if (OB_FAIL(rc)) { @@ -977,7 +966,7 @@ RC BplusTreeHandler::close() RC BplusTreeHandler::print_leaf(Frame *frame) { BplusTreeMiniTransaction mtr(*this); - LeafIndexNodeHandler leaf_node(mtr, file_header_, frame); + LeafIndexNodeHandler leaf_node(mtr, file_header_, frame); LOG_INFO("leaf node: %s", to_string(leaf_node, key_printer_).c_str()); disk_buffer_pool_->unpin_page(frame); return RC::SUCCESS; @@ -985,7 +974,7 @@ RC BplusTreeHandler::print_leaf(Frame *frame) RC BplusTreeHandler::print_internal_node_recursive(Frame *frame) { - RC rc = RC::SUCCESS; + RC rc = RC::SUCCESS; BplusTreeMiniTransaction mtr(*this); LOG_INFO("bplus tree. file header: %s", file_header_.to_string().c_str()); @@ -1059,8 +1048,8 @@ RC BplusTreeHandler::print_leafs() } BplusTreeMiniTransaction mtr(*this); - LatchMemo latch_memo = mtr.latch_memo(); - Frame *frame = nullptr; + LatchMemo latch_memo = mtr.latch_memo(); + Frame *frame = nullptr; RC rc = left_most_page(mtr, frame); if (OB_FAIL(rc)) { @@ -1099,9 +1088,9 @@ bool BplusTreeHandler::validate_node_recursive(BplusTreeMiniTransaction &mtr, Fr InternalIndexNodeHandler internal_node(mtr, file_header_, frame); result = internal_node.validate(key_comparator_, disk_buffer_pool_); for (int i = 0; result && i < internal_node.size(); i++) { - PageNum page_num = internal_node.value_at(i); + PageNum page_num = internal_node.value_at(i); Frame *child_frame = nullptr; - RC rc = mtr.latch_memo().get_page(page_num, child_frame); + RC rc = mtr.latch_memo().get_page(page_num, child_frame); if (OB_FAIL(rc)) { LOG_WARN("failed to fetch child page.page id=%d, rc=%d:%s", page_num, rc, strrc(rc)); result = false; @@ -1164,8 +1153,8 @@ bool BplusTreeHandler::validate_tree() } BplusTreeMiniTransaction mtr(*this); - LatchMemo &latch_memo = mtr.latch_memo(); - Frame *frame = nullptr; + LatchMemo &latch_memo = mtr.latch_memo(); + Frame *frame = nullptr; RC rc = latch_memo.get_page(file_header_.root_page, frame); // 这里仅仅调试使用,不加root锁 if (OB_FAIL(rc)) { @@ -1241,8 +1230,8 @@ RC BplusTreeHandler::crabing_protocal_fetch_page( BplusTreeMiniTransaction &mtr, BplusTreeOperationType op, PageNum page_num, bool is_root_node, Frame *&frame) { LatchMemo &latch_memo = mtr.latch_memo(); - bool readonly = (op == BplusTreeOperationType::READ); - const int memo_point = latch_memo.memo_point(); + bool readonly = (op == BplusTreeOperationType::READ); + const int memo_point = latch_memo.memo_point(); RC rc = latch_memo.get_page(page_num, frame); if (OB_FAIL(rc)) { @@ -1259,7 +1248,8 @@ RC BplusTreeHandler::crabing_protocal_fetch_page( return rc; } -RC BplusTreeHandler::insert_entry_into_leaf_node(BplusTreeMiniTransaction &mtr, Frame *frame, const char *key, const RID *rid) +RC BplusTreeHandler::insert_entry_into_leaf_node( + BplusTreeMiniTransaction &mtr, Frame *frame, const char *key, const RID *rid) { LeafIndexNodeHandler leaf_node(mtr, file_header_, frame); bool exists = false; // 该数据是否已经存在指定的叶子节点中了 @@ -1297,7 +1287,8 @@ RC BplusTreeHandler::insert_entry_into_leaf_node(BplusTreeMiniTransaction &mtr, return insert_entry_into_parent(mtr, frame, new_frame, new_index_node.key_at(0)); } -RC BplusTreeHandler::insert_entry_into_parent(BplusTreeMiniTransaction &mtr, Frame *frame, Frame *new_frame, const char *key) +RC BplusTreeHandler::insert_entry_into_parent( + BplusTreeMiniTransaction &mtr, Frame *frame, Frame *new_frame, const char *key) { RC rc = RC::SUCCESS; @@ -1309,7 +1300,7 @@ RC BplusTreeHandler::insert_entry_into_parent(BplusTreeMiniTransaction &mtr, Fra // create new root page Frame *root_frame = nullptr; - rc = disk_buffer_pool_->allocate_page(&root_frame); + rc = disk_buffer_pool_->allocate_page(&root_frame); if (OB_FAIL(rc)) { LOG_WARN("failed to allocate new root page. rc=%d:%s", rc, strrc(rc)); return rc; @@ -1429,11 +1420,12 @@ RC BplusTreeHandler::recover_update_root_page(BplusTreeMiniTransaction &mtr, Pag return RC::SUCCESS; } -RC BplusTreeHandler::recover_init_header_page(BplusTreeMiniTransaction &mtr, Frame *frame, const IndexFileHeader &header) +RC BplusTreeHandler::recover_init_header_page( + BplusTreeMiniTransaction &mtr, Frame *frame, const IndexFileHeader &header) { IndexFileHeader *file_header = reinterpret_cast(frame->data()); memcpy(file_header, &header, sizeof(IndexFileHeader)); - file_header_ = header; + file_header_ = header; header_dirty_ = false; frame->mark_dirty(); @@ -1731,7 +1723,8 @@ RC BplusTreeHandler::coalesce( } template -RC BplusTreeHandler::redistribute(BplusTreeMiniTransaction &mtr, Frame *neighbor_frame, Frame *frame, Frame *parent_frame, int index) +RC BplusTreeHandler::redistribute( + BplusTreeMiniTransaction &mtr, Frame *neighbor_frame, Frame *frame, Frame *parent_frame, int index) { InternalIndexNodeHandler parent_node(mtr, file_header_, parent_frame); IndexNodeHandlerType neighbor_node(mtr, file_header_, neighbor_frame); @@ -1820,9 +1813,7 @@ RC BplusTreeHandler::delete_entry(const char *user_key, const RID *rid) //////////////////////////////////////////////////////////////////////////////// -BplusTreeScanner::BplusTreeScanner(BplusTreeHandler &tree_handler) - : tree_handler_(tree_handler), mtr_(tree_handler) -{} +BplusTreeScanner::BplusTreeScanner(BplusTreeHandler &tree_handler) : tree_handler_(tree_handler), mtr_(tree_handler) {} BplusTreeScanner::~BplusTreeScanner() { close(); } @@ -1858,7 +1849,7 @@ RC BplusTreeScanner::open(const char *left_user_key, int left_len, bool left_inc current_frame_ = nullptr; return RC::SUCCESS; } - + LOG_WARN("failed to find left most page. rc=%s", strrc(rc)); return rc; } @@ -2094,3 +2085,4 @@ RC BplusTreeScanner::fix_user_key( *fixed_key = key_buf; return RC::SUCCESS; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/index/bplus_tree.h b/src/observer/storage/index/bplus_tree.h index dd7520564..cd51492f5 100644 --- a/src/observer/storage/index/bplus_tree.h +++ b/src/observer/storage/index/bplus_tree.h @@ -30,6 +30,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/index/latch_memo.h" #include "storage/index/bplus_tree_log.h" +namespace oceanbase { + class BplusTreeHandler; class BplusTreeMiniTransaction; @@ -721,3 +723,4 @@ class BplusTreeScanner int iter_index_ = -1; bool first_emitted_ = false; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/index/bplus_tree_index.cpp b/src/observer/storage/index/bplus_tree_index.cpp index 8794cfbc1..90d1496e0 100644 --- a/src/observer/storage/index/bplus_tree_index.cpp +++ b/src/observer/storage/index/bplus_tree_index.cpp @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/table/table.h" #include "storage/db/db.h" +namespace oceanbase { + BplusTreeIndex::~BplusTreeIndex() noexcept { close(); } RC BplusTreeIndex::create(Table *table, const char *file_name, const IndexMeta &index_meta, const FieldMeta &field_meta) @@ -55,7 +57,7 @@ RC BplusTreeIndex::open(Table *table, const char *file_name, const IndexMeta &in Index::init(index_meta, field_meta); BufferPoolManager &bpm = table->db()->buffer_pool_manager(); - RC rc = index_handler_.open(table->db()->log_handler(), bpm, file_name); + RC rc = index_handler_.open(table->db()->log_handler(), bpm, file_name); if (RC::SUCCESS != rc) { LOG_WARN("Failed to open index_handler, file_name:%s, index:%s, field:%s, rc:%s", file_name, index_meta.name(), index_meta.field(), strrc(rc)); @@ -123,3 +125,4 @@ RC BplusTreeIndexScanner::destroy() delete this; return RC::SUCCESS; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/index/bplus_tree_index.h b/src/observer/storage/index/bplus_tree_index.h index db0bbc99b..e39f21a4c 100644 --- a/src/observer/storage/index/bplus_tree_index.h +++ b/src/observer/storage/index/bplus_tree_index.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/index/bplus_tree.h" #include "storage/index/index.h" +namespace oceanbase { + /** * @brief B+树索引 * @ingroup Index @@ -67,3 +69,4 @@ class BplusTreeIndexScanner : public IndexScanner private: BplusTreeScanner tree_scanner_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/index/bplus_tree_log.cpp b/src/observer/storage/index/bplus_tree_log.cpp index 2225a38e1..144343300 100644 --- a/src/observer/storage/index/bplus_tree_log.cpp +++ b/src/observer/storage/index/bplus_tree_log.cpp @@ -27,6 +27,8 @@ See the Mulan PSL v2 for more details. */ using namespace common; using namespace bplus_tree; +namespace oceanbase { + /////////////////////////////////////////////////////////////////////////////// // class BplusTreeLogger BplusTreeLogger::BplusTreeLogger(LogHandler &log_handler, int32_t buffer_pool_id) @@ -182,13 +184,14 @@ RC BplusTreeLogger::redo(BufferPoolManager &bpm, const LogEntry &entry) return rc; } -RC BplusTreeLogger::__redo(LSN lsn, BplusTreeMiniTransaction &mtr, BplusTreeHandler &tree_handler, Deserializer &redo_buffer) +RC BplusTreeLogger::__redo( + LSN lsn, BplusTreeMiniTransaction &mtr, BplusTreeHandler &tree_handler, Deserializer &redo_buffer) { need_log_ = false; DEFER(need_log_ = true); - RC rc = RC::SUCCESS; + RC rc = RC::SUCCESS; vector frames; while (redo_buffer.remain() > 0) { unique_ptr entry; @@ -202,8 +205,8 @@ RC BplusTreeLogger::__redo(LSN lsn, BplusTreeMiniTransaction &mtr, BplusTreeHand if (frame != nullptr) { if (frame->lsn() >= lsn) { LOG_TRACE("no need to redo. frame=%p:%s, redo lsn=%ld", frame, frame->to_string().c_str(), lsn); - frame->unpin(); - continue; + frame->unpin(); + continue; } else { frames.push_back(frame); } @@ -273,7 +276,7 @@ BplusTreeMiniTransaction::~BplusTreeMiniTransaction() if (nullptr == operation_result_) { return; } - + if (OB_SUCC(*operation_result_)) { commit(); } else { @@ -290,3 +293,4 @@ RC BplusTreeMiniTransaction::rollback() { return logger_.rollback(*this, tree_ha BplusTreeLogReplayer::BplusTreeLogReplayer(BufferPoolManager &bpm) : buffer_pool_manager_(bpm) {} RC BplusTreeLogReplayer::replay(const LogEntry &entry) { return BplusTreeLogger::redo(buffer_pool_manager_, entry); } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/index/bplus_tree_log.h b/src/observer/storage/index/bplus_tree_log.h index cb59bdf75..1d0a27942 100644 --- a/src/observer/storage/index/bplus_tree_log.h +++ b/src/observer/storage/index/bplus_tree_log.h @@ -26,6 +26,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/clog/log_replayer.h" // #include "storage/index/bplus_tree_log_entry.h" +namespace oceanbase { + struct IndexFileHeader; class LogEntry; class LogHandler; @@ -206,3 +208,4 @@ class BplusTreeLogReplayer final : public LogReplayer private: BufferPoolManager &buffer_pool_manager_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/index/bplus_tree_log_entry.cpp b/src/observer/storage/index/bplus_tree_log_entry.cpp index 615bb52b4..547342ad2 100644 --- a/src/observer/storage/index/bplus_tree_log_entry.cpp +++ b/src/observer/storage/index/bplus_tree_log_entry.cpp @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ using namespace common; +namespace oceanbase { + namespace bplus_tree { string LogOperation::to_string() const @@ -363,7 +365,7 @@ LeafInitEmptyLogEntryHandler::LeafInitEmptyLogEntryHandler(Frame *frame) RC LeafInitEmptyLogEntryHandler::redo(BplusTreeMiniTransaction &mtr, BplusTreeHandler &tree_handler) { LeafIndexNodeHandler leaf_handler(mtr, tree_handler.file_header(), frame()); - RC rc = leaf_handler.init_empty(); + RC rc = leaf_handler.init_empty(); return rc; } @@ -494,7 +496,7 @@ RC InternalCreateNewRootLogEntryHandler::deserialize( RC InternalCreateNewRootLogEntryHandler::redo(BplusTreeMiniTransaction &mtr, BplusTreeHandler &tree_handler) { InternalIndexNodeHandler internal_handler(mtr, tree_handler.file_header(), frame()); - RC rc = internal_handler.create_new_root(first_page_num_, key_.data(), page_num_); + RC rc = internal_handler.create_new_root(first_page_num_, key_.data(), page_num_); return rc; } @@ -606,3 +608,4 @@ RC UpdateRootPageLogEntryHandler::redo(BplusTreeMiniTransaction &mtr, BplusTreeH } } // namespace bplus_tree +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/index/bplus_tree_log_entry.h b/src/observer/storage/index/bplus_tree_log_entry.h index 7cdab743e..75739dfb4 100644 --- a/src/observer/storage/index/bplus_tree_log_entry.h +++ b/src/observer/storage/index/bplus_tree_log_entry.h @@ -20,6 +20,8 @@ See the Mulan PSL v2 for more details. */ #include "common/lang/string.h" #include "storage/index/bplus_tree.h" +namespace oceanbase { + class IndexNodeHandler; class BplusTreeHandler; class BplusTreeMiniTransaction; @@ -377,3 +379,4 @@ class InternalUpdateKeyLogEntryHandler : public NodeLogEntryHandler }; } // namespace bplus_tree +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/index/index.cpp b/src/observer/storage/index/index.cpp index 6fa51531d..ba332a61f 100644 --- a/src/observer/storage/index/index.cpp +++ b/src/observer/storage/index/index.cpp @@ -14,9 +14,12 @@ See the Mulan PSL v2 for more details. */ #include "storage/index/index.h" +namespace oceanbase { + RC Index::init(const IndexMeta &index_meta, const FieldMeta &field_meta) { index_meta_ = index_meta; field_meta_ = field_meta; return RC::SUCCESS; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/index/index.h b/src/observer/storage/index/index.h index 67bfe9a55..becf2cd7d 100644 --- a/src/observer/storage/index/index.h +++ b/src/observer/storage/index/index.h @@ -22,6 +22,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/index/index_meta.h" #include "storage/record/record_manager.h" +namespace oceanbase { + class IndexScanner; /** @@ -113,3 +115,4 @@ class IndexScanner virtual RC next_entry(RID *rid) = 0; virtual RC destroy() = 0; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/index/index_meta.cpp b/src/observer/storage/index/index_meta.cpp index 32604b9ff..0a3c30939 100644 --- a/src/observer/storage/index/index_meta.cpp +++ b/src/observer/storage/index/index_meta.cpp @@ -19,6 +19,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/table/table_meta.h" #include "json/json.h" +namespace oceanbase { + const static Json::StaticString FIELD_NAME("name"); const static Json::StaticString FIELD_FIELD_NAME("field_name"); @@ -68,4 +70,5 @@ const char *IndexMeta::name() const { return name_.c_str(); } const char *IndexMeta::field() const { return field_.c_str(); } -void IndexMeta::desc(ostream &os) const { os << "index name=" << name_ << ", field=" << field_; } \ No newline at end of file +void IndexMeta::desc(ostream &os) const { os << "index name=" << name_ << ", field=" << field_; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/index/index_meta.h b/src/observer/storage/index/index_meta.h index bb9f948b1..8ea300d5c 100644 --- a/src/observer/storage/index/index_meta.h +++ b/src/observer/storage/index/index_meta.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "common/sys/rc.h" #include "common/lang/string.h" +namespace oceanbase { + class TableMeta; class FieldMeta; @@ -51,3 +53,4 @@ class IndexMeta string name_; // index's name string field_; // field's name }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/index/ivfflat_index.h b/src/observer/storage/index/ivfflat_index.h index cb09f47ad..52c3a8d09 100644 --- a/src/observer/storage/index/ivfflat_index.h +++ b/src/observer/storage/index/ivfflat_index.h @@ -12,6 +12,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/index/index.h" +namespace oceanbase { + /** * @brief ivfflat 向量索引 * @ingroup Index @@ -19,7 +21,7 @@ See the Mulan PSL v2 for more details. */ class IvfflatIndex : public Index { public: - IvfflatIndex(){}; + IvfflatIndex() {}; virtual ~IvfflatIndex() noexcept {}; RC create(Table *table, const char *file_name, const IndexMeta &index_meta, const FieldMeta &field_meta) @@ -47,3 +49,4 @@ class IvfflatIndex : public Index int lists_ = 1; int probes_ = 1; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/index/latch_memo.cpp b/src/observer/storage/index/latch_memo.cpp index 05158eda0..28e4b9e5e 100644 --- a/src/observer/storage/index/latch_memo.cpp +++ b/src/observer/storage/index/latch_memo.cpp @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/buffer/disk_buffer_pool.h" #include "storage/buffer/frame.h" +namespace oceanbase { + LatchMemoItem::LatchMemoItem(LatchMemoType type, Frame *frame) { this->type = type; @@ -158,3 +160,4 @@ void LatchMemo::release_to(int point) } items_.erase(items_.begin(), iter); } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/index/latch_memo.h b/src/observer/storage/index/latch_memo.h index b729db542..9c9132d08 100644 --- a/src/observer/storage/index/latch_memo.h +++ b/src/observer/storage/index/latch_memo.h @@ -19,6 +19,8 @@ See the Mulan PSL v2 for more details. */ #include "common/lang/vector.h" #include "storage/buffer/page.h" +namespace oceanbase { + class Frame; class DiskBufferPool; @@ -88,3 +90,4 @@ class LatchMemo final deque items_; vector disposed_pages_; /// 等待释放的页面 }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/persist/persist.cpp b/src/observer/storage/persist/persist.cpp index 866a95878..81232b5f3 100644 --- a/src/observer/storage/persist/persist.cpp +++ b/src/observer/storage/persist/persist.cpp @@ -18,6 +18,8 @@ See the Mulan PSL v2 for more details. */ #include "common/log/log.h" #include "persist.h" +namespace oceanbase { + PersistHandler::PersistHandler() {} PersistHandler::~PersistHandler() { close_file(); } @@ -282,3 +284,4 @@ RC PersistHandler::seek(uint64_t offset) return rc; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/persist/persist.h b/src/observer/storage/persist/persist.h index 45f61f7dc..c3847fbc4 100644 --- a/src/observer/storage/persist/persist.h +++ b/src/observer/storage/persist/persist.h @@ -24,6 +24,8 @@ See the Mulan PSL v2 for more details. */ #include "common/sys/rc.h" #include "common/lang/string.h" +namespace oceanbase { + class PersistHandler { public: @@ -64,3 +66,4 @@ class PersistHandler string file_name_; int file_desc_ = -1; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/record/heap_record_scanner.cpp b/src/observer/storage/record/heap_record_scanner.cpp index cc1182429..a5517b67e 100644 --- a/src/observer/storage/record/heap_record_scanner.cpp +++ b/src/observer/storage/record/heap_record_scanner.cpp @@ -12,6 +12,7 @@ See the Mulan PSL v2 for more details. */ //////////////////////////////////////////////////////////////////////////////// +namespace oceanbase { RC HeapRecordScanner::open_scan() { @@ -145,3 +146,4 @@ RC HeapRecordScanner::next(Record &record) record = next_record_; return RC::SUCCESS; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/record/heap_record_scanner.h b/src/observer/storage/record/heap_record_scanner.h index 2915eeaef..34f6b32e7 100644 --- a/src/observer/storage/record/heap_record_scanner.h +++ b/src/observer/storage/record/heap_record_scanner.h @@ -14,6 +14,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/buffer/disk_buffer_pool.h" #include "storage/trx/trx.h" +namespace oceanbase { + /** * @brief 遍历某个文件中所有记录 * @ingroup RecordManager @@ -68,11 +70,12 @@ class HeapRecordScanner : public RecordScanner DiskBufferPool *disk_buffer_pool_ = nullptr; ///< 当前访问的文件 Trx *trx_ = nullptr; ///< 当前是哪个事务在遍历 LogHandler *log_handler_ = nullptr; - ReadWriteMode rw_mode_ = ReadWriteMode::READ_WRITE; ///< 遍历出来的数据,是否可能对它做修改 + ReadWriteMode rw_mode_ = ReadWriteMode::READ_WRITE; ///< 遍历出来的数据,是否可能对它做修改 BufferPoolIterator bp_iterator_; ///< 遍历buffer pool的所有页面 ConditionFilter *condition_filter_ = nullptr; ///< 过滤record RecordPageHandler *record_page_handler_ = nullptr; ///< 处理文件某页面的记录 RecordPageIterator record_page_iterator_; ///< 遍历某个页面上的所有record Record next_record_; ///< 获取的记录放在这里缓存起来 -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/record/lob_handler.cpp b/src/observer/storage/record/lob_handler.cpp index b7905170e..1a1284852 100644 --- a/src/observer/storage/record/lob_handler.cpp +++ b/src/observer/storage/record/lob_handler.cpp @@ -10,10 +10,9 @@ See the Mulan PSL v2 for more details. */ #include "storage/record/lob_handler.h" -RC LobFileHandler::create_file(const char *file_name) -{ - return file_.create_file(file_name); -} +namespace oceanbase { + +RC LobFileHandler::create_file(const char *file_name) { return file_.create_file(file_name); } RC LobFileHandler::open_file(const char *file_name) { @@ -28,10 +27,10 @@ RC LobFileHandler::open_file(const char *file_name) RC LobFileHandler::insert_data(int64_t &offset, int64_t length, const char *data) { - RC rc = RC::SUCCESS; - int64_t out_size = 0; + RC rc = RC::SUCCESS; + int64_t out_size = 0; int64_t end_offset = 0; - rc = file_.append(length, data, &out_size, &end_offset); + rc = file_.append(length, data, &out_size, &end_offset); if (OB_FAIL(rc)) { return rc; } @@ -42,3 +41,4 @@ RC LobFileHandler::insert_data(int64_t &offset, int64_t length, const char *data return rc; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/record/lob_handler.h b/src/observer/storage/record/lob_handler.h index 99d86798a..3dd45676c 100644 --- a/src/observer/storage/record/lob_handler.h +++ b/src/observer/storage/record/lob_handler.h @@ -15,6 +15,8 @@ See the Mulan PSL v2 for more details. */ #include "common/types.h" #include "storage/persist/persist.h" +namespace oceanbase { + /** * @brief 管理LOB文件中的 LOB 对象 * @ingroup RecordManager @@ -38,4 +40,5 @@ class LobFileHandler private: PersistHandler file_; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/record/lsm_record_scanner.cpp b/src/observer/storage/record/lsm_record_scanner.cpp index 59eef6850..6dc0ccf15 100644 --- a/src/observer/storage/record/lsm_record_scanner.cpp +++ b/src/observer/storage/record/lsm_record_scanner.cpp @@ -12,6 +12,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/common/codec.h" #include "storage/trx/lsm_mvcc_trx.h" +namespace oceanbase { + RC LsmRecordScanner::open_scan() { RC rc = RC::SUCCESS; @@ -23,7 +25,7 @@ RC LsmRecordScanner::open_scan() lsm_iter_ = oblsm_->new_iterator(ObLsmReadOptions()); } else if (trx_->type() == TrxKit::Type::LSM) { auto lsm_trx = dynamic_cast(trx_); - lsm_iter_ = lsm_trx->get_trx()->new_iterator(ObLsmReadOptions()); + lsm_iter_ = lsm_trx->get_trx()->new_iterator(ObLsmReadOptions()); } bytes encoded_key; rc = Codec::encode_without_rid(table_->table_id(), encoded_key); @@ -36,7 +38,6 @@ RC LsmRecordScanner::open_scan() return rc; } - RC LsmRecordScanner::close_scan() { if (lsm_iter_ != nullptr) { @@ -50,9 +51,9 @@ RC LsmRecordScanner::next(Record &record) { if (lsm_iter_->valid()) { string_view lsm_value = lsm_iter_->value(); - string_view lsm_key = lsm_iter_->key(); - int64_t table_id = 0; - bytes lsm_key_bytes(lsm_key.begin(), lsm_key.end()); + string_view lsm_key = lsm_iter_->key(); + int64_t table_id = 0; + bytes lsm_key_bytes(lsm_key.begin(), lsm_key.end()); Codec::decode(lsm_key_bytes, table_id); if (table_id != table_->table_id()) { LOG_TRACE("table id not match, table id: %ld", table_->table_id()); @@ -66,4 +67,5 @@ RC LsmRecordScanner::next(Record &record) return RC::RECORD_EOF; } return RC::SUCCESS; -} \ No newline at end of file +} +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/record/lsm_record_scanner.h b/src/observer/storage/record/lsm_record_scanner.h index 6407fae27..8987f44e6 100644 --- a/src/observer/storage/record/lsm_record_scanner.h +++ b/src/observer/storage/record/lsm_record_scanner.h @@ -17,6 +17,9 @@ See the Mulan PSL v2 for more details. */ #include "storage/trx/trx.h" using namespace oceanbase; + +namespace oceanbase { + class LsmRecordScanner : public RecordScanner { public: @@ -47,4 +50,5 @@ class LsmRecordScanner : public RecordScanner ObLsmIterator *lsm_iter_ = nullptr; RowTuple tuple_; Record record_; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/record/record.h b/src/observer/storage/record/record.h index 308355193..711c7524f 100644 --- a/src/observer/storage/record/record.h +++ b/src/observer/storage/record/record.h @@ -25,6 +25,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/field/field_meta.h" #include "storage/index/index_meta.h" +namespace oceanbase { + class Field; /** @@ -266,3 +268,4 @@ class Record int len_ = 0; /// 如果不是record自己来管理内存,这个字段可能是无效的 bool owner_ = false; /// 表示当前是否由record来管理内存 }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/record/record_log.cpp b/src/observer/storage/record/record_log.cpp index 3af38bd07..2a537eca3 100644 --- a/src/observer/storage/record/record_log.cpp +++ b/src/observer/storage/record/record_log.cpp @@ -29,6 +29,8 @@ using namespace common; // class RecordOperation +namespace oceanbase { + string RecordOperation::to_string() const { string ret = std::to_string(type_id()) + ":"; @@ -329,3 +331,4 @@ RC RecordLogReplayer::replay_update(DiskBufferPool &buffer_pool, const RecordLog return rc; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/record/record_log.h b/src/observer/storage/record/record_log.h index 5bf5663b6..c162c0af2 100644 --- a/src/observer/storage/record/record_log.h +++ b/src/observer/storage/record/record_log.h @@ -23,6 +23,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/clog/log_replayer.h" #include "sql/parser/parse_defs.h" +namespace oceanbase { + struct RID; class LogHandler; class Frame; @@ -153,3 +155,4 @@ class RecordLogReplayer final : public LogReplayer private: BufferPoolManager &bpm_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/record/record_manager.cpp b/src/observer/storage/record/record_manager.cpp index 87e5a6105..7be630f16 100644 --- a/src/observer/storage/record/record_manager.cpp +++ b/src/observer/storage/record/record_manager.cpp @@ -19,6 +19,8 @@ See the Mulan PSL v2 for more details. */ using namespace common; +namespace oceanbase { + static constexpr int PAGE_HEADER_SIZE = (sizeof(PageHeader)); RecordPageHandler *RecordPageHandler::create(StorageFormat format) { @@ -799,3 +801,4 @@ RC ChunkFileScanner::next_chunk(Chunk &chunk) record_page_handler_->cleanup(); return RC::RECORD_EOF; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/record/record_manager.h b/src/observer/storage/record/record_manager.h index 876e29b28..f1a77c203 100644 --- a/src/observer/storage/record/record_manager.h +++ b/src/observer/storage/record/record_manager.h @@ -23,6 +23,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/record/lob_handler.h" #include "common/types.h" +namespace oceanbase { + class LogHandler; class ConditionFilter; class RecordPageHandler; @@ -261,12 +263,12 @@ class RecordPageHandler protected: DiskBufferPool *disk_buffer_pool_ = nullptr; ///< 当前操作的buffer pool(文件) RecordLogHandler log_handler_; ///< 当前操作的日志处理器 - Frame *frame_ = nullptr; ///< 当前操作页面关联的frame(frame的更多概念可以参考buffer pool和frame) - ReadWriteMode rw_mode_ = ReadWriteMode::READ_WRITE; ///< 当前的操作是否都是只读的 - PageHeader *page_header_ = nullptr; ///< 当前页面上页面头 - char *bitmap_ = nullptr; ///< 当前页面上record分配状态信息bitmap内存起始位置 - StorageFormat storage_format_; - LobFileHandler *lob_handler_ = nullptr; + Frame *frame_ = nullptr; ///< 当前操作页面关联的frame(frame的更多概念可以参考buffer pool和frame) + ReadWriteMode rw_mode_ = ReadWriteMode::READ_WRITE; ///< 当前的操作是否都是只读的 + PageHeader *page_header_ = nullptr; ///< 当前页面上页面头 + char *bitmap_ = nullptr; ///< 当前页面上record分配状态信息bitmap内存起始位置 + StorageFormat storage_format_; + LobFileHandler *lob_handler_ = nullptr; protected: friend class RecordPageIterator; @@ -365,7 +367,7 @@ class PaxRecordPageHandler : public RecordPageHandler class RecordFileHandler { public: - RecordFileHandler(StorageFormat storage_format) : storage_format_(storage_format){}; + RecordFileHandler(StorageFormat storage_format) : storage_format_(storage_format) {}; ~RecordFileHandler(); /** @@ -421,7 +423,7 @@ class RecordFileHandler DiskBufferPool *disk_buffer_pool_ = nullptr; LogHandler *log_handler_ = nullptr; ///< 记录日志的处理器 unordered_set free_pages_; ///< 没有填充满的页面集合 - common::Mutex lock_; ///< 当编译时增加-DCONCURRENCY=ON 选项时,才会真正的支持并发 + common::Mutex lock_; ///< 当编译时增加-DCONCURRENCY=ON 选项时,才会真正的支持并发 StorageFormat storage_format_; TableMeta *table_meta_; LobFileHandler *lob_handler_ = nullptr; @@ -456,8 +458,9 @@ class ChunkFileScanner DiskBufferPool *disk_buffer_pool_ = nullptr; ///< 当前访问的文件 LogHandler *log_handler_ = nullptr; - ReadWriteMode rw_mode_ = ReadWriteMode::READ_WRITE; ///< 遍历出来的数据,是否可能对它做修改 + ReadWriteMode rw_mode_ = ReadWriteMode::READ_WRITE; ///< 遍历出来的数据,是否可能对它做修改 BufferPoolIterator bp_iterator_; ///< 遍历buffer pool的所有页面 RecordPageHandler *record_page_handler_ = nullptr; ///< 处理文件某页面的记录 }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/record/record_scanner.h b/src/observer/storage/record/record_scanner.h index 463b69724..c16855ca8 100644 --- a/src/observer/storage/record/record_scanner.h +++ b/src/observer/storage/record/record_scanner.h @@ -13,6 +13,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/record/record.h" #include "storage/common/condition_filter.h" +namespace oceanbase { + /** * @brief 遍历某个表中所有记录 * @ingroup RecordManager @@ -39,4 +41,5 @@ class RecordScanner * @param record 返回的下一条记录 */ virtual RC next(Record &record) = 0; -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/table/heap_table_engine.cpp b/src/observer/storage/table/heap_table_engine.cpp index 6348c60e8..203d0736a 100644 --- a/src/observer/storage/table/heap_table_engine.cpp +++ b/src/observer/storage/table/heap_table_engine.cpp @@ -15,6 +15,7 @@ See the Mulan PSL v2 for more details. */ #include "storage/common/meta_util.h" #include "storage/db/db.h" +namespace oceanbase { HeapTableEngine::~HeapTableEngine() { @@ -61,7 +62,7 @@ RC HeapTableEngine::insert_record(Record &record) return rc; } -RC HeapTableEngine::insert_chunk(const Chunk& chunk) +RC HeapTableEngine::insert_chunk(const Chunk &chunk) { RC rc = RC::SUCCESS; rc = record_handler_->insert_chunk(chunk, table_meta_->record_size()); @@ -106,7 +107,7 @@ RC HeapTableEngine::delete_record(const Record &record) RC HeapTableEngine::get_record_scanner(RecordScanner *&scanner, Trx *trx, ReadWriteMode mode) { scanner = new HeapRecordScanner(table_, *data_buffer_pool_, trx, db_->log_handler(), mode, nullptr); - RC rc = scanner->open_scan(); + RC rc = scanner->open_scan(); if (rc != RC::SUCCESS) { LOG_ERROR("failed to open scanner. rc=%s", strrc(rc)); } @@ -151,7 +152,7 @@ RC HeapTableEngine::create_index(Trx *trx, const FieldMeta *field_meta, const ch // 遍历当前的所有数据,插入这个索引 RecordScanner *scanner = nullptr; - rc = get_record_scanner(scanner, trx, ReadWriteMode::READ_ONLY); + rc = get_record_scanner(scanner, trx, ReadWriteMode::READ_ONLY); if (rc != RC::SUCCESS) { LOG_WARN("failed to create scanner while creating index. table=%s, index=%s, rc=%s", table_meta_->name(), index_name, strrc(rc)); @@ -341,3 +342,4 @@ RC HeapTableEngine::open() } return rc; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/table/heap_table_engine.h b/src/observer/storage/table/heap_table_engine.h index 6726f86dc..d969be4d2 100644 --- a/src/observer/storage/table/heap_table_engine.h +++ b/src/observer/storage/table/heap_table_engine.h @@ -15,6 +15,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/record/record_manager.h" #include "storage/db/db.h" +namespace oceanbase { + class Table; /** * @brief table engine @@ -60,3 +62,4 @@ class HeapTableEngine : public TableEngine Db *db_; Table *table_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/table/lsm_table_engine.cpp b/src/observer/storage/table/lsm_table_engine.cpp index c97d113a2..f5a19f752 100644 --- a/src/observer/storage/table/lsm_table_engine.cpp +++ b/src/observer/storage/table/lsm_table_engine.cpp @@ -18,6 +18,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/common/codec.h" #include "storage/trx/lsm_mvcc_trx.h" +namespace oceanbase { + RC LsmTableEngine::insert_record(Record &record) { RC rc = RC::SUCCESS; @@ -32,14 +34,13 @@ RC LsmTableEngine::insert_record(Record &record) RC LsmTableEngine::get_record_scanner(RecordScanner *&scanner, Trx *trx, ReadWriteMode mode) { scanner = new LsmRecordScanner(table_, db_->lsm(), trx); - RC rc = scanner->open_scan(); + RC rc = scanner->open_scan(); if (rc != RC::SUCCESS) { LOG_ERROR("failed to open scanner. rc=%s", strrc(rc)); } return rc; } -RC LsmTableEngine::open() -{ - return RC::UNIMPLEMENTED; -} \ No newline at end of file +RC LsmTableEngine::open() { return RC::UNIMPLEMENTED; } + +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/table/lsm_table_engine.h b/src/observer/storage/table/lsm_table_engine.h index be97cacd9..6acf84eb6 100644 --- a/src/observer/storage/table/lsm_table_engine.h +++ b/src/observer/storage/table/lsm_table_engine.h @@ -17,6 +17,8 @@ See the Mulan PSL v2 for more details. */ #include "oblsm/include/ob_lsm.h" using namespace oceanbase; +namespace oceanbase { + /** * @brief lsm table engine */ @@ -56,3 +58,4 @@ class LsmTableEngine : public TableEngine ObLsm *lsm_; atomic inc_id_{0}; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/table/table.cpp b/src/observer/storage/table/table.cpp index 14093fc06..4eb3df8c7 100644 --- a/src/observer/storage/table/table.cpp +++ b/src/observer/storage/table/table.cpp @@ -35,6 +35,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/table/heap_table_engine.h" #include "storage/table/lsm_table_engine.h" +namespace oceanbase { + Table::~Table() { if (lob_handler_ != nullptr) { @@ -44,7 +46,8 @@ Table::~Table() } RC Table::create(Db *db, int32_t table_id, const char *path, const char *name, const char *base_dir, - span attributes, const vector &primary_keys, StorageFormat storage_format, StorageEngine storage_engine) + span attributes, const vector &primary_keys, StorageFormat storage_format, + StorageEngine storage_engine) { if (table_id < 0) { LOG_WARN("invalid table id. table_id=%d, table_name=%s", table_id, name); @@ -80,7 +83,8 @@ RC Table::create(Db *db, int32_t table_id, const char *path, const char *name, c // 创建文件 const vector *trx_fields = db->trx_kit().trx_fields(); - if ((rc = table_meta_.init(table_id, name, trx_fields, attributes, primary_keys, storage_format, storage_engine)) != RC::SUCCESS) { + if ((rc = table_meta_.init(table_id, name, trx_fields, attributes, primary_keys, storage_format, storage_engine)) != + RC::SUCCESS) { LOG_ERROR("Failed to init table meta. name:%s, ret:%d", name, rc); return rc; // delete table file } @@ -96,7 +100,7 @@ RC Table::create(Db *db, int32_t table_id, const char *path, const char *name, c table_meta_.serialize(fs); fs.close(); - db_ = db; + db_ = db; string data_file = table_data_file(base_dir, name); BufferPoolManager &bpm = db->buffer_pool_manager(); @@ -142,7 +146,7 @@ RC Table::open(Db *db, const char *meta_file, const char *base_dir) } fs.close(); - db_ = db; + db_ = db; // // 加载数据文件 // RC rc = init_record_handler(base_dir); @@ -155,7 +159,7 @@ RC Table::open(Db *db, const char *meta_file, const char *base_dir) if (table_meta_.storage_engine() == StorageEngine::HEAP) { engine_ = make_unique(&table_meta_, db_, this); - } else if (table_meta_.storage_engine() == StorageEngine::LSM) { + } else if (table_meta_.storage_engine() == StorageEngine::LSM) { engine_ = make_unique(&table_meta_, db_, this); } else { rc = RC::UNSUPPORTED; @@ -172,39 +176,24 @@ RC Table::open(Db *db, const char *meta_file, const char *base_dir) return rc; } -RC Table::insert_record(Record &record) -{ - return engine_->insert_record(record); -} +RC Table::insert_record(Record &record) { return engine_->insert_record(record); } -RC Table::insert_chunk(const Chunk& chunk) -{ - return engine_->insert_chunk(chunk); -} +RC Table::insert_chunk(const Chunk &chunk) { return engine_->insert_chunk(chunk); } -RC Table::visit_record(const RID &rid, function visitor) -{ - return engine_->visit_record(rid, visitor); -} +RC Table::visit_record(const RID &rid, function visitor) { return engine_->visit_record(rid, visitor); } -RC Table::insert_record_with_trx(Record &record, Trx *trx) -{ - return engine_->insert_record_with_trx(record, trx); -} +RC Table::insert_record_with_trx(Record &record, Trx *trx) { return engine_->insert_record_with_trx(record, trx); } RC Table::delete_record_with_trx(const Record &record, Trx *trx) { return engine_->delete_record_with_trx(record, trx); } -RC Table::update_record_with_trx(const Record &old_record, const Record &new_record, Trx* trx) +RC Table::update_record_with_trx(const Record &old_record, const Record &new_record, Trx *trx) { return engine_->update_record_with_trx(old_record, new_record, trx); } -RC Table::get_record(const RID &rid, Record &record) -{ - return engine_->get_record(rid, record); -} +RC Table::get_record(const RID &rid, Record &record) { return engine_->get_record(rid, record); } const char *Table::name() const { return table_meta_.name(); } @@ -227,7 +216,7 @@ RC Table::make_record(int value_num, const Value *values, Record &record) for (int i = 0; i < value_num && OB_SUCC(rc); i++) { const FieldMeta *field = table_meta_.field(i + normal_field_start_index); - const Value & value = values[i]; + const Value &value = values[i]; if (field->type() != value.attr_type()) { Value real_value; rc = Value::cast_to(value, field->type(), real_value); @@ -279,21 +268,10 @@ RC Table::create_index(Trx *trx, const FieldMeta *field_meta, const char *index_ return engine_->create_index(trx, field_meta, index_name); } -RC Table::delete_record(const Record &record) -{ - return engine_->delete_record(record); -} +RC Table::delete_record(const Record &record) { return engine_->delete_record(record); } -Index *Table::find_index(const char *index_name) const -{ - return engine_->find_index(index_name); -} -Index *Table::find_index_by_field(const char *field_name) const -{ - return engine_->find_index_by_field(field_name); -} +Index *Table::find_index(const char *index_name) const { return engine_->find_index(index_name); } +Index *Table::find_index_by_field(const char *field_name) const { return engine_->find_index_by_field(field_name); } -RC Table::sync() -{ - return engine_->sync(); -} +RC Table::sync() { return engine_->sync(); } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/table/table.h b/src/observer/storage/table/table.h index 0e5f89014..cdc8b0734 100644 --- a/src/observer/storage/table/table.h +++ b/src/observer/storage/table/table.h @@ -22,6 +22,8 @@ See the Mulan PSL v2 for more details. */ #include "common/lang/span.h" #include "common/lang/functional.h" +namespace oceanbase { + struct RID; class Record; class DiskBufferPool; @@ -140,3 +142,4 @@ class Table unique_ptr engine_ = nullptr; LobFileHandler *lob_handler_ = nullptr; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/table/table_engine.h b/src/observer/storage/table/table_engine.h index 110fbd046..51e621d8f 100644 --- a/src/observer/storage/table/table_engine.h +++ b/src/observer/storage/table/table_engine.h @@ -15,6 +15,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/table/table_meta.h" #include "storage/common/chunk.h" +namespace oceanbase { + struct RID; class Record; class DiskBufferPool; @@ -60,3 +62,4 @@ class TableEngine protected: TableMeta *table_meta_ = nullptr; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/table/table_meta.cpp b/src/observer/storage/table/table_meta.cpp index 144881188..64d876322 100644 --- a/src/observer/storage/table/table_meta.cpp +++ b/src/observer/storage/table/table_meta.cpp @@ -20,6 +20,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/trx/trx.h" #include "json/json.h" +namespace oceanbase { + static const Json::StaticString FIELD_TABLE_ID("table_id"); static const Json::StaticString FIELD_TABLE_NAME("table_name"); static const Json::StaticString FIELD_STORAGE_FORMAT("storage_format"); @@ -47,8 +49,8 @@ void TableMeta::swap(TableMeta &other) noexcept } RC TableMeta::init(int32_t table_id, const char *name, const vector *trx_fields, - span attributes, const vector &primary_keys, StorageFormat storage_format, - StorageEngine storage_engine) + span attributes, const vector &primary_keys, StorageFormat storage_format, + StorageEngine storage_engine) { if (common::is_blank(name)) { LOG_ERROR("Name cannot be empty"); @@ -71,7 +73,12 @@ RC TableMeta::init(int32_t table_id, const char *name, const vector * fields_.resize(attributes.size() + trx_fields->size()); for (size_t i = 0; i < trx_fields->size(); i++) { const FieldMeta &field_meta = (*trx_fields)[i]; - fields_[i] = FieldMeta(field_meta.name(), field_meta.type(), field_offset, field_meta.len(), false /*visible*/, field_meta.field_id()); + fields_[i] = FieldMeta(field_meta.name(), + field_meta.type(), + field_offset, + field_meta.len(), + false /*visible*/, + field_meta.field_id()); field_offset += field_meta.len(); } @@ -84,7 +91,7 @@ RC TableMeta::init(int32_t table_id, const char *name, const vector * const AttrInfoSqlNode &attr_info = attributes[i]; // `i` is the col_id of fields[i] rc = fields_[i + trx_field_num].init( - attr_info.name.c_str(), attr_info.type, field_offset, attr_info.length, true /*visible*/, i); + attr_info.name.c_str(), attr_info.type, field_offset, attr_info.length, true /*visible*/, i); if (OB_FAIL(rc)) { LOG_ERROR("Failed to init field meta. table name=%s, field name: %s", name, attr_info.name.c_str()); return rc; @@ -94,10 +101,10 @@ RC TableMeta::init(int32_t table_id, const char *name, const vector * } primary_keys_ = primary_keys; - record_size_ = field_offset; + record_size_ = field_offset; - table_id_ = table_id; - name_ = name; + table_id_ = table_id; + name_ = name; storage_format_ = storage_format; storage_engine_ = storage_engine; LOG_INFO("Sussessfully initialized table meta. table id=%d, name=%s", table_id, name); @@ -114,10 +121,7 @@ const char *TableMeta::name() const { return name_.c_str(); } const FieldMeta *TableMeta::trx_field() const { return &fields_[0]; } -span TableMeta::trx_fields() const -{ - return span(fields_.data(), sys_field_num()); -} +span TableMeta::trx_fields() const { return span(fields_.data(), sys_field_num()); } const FieldMeta *TableMeta::field(int index) const { return &fields_[index]; } const FieldMeta *TableMeta::field(const char *name) const @@ -175,8 +179,8 @@ int TableMeta::record_size() const { return record_size_; } int TableMeta::serialize(ostream &ss) const { Json::Value table_value; - table_value[FIELD_TABLE_ID] = table_id_; - table_value[FIELD_TABLE_NAME] = name_; + table_value[FIELD_TABLE_ID] = table_id_; + table_value[FIELD_TABLE_NAME] = name_; table_value[FIELD_STORAGE_FORMAT] = static_cast(storage_format_); table_value[FIELD_STORAGE_ENGINE] = static_cast(storage_engine_); @@ -218,7 +222,7 @@ int TableMeta::deserialize(istream &is) { Json::Value table_value; Json::CharReaderBuilder builder; - string errors; + string errors; streampos old_pos = is.tellg(); if (!Json::parseFromStream(builder, is, &table_value, &errors)) { @@ -282,7 +286,7 @@ int TableMeta::deserialize(istream &is) auto comparator = [](const FieldMeta &f1, const FieldMeta &f2) { return f1.offset() < f2.offset(); }; sort(fields.begin(), fields.end(), comparator); - table_id_ = table_id; + table_id_ = table_id; storage_format_ = static_cast(storage_format); storage_engine_ = static_cast(storage_engine); name_.swap(table_name); @@ -291,7 +295,7 @@ int TableMeta::deserialize(istream &is) for (const FieldMeta &field_meta : fields_) { if (!field_meta.visible()) { - trx_fields_.push_back(field_meta); // 字段加上trx标识更好 + trx_fields_.push_back(field_meta); // 字段加上trx标识更好 } } @@ -301,7 +305,7 @@ int TableMeta::deserialize(istream &is) LOG_ERROR("Invalid table meta. indexes is not array, json value=%s", fields_value.toStyledString().c_str()); return -1; } - const int index_num = indexes_value.size(); + const int index_num = indexes_value.size(); vector indexes(index_num); for (int i = 0; i < index_num; i++) { IndexMeta &index = indexes[i]; @@ -322,7 +326,7 @@ int TableMeta::deserialize(istream &is) LOG_ERROR("Invalid table meta. primary keys is not array, json value=%s", fields_value.toStyledString().c_str()); return -1; } - const int primary_key_num = primary_keys_value.size(); + const int primary_key_num = primary_keys_value.size(); vector primary_keys(primary_key_num); for (int i = 0; i < primary_key_num; i++) { const Json::Value &field_name_value = primary_keys_value[i]; @@ -360,3 +364,4 @@ void TableMeta::desc(ostream &os) const } os << ')' << endl; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/table/table_meta.h b/src/observer/storage/table/table_meta.h index 12bf8f7b4..c6df68bf0 100644 --- a/src/observer/storage/table/table_meta.h +++ b/src/observer/storage/table/table_meta.h @@ -21,6 +21,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/field/field_meta.h" #include "storage/index/index_meta.h" +namespace oceanbase { + /** * @brief 表元数据 * @@ -84,3 +86,4 @@ class TableMeta : public common::Serializable int record_size_ = 0; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/trx/lsm_mvcc_trx.cpp b/src/observer/storage/trx/lsm_mvcc_trx.cpp index 1f07ef6d6..0d1c7ddbc 100644 --- a/src/observer/storage/trx/lsm_mvcc_trx.cpp +++ b/src/observer/storage/trx/lsm_mvcc_trx.cpp @@ -10,6 +10,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/trx/lsm_mvcc_trx.h" +namespace oceanbase { + RC LsmMvccTrxKit::init() { return RC::SUCCESS; } const vector *LsmMvccTrxKit::trx_fields() const { return nullptr; } @@ -27,15 +29,9 @@ LogReplayer *LsmMvccTrxKit::create_log_replayer(Db &, LogHandler &) { return new //////////////////////////////////////////////////////////////////////////////// -RC LsmMvccTrx::insert_record(Table *table, Record &record) -{ - return table->insert_record_with_trx(record, this); -} +RC LsmMvccTrx::insert_record(Table *table, Record &record) { return table->insert_record_with_trx(record, this); } -RC LsmMvccTrx::delete_record(Table *table, Record &record) -{ - return table->delete_record_with_trx(record, this); -} +RC LsmMvccTrx::delete_record(Table *table, Record &record) { return table->delete_record_with_trx(record, this); } RC LsmMvccTrx::update_record(Table *table, Record &old_record, Record &new_record) { @@ -63,12 +59,10 @@ RC LsmMvccTrx::commit() return trx_->commit(); } -RC LsmMvccTrx::rollback() -{ - return trx_->rollback(); -} +RC LsmMvccTrx::rollback() { return trx_->rollback(); } /** * 实际没有使用 */ RC LsmMvccTrx::redo(Db *, const LogEntry &) { return RC::SUCCESS; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/trx/lsm_mvcc_trx.h b/src/observer/storage/trx/lsm_mvcc_trx.h index 881eec08d..65bdf86f7 100644 --- a/src/observer/storage/trx/lsm_mvcc_trx.h +++ b/src/observer/storage/trx/lsm_mvcc_trx.h @@ -16,6 +16,9 @@ See the Mulan PSL v2 for more details. */ #include "oblsm/include/ob_lsm_transaction.h" using namespace oceanbase; + +namespace oceanbase { + /** * @brief lsm-tree 存储引擎对应的事务管理器 */ @@ -77,4 +80,5 @@ class LsmMvccTrxLogReplayer : public LogReplayer virtual ~LsmMvccTrxLogReplayer() = default; RC replay(const LogEntry &) override { return RC::SUCCESS; } -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/trx/mvcc_trx.cpp b/src/observer/storage/trx/mvcc_trx.cpp index e9ee76ab5..a4e560893 100644 --- a/src/observer/storage/trx/mvcc_trx.cpp +++ b/src/observer/storage/trx/mvcc_trx.cpp @@ -18,6 +18,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/trx/mvcc_trx_log.h" #include "common/lang/algorithm.h" +namespace oceanbase { + MvccTrxKit::~MvccTrxKit() { vector tmp_trxes; @@ -31,10 +33,11 @@ MvccTrxKit::~MvccTrxKit() RC MvccTrxKit::init() { // 事务使用一些特殊的字段,放到每行记录中,表示行记录的可见性。 - fields_ = vector{ - // field_id in trx fields is invisible. - FieldMeta("__trx_xid_begin", AttrType::INTS, 0 /*attr_offset*/, 4 /*attr_len*/, false /*visible*/, -1/*field_id*/), - FieldMeta("__trx_xid_end", AttrType::INTS, 0 /*attr_offset*/, 4 /*attr_len*/, false /*visible*/, -2/*field_id*/)}; + fields_ = vector{// field_id in trx fields is invisible. + FieldMeta( + "__trx_xid_begin", AttrType::INTS, 0 /*attr_offset*/, 4 /*attr_len*/, false /*visible*/, -1 /*field_id*/), + FieldMeta( + "__trx_xid_end", AttrType::INTS, 0 /*attr_offset*/, 4 /*attr_len*/, false /*visible*/, -2 /*field_id*/)}; LOG_INFO("init mvcc trx kit done."); return RC::SUCCESS; @@ -99,11 +102,12 @@ LogReplayer *MvccTrxKit::create_log_replayer(Db &db, LogHandler &log_handler) //////////////////////////////////////////////////////////////////////////////// -MvccTrx::MvccTrx(MvccTrxKit &kit, LogHandler &log_handler) : Trx(TrxKit::Type::MVCC), trx_kit_(kit), log_handler_(log_handler) +MvccTrx::MvccTrx(MvccTrxKit &kit, LogHandler &log_handler) + : Trx(TrxKit::Type::MVCC), trx_kit_(kit), log_handler_(log_handler) {} -MvccTrx::MvccTrx(MvccTrxKit &kit, LogHandler &log_handler, int32_t trx_id) - : Trx(TrxKit::Type::MVCC), trx_kit_(kit), log_handler_(log_handler), trx_id_(trx_id) +MvccTrx::MvccTrx(MvccTrxKit &kit, LogHandler &log_handler, int32_t trx_id) + : Trx(TrxKit::Type::MVCC), trx_kit_(kit), log_handler_(log_handler), trx_id_(trx_id) { started_ = true; recovering_ = true; @@ -431,9 +435,9 @@ RC find_table(Db *db, const LogEntry &log_entry, Table *&table) RC MvccTrx::redo(Db *db, const LogEntry &log_entry) { - auto *trx_log_header = reinterpret_cast(log_entry.data()); - Table *table = nullptr; - RC rc = find_table(db, log_entry, table); + auto *trx_log_header = reinterpret_cast(log_entry.data()); + Table *table = nullptr; + RC rc = find_table(db, log_entry, table); if (OB_FAIL(rc)) { return rc; } @@ -468,3 +472,4 @@ RC MvccTrx::redo(Db *db, const LogEntry &log_entry) return RC::SUCCESS; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/trx/mvcc_trx.h b/src/observer/storage/trx/mvcc_trx.h index 8db7c5ba1..04c2e2c62 100644 --- a/src/observer/storage/trx/mvcc_trx.h +++ b/src/observer/storage/trx/mvcc_trx.h @@ -18,6 +18,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/trx/trx.h" #include "storage/trx/mvcc_trx_log.h" +namespace oceanbase { + class CLogManager; class LogHandler; class MvccTrxLogHandler; @@ -113,3 +115,4 @@ class MvccTrx : public Trx bool recovering_ = false; OperationSet operations_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/trx/mvcc_trx_log.cpp b/src/observer/storage/trx/mvcc_trx_log.cpp index abb4e7ba1..cc4edd0ad 100644 --- a/src/observer/storage/trx/mvcc_trx_log.cpp +++ b/src/observer/storage/trx/mvcc_trx_log.cpp @@ -23,6 +23,8 @@ See the Mulan PSL v2 for more details. */ using namespace common; +namespace oceanbase { + string MvccTrxLogOperation::to_string() const { string ret = std::to_string(index()) + ":"; @@ -108,7 +110,7 @@ RC MvccTrxLogHandler::commit(int32_t trx_id, int32_t commit_trx_id) log_entry.commit_trx_id = commit_trx_id; LSN lsn = 0; - RC rc = log_handler_.append( + RC rc = log_handler_.append( lsn, LogModule::Id::TRANSACTION, span(reinterpret_cast(&log_entry), sizeof(log_entry))); if (OB_FAIL(rc)) { return rc; @@ -134,7 +136,7 @@ RC MvccTrxLogHandler::rollback(int32_t trx_id) //////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// MvccTrxLogReplayer::MvccTrxLogReplayer(Db &db, MvccTrxKit &trx_kit, LogHandler &log_handler) - : db_(db), trx_kit_(trx_kit), log_handler_(log_handler) + : db_(db), trx_kit_(trx_kit), log_handler_(log_handler) {} RC MvccTrxLogReplayer::replay(const LogEntry &entry) @@ -150,9 +152,9 @@ RC MvccTrxLogReplayer::replay(const LogEntry &entry) return RC::LOG_ENTRY_INVALID; } - auto *header = reinterpret_cast(entry.data()); - MvccTrx *trx = nullptr; - auto trx_iter = trx_map_.find(header->trx_id); + auto *header = reinterpret_cast(entry.data()); + MvccTrx *trx = nullptr; + auto trx_iter = trx_map_.find(header->trx_id); if (trx_iter == trx_map_.end()) { trx = static_cast(trx_kit_.create_trx(log_handler_, header->trx_id)); // trx = new MvccTrx(trx_kit_, log_handler_, header->trx_id); @@ -179,10 +181,11 @@ RC MvccTrxLogReplayer::on_done() /// 日志回放已经完成,需要把没有提交的事务,回滚掉 for (auto &pair : trx_map_) { MvccTrx *trx = pair.second; - trx->rollback(); // 恢复时的rollback,可能遇到之前已经回滚一半的事务又再次调用回滚的情况 + trx->rollback(); // 恢复时的rollback,可能遇到之前已经回滚一半的事务又再次调用回滚的情况 delete pair.second; } trx_map_.clear(); return RC::SUCCESS; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/trx/mvcc_trx_log.h b/src/observer/storage/trx/mvcc_trx_log.h index 0e670228e..4402bc6fb 100644 --- a/src/observer/storage/trx/mvcc_trx_log.h +++ b/src/observer/storage/trx/mvcc_trx_log.h @@ -21,6 +21,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/record/record.h" #include "storage/clog/log_replayer.h" +namespace oceanbase { + class LogHandler; class Table; class Db; @@ -162,3 +164,4 @@ class MvccTrxLogReplayer final : public LogReplayer ///< 事务ID到事务的映射。在重做结束后,如果还有未提交的事务,需要回滚。 unordered_map trx_map_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/trx/trx.cpp b/src/observer/storage/trx/trx.cpp index 040192755..40c45a310 100644 --- a/src/observer/storage/trx/trx.cpp +++ b/src/observer/storage/trx/trx.cpp @@ -23,7 +23,9 @@ See the Mulan PSL v2 for more details. */ #include "storage/trx/trx.h" #include "storage/trx/vacuous_trx.h" -TrxKit *TrxKit::create(const char *name, Db* db) +namespace oceanbase { + +TrxKit *TrxKit::create(const char *name, Db *db) { TrxKit *trx_kit = nullptr; if (common::is_blank(name) || 0 == strcasecmp(name, "vacuous")) { @@ -43,6 +45,7 @@ TrxKit *TrxKit::create(const char *name, Db* db) delete trx_kit; trx_kit = nullptr; } - + return trx_kit; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/trx/trx.h b/src/observer/storage/trx/trx.h index 5aa777d27..7c19cff2c 100644 --- a/src/observer/storage/trx/trx.h +++ b/src/observer/storage/trx/trx.h @@ -24,6 +24,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/record/record_manager.h" #include "storage/table/table.h" +namespace oceanbase { + /** * @defgroup Transaction * @brief 事务相关的内容 @@ -160,3 +162,4 @@ class Trx private: TrxKit::Type type_; }; +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/trx/vacuous_trx.cpp b/src/observer/storage/trx/vacuous_trx.cpp index 737f243b7..fec3a5f01 100644 --- a/src/observer/storage/trx/vacuous_trx.cpp +++ b/src/observer/storage/trx/vacuous_trx.cpp @@ -14,6 +14,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/trx/vacuous_trx.h" +namespace oceanbase { + RC VacuousTrxKit::init() { return RC::SUCCESS; } const vector *VacuousTrxKit::trx_fields() const { return nullptr; } @@ -43,3 +45,4 @@ RC VacuousTrx::commit() { return RC::SUCCESS; } RC VacuousTrx::rollback() { return RC::SUCCESS; } RC VacuousTrx::redo(Db *, const LogEntry &) { return RC::SUCCESS; } +} // namespace oceanbase \ No newline at end of file diff --git a/src/observer/storage/trx/vacuous_trx.h b/src/observer/storage/trx/vacuous_trx.h index 92adde90f..c882e91e9 100644 --- a/src/observer/storage/trx/vacuous_trx.h +++ b/src/observer/storage/trx/vacuous_trx.h @@ -16,6 +16,8 @@ See the Mulan PSL v2 for more details. */ #include "storage/trx/trx.h" +namespace oceanbase { + /** * @brief Vacuous(真空的),顾名思义就是没有实现事务功能 */ @@ -63,4 +65,5 @@ class VacuousTrxLogReplayer : public LogReplayer virtual ~VacuousTrxLogReplayer() = default; RC replay(const LogEntry &) override { return RC::SUCCESS; } -}; \ No newline at end of file +}; +} // namespace oceanbase \ No newline at end of file