From 49e502b4a1cce1e805fd78e2de40977c53919029 Mon Sep 17 00:00:00 2001 From: obdev Date: Wed, 27 Mar 2024 10:20:30 +0000 Subject: [PATCH] [multivalue index place holder]:add index type and multivalue column flag, ob table param add member --- src/share/schema/ob_schema_struct.h | 8 +++++++- src/share/schema/ob_table_dml_param.cpp | 19 ++++++++++++++++++- src/share/schema/ob_table_dml_param.h | 3 +++ src/share/schema/ob_table_param.cpp | 17 ++++++++++++++++- src/share/schema/ob_table_param.h | 1 + src/sql/resolver/ddl/ob_ddl_resolver.h | 5 ++++- 6 files changed, 49 insertions(+), 4 deletions(-) diff --git a/src/share/schema/ob_schema_struct.h b/src/share/schema/ob_schema_struct.h index 457d287a9d..235afd6b52 100755 --- a/src/share/schema/ob_schema_struct.h +++ b/src/share/schema/ob_schema_struct.h @@ -127,6 +127,8 @@ static const uint64_t OB_MIN_ID = 0;//used for lower_bound #define GENERATED_COLUMN_UDF_EXPR (INT64_C(1) << 20) #define UNUSED_COLUMN_FLAG (INT64_C(1) << 21) // check if the column is unused. #define GENERATED_DOC_ID_COLUMN_FLAG (INT64_C(1) << 22) +#define MULTIVALUE_INDEX_GENERATED_COLUMN_FLAG (INT64_C(1) << 23) // for multivalue index +#define MULTIVALUE_INDEX_GENERATED_ARRAY_COLUMN_FLAG (INT64_C(1) << 24) // for multivalue index //the high 32-bit flag isn't stored in __all_column #define GENERATED_DEPS_CASCADE_FLAG (INT64_C(1) << 32) @@ -317,11 +319,15 @@ enum ObIndexType INDEX_TYPE_FTS_DOC_ROWKEY_GLOBAL_LOCAL_STORAGE = 20, INDEX_TYPE_FTS_INDEX_GLOBAL_LOCAL_STORAGE = 21, INDEX_TYPE_FTS_DOC_WORD_GLOBAL_LOCAL_STORAGE = 22, + + // new index types for multivalue index + INDEX_TYPE_NORMAL_MULTIVALUE_LOCAL = 23, + INDEX_TYPE_UNIQUE_MULTIVALUE_LOCAL = 24, /* * Attention!!! when add new index type, * need update func ObSimpleTableSchemaV2::should_not_validate_data_index_ckm() */ - INDEX_TYPE_MAX = 23, + INDEX_TYPE_MAX = 25, }; // using type for index diff --git a/src/share/schema/ob_table_dml_param.cpp b/src/share/schema/ob_table_dml_param.cpp index bbf59d03b6..ec81b805ad 100644 --- a/src/share/schema/ob_table_dml_param.cpp +++ b/src/share/schema/ob_table_dml_param.cpp @@ -42,7 +42,10 @@ ObTableSchemaParam::ObTableSchemaParam(ObIAllocator &allocator) read_param_version_(0), read_info_(), cg_read_infos_(), - lob_inrow_threshold_(OB_DEFAULT_LOB_INROW_THRESHOLD) + lob_inrow_threshold_(OB_DEFAULT_LOB_INROW_THRESHOLD), + multivalue_col_id_(OB_INVALID_ID), + multivalue_arr_col_id_(OB_INVALID_ID), + data_table_rowkey_column_num_(0) { } @@ -71,6 +74,9 @@ void ObTableSchemaParam::reset() cg_read_infos_.reset(); read_param_version_ = 0; lob_inrow_threshold_ = OB_DEFAULT_LOB_INROW_THRESHOLD; + multivalue_col_id_ = OB_INVALID_ID; + multivalue_arr_col_id_ = OB_INVALID_ID; + data_table_rowkey_column_num_ =0 ; } int ObTableSchemaParam::convert(const ObTableSchema *schema) @@ -446,6 +452,9 @@ OB_DEF_SERIALIZE(ObTableSchemaParam) } } } + OB_UNIS_ENCODE(multivalue_col_id_); + OB_UNIS_ENCODE(multivalue_arr_col_id_); + OB_UNIS_ENCODE(data_table_rowkey_column_num_); return ret; } @@ -527,6 +536,10 @@ OB_DEF_DESERIALIZE(ObTableSchemaParam) } } } + + OB_UNIS_DECODE(multivalue_col_id_); + OB_UNIS_DECODE(multivalue_arr_col_id_); + OB_UNIS_DECODE(data_table_rowkey_column_num_); return ret; } @@ -568,6 +581,10 @@ OB_DEF_SERIALIZE_SIZE(ObTableSchemaParam) } } } + + OB_UNIS_ADD_LEN(multivalue_col_id_); + OB_UNIS_ADD_LEN(multivalue_arr_col_id_); + OB_UNIS_ADD_LEN(data_table_rowkey_column_num_); return len; } diff --git a/src/share/schema/ob_table_dml_param.h b/src/share/schema/ob_table_dml_param.h index ad28f5ccb7..05d257968d 100644 --- a/src/share/schema/ob_table_dml_param.h +++ b/src/share/schema/ob_table_dml_param.h @@ -114,6 +114,9 @@ private: storage::ObTableReadInfo read_info_; storage::ObFixedMetaObjArray cg_read_infos_; int64_t lob_inrow_threshold_; + uint64_t multivalue_col_id_; + uint64_t multivalue_arr_col_id_; + int64_t data_table_rowkey_column_num_; }; class ObTableDMLParam diff --git a/src/share/schema/ob_table_param.cpp b/src/share/schema/ob_table_param.cpp index 32991b9fb8..66ad531a25 100644 --- a/src/share/schema/ob_table_param.cpp +++ b/src/share/schema/ob_table_param.cpp @@ -625,7 +625,8 @@ ObTableParam::ObTableParam(ObIAllocator &allocator) parser_name_(), enable_lob_locator_v2_(false), is_spatial_index_(false), - is_fts_index_(false) + is_fts_index_(false), + is_multivalue_index_(false) { reset(); } @@ -653,6 +654,7 @@ void ObTableParam::reset() enable_lob_locator_v2_ = false; is_spatial_index_ = false; is_fts_index_ = false; + is_multivalue_index_ = false; } OB_DEF_SERIALIZE(ObTableParam) @@ -688,6 +690,9 @@ OB_DEF_SERIALIZE(ObTableParam) if (OB_SUCC(ret) && is_fts_index_) { OB_UNIS_ENCODE(parser_name_); } + if (OB_SUCC(ret)) { + OB_UNIS_ENCODE(is_multivalue_index_); + } return ret; } @@ -767,6 +772,11 @@ OB_DEF_DESERIALIZE(ObTableParam) LOG_WARN("Fail to ccopy parser name ", K(ret), K_(parser_name), K(tmp_parser_name)); } } + + if (OB_SUCC(ret)) { + LST_DO_CODE(OB_UNIS_DECODE, + is_multivalue_index_); + } return ret; } @@ -802,6 +812,11 @@ OB_DEF_SERIALIZE_SIZE(ObTableParam) if (OB_SUCC(ret) && is_fts_index_) { OB_UNIS_ADD_LEN(parser_name_); } + + if (OB_SUCC(ret)) { + LST_DO_CODE(OB_UNIS_ADD_LEN, + is_multivalue_index_); + } return len; } diff --git a/src/share/schema/ob_table_param.h b/src/share/schema/ob_table_param.h index b5d33e9de1..1fe05fe943 100644 --- a/src/share/schema/ob_table_param.h +++ b/src/share/schema/ob_table_param.h @@ -397,6 +397,7 @@ private: bool enable_lob_locator_v2_; bool is_spatial_index_; bool is_fts_index_; + bool is_multivalue_index_; }; } //namespace schema } //namespace share diff --git a/src/sql/resolver/ddl/ob_ddl_resolver.h b/src/sql/resolver/ddl/ob_ddl_resolver.h index 745b3dc10d..e8d9b20f93 100644 --- a/src/sql/resolver/ddl/ob_ddl_resolver.h +++ b/src/sql/resolver/ddl/ob_ddl_resolver.h @@ -110,7 +110,10 @@ public: enum INDEX_KEYNAME { NORMAL_KEY = 0, UNIQUE_KEY = 1, - SPATIAL_KEY = 2 + SPATIAL_KEY = 2, + FTS_KEY = 3, + MULTI_KEY = 4, + MULTI_UNIQUE_KEY = 5 }; enum COLUMN_NODE { COLUMN_REF_NODE = 0,