[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:
@ -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;
|
||||
};
|
||||
};
|
||||
|
||||
54
deps/oblib/src/lib/mysqlclient/ob_mysql_result.h
vendored
54
deps/oblib/src/lib/mysqlclient/ob_mysql_result.h
vendored
@ -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) \
|
||||
|
||||
@ -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_;
|
||||
|
||||
30
deps/oblib/src/lib/ob_define.h
vendored
30
deps/oblib/src/lib/ob_define.h
vendored
@ -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)
|
||||
|
||||
@ -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
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@ -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)
|
||||
|
||||
Reference in New Issue
Block a user