[FEAT MERGE] materialized view

Co-authored-by: suz-yang <suz.yang@foxmail.com>
Co-authored-by: leftgeek <1094669802@qq.com>
Co-authored-by: chimyue <chimyue@gmail.com>
This commit is contained in:
coolfishchen
2023-12-14 07:42:51 +00:00
committed by ob-robot
parent 0f946e55fb
commit f7cd32be94
257 changed files with 35700 additions and 4337 deletions

View File

@ -915,6 +915,196 @@ OB_SERIALIZE_MEMBER((ObDropResourceUnitArg, ObDDLArg),
unit_name_,
if_exist_);
bool ObMViewCompleteRefreshArg::is_valid() const
{
bool bret = OB_INVALID_TENANT_ID != exec_tenant_id_ &&
!based_schema_object_infos_.empty() &&
OB_INVALID_TENANT_ID != tenant_id_ &&
OB_INVALID_ID != table_id_;
for (int64_t i = 0; bret && i < based_schema_object_infos_.count(); ++i) {
const ObBasedSchemaObjectInfo &based_info = based_schema_object_infos_.at(i);
bret = (OB_INVALID_TENANT_ID == based_info.schema_tenant_id_ ||
tenant_id_ == based_info.schema_tenant_id_) &&
OB_INVALID_ID != based_info.schema_id_ &&
ObSchemaType::TABLE_SCHEMA == based_info.schema_type_ &&
OB_INVALID_VERSION != based_info.schema_version_;
}
return bret;
}
void ObMViewCompleteRefreshArg::reset()
{
tenant_id_ = OB_INVALID_TENANT_ID;
table_id_ = OB_INVALID_ID;
session_id_ = OB_INVALID_ID;
sql_mode_ = 0;
last_refresh_scn_.reset();
tz_info_.reset();
tz_info_wrap_.reset();
for (int64_t i = 0; i < ObNLSFormatEnum::NLS_MAX; ++i) {
nls_formats_[i].reset();
}
parent_task_id_ = 0;
allocator_.reset();
ObDDLArg::reset();
}
int ObMViewCompleteRefreshArg::assign(const ObMViewCompleteRefreshArg &other)
{
int ret = OB_SUCCESS;
if (this != &other) {
reset();
if (OB_FAIL(ObDDLArg::assign(other))) {
LOG_WARN("fail to assign ddl arg", KR(ret));
} else {
tenant_id_ = other.tenant_id_;
table_id_ = other.table_id_;
session_id_ = other.session_id_;
sql_mode_ = other.sql_mode_;
last_refresh_scn_ = other.last_refresh_scn_;
parent_task_id_ = other.parent_task_id_;
if (OB_FAIL(tz_info_.assign(other.tz_info_))) {
LOG_WARN("fail to assign tz info", KR(ret), "tz_info", other.tz_info_);
} else if (OB_FAIL(tz_info_wrap_.deep_copy(other.tz_info_wrap_))) {
LOG_WARN("fail to deep copy tz info wrap", KR(ret), "tz_info_wrap", other.tz_info_wrap_);
}
for (int64_t i = 0; OB_SUCC(ret) && i < ObNLSFormatEnum::NLS_MAX; i++) {
if (OB_FAIL(ob_write_string(allocator_, other.nls_formats_[i], nls_formats_[i]))) {
LOG_WARN("fail to deep copy nls format", KR(ret), K(i), "nls_format", other.nls_formats_[i]);
}
}
}
}
return ret;
}
OB_DEF_SERIALIZE(ObMViewCompleteRefreshArg)
{
int ret = OB_SUCCESS;
if (OB_UNLIKELY(!is_valid())) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid argument", KR(ret), KPC(this));
} else {
BASE_SER((, ObDDLArg));
LST_DO_CODE(OB_UNIS_ENCODE,
tenant_id_,
table_id_,
session_id_,
sql_mode_,
last_refresh_scn_,
tz_info_,
tz_info_wrap_);
OB_UNIS_ENCODE_ARRAY(nls_formats_, ObNLSFormatEnum::NLS_MAX);
}
if (OB_SUCC(ret)) {
LST_DO_CODE(OB_UNIS_ENCODE, parent_task_id_);
}
return ret;
}
OB_DEF_DESERIALIZE(ObMViewCompleteRefreshArg)
{
int ret = OB_SUCCESS;
reset();
int64_t nls_formats_count = -1;
ObString nls_formats[ObNLSFormatEnum::NLS_MAX];
BASE_DESER((, ObDDLArg));
LST_DO_CODE(OB_UNIS_DECODE,
tenant_id_,
table_id_,
session_id_,
sql_mode_,
last_refresh_scn_,
tz_info_,
tz_info_wrap_);
OB_UNIS_DECODE(nls_formats_count);
if (OB_SUCC(ret)) {
if (OB_UNLIKELY(ObNLSFormatEnum::NLS_MAX != nls_formats_count)) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("unexpected nls formats count", KR(ret), K(nls_formats_count));
}
OB_UNIS_DECODE_ARRAY(nls_formats, nls_formats_count);
for (int64_t i = 0; OB_SUCC(ret) && i < nls_formats_count; i++) {
if (OB_FAIL(ob_write_string(allocator_, nls_formats[i], nls_formats_[i]))) {
LOG_WARN("fail to deep copy nls format", KR(ret), K(i), K(nls_formats[i]));
}
}
}
if (OB_SUCC(ret)) {
LST_DO_CODE(OB_UNIS_DECODE, parent_task_id_);
}
return ret;
}
OB_DEF_SERIALIZE_SIZE(ObMViewCompleteRefreshArg)
{
int ret = OB_SUCCESS;
int64_t len = 0;
if (OB_UNLIKELY(!is_valid())) {
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid argument", KR(ret), KPC(this));
} else {
BASE_ADD_LEN((, ObDDLArg));
LST_DO_CODE(OB_UNIS_ADD_LEN,
tenant_id_,
table_id_,
session_id_,
sql_mode_,
last_refresh_scn_,
tz_info_,
tz_info_wrap_);
OB_UNIS_ADD_LEN_ARRAY(nls_formats_, ObNLSFormatEnum::NLS_MAX);
}
if (OB_SUCC(ret)) {
LST_DO_CODE(OB_UNIS_ADD_LEN, parent_task_id_);
}
if (OB_FAIL(ret)) {
len = -1;
}
return len;
}
OB_SERIALIZE_MEMBER(ObMViewCompleteRefreshRes,
task_id_,
trace_id_);
bool ObMViewRefreshInfo::is_valid() const
{
return OB_INVALID_ID != mview_table_id_ &&
refresh_scn_.is_valid() &&
OB_INVALID_TIMESTAMP != start_time_ &&
(!last_refresh_scn_.is_valid() || last_refresh_scn_ < refresh_scn_);
}
void ObMViewRefreshInfo::reset()
{
mview_table_id_ = OB_INVALID_ID;
last_refresh_scn_.reset();
refresh_scn_.reset();
start_time_ = OB_INVALID_TIMESTAMP;
is_mview_complete_refresh_ = false;
}
int ObMViewRefreshInfo::assign(const ObMViewRefreshInfo &other)
{
int ret = OB_SUCCESS;
if (this != &other) {
mview_table_id_ = other.mview_table_id_;
last_refresh_scn_ = other.last_refresh_scn_;
refresh_scn_ = other.refresh_scn_;
start_time_ = other.start_time_;
is_mview_complete_refresh_ = other.is_mview_complete_refresh_;
}
return ret;
}
OB_SERIALIZE_MEMBER(ObMViewRefreshInfo,
mview_table_id_,
last_refresh_scn_,
refresh_scn_,
start_time_,
is_mview_complete_refresh_);
/// pool
DEF_TO_STRING(ObCreateResourcePoolArg)
@ -1636,6 +1826,19 @@ DEF_TO_STRING(ObCreateVertialPartitionArg)
OB_SERIALIZE_MEMBER((ObCreateVertialPartitionArg, ObDDLArg),
vertical_partition_columns_);
OB_SERIALIZE_MEMBER(ObMVAdditionalInfo,
container_table_schema_,
mv_refresh_info_);
int ObMVAdditionalInfo::assign(const ObMVAdditionalInfo &other)
{
int ret = common::OB_SUCCESS;
OZ(container_table_schema_.assign(other.container_table_schema_));
OX(mv_refresh_info_ = other.mv_refresh_info_);
return ret;
}
bool ObCreateTableArg::is_valid() const
{
// index_arg_list can be empty
@ -1643,6 +1846,28 @@ bool ObCreateTableArg::is_valid() const
&& !schema_.get_table_name_str().empty();
}
int ObCreateTableArg::assign(const ObCreateTableArg &other)
{
int ret = OB_SUCCESS;
OZ(ObDDLArg::assign(other));
OX(if_not_exist_ = other.if_not_exist_);
OZ(schema_.assign(other.schema_));
OZ(index_arg_list_.assign(other.index_arg_list_));
OZ(foreign_key_arg_list_.assign(other.foreign_key_arg_list_));
OZ(constraint_list_.assign(other.constraint_list_));
OX(db_name_ = other.db_name_);
OX(last_replay_log_id_ = other.last_replay_log_id_);
OX(is_inner_ = other.is_inner_);
OZ(vertical_partition_arg_list_.assign(other.vertical_partition_arg_list_));
OZ(error_info_.assign(other.error_info_));
OX(is_alter_view_ = other.is_alter_view_);
OZ(sequence_ddl_arg_.assign(other.sequence_ddl_arg_));
OZ(dep_infos_.assign(other.dep_infos_));
OZ(mv_ainfo_.assign(other.mv_ainfo_));
return ret;
}
DEF_TO_STRING(ObCreateTableArg)
{
int64_t pos = 0;
@ -1677,7 +1902,8 @@ OB_SERIALIZE_MEMBER((ObCreateTableArg, ObDDLArg),
error_info_,
is_alter_view_,
sequence_ddl_arg_,
dep_infos_);
dep_infos_,
mv_ainfo_);
bool ObCreateTableArg::is_allow_when_upgrade() const
{
@ -2254,7 +2480,8 @@ OB_DEF_SERIALIZE(ObAlterTableArg)
foreign_key_checks_,
is_add_to_scheduler_,
inner_sql_exec_addr_,
local_session_var_);
local_session_var_,
mview_refresh_info_);
return ret;
}
@ -2344,7 +2571,8 @@ OB_DEF_DESERIALIZE(ObAlterTableArg)
foreign_key_checks_,
is_add_to_scheduler_,
inner_sql_exec_addr_,
local_session_var_);
local_session_var_,
mview_refresh_info_);
return ret;
}
@ -2387,7 +2615,8 @@ OB_DEF_SERIALIZE_SIZE(ObAlterTableArg)
foreign_key_checks_,
is_add_to_scheduler_,
inner_sql_exec_addr_,
local_session_var_);
local_session_var_,
mview_refresh_info_);
}
if (OB_FAIL(ret)) {
@ -2924,6 +3153,72 @@ DEF_TO_STRING(ObRenameIndexArg)
OB_SERIALIZE_MEMBER((ObRenameIndexArg, ObIndexArg), origin_index_name_, new_index_name_);
OB_SERIALIZE_MEMBER(ObCreateMLogArg::PurgeOptions,
purge_mode_,
start_datetime_expr_,
next_datetime_expr_,
exec_env_);
bool ObCreateMLogArg::is_valid() const
{
return (OB_INVALID_TENANT_ID != tenant_id_)
&& !database_name_.empty()
&& !table_name_.empty()
&& purge_options_.is_valid();
}
DEF_TO_STRING(ObCreateMLogArg)
{
int64_t pos = 0;
J_OBJ_START();
pos += ObDDLArg::to_string(buf + pos, buf_len - pos);
J_KV(K_(database_name),
K_(table_name),
K_(mlog_name),
K_(tenant_id),
K_(base_table_id),
K_(mlog_table_id),
K_(session_id),
K_(with_rowid),
K_(with_primary_key),
K_(with_sequence),
K_(include_new_values),
K_(purge_options),
K_(mlog_schema),
K_(store_columns),
K_(nls_date_format),
K_(nls_timestamp_format),
K_(nls_timestamp_tz_format),
K_(sql_mode));
J_OBJ_END();
return pos;
}
OB_SERIALIZE_MEMBER((ObCreateMLogArg, ObDDLArg),
database_name_,
table_name_,
mlog_name_,
tenant_id_,
base_table_id_,
mlog_table_id_,
session_id_,
with_rowid_,
with_primary_key_,
with_sequence_,
include_new_values_,
purge_options_,
mlog_schema_,
store_columns_,
nls_date_format_,
nls_timestamp_format_,
nls_timestamp_tz_format_,
sql_mode_);
OB_SERIALIZE_MEMBER(ObCreateMLogRes,
mlog_table_id_,
schema_version_,
task_id_);
bool ObCreateForeignKeyArg::is_valid() const
{
return ObIndexArg::is_valid() && !parent_table_.empty()
@ -5000,6 +5295,29 @@ bool ObUpdateIndexStatusArg::is_valid() const
&& status_ < INDEX_STATUS_MAX;
}
int ObUpdateMViewStatusArg::assign(const ObUpdateMViewStatusArg &other)
{
int ret = OB_SUCCESS;
if (this != &other) {
if (OB_FAIL(ObDDLArg::assign(other))) {
LOG_WARN("fail to assign ddl arg", KR(ret));
} else {
mview_table_id_ = other.mview_table_id_;
mv_available_flag_ = other.mv_available_flag_;
convert_status_ = other.convert_status_;
in_offline_ddl_white_list_ = other.in_offline_ddl_white_list_;
}
}
return ret;
}
bool ObUpdateMViewStatusArg::is_valid() const
{
return (OB_INVALID_ID != mview_table_id_)
&& (ObMVAvailableFlag::IS_MV_UNAVAILABLE == mv_available_flag_
|| ObMVAvailableFlag::IS_MV_AVAILABLE == mv_available_flag_);
}
OB_SERIALIZE_MEMBER((ObUpdateIndexStatusArg, ObDDLArg),
index_table_id_,
status_,
@ -5008,6 +5326,12 @@ OB_SERIALIZE_MEMBER((ObUpdateIndexStatusArg, ObDDLArg),
data_table_id_,
database_name_);
OB_SERIALIZE_MEMBER((ObUpdateMViewStatusArg, ObDDLArg),
mview_table_id_,
mv_available_flag_,
convert_status_,
in_offline_ddl_white_list_);
OB_SERIALIZE_MEMBER(ObMergeFinishArg, server_, frozen_version_);
OB_SERIALIZE_MEMBER(ObDebugSyncActionArg, reset_, clear_, action_);