[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

@ -49,6 +49,8 @@ public:
bool is_heap_table_ddl() const { return is_heap_table_ddl_; }
void set_ddl_check_default_value(const bool flag) { is_ddl_check_default_value_bit_ = flag; }
bool is_ddl_check_default_value() const { return is_ddl_check_default_value_bit_; }
void set_mview_complete_refresh(const bool flag) { is_mview_complete_refresh_ = flag; }
bool is_mview_complete_refresh() const { return is_mview_complete_refresh_; }
TO_STRING_KV(K_(ddl_info));
OB_UNIS_VERSION(1);
public:
@ -56,7 +58,8 @@ public:
static const int64_t IS_TABLE_HIDDEN_BIT = 1;
static const int64_t IS_HEAP_TABLE_DDL_BIT = 1;
static const int64_t IS_DDL_CHECK_DEFAULT_VALUE_BIT = 1;
static const int64_t RESERVED_BIT = sizeof(int64_t) - IS_DDL_BIT - 2 * IS_TABLE_HIDDEN_BIT - IS_HEAP_TABLE_DDL_BIT - IS_DDL_CHECK_DEFAULT_VALUE_BIT;
static const int64_t IS_MVIEW_COMPLETE_REFRESH_BIT = 1;
static const int64_t RESERVED_BIT = sizeof(int64_t) - IS_DDL_BIT - 2 * IS_TABLE_HIDDEN_BIT - IS_HEAP_TABLE_DDL_BIT - IS_DDL_CHECK_DEFAULT_VALUE_BIT - IS_MVIEW_COMPLETE_REFRESH_BIT;
union {
uint64_t ddl_info_;
struct {
@ -65,6 +68,7 @@ public:
uint64_t is_dest_table_hidden_: IS_TABLE_HIDDEN_BIT;
uint64_t is_heap_table_ddl_: IS_HEAP_TABLE_DDL_BIT;
uint64_t is_ddl_check_default_value_bit_ : IS_DDL_CHECK_DEFAULT_VALUE_BIT;
uint64_t is_mview_complete_refresh_: IS_MVIEW_COMPLETE_REFRESH_BIT;
uint64_t reserved_bit : RESERVED_BIT;
};
};

View File

@ -602,6 +602,27 @@
}\
}
#define EXTRACT_INT_FIELD_FROM_NUMBER_MYSQL(result, column_name, field) \
if (OB_SUCC(ret)) \
{ \
common::number::ObNumber number_value; \
char buffer[common::number::ObNumber::MAX_NUMBER_ALLOC_BUFF_SIZE]; \
ObDataBuffer data_buffer(buffer, sizeof(buffer)); \
int64_t context_val = -1; \
if (OB_SUCCESS != (ret = (result).get_number(#column_name, number_value, data_buffer))) \
{ \
SQL_LOG(WARN, "fail to get column in row. ", "column_name", #column_name, K(ret)); \
} \
else if (!number_value.is_valid_int64(context_val)) { \
ret = OB_DATA_OUT_OF_RANGE; \
SQL_LOG(WARN, "failed to get int64 from number", K(number_value), K(ret)); \
} \
else \
{ \
field = context_val; \
}\
}
#define EXTRACT_NUMBER_FIELD_MYSQL(result, column_name, number_value) \
if (OB_SUCC(ret)) \
{ \
@ -1331,6 +1352,39 @@
}\
}
#define EXTRACT_TIMESTAMP_FIELD_TO_CLASS_MYSQL(result, column_name, obj, tz_info) \
if (OB_SUCC(ret)) \
{ \
int64_t timestamp_value = OB_INVALID_TIMESTAMP; \
if (OB_SUCCESS == (ret = (result).get_timestamp(#column_name, tz_info, timestamp_value))) \
{ \
(obj).set_##column_name(timestamp_value); \
} \
else \
{ \
SQL_LOG(WARN, "fail to get column in row. ", "column_name", #column_name, K(ret)); \
}\
}
#define EXTRACT_TIMESTAMP_FIELD_TO_CLASS_MYSQL_SKIP_RET(result, column_name, obj, tz_info) \
if (OB_SUCC(ret)) \
{ \
int64_t timestamp_value = OB_INVALID_TIMESTAMP; \
if (OB_SUCCESS == (ret = (result).get_timestamp(#column_name, tz_info, timestamp_value))) \
{ \
(obj).set_##column_name(timestamp_value); \
} \
else if (OB_ERR_NULL_VALUE == ret || OB_ERR_COLUMN_NOT_FOUND == ret) \
{ \
ret = OB_SUCCESS; \
(obj).set_##column_name(OB_INVALID_TIMESTAMP); \
} \
else \
{ \
SQL_LOG(WARN, "fail to get column in row. ", "column_name", #column_name, K(ret)); \
}\
}
// timestamp -> int64_t
#define EXTRACT_TIMESTAMP_FIELD_MYSQL(result, col_name, v) \

View File

@ -61,7 +61,7 @@ protected:
int get_errno() const { return errno_; }
public:
bool check_inner_stat() const;
private:
protected:
int errno_;
int64_t statement_count_;
sqlclient::ObISQLConnection *conn_;

View File

@ -569,6 +569,8 @@ const int64_t OB_MAX_SCHEMA_BUF_SIZE = 10L * 1024L * 1024L;//10MB
const int64_t OB_MAX_PART_LIST_SIZE = 10L * 1024L * 1024L;//10MB
const int64_t OB_MAX_TABLE_ID_LIST_SIZE = 10L * 1024L * 1024L;//10MB
const int64_t OB_MAX_SCHEDULER_JOB_NAME_LENGTH = 128;
enum ObServerRole
{
OB_INVALID = 0,
@ -609,8 +611,10 @@ const uint64_t OB_HIDDEN_FILE_ID_COLUMN_ID = 14; // used for external table
const uint64_t OB_HIDDEN_LINE_NUMBER_COLUMN_ID = 15; // used for external table
const int64_t OB_END_RESERVED_COLUMN_ID_NUM = 16;
const uint64_t OB_APP_MIN_COLUMN_ID = 16;
const uint64_t OB_ACTION_FLAG_COLUMN_ID = OB_ALL_MAX_COLUMN_ID
- OB_END_RESERVED_COLUMN_ID_NUM + 1; /* 65520 */
// materialized view log
const uint64_t OB_MLOG_SEQ_NO_COLUMN_ID = OB_ALL_MAX_COLUMN_ID
- OB_END_RESERVED_COLUMN_ID_NUM + 2; /* 65521 */
const uint64_t OB_MLOG_DML_TYPE_COLUMN_ID = OB_ALL_MAX_COLUMN_ID
@ -619,6 +623,13 @@ const uint64_t OB_MLOG_OLD_NEW_COLUMN_ID = OB_ALL_MAX_COLUMN_ID
- OB_END_RESERVED_COLUMN_ID_NUM + 4; /* 65523 */
const uint64_t OB_MLOG_ROWID_COLUMN_ID = OB_ALL_MAX_COLUMN_ID
- OB_END_RESERVED_COLUMN_ID_NUM + 5; /* 65524 */
const uint64_t OB_MIN_MLOG_SPECIAL_COLUMN_ID = OB_MLOG_SEQ_NO_COLUMN_ID;
const uint64_t OB_MAX_MLOG_SPECIAL_COLUMN_ID = OB_MLOG_ROWID_COLUMN_ID;
const char *const OB_MLOG_SEQ_NO_COLUMN_NAME = "SEQUENCE$$";
const char *const OB_MLOG_DML_TYPE_COLUMN_NAME = "DMLTYPE$$";
const char *const OB_MLOG_OLD_NEW_COLUMN_NAME = "OLD_NEW$$";
const char *const OB_MLOG_ROWID_COLUMN_NAME = "M_ROW$$";
const uint64_t OB_MAX_TMP_COLUMN_ID = OB_ALL_MAX_COLUMN_ID
- OB_END_RESERVED_COLUMN_ID_NUM;
@ -651,6 +662,9 @@ const int32_t OB_HIDDEN_LOGICAL_ROWID_INDEX_NAME_LENGTH = 11;
// internal index prefix
const char *const OB_INDEX_PREFIX = "__idx_";
// internal materialized view log prefix
const char *const OB_MLOG_PREFIX_MYSQL = "mlog$_";
const char *const OB_MLOG_PREFIX_ORACLE = "MLOG$_";
// internal user
const char *const OB_INTERNAL_USER = "__ob_server";
@ -832,8 +846,6 @@ const int64_t MAX_ORACLE_SA_LABEL_TYPE_LENGTH = 15;
// table id range definition //
////////////////////////////////////////////////////////////
const uint64_t OB_MIN_GENERATED_COLUMN_ID = 2000;
const uint64_t OB_MIN_MLOG_COLUMN_ID = 8000;
const uint64_t OB_MAX_MLOG_COLUMN_ID = 9999;
const uint64_t OB_MIN_MV_COLUMN_ID = 10000;
const uint64_t OB_MIN_SHADOW_COLUMN_ID = 32767;
const uint64_t OB_MAX_SYS_POOL_ID = 100;
@ -1630,9 +1642,21 @@ OB_INLINE uint64_t combine_two_ids(uint64_t high_id, uint64_t low_id)
const char *const OB_RANDOM_PRIMARY_ZONE = "RANDOM";
OB_INLINE bool is_mlog_reference_column(const uint64_t column_id)
{
return (common::OB_MLOG_ROWID_COLUMN_ID == column_id);
}
OB_INLINE bool is_mlog_special_column(const uint64_t column_id)
{
return (column_id >= common::OB_MIN_MLOG_SPECIAL_COLUMN_ID
&& column_id <= common::OB_MAX_MLOG_SPECIAL_COLUMN_ID);
}
OB_INLINE bool is_shadow_column(const uint64_t column_id)
{
return column_id > common::OB_MIN_SHADOW_COLUMN_ID;
return (column_id > common::OB_MIN_SHADOW_COLUMN_ID)
&& !is_mlog_special_column(column_id);
}
OB_INLINE bool is_bootstrap_resource_pool(const uint64_t resource_pool_id)

View File

@ -704,7 +704,7 @@ enum ObNLSFormatEnum {
NLS_DATE = 0,
NLS_TIMESTAMP,
NLS_TIMESTAMP_TZ,
NLS_MAX,
NLS_MAX, // does not support expansion due to error use in ob_rpc_struct.h
};
/**

View File

@ -1068,7 +1068,7 @@ PCODE_DEF(OB_FLUSH_LS_ARCHIVE, 0x1606)
// PCODE_DEF(OB_ACQUIRE_LS_TRANSFER_SCN, 0x1607)
// create materialized view log
// PCODE_DEF(OB_CREATE_MLOG, 0x1608)
PCODE_DEF(OB_CREATE_MLOG, 0x1608)
// 160A-160B for tenant clone
PCODE_DEF(OB_CLONE_TENANT, 0x160A)
@ -1085,7 +1085,7 @@ PCODE_DEF(OB_CREATE_TRIGGER_WITH_RES, 0x160D)
// PCODE_DEF(OB_SHARE_STORAGE_NET_THROT_SET_INGRESS, 0x1611)
// update materialized view table status
// PCODE_DEF(OB_UPDATE_MVIEW_TABLE_STATUS, 0x1612)
PCODE_DEF(OB_UPDATE_MVIEW_TABLE_STATUS, 0x1612)
// for direct load resource
// PCODE_DEF(OB_DIRECT_LOAD_RESOURCE, 0x1613)