remove get_method array from query range extraction

This commit is contained in:
obdev 2023-04-23 08:05:50 +00:00 committed by ob-robot
parent 2485b4b1be
commit dce925b7f0
12 changed files with 401 additions and 858 deletions

View File

@ -22,9 +22,9 @@ const uint64_t g_support_eio_maigc[] = {
0x5933893228167181,
0x6683221dd298cc23,
};
const int g_support_eio_maigc_num = sizeof(g_support_eio_maigc) / sizeof(g_support_eio_maigc[0]);
const int g_support_eio_maigc_num = sizeof(g_support_eio_maigc) / sizeof(g_support_eio_maigc[0]);
static int easy_magic_in_support_list(uint64_t magic)
{
int ret = 0;
@ -206,9 +206,9 @@ int net_send_negotiate_message(uint8_t negotiation_enable, int fd, uint64_t magi
char buf[MAX_SEND_LEN];
memset(buf, 0, sizeof(buf));
ret = easy_encode_negotiation_msg(&ne_msg, buf, MAX_SEND_LEN, &encode_len);
if (ret != EASY_OK) {
easy_error_log("easy encode negotiation msg failed!ret:%d, fd:%d, addr: %s", ret, fd, addr_str);
ret = easy_encode_negotiation_msg(&ne_msg, buf, MAX_SEND_LEN, &encode_len);
if (ret != EASY_OK) {
easy_error_log("easy encode negotiation msg failed!ret:%d, fd:%d, addr: %s", ret, fd, addr_str);
return ret;
}
@ -234,9 +234,9 @@ int net_send_negotiate_message(uint8_t negotiation_enable, int fd, uint64_t magi
return ret;
}
void net_consume_negotiation_msg(int fd, uint64_t magic)
{
void net_consume_negotiation_msg(int fd, uint64_t magic)
{
int ret = EASY_OK;
const int64_t recv_buf_len = 1 * 1024;
int rcv_bytes = 0;

View File

@ -777,7 +777,6 @@ int ObGranuleSplitter::get_query_range(ObExecContext &ctx,
int ret = OB_SUCCESS;
ObQueryRangeArray scan_ranges;
ObQueryRangeArray skip_scan_ranges;
ObGetMethodArray get_method;
ObPhysicalPlanCtx *plan_ctx = nullptr;
bool has_extract_query_range = false;
// 如果tsc有对应的query range,就预先抽取对应的query range
@ -809,7 +808,6 @@ int ObGranuleSplitter::get_query_range(ObExecContext &ctx,
ctx.get_allocator(),
ctx,
scan_ranges,
get_method,
ObBasicSessionInfo::create_dtc_params(ctx.get_my_session())))) {
LOG_WARN("failed to get scan ranges", K(ret));
} else if (OB_FAIL(tsc_pre_query_range.get_ss_tablet_ranges(
@ -841,7 +839,6 @@ int ObGranuleSplitter::get_query_range(ObExecContext &ctx,
ctx.get_allocator(),
ctx,
scan_ranges,
get_method,
ObBasicSessionInfo::create_dtc_params(ctx.get_my_session())))) {
LOG_WARN("failed to get scan ranges", K(ret));
} else if (OB_FAIL(tsc_pre_query_range.get_ss_tablet_ranges(

View File

@ -1030,7 +1030,6 @@ int ObTableScanOp::prepare_single_scan_range(int64_t group_idx)
int ret = OB_SUCCESS;
ObQueryRangeArray key_ranges;
ObQueryRangeArray ss_key_ranges;
ObGetMethodArray get_method;
ObPhysicalPlanCtx *plan_ctx = GET_PHY_PLAN_CTX(ctx_);
ObIAllocator &range_allocator = (table_rescan_allocator_ != nullptr ?
*table_rescan_allocator_ : ctx_.get_allocator());
@ -1061,7 +1060,6 @@ int ObTableScanOp::prepare_single_scan_range(int64_t group_idx)
ctx_,
key_ranges,
MY_INPUT.mbr_filters_,
get_method,
ObBasicSessionInfo::create_dtc_params(ctx_.get_my_session())))) {
LOG_WARN("failed to extract pre query ranges", K(ret));
} else if (!MY_CTDEF.pre_query_range_.is_contain_geo_filters() &&
@ -1070,7 +1068,6 @@ int ObTableScanOp::prepare_single_scan_range(int64_t group_idx)
range_allocator,
ctx_,
key_ranges,
get_method,
ObBasicSessionInfo::create_dtc_params(ctx_.get_my_session())))) {
LOG_WARN("failed to extract pre query ranges", K(ret));
} else if (OB_FAIL(MY_CTDEF.pre_query_range_.get_ss_tablet_ranges(range_allocator,

View File

@ -2316,33 +2316,14 @@ int ObSQLUtils::extract_pre_query_range(const ObQueryRange &pre_query_range,
ObIAllocator &allocator,
ObExecContext &exec_ctx,
ObQueryRangeArray &key_ranges,
ObGetMethodArray get_method,
const ObDataTypeCastParams &dtc_params)
{
int ret = OB_SUCCESS;
if (OB_LIKELY(!pre_query_range.need_deep_copy())) {
//对于大多数查询来说,query条件是非常规范和工整的,这种条件我们不需要拷贝进行graph的变化,可以直接提取
if (OB_FAIL(pre_query_range.get_tablet_ranges(allocator,
exec_ctx,
key_ranges,
get_method,
dtc_params))) {
LOG_WARN("fail to get tablet ranges", K(ret));
}
} else {
ObQueryRange final_query_range(allocator);
if (OB_FAIL(final_query_range.deep_copy(pre_query_range, true))) {
// MUST deep copy to make it thread safe
LOG_WARN("fail to create final query range", K(ret), K(pre_query_range));
} else if (OB_FAIL(final_query_range.final_extract_query_range(exec_ctx, dtc_params))) {
LOG_WARN("fail to final extract query range", K(ret), K(final_query_range));
} else if (OB_FAIL(final_query_range.get_tablet_ranges(key_ranges,
get_method,
dtc_params))) {
LOG_WARN("fail to get tablet ranges from query range", K(ret), K(final_query_range));
} else {
// do nothing
}
bool dummy_all_single_value_ranges = false;
if (OB_FAIL(pre_query_range.get_tablet_ranges(allocator, exec_ctx, key_ranges,
dummy_all_single_value_ranges,
dtc_params))) {
LOG_WARN("failed to get tablet ranges", K(ret));
}
return ret;
}
@ -2352,17 +2333,17 @@ int ObSQLUtils::extract_geo_query_range(const ObQueryRange &pre_query_range,
ObExecContext &exec_ctx,
ObQueryRangeArray &key_ranges,
ObMbrFilterArray &mbr_filters,
ObGetMethodArray get_method,
const ObDataTypeCastParams &dtc_params)
{
int ret = OB_SUCCESS;
bool dummy_all_single_value_ranges = false;
if (OB_LIKELY(!pre_query_range.need_deep_copy())) {
//对于大多数查询来说,query条件是非常规范和工整的,这种条件我们不需要拷贝进行graph的变化,可以直接提取
if (OB_FAIL(pre_query_range.get_tablet_ranges(allocator,
exec_ctx,
key_ranges,
get_method,
dtc_params))) {
if (OB_FAIL(pre_query_range.direct_get_tablet_ranges(allocator,
exec_ctx,
key_ranges,
dummy_all_single_value_ranges,
dtc_params))) {
LOG_WARN("fail to get tablet ranges", K(ret));
} else {
const MbrFilterArray &pre_filters = pre_query_range.get_mbr_filter();
@ -2380,7 +2361,7 @@ int ObSQLUtils::extract_geo_query_range(const ObQueryRange &pre_query_range,
} else if (OB_FAIL(final_query_range.final_extract_query_range(exec_ctx, dtc_params))) {
LOG_WARN("fail to final extract query range", K(ret), K(final_query_range));
} else if (OB_FAIL(final_query_range.get_tablet_ranges(key_ranges,
get_method,
dummy_all_single_value_ranges,
dtc_params))) {
LOG_WARN("fail to get tablet ranges from query range", K(ret), K(final_query_range));
} else {

View File

@ -53,7 +53,6 @@ class ObStmtHint;
struct ObTransformerCtx;
struct ObPreCalcExprFrameInfo;
typedef common::ObSEArray<common::ObNewRange *, 1> ObQueryRangeArray;
typedef common::ObSEArray<bool, 2, common::ModulePageAllocator, true> ObGetMethodArray;
struct ObExprConstraint;
typedef common::ObSEArray<common::ObSpatialMBR, 1> ObMbrFilterArray;
class ObSelectStmt;
@ -383,7 +382,6 @@ public:
common::ObIAllocator &allocator,
ObExecContext &exec_ctx,
ObQueryRangeArray &key_ranges,
ObGetMethodArray get_method,
const ObDataTypeCastParams &dtc_params);
static int extract_equal_pre_query_range(const ObQueryRange &pre_query_range,
@ -395,7 +393,6 @@ public:
ObExecContext &exec_ctx,
ObQueryRangeArray &key_ranges,
ObMbrFilterArray &mbr_filters,
ObGetMethodArray get_method,
const ObDataTypeCastParams &dtc_params);
static bool is_same_type(const ObExprResType &type1, const ObExprResType &type2);

View File

@ -3533,7 +3533,7 @@ int ObOptSelectivity::get_column_query_range(const OptSelectivityCtx &ctx,
ObIAllocator &allocator = ctx.get_allocator();
ObDataTypeCastParams dtc_params = ObBasicSessionInfo::create_dtc_params(ctx.get_session_info());
const ColumnItem* column_item = NULL;
ObGetMethodArray get_methods;
bool dummy_all_single_value_ranges = true;
if (OB_ISNULL(log_plan) || OB_ISNULL(exec_ctx) ||
OB_ISNULL(column_item = log_plan->get_column_item_by_id(table_id, column_id))) {
@ -3549,13 +3549,13 @@ int ObOptSelectivity::get_column_query_range(const OptSelectivityCtx &ctx,
params))) {
LOG_WARN("failed to preliminary extract query range", K(ret));
} else if (!query_range.need_deep_copy()) {
if (OB_FAIL(query_range.get_tablet_ranges(allocator, *exec_ctx, ranges,
get_methods, dtc_params))) {
if (OB_FAIL(query_range.direct_get_tablet_ranges(allocator, *exec_ctx, ranges,
dummy_all_single_value_ranges, dtc_params))) {
LOG_WARN("failed to get tablet ranges", K(ret));
}
} else if (OB_FAIL(query_range.final_extract_query_range(*exec_ctx, dtc_params))) {
LOG_WARN("failed to final extract query range", K(ret));
} else if (OB_FAIL(query_range.get_tablet_ranges(ranges, get_methods, dtc_params))) {
} else if (OB_FAIL(query_range.get_tablet_ranges(ranges, dummy_all_single_value_ranges, dtc_params))) {
LOG_WARN("failed to get tablet ranges", K(ret));
} else { /*do nothing*/ }
return ret;

View File

@ -6069,7 +6069,7 @@ OB_INLINE int ObQueryRange::gen_simple_get_range(const ObKeyPart &root,
ObIAllocator &allocator,
ObExecContext &exec_ctx,
ObQueryRangeArray &ranges,
ObGetMethodArray &get_methods,
bool &all_single_value_ranges,
const ObDataTypeCastParams &dtc_params) const
{
int ret = OB_SUCCESS;
@ -6164,8 +6164,8 @@ OB_INLINE int ObQueryRange::gen_simple_get_range(const ObKeyPart &root,
range->is_physical_rowid_range_ = contain_phy_rowid_key;
if (OB_FAIL(ranges.push_back(range))) {
LOG_WARN("push back range to array failed", K(ret));
} else if (OB_FAIL(get_methods.push_back(!always_false))) {
LOG_WARN("push back get method failed", K(ret));
} else if (always_false) {
all_single_value_ranges = false;
}
}
return ret;
@ -6372,7 +6372,7 @@ int ObQueryRange::store_range(ObNewRange *range,
bool is_get_range,
ObSearchState &search_state,
ObQueryRangeArray &ranges,
ObGetMethodArray &get_methods)
bool &all_single_value_ranges)
{
int ret = OB_SUCCESS;
bool is_duplicate = false;
@ -6392,8 +6392,8 @@ int ObQueryRange::store_range(ObNewRange *range,
if (OB_SUCC(ret) && !is_duplicate) {
if (OB_FAIL(ranges.push_back(range))) {
LOG_WARN("push back range failed", K(ret));
} else if (OB_FAIL(get_methods.push_back(is_get_range))) {
LOG_WARN("push back get_method failed", K(ret));
} else if(!is_get_range) {
all_single_value_ranges = false;
}
}
return ret;
@ -6402,7 +6402,7 @@ int ObQueryRange::store_range(ObNewRange *range,
int ObQueryRange::and_first_search(ObSearchState &search_state,
ObKeyPart *cur,
ObQueryRangeArray &ranges,
ObGetMethodArray &get_methods,
bool &all_single_value_ranges,
const ObDataTypeCastParams &dtc_params)
{
int ret = OB_SUCCESS;
@ -6414,7 +6414,7 @@ int ObQueryRange::and_first_search(ObSearchState &search_state,
ret = OB_INVALID_ARGUMENT;
LOG_WARN("invalid argument", K(ret), K_(search_state.start), K_(search_state.end), K(cur));
} else if (cur->is_in_key()) {
if (OB_FAIL(and_first_in_key(search_state, cur, ranges, get_methods, dtc_params))) {
if (OB_FAIL(and_first_in_key(search_state, cur, ranges, all_single_value_ranges, dtc_params))) {
LOG_WARN("failed to and in key range", K(ret));
}
} else {
@ -6472,7 +6472,7 @@ int ObQueryRange::and_first_search(ObSearchState &search_state,
if (OB_FAIL(SMART_CALL(and_first_search(search_state,
cur->and_next_,
ranges,
get_methods,
all_single_value_ranges,
dtc_params)))) {
} else {
search_state.depth_ = copy_depth;
@ -6506,7 +6506,7 @@ int ObQueryRange::and_first_search(ObSearchState &search_state,
copy_depth,
copy_produce_range,
ranges,
get_methods,
all_single_value_ranges,
cur->is_phy_rowid_key_part()))) {
LOG_WARN("failed to generate cur range", K(ret));
}
@ -6524,7 +6524,7 @@ int ObQueryRange::and_first_search(ObSearchState &search_state,
}
cur = cur->or_next_;
if (OB_SUCC(ret) &&
OB_FAIL(SMART_CALL(and_first_search(search_state, cur, ranges, get_methods, dtc_params)))) {
OB_FAIL(SMART_CALL(and_first_search(search_state, cur, ranges, all_single_value_ranges, dtc_params)))) {
LOG_WARN("failed to do and first search", K(ret));
}
}
@ -6534,7 +6534,7 @@ int ObQueryRange::and_first_search(ObSearchState &search_state,
int ObQueryRange::and_first_in_key(ObSearchState &search_state,
ObKeyPart *cur,
ObQueryRangeArray &ranges,
ObGetMethodArray &get_methods,
bool &all_single_value_ranges,
const ObDataTypeCastParams &dtc_params)
{
int ret = OB_SUCCESS;
@ -6581,7 +6581,7 @@ int ObQueryRange::and_first_in_key(ObSearchState &search_state,
if (OB_FAIL(SMART_CALL(and_first_search(search_state,
cur->and_next_,
ranges,
get_methods,
all_single_value_ranges,
dtc_params)))) {
LOG_WARN("failed to do and first search", K(ret));
} else {
@ -6594,7 +6594,7 @@ int ObQueryRange::and_first_in_key(ObSearchState &search_state,
copy_depth,
copy_produce_range,
ranges,
get_methods,
all_single_value_ranges,
cur->is_phy_rowid_key_part()))) {
LOG_WARN("failed to generate cur range", K(ret));
}
@ -6608,7 +6608,7 @@ int ObQueryRange::generate_cur_range(ObSearchState &search_state,
const int64_t copy_depth,
const bool copy_produce_range,
ObQueryRangeArray &ranges,
ObGetMethodArray &get_methods,
bool &all_single_value_ranges,
const bool is_phy_rowid_range)
{
int ret = OB_SUCCESS;
@ -6628,7 +6628,7 @@ int ObQueryRange::generate_cur_range(ObSearchState &search_state,
is_get_range,
search_state,
ranges,
get_methods))) {
all_single_value_ranges))) {
LOG_WARN("store range failed", K(ret));
} else {
/* reset search_state */
@ -6647,9 +6647,8 @@ int ObQueryRange::get_tablet_ranges(common::ObIAllocator &allocator,
const ObDataTypeCastParams &dtc_params) const
{
int ret = OB_SUCCESS;
ObGetMethodArray get_methods;
if (OB_LIKELY(!need_deep_copy())) {
if (OB_FAIL(get_tablet_ranges(allocator, exec_ctx, ranges, get_methods, dtc_params))) {
if (OB_FAIL(direct_get_tablet_ranges(allocator, exec_ctx, ranges, all_single_value_ranges, dtc_params))) {
LOG_WARN("get tablet ranges without deep copy failed", K(ret));
}
} else {
@ -6659,19 +6658,10 @@ int ObQueryRange::get_tablet_ranges(common::ObIAllocator &allocator,
LOG_WARN("deep copy query range failed", K(ret));
} else if (OB_FAIL(tmp_query_range.final_extract_query_range(exec_ctx, dtc_params))) {
LOG_WARN("final extract query range failed", K(ret));
} else if (OB_FAIL(tmp_query_range.get_tablet_ranges(ranges, get_methods, dtc_params))) {
} else if (OB_FAIL(tmp_query_range.get_tablet_ranges(ranges, all_single_value_ranges, dtc_params))) {
LOG_WARN("get tablet range with deep copy failed", K(ret));
}
}
if (OB_SUCC(ret)) {
int64_t N = get_methods.count();
all_single_value_ranges = true;
for (int64_t i = 0; all_single_value_ranges && i < N; ++i) {
if (!get_methods.at(i)) {
all_single_value_ranges = false;
}
}
}
return ret;
}
@ -6796,11 +6786,11 @@ int ObQueryRange::ObSearchState::init_search_state(int64_t column_count,
}
// @notice 调用这个接口之前必须调用need_deep_copy()来判断是否可以不用拷贝就进行final extract
int ObQueryRange::get_tablet_ranges(ObIAllocator &allocator,
ObExecContext &exec_ctx,
ObQueryRangeArray &ranges,
ObGetMethodArray &get_methods,
const ObDataTypeCastParams &dtc_params) const
int ObQueryRange::direct_get_tablet_ranges(ObIAllocator &allocator,
ObExecContext &exec_ctx,
ObQueryRangeArray &ranges,
bool &all_single_value_ranges,
const ObDataTypeCastParams &dtc_params) const
{
int ret = OB_SUCCESS;
if (OB_UNLIKELY(table_graph_.key_part_head_->is_always_true() ||
@ -6811,20 +6801,20 @@ int ObQueryRange::get_tablet_ranges(ObIAllocator &allocator,
LOG_WARN("get true_or_false range failed", K(ret));
} else if (OB_FAIL(ranges.push_back(range))) {
LOG_WARN("push back range failed", K(ret));
} else if (OB_FAIL(get_methods.push_back(is_get_range))) {
LOG_WARN("push back get_method failed", K(ret));
} else {}
} else if (!is_get_range) {
all_single_value_ranges = false;
}
} else if (OB_LIKELY(table_graph_.is_precise_get_)) {
if (OB_FAIL(gen_simple_get_range(*table_graph_.key_part_head_,
allocator,
exec_ctx,
ranges,
get_methods,
all_single_value_ranges,
dtc_params))) {
LOG_WARN("gen simple get range failed", K(ret));
}
} else {
OZ(gen_simple_scan_range(allocator, exec_ctx, ranges, get_methods, dtc_params));
OZ(gen_simple_scan_range(allocator, exec_ctx, ranges, all_single_value_ranges, dtc_params));
}
return ret;
}
@ -6885,7 +6875,7 @@ OB_NOINLINE int ObQueryRange::gen_skip_scan_range(ObIAllocator &allocator,
OB_NOINLINE int ObQueryRange::gen_simple_scan_range(ObIAllocator &allocator,
ObExecContext &exec_ctx,
ObQueryRangeArray &ranges,
ObGetMethodArray &get_methods,
bool &all_single_value_ranges,
const ObDataTypeCastParams &dtc_params) const
{
int ret = OB_SUCCESS;
@ -6910,8 +6900,8 @@ OB_NOINLINE int ObQueryRange::gen_simple_scan_range(ObIAllocator &allocator,
LOG_WARN("generate single range failed", K(ret));
} else if (OB_FAIL(ranges.push_back(range))) {
LOG_WARN("push back range to array failed", K(ret));
} else if (OB_FAIL(get_methods.push_back(is_get_range))) {
LOG_WARN("push back get method to array failed", K(ret));
} else if (!is_get_range) {
all_single_value_ranges = false;
}
return ret;
}
@ -7089,7 +7079,7 @@ inline int ObQueryRange::get_single_key_value(const ObKeyPart *key,
#undef CAST_VALUE_TYPE
OB_NOINLINE int ObQueryRange::get_tablet_ranges(ObQueryRangeArray &ranges,
ObGetMethodArray &get_methods,
bool &all_single_value_ranges,
const ObDataTypeCastParams &dtc_params)
{
int ret = OB_SUCCESS;
@ -7097,7 +7087,7 @@ OB_NOINLINE int ObQueryRange::get_tablet_ranges(ObQueryRangeArray &ranges,
int64_t query_range_mem_usage = 0;
ObSearchState search_state(allocator_);
ranges.reset();
get_methods.reset();
all_single_value_ranges = true;
ObKeyPart *head_key = NULL;
if (OB_UNLIKELY(CAN_READ != state_)) {
ret = OB_ERR_UNEXPECTED;
@ -7117,9 +7107,9 @@ OB_NOINLINE int ObQueryRange::get_tablet_ranges(ObQueryRangeArray &ranges,
LOG_WARN("generate true_or_false range failed", K(ret));
} else if (OB_FAIL(ranges.push_back(range))) {
LOG_WARN("push back range failed", K(ret));
} else if (OB_FAIL(get_methods.push_back(is_get_range))) {
LOG_WARN("push back get_method failed", K(ret));
} else {}
} else if (!is_get_range) {
all_single_value_ranges = false;
}
} else if (OB_FAIL(search_state.init_search_state(column_count_, false,
head_key->is_in_key() ? head_key->in_keypart_->table_id_ : head_key->id_.table_id_))) {
LOG_WARN("failed to init search state", K(ret));
@ -7136,7 +7126,7 @@ OB_NOINLINE int ObQueryRange::get_tablet_ranges(ObQueryRangeArray &ranges,
} else if (OB_FAIL(SMART_CALL(and_first_search(search_state,
head_key,
ranges,
get_methods,
all_single_value_ranges,
dtc_params)))) {
LOG_WARN("and first search failed", K(ret));
}

View File

@ -414,14 +414,14 @@ public:
// This function can not be used untill physical plan is opened.
virtual int get_tablet_ranges(ObQueryRangeArray &ranges,
ObGetMethodArray &get_methods,
bool &all_single_value_ranges,
const common::ObDataTypeCastParams &dtc_params);
int get_tablet_ranges(common::ObIAllocator &allocator,
ObExecContext &exec_ctx,
ObQueryRangeArray &ranges,
ObGetMethodArray &get_methods,
const common::ObDataTypeCastParams &dtc_params) const;
int direct_get_tablet_ranges(common::ObIAllocator &allocator,
ObExecContext &exec_ctx,
ObQueryRangeArray &ranges,
bool &all_single_value_ranges,
const common::ObDataTypeCastParams &dtc_params) const;
int get_ss_tablet_ranges(common::ObIAllocator &allocator,
ObExecContext &exec_ctx,
ObQueryRangeArray &ss_ranges,
@ -510,14 +510,6 @@ public:
bool is_contain_geo_filters() const { return contain_geo_filters_; }
private:
// @brief this function to initialize query range context
// @param range_columns[in], columns group with the range order
// @return if success, return OB_SUCCESS
int inner_get_tablet_ranges(common::ObIAllocator &allocator,
const ParamsIArray &params,
ObQueryRangeArray &ranges,
ObGetMethodArray &get_methods,
const common::ObDataTypeCastParams &dtc_params) const;
int init_query_range_ctx(common::ObIAllocator &allocator,
const ColumnIArray &range_columns,
ObExecContext *exec_ctx,
@ -762,18 +754,18 @@ private:
int and_first_search(ObSearchState &search_state,
ObKeyPart *cur,
ObQueryRangeArray &ranges,
ObGetMethodArray &get_methods,
bool &all_single_value_ranges,
const common::ObDataTypeCastParams &dtc_params);
int and_first_in_key(ObSearchState &search_state,
ObKeyPart *cur,
ObQueryRangeArray &ranges,
ObGetMethodArray &get_methods,
bool &all_single_value_ranges,
const ObDataTypeCastParams &dtc_params);
int generate_cur_range(ObSearchState &search_state,
const int64_t copy_depth,
const bool copy_produce_range,
ObQueryRangeArray &ranges,
ObGetMethodArray &get_methods,
bool &all_single_value_ranges,
const bool is_phy_rowid_range);
inline int generate_single_range(ObSearchState &search_state,
int64_t column_num,
@ -786,7 +778,7 @@ private:
bool is_get_range,
ObSearchState &search_state,
ObQueryRangeArray &ranges,
ObGetMethodArray &get_methods);
bool &all_single_value_ranges);
int alloc_empty_key_part(ObKeyPart *&out_key_part);
int alloc_full_key_part(ObKeyPart *&out_key_part);
int deep_copy_range_graph(ObKeyPart *src, ObKeyPart *&dest);
@ -834,12 +826,12 @@ private:
common::ObIAllocator &allocator,
ObExecContext &exec_ctx,
ObQueryRangeArray &ranges,
ObGetMethodArray &get_methods,
bool &all_single_value_ranges,
const common::ObDataTypeCastParams &dtc_params) const;
int gen_simple_scan_range(common::ObIAllocator &allocator,
ObExecContext &exec_ctx,
ObQueryRangeArray &ranges,
ObGetMethodArray &get_methods,
bool &all_single_value_ranges,
const common::ObDataTypeCastParams &dtc_params) const;
const ObKeyPart* get_ss_key_part_head() const;

View File

@ -28,14 +28,13 @@ namespace sql
struct ColumnItem;
typedef common::ObSEArray<common::ObNewRange *, 1> ObQueryRangeArray;
typedef common::ObSEArray<common::ObNewRange, 4, common::ModulePageAllocator, true> ObRangesArray;
typedef common::ObSEArray<bool, 2, common::ModulePageAllocator, true> ObGetMethodArray;
typedef common::ObSEArray<ColumnItem, 16, common::ModulePageAllocator, true> ColumnArray;
class ObQueryRangeProvider
{
public:
virtual int get_tablet_ranges(ObQueryRangeArray &ranges,
ObGetMethodArray &get_methods,
bool &all_single_value_ranges,
const common::ObDataTypeCastParams &dtc_params) = 0;
// to string

View File

@ -198,10 +198,10 @@ public:
ParamsIArray &params,
const char *condition,
const char *except_range,
ObGetMethodArray &except_get_methods)
bool except_all_single_value_ranges)
{
ObQueryRangeArray ranges;
ObGetMethodArray get_methods;
bool all_single_value_ranges = true;
ObQueryRange enc_query_range;
ObQueryRange dec_query_range1;
ObQueryRange dec_query_range2;
@ -228,37 +228,31 @@ public:
OK(dec_query_range2.deserialize(buf, data_len, pos));
ASSERT_EQ(0, strcmp(to_cstring(dec_query_range1), to_cstring(dec_query_range2)));
_OB_LOG(INFO, "serialize_size = %ld\n", dec_query_range1.get_serialize_size());
OK(dec_query_range1.get_tablet_ranges(ranges, get_methods, dtc_params));
OK(dec_query_range1.get_tablet_ranges(ranges, all_single_value_ranges, dtc_params));
} else {
OK(dec_query_range1.get_tablet_ranges(allocator, exec_ctx_, ranges, get_methods, NULL));
OK(dec_query_range1.get_tablet_ranges(allocator, exec_ctx_, ranges, all_single_value_ranges, NULL));
}
_OB_LOG(INFO, "ranges: %s, except_range: %s", to_cstring(ranges), except_range);
ASSERT_EQ(0, strcmp(to_cstring(ranges), except_range));
ASSERT_EQ(get_methods.count(), except_get_methods.count());
for (int64_t j = 0; j < get_methods.count(); ++j) {
EXPECT_EQ(get_methods.at(j), except_get_methods.at(j));
}
EXPECT_EQ(all_single_value_ranges, except_all_single_value_ranges);
ranges.reset();
get_methods.reset();
OK(dec_query_range2.get_tablet_ranges(ranges, get_methods, dtc_params));
all_single_value_ranges = true;
OK(dec_query_range2.get_tablet_ranges(ranges, all_single_value_ranges, dtc_params));
_OB_LOG(DEBUG, "ranges: %s, except_range: %s", to_cstring(ranges), except_range);
ASSERT_EQ(0, strcmp(to_cstring(ranges), except_range));
ASSERT_EQ(get_methods.count(), except_get_methods.count());
for (int64_t j = 0; j < get_methods.count(); ++j) {
EXPECT_EQ(get_methods.at(j), except_get_methods.at(j));
}
EXPECT_EQ(all_single_value_ranges, except_all_single_value_ranges);
ranges.reset();
get_methods.reset();
all_single_value_ranges = true;
ObArray<ObRawExpr*> and_exprs;
split_and_condition(expr, and_exprs);
// OK(multi_query_range.preliminary_extract_query_range(range_columns, and_exprs, NULL));
// OK(multi_query_range.final_extract_query_range(params, NULL));
OK(multi_query_range.preliminary_extract_query_range(range_columns, and_exprs, dtc_params, &exec_ctx_));
OK(multi_query_range.final_extract_query_range(exec_ctx_, dtc_params));
OK(multi_query_range.get_tablet_ranges(ranges, get_methods, dtc_params));
OK(multi_query_range.get_tablet_ranges(ranges, all_single_value_ranges, dtc_params));
_OB_LOG(DEBUG, "and_exprs_count: %ld, ranges: %s, except_range: %s",
and_exprs.count(), to_cstring(ranges), except_range);
ASSERT_EQ(0, strcmp(to_cstring(ranges), except_range));
@ -492,7 +486,7 @@ void ObQueryRangeTest::get_query_range(const char *sql_expr, const char *&json_e
{
char var[100][100];
ObQueryRangeArray ranges;
ObGetMethodArray get_methods;
bool all_single_value_ranges = true;
ObRawExpr *expr = NULL;
ObArray<ColumnItem> range_columns;
ParamStore &params = exec_ctx_.get_physical_plan_ctx()->get_param_store_for_update();
@ -523,9 +517,9 @@ void ObQueryRangeTest::get_query_range(const char *sql_expr, const char *&json_e
ASSERT_EQ(0, strcmp(to_cstring(pre_query_range), to_cstring(query_range)));
if (query_range.need_deep_copy()) {
query_range.final_extract_query_range(exec_ctx_, NULL);
OK(query_range.get_tablet_ranges(ranges, get_methods, dtc_params));
OK(query_range.get_tablet_ranges(ranges, all_single_value_ranges, dtc_params));
} else {
OK(query_range.get_tablet_ranges(allocator, exec_ctx_, ranges, get_methods, NULL));
OK(query_range.get_tablet_ranges(allocator, exec_ctx_, ranges, all_single_value_ranges, NULL));
}
char buf[BUF_LEN];
@ -544,10 +538,7 @@ void ObQueryRangeTest::get_query_range(const char *sql_expr, const char *&json_e
databuff_printf(buf, BUF_LEN, pos, "is not min_to_max_range\n");
}
databuff_printf(buf, BUF_LEN, pos, "ranges.count() = %ld\n", ranges.count());
databuff_printf(buf, BUF_LEN, pos, "get_methods.count() = %ld\n", get_methods.count());
for (int64_t i = 0 ; i < get_methods.count() ; ++i) {
databuff_printf(buf, BUF_LEN, pos, "get_methods %ld: %d\n",i, get_methods.at(i));
}
databuff_printf(buf, BUF_LEN, pos, "all_single_value_ranges = %d\n", all_single_value_ranges);
for(int64_t i = 0 ; i < ranges.count() ; ++i) {
databuff_printf(buf, BUF_LEN, pos, "star_border_flag[%ld] = %d\n",i, ranges.at(i)->border_flag_.inclusive_start());
databuff_printf(buf, BUF_LEN, pos, "end_border_flag[%ld] = %d\n",i, ranges.at(i)->border_flag_.inclusive_end());
@ -565,7 +556,7 @@ void ObQueryRangeTest::get_query_range_filter(const char *sql_expr, const char *
{
char var[100][100];
ObQueryRangeArray ranges;
ObGetMethodArray get_methods;
bool all_single_value_ranges = true;
ObRawExpr *expr = NULL;
ObArray<ColumnItem> range_columns;
ParamStore &params = exec_ctx_.get_physical_plan_ctx()->get_param_store_for_update();
@ -588,9 +579,9 @@ void ObQueryRangeTest::get_query_range_filter(const char *sql_expr, const char *
bool flag = false;
if (query_range.need_deep_copy()) {
query_range.final_extract_query_range(exec_ctx_, NULL);
OK(query_range.get_tablet_ranges(ranges, get_methods, dtc_params));
OK(query_range.get_tablet_ranges(ranges, all_single_value_ranges, dtc_params));
} else {
OK(query_range.get_tablet_ranges(allocator, exec_ctx_, ranges, get_methods, NULL));
OK(query_range.get_tablet_ranges(allocator, exec_ctx_, ranges, all_single_value_ranges, NULL));
}
flag = is_min_to_max_range(ranges);
@ -600,10 +591,7 @@ void ObQueryRangeTest::get_query_range_filter(const char *sql_expr, const char *
databuff_printf(buf, BUF_LEN, pos, "is not min_to_max_range\n");
}
databuff_printf(buf, BUF_LEN, pos, "ranges.count() = %ld\n", ranges.count());
databuff_printf(buf, BUF_LEN, pos, "get_methods.count() = %ld\n", get_methods.count());
for (int64_t i = 0 ; i < get_methods.count() ; ++i) {
databuff_printf(buf, BUF_LEN, pos, "get_methods %ld: %d\n",i, get_methods.at(i));
}
databuff_printf(buf, BUF_LEN, pos, "all_single_value_ranges = %d\n", all_single_value_ranges);
for(int64_t i = 0 ; i < ranges.count() ; ++i) {
databuff_printf(buf, BUF_LEN, pos, "star_border_flag[%ld] = %d\n",i, ranges.at(i)->border_flag_.inclusive_start());
databuff_printf(buf, BUF_LEN, pos, "end_border_flag[%ld] = %d\n",i, ranges.at(i)->border_flag_.inclusive_end());
@ -621,7 +609,7 @@ void ObQueryRangeTest::get_query_range_collation(const char *sql_expr, const cha
{
char var[100][100];
ObQueryRangeArray ranges;
ObGetMethodArray get_methods;
bool all_single_value_ranges = true;
ParamStore &params = exec_ctx_.get_physical_plan_ctx()->get_param_store_for_update();
const ObDataTypeCastParams dtc_params;
char final_sql[100];
@ -642,7 +630,7 @@ void ObQueryRangeTest::get_query_range_collation(const char *sql_expr, const cha
OB_ASSERT(expr);
OK(query_range.preliminary_extract_query_range(range_columns, expr, dtc_params, &exec_ctx_));
OK(query_range.final_extract_query_range(exec_ctx_, NULL));
OK(query_range.get_tablet_ranges(ranges, get_methods, dtc_params));
OK(query_range.get_tablet_ranges(ranges, all_single_value_ranges, dtc_params));
bool flag = is_min_to_max_range(ranges);
if (flag) {
databuff_printf(buf, BUF_LEN, pos, "is min_to_max_range\n");
@ -650,10 +638,7 @@ void ObQueryRangeTest::get_query_range_collation(const char *sql_expr, const cha
databuff_printf(buf, BUF_LEN, pos, "is not min_to_max_range\n");
}
databuff_printf(buf, BUF_LEN, pos, "ranges.count() = %ld\n", ranges.count());
databuff_printf(buf, BUF_LEN, pos, "get_methods.count() = %ld\n", get_methods.count());
for (int64_t i = 0 ; i < get_methods.count() ; ++i) {
databuff_printf(buf, BUF_LEN, pos, "get_methods %ld: %d\n",i, get_methods.at(i));
}
databuff_printf(buf, BUF_LEN, pos, "all_single_value_ranges = %d\n", all_single_value_ranges);
for(int64_t i = 0 ; i < ranges.count() ; ++i) {
databuff_printf(buf, BUF_LEN, pos, "star_border_flag[%ld] = %d\n",i, ranges.at(i)->border_flag_.inclusive_start());
databuff_printf(buf, BUF_LEN, pos, "end_border_flag[%ld] = %d\n",i, ranges.at(i)->border_flag_.inclusive_end());
@ -804,7 +789,7 @@ TEST_F(ObQueryRangeTest, test_collation_type)
{
_OB_LOG(INFO, "test collation type");
ObQueryRangeArray ranges;
ObGetMethodArray get_methods;
bool all_single_value_ranges = true;
ObQueryRange query_range;
ParamStore &params = exec_ctx_.get_physical_plan_ctx()->get_param_store_for_update();
@ -817,7 +802,7 @@ TEST_F(ObQueryRangeTest, single_filed_key_whole_range1)
{
_OB_LOG(INFO, "single filed key and NULL condition");
ObQueryRangeArray ranges;
ObGetMethodArray get_methods;
bool all_single_value_ranges = true;
ObQueryRange query_range;
const ObDataTypeCastParams dtc_params;
@ -825,7 +810,7 @@ TEST_F(ObQueryRangeTest, single_filed_key_whole_range1)
params.reset();
OK(query_range.preliminary_extract_query_range(single_range_columns_, NULL, NULL, &exec_ctx_));
OK(query_range.final_extract_query_range(exec_ctx_, NULL));
OK(query_range.get_tablet_ranges(ranges, get_methods, dtc_params));
OK(query_range.get_tablet_ranges(ranges, all_single_value_ranges, dtc_params));
ASSERT_EQ(0, strcmp(to_cstring(ranges), "[{\"range\":\"table_id:3003,group_idx:0,(MIN;MAX)\"}]"));
}
@ -833,7 +818,7 @@ TEST_F(ObQueryRangeTest, single_filed_key_whole_range2)
{
_OB_LOG(INFO, "single filed key and empty condition array");
ObQueryRangeArray ranges;
ObGetMethodArray get_methods;
bool all_single_value_ranges = true;
ObQueryRange query_range;
ObArray<ObRawExpr*> exprs;
const ObDataTypeCastParams dtc_params;
@ -842,7 +827,7 @@ TEST_F(ObQueryRangeTest, single_filed_key_whole_range2)
params.reset();
OK(query_range.preliminary_extract_query_range(single_range_columns_, exprs, dtc_params, &exec_ctx_));
OK(query_range.final_extract_query_range(exec_ctx_, dtc_params));
OK(query_range.get_tablet_ranges(ranges, get_methods, dtc_params));
OK(query_range.get_tablet_ranges(ranges, all_single_value_ranges, dtc_params));
ASSERT_EQ(0, strcmp(to_cstring(ranges), "[{\"range\":\"table_id:3003,group_idx:0,(MIN;MAX)\"}]"));
}
@ -850,7 +835,7 @@ TEST_F(ObQueryRangeTest, double_filed_key_whole_range1)
{
_OB_LOG(INFO, "double filed key and NULL condition");
ObQueryRangeArray ranges;
ObGetMethodArray get_methods;
bool all_single_value_ranges = true;
ObQueryRange query_range;
const ObDataTypeCastParams dtc_params;
@ -858,7 +843,7 @@ TEST_F(ObQueryRangeTest, double_filed_key_whole_range1)
params.reset();
OK(query_range.preliminary_extract_query_range(double_range_columns_, NULL, dtc_params, &exec_ctx_));
OK(query_range.final_extract_query_range(exec_ctx_, dtc_params));
OK(query_range.get_tablet_ranges(ranges, get_methods, dtc_params));
OK(query_range.get_tablet_ranges(ranges, all_single_value_ranges, dtc_params));
ASSERT_EQ(0, strcmp(to_cstring(ranges), "[{\"range\":\"table_id:3003,group_idx:0,(MIN,MIN;MAX,MAX)\"}]"));
}
@ -866,7 +851,7 @@ TEST_F(ObQueryRangeTest, double_filed_key_whole_range2)
{
_OB_LOG(INFO, "double filed key and empty condition array");
ObQueryRangeArray ranges;
ObGetMethodArray get_methods;
bool all_single_value_ranges = true;
ObQueryRange query_range;
ObArray<ObRawExpr*> exprs;
const ObDataTypeCastParams dtc_params;
@ -875,7 +860,7 @@ TEST_F(ObQueryRangeTest, double_filed_key_whole_range2)
params.reset();
OK(query_range.preliminary_extract_query_range(double_range_columns_, exprs, dtc_params, &exec_ctx_));
OK(query_range.final_extract_query_range(exec_ctx_, dtc_params));
OK(query_range.get_tablet_ranges(ranges, get_methods, dtc_params));
OK(query_range.get_tablet_ranges(ranges, all_single_value_ranges, dtc_params));
ASSERT_EQ(0, strcmp(to_cstring(ranges), "[{\"range\":\"table_id:3003,group_idx:0,(MIN,MIN;MAX,MAX)\"}]"));
}
@ -885,7 +870,7 @@ TEST_F(ObQueryRangeTest, range_column_with_like)
//组织参数
ObArray<ColumnItem> single_range_columns;
ObQueryRangeArray ranges;
ObGetMethodArray get_methods;
bool all_single_value_ranges = true;
ObQueryRange query_range;
ObRawExpr *expr = NULL;
const ObDataTypeCastParams dtc_params;
@ -896,7 +881,7 @@ TEST_F(ObQueryRangeTest, range_column_with_like)
resolve_expr("f like 'abc%'", expr, single_range_columns, params, CS_TYPE_UTF8MB4_GENERAL_CI, CS_TYPE_UTF8MB4_GENERAL_CI);
OK(query_range.preliminary_extract_query_range(single_range_columns, expr, dtc_params, &exec_ctx_));
OK(query_range.final_extract_query_range(exec_ctx_, dtc_params));
OK(query_range.get_tablet_ranges(ranges, get_methods, dtc_params));
OK(query_range.get_tablet_ranges(ranges, all_single_value_ranges, dtc_params));
_OB_LOG(INFO, "range: %s", to_cstring(ranges));
query_range.reset();
@ -906,14 +891,14 @@ TEST_F(ObQueryRangeTest, range_column_with_like)
escape_expr->set_value(escape_obj);
OK(query_range.preliminary_extract_query_range(single_range_columns, expr, dtc_params, &exec_ctx_));
OK(query_range.final_extract_query_range(exec_ctx_, dtc_params));
OK(query_range.get_tablet_ranges(ranges, get_methods, dtc_params));
OK(query_range.get_tablet_ranges(ranges, all_single_value_ranges, dtc_params));
_OB_LOG(INFO, "range: %s", to_cstring(ranges));
query_range.reset();
resolve_condition(single_range_columns, "'a' like 'a'", expr);
OK(query_range.preliminary_extract_query_range(single_range_columns, expr, dtc_params, &exec_ctx_));
OK(query_range.final_extract_query_range(exec_ctx_, dtc_params));
OK(query_range.get_tablet_ranges(ranges, get_methods, dtc_params));
OK(query_range.get_tablet_ranges(ranges, all_single_value_ranges, dtc_params));
_OB_LOG(INFO, "range: %s", to_cstring(ranges));
}
@ -923,7 +908,7 @@ TEST_F(ObQueryRangeTest, range_column_with_like)
// //组织参数
// ObArray<ColumnItem> single_range_columns;
// ObQueryRangeArray ranges;
// ObGetMethodArray get_methods;
// bool all_single_value_ranges = true;
// ObQueryRange query_range;
// ObRawExpr *expr = NULL;
// const ObDataTypeCastParams dtc_params;
@ -936,7 +921,7 @@ TEST_F(ObQueryRangeTest, range_column_with_like)
// resolve_expr("a like ?", expr, single_range_columns, params_, CS_TYPE_UTF8MB4_GENERAL_CI, CS_TYPE_UTF8MB4_GENERAL_CI);
// OK(query_range.preliminary_extract_query_range(single_range_columns, expr, dtc_params));
// OK(query_range.final_extract_query_range(params_, dtc_params));
// OK(query_range.get_tablet_ranges(ranges, get_methods, dtc_params));
// OK(query_range.get_tablet_ranges(ranges, all_single_value_ranges, dtc_params));
// _OB_LOG(INFO, "range: %s", to_cstring(ranges));
// }
@ -952,7 +937,7 @@ TEST_F(ObQueryRangeTest, range_column_with_triple_key)
_OB_LOG(INFO, "%s", sql_str);
ObQueryRangeArray ranges;
ObGetMethodArray get_methods;
bool all_single_value_ranges = true;
ObQueryRange query_range;
ObRawExpr *expr = NULL;
int64_t param_array[600];
@ -980,7 +965,7 @@ TEST_F(ObQueryRangeTest, range_column_with_triple_key)
int64_t time2 = ObTimeUtility::current_time();
OK(query_range.final_extract_query_range(exec_ctx_, dtc_params));
int64_t time3 = ObTimeUtility::current_time();
OK(query_range.get_tablet_ranges(ranges, get_methods, dtc_params));
OK(query_range.get_tablet_ranges(ranges, all_single_value_ranges, dtc_params));
_OB_LOG(INFO, "preliminary_extract_query_range(us): %ld", time2 - time1);
_OB_LOG(INFO, "final_extract_query_range(us): %ld", time3 - time2);
//_OB_LOG(INFO, "ranges: %s", to_cstring(ranges));
@ -1033,9 +1018,9 @@ TEST_F(ObQueryRangeTest, simple_row_in)
_OB_LOG(INFO, "XXXX final: %s", to_cstring(query_range));
ObQueryRangeArray ranges;
ObGetMethodArray get_methods;
bool all_single_value_ranges = true;
OK(query_range.get_tablet_ranges(ranges, get_methods, dtc_params));
OK(query_range.get_tablet_ranges(ranges, all_single_value_ranges, dtc_params));
_OB_LOG(INFO, "ranges: %s", to_cstring(ranges));
// ASSERT_EQ(1, ranges.count());
// int64_t value = 0;
@ -1066,15 +1051,13 @@ TEST_F(ObQueryRangeTest, basic_test)
_OB_LOG(INFO, "start test: ((b = 6 and a < 5.5) or (a > 8 and b = 15))=> (a < 5 and b = 6) or (a > 8 and b = 15)");
ParamStore &params = exec_ctx_.get_physical_plan_ctx()->get_param_store_for_update();
params.reset();
ObGetMethodArray get_methods;
OK(get_methods.push_back(false));
OK(get_methods.push_back(false));
bool all_single_value_ranges = true;
except_result(double_range_columns_,
params,
"(b = 6 and a < 5) or (a > 8 and b = 15)",
"[{\"range\":\"table_id:3003,group_idx:0,({\"NULL\":\"NULL\"},MAX;{\"BIGINT\":5},MIN)\"}, "
"{\"range\":\"table_id:3003,group_idx:0,({\"BIGINT\":8},MAX;MAX,{\"BIGINT\":15})\"}]",
get_methods);
false);
query_range.reset();
}
@ -1102,7 +1085,7 @@ TEST_F(ObQueryRangeTest, single_key_cost_time)
for (int64_t i = 0; i < 1000; ++i) {
ObQueryRange final_query_range;
ObQueryRangeArray ranges;
ObGetMethodArray get_methods;
bool all_single_value_ranges = true;
int64_t deep_copy_beg = ObTimeUtility::current_time();
OK(final_query_range.deep_copy(pre_query_range));
int64_t deep_copy_end = ObTimeUtility::current_time();
@ -1110,7 +1093,7 @@ TEST_F(ObQueryRangeTest, single_key_cost_time)
OK(final_query_range.final_extract_query_range(exec_ctx_, dtc_params));
int64_t extract_end = ObTimeUtility::current_time();
extract_cost += extract_end - deep_copy_end;
OK(final_query_range.get_tablet_ranges(ranges, get_methods, dtc_params));
OK(final_query_range.get_tablet_ranges(ranges, all_single_value_ranges, dtc_params));
int64_t get_range_end = ObTimeUtility::current_time();
get_range_cost += get_range_end - extract_end;
}
@ -1122,18 +1105,18 @@ TEST_F(ObQueryRangeTest, single_key_cost_time)
get_range_cost = 0;
for (int64_t i = 0; i < 1000; ++i) {
ObQueryRangeArray ranges;
ObGetMethodArray get_methods;
bool all_single_value_ranges = true;
int64_t get_range_beg = ObTimeUtility::current_time();
ASSERT_TRUE(false == query_range2.need_deep_copy());
OK(query_range2.get_tablet_ranges(allocator_, exec_ctx_, ranges, get_methods, dtc_params));
OK(query_range2.get_tablet_ranges(allocator_, exec_ctx_, ranges, all_single_value_ranges, dtc_params));
get_range_cost += ObTimeUtility::current_time() - get_range_beg;
}
_OB_LOG(INFO, "get range without deep copy cost time: %f", (float)get_range_cost / (float)1000);
ObQueryRangeArray ranges2;
ObGetMethodArray get_methods2;
bool all_single_value_ranges = true;
ASSERT_TRUE(true == query_range2.is_precise_get());
OK(query_range2.get_tablet_ranges(allocator_, exec_ctx_, ranges2, get_methods2, dtc_params));
OB_LOG(INFO, "query range pure get", K(ranges2), K(get_methods2));
OK(query_range2.get_tablet_ranges(allocator_, exec_ctx_, ranges2, all_single_value_ranges, dtc_params));
OB_LOG(INFO, "query range pure get", K(ranges2), K(all_single_value_ranges));
int64_t REPEAT_TIMES = 1000000;
int64_t ti = 0;
@ -1157,7 +1140,7 @@ TEST_F(ObQueryRangeTest, single_key_cost_time)
//TEST_F(ObQueryRangeTest, insert_test)
//{
// ObQueryRangeArray ranges;
// ObGetMethodArray get_methods;
// bool all_single_value_ranges = true;
//
// ObArray<ObRawExpr*> exprs;
// ObArray<ObObjParam> params;

File diff suppressed because it is too large Load Diff

View File

@ -4,8 +4,7 @@
**filter count = 0**
is not min_to_max_range
ranges.count() = 1
get_methods.count() = 1
get_methods 0: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
count of rang columns = 1
@ -15,8 +14,7 @@ count of rang columns = 1
**filter count = 0**
is not min_to_max_range
ranges.count() = 1
get_methods.count() = 1
get_methods 0: 0
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
count of rang columns = 2
@ -26,8 +24,7 @@ count of rang columns = 2
**filter count = 0**
is not min_to_max_range
ranges.count() = 1
get_methods.count() = 1
get_methods 0: 0
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
count of rang columns = 3
@ -39,11 +36,7 @@ count of rang columns = 3
**filter count = 0**
is not min_to_max_range
ranges.count() = 4
get_methods.count() = 4
get_methods 0: 1
get_methods 1: 1
get_methods 2: 1
get_methods 3: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -59,11 +52,7 @@ count of rang columns = 1
**filter count = 0**
is not min_to_max_range
ranges.count() = 4
get_methods.count() = 4
get_methods 0: 0
get_methods 1: 0
get_methods 2: 0
get_methods 3: 1
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
star_border_flag[1] = 0
@ -79,11 +68,7 @@ count of rang columns = 2
**filter count = 0**
is not min_to_max_range
ranges.count() = 4
get_methods.count() = 4
get_methods 0: 0
get_methods 1: 0
get_methods 2: 0
get_methods 3: 0
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
star_border_flag[1] = 0
@ -101,9 +86,7 @@ count of rang columns = 3
**filter count = 0**
is not min_to_max_range
ranges.count() = 2
get_methods.count() = 2
get_methods 0: 1
get_methods 1: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -115,9 +98,7 @@ count of rang columns = 1
**filter count = 1**
is not min_to_max_range
ranges.count() = 2
get_methods.count() = 2
get_methods 0: 1
get_methods 1: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -129,9 +110,7 @@ count of rang columns = 2
**filter count = 1**
is not min_to_max_range
ranges.count() = 2
get_methods.count() = 2
get_methods 0: 0
get_methods 1: 0
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
star_border_flag[1] = 0
@ -145,8 +124,7 @@ count of rang columns = 3
**filter count = 1**
is not min_to_max_range
ranges.count() = 1
get_methods.count() = 1
get_methods 0: 0
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
count of rang columns = 1
@ -156,8 +134,7 @@ count of rang columns = 1
**filter count = 1**
is not min_to_max_range
ranges.count() = 1
get_methods.count() = 1
get_methods 0: 0
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
count of rang columns = 2
@ -167,8 +144,7 @@ count of rang columns = 2
**filter count = 1**
is not min_to_max_range
ranges.count() = 1
get_methods.count() = 1
get_methods 0: 0
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
count of rang columns = 2
@ -180,8 +156,7 @@ count of rang columns = 2
**filter count = 1**
is not min_to_max_range
ranges.count() = 1
get_methods.count() = 1
get_methods 0: 0
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
count of rang columns = 1
@ -191,8 +166,7 @@ count of rang columns = 1
**filter count = 1**
is not min_to_max_range
ranges.count() = 1
get_methods.count() = 1
get_methods 0: 0
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
count of rang columns = 2
@ -202,8 +176,7 @@ count of rang columns = 2
**filter count = 1**
is not min_to_max_range
ranges.count() = 1
get_methods.count() = 1
get_methods 0: 0
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
count of rang columns = 3
@ -215,10 +188,7 @@ count of rang columns = 3
**filter count = 1**
is not min_to_max_range
ranges.count() = 3
get_methods.count() = 3
get_methods 0: 1
get_methods 1: 1
get_methods 2: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -232,10 +202,7 @@ count of rang columns = 1
**filter count = 1**
is not min_to_max_range
ranges.count() = 3
get_methods.count() = 3
get_methods 0: 0
get_methods 1: 0
get_methods 2: 0
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
star_border_flag[1] = 0
@ -249,10 +216,7 @@ count of rang columns = 2
**filter count = 1**
is not min_to_max_range
ranges.count() = 3
get_methods.count() = 3
get_methods 0: 0
get_methods 1: 0
get_methods 2: 0
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
star_border_flag[1] = 0
@ -268,11 +232,7 @@ count of rang columns = 2
**filter count = 1**
is not min_to_max_range
ranges.count() = 4
get_methods.count() = 4
get_methods 0: 1
get_methods 1: 1
get_methods 2: 1
get_methods 3: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -288,11 +248,7 @@ count of rang columns = 1
**filter count = 1**
is not min_to_max_range
ranges.count() = 4
get_methods.count() = 4
get_methods 0: 0
get_methods 1: 0
get_methods 2: 0
get_methods 3: 0
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
star_border_flag[1] = 0
@ -308,11 +264,7 @@ count of rang columns = 2
**filter count = 1**
is not min_to_max_range
ranges.count() = 4
get_methods.count() = 4
get_methods 0: 0
get_methods 1: 0
get_methods 2: 0
get_methods 3: 0
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
star_border_flag[1] = 0
@ -330,11 +282,7 @@ count of rang columns = 2
**filter count = 0**
is not min_to_max_range
ranges.count() = 4
get_methods.count() = 4
get_methods 0: 1
get_methods 1: 1
get_methods 2: 1
get_methods 3: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -350,11 +298,7 @@ count of rang columns = 1
**filter count = 0**
is not min_to_max_range
ranges.count() = 4
get_methods.count() = 4
get_methods 0: 0
get_methods 1: 0
get_methods 2: 0
get_methods 3: 1
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
star_border_flag[1] = 0
@ -370,11 +314,7 @@ count of rang columns = 2
**filter count = 0**
is not min_to_max_range
ranges.count() = 4
get_methods.count() = 4
get_methods 0: 0
get_methods 1: 0
get_methods 2: 0
get_methods 3: 0
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
star_border_flag[1] = 0
@ -392,10 +332,7 @@ count of rang columns = 3
**filter count = 1**
is not min_to_max_range
ranges.count() = 3
get_methods.count() = 3
get_methods 0: 1
get_methods 1: 1
get_methods 2: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -409,10 +346,7 @@ count of rang columns = 1
**filter count = 2**
is not min_to_max_range
ranges.count() = 3
get_methods.count() = 3
get_methods 0: 1
get_methods 1: 1
get_methods 2: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -426,10 +360,7 @@ count of rang columns = 2
**filter count = 2**
is not min_to_max_range
ranges.count() = 3
get_methods.count() = 3
get_methods 0: 0
get_methods 1: 0
get_methods 2: 0
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
star_border_flag[1] = 0
@ -445,11 +376,7 @@ count of rang columns = 3
**filter count = 0**
is not min_to_max_range
ranges.count() = 4
get_methods.count() = 4
get_methods 0: 1
get_methods 1: 1
get_methods 2: 1
get_methods 3: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -465,11 +392,7 @@ count of rang columns = 1
**filter count = 1**
is not min_to_max_range
ranges.count() = 4
get_methods.count() = 4
get_methods 0: 1
get_methods 1: 1
get_methods 2: 1
get_methods 3: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -485,11 +408,7 @@ count of rang columns = 2
**filter count = 1**
is not min_to_max_range
ranges.count() = 4
get_methods.count() = 4
get_methods 0: 0
get_methods 1: 0
get_methods 2: 0
get_methods 3: 0
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
star_border_flag[1] = 0
@ -507,9 +426,7 @@ count of rang columns = 3
**filter count = 0**
is not min_to_max_range
ranges.count() = 2
get_methods.count() = 2
get_methods 0: 1
get_methods 1: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -521,9 +438,7 @@ count of rang columns = 1
**filter count = 1**
is not min_to_max_range
ranges.count() = 2
get_methods.count() = 2
get_methods 0: 1
get_methods 1: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -535,9 +450,7 @@ count of rang columns = 2
**filter count = 0**
is not min_to_max_range
ranges.count() = 2
get_methods.count() = 2
get_methods 0: 0
get_methods 1: 0
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
star_border_flag[1] = 0
@ -551,9 +464,7 @@ count of rang columns = 3
**filter count = 0**
is not min_to_max_range
ranges.count() = 2
get_methods.count() = 2
get_methods 0: 1
get_methods 1: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -565,9 +476,7 @@ count of rang columns = 1
**filter count = 1**
is not min_to_max_range
ranges.count() = 2
get_methods.count() = 2
get_methods 0: 1
get_methods 1: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -579,9 +488,7 @@ count of rang columns = 2
**filter count = 2**
is not min_to_max_range
ranges.count() = 2
get_methods.count() = 2
get_methods 0: 1
get_methods 1: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -595,8 +502,7 @@ count of rang columns = 3
**filter count = 1**
is not min_to_max_range
ranges.count() = 1
get_methods.count() = 1
get_methods 0: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
count of rang columns = 1
@ -606,8 +512,7 @@ count of rang columns = 1
**filter count = 2**
is not min_to_max_range
ranges.count() = 1
get_methods.count() = 1
get_methods 0: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
count of rang columns = 2
@ -617,8 +522,7 @@ count of rang columns = 2
**filter count = 2**
is not min_to_max_range
ranges.count() = 1
get_methods.count() = 1
get_methods 0: 0
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
count of rang columns = 3
@ -630,11 +534,7 @@ count of rang columns = 3
**filter count = 0**
is not min_to_max_range
ranges.count() = 4
get_methods.count() = 4
get_methods 0: 1
get_methods 1: 1
get_methods 2: 1
get_methods 3: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -650,11 +550,7 @@ count of rang columns = 1
**filter count = 0**
is not min_to_max_range
ranges.count() = 4
get_methods.count() = 4
get_methods 0: 1
get_methods 1: 1
get_methods 2: 1
get_methods 3: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -670,11 +566,7 @@ count of rang columns = 2
**filter count = 0**
is not min_to_max_range
ranges.count() = 4
get_methods.count() = 4
get_methods 0: 1
get_methods 1: 1
get_methods 2: 0
get_methods 3: 0
all_single_value_ranges = 0
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -692,9 +584,7 @@ count of rang columns = 3
**filter count = 0**
is not min_to_max_range
ranges.count() = 2
get_methods.count() = 2
get_methods 0: 1
get_methods 1: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -706,9 +596,7 @@ count of rang columns = 1
**filter count = 0**
is not min_to_max_range
ranges.count() = 2
get_methods.count() = 2
get_methods 0: 1
get_methods 1: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -720,9 +608,7 @@ count of rang columns = 2
**filter count = 0**
is not min_to_max_range
ranges.count() = 2
get_methods.count() = 2
get_methods 0: 1
get_methods 1: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -736,11 +622,7 @@ count of rang columns = 3
**filter count = 0**
is not min_to_max_range
ranges.count() = 4
get_methods.count() = 4
get_methods 0: 1
get_methods 1: 1
get_methods 2: 1
get_methods 3: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -756,11 +638,7 @@ count of rang columns = 1
**filter count = 0**
is not min_to_max_range
ranges.count() = 4
get_methods.count() = 4
get_methods 0: 1
get_methods 1: 1
get_methods 2: 1
get_methods 3: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -776,11 +654,7 @@ count of rang columns = 2
**filter count = 1**
is not min_to_max_range
ranges.count() = 4
get_methods.count() = 4
get_methods 0: 1
get_methods 1: 1
get_methods 2: 1
get_methods 3: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -798,11 +672,7 @@ count of rang columns = 3
**filter count = 0**
is not min_to_max_range
ranges.count() = 4
get_methods.count() = 4
get_methods 0: 1
get_methods 1: 1
get_methods 2: 1
get_methods 3: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -818,11 +688,7 @@ count of rang columns = 1
**filter count = 0**
is not min_to_max_range
ranges.count() = 4
get_methods.count() = 4
get_methods 0: 0
get_methods 1: 1
get_methods 2: 1
get_methods 3: 1
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
star_border_flag[1] = 1
@ -838,11 +704,7 @@ count of rang columns = 2
**filter count = 0**
is not min_to_max_range
ranges.count() = 4
get_methods.count() = 4
get_methods 0: 0
get_methods 1: 1
get_methods 2: 0
get_methods 3: 0
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
star_border_flag[1] = 1
@ -860,9 +722,7 @@ count of rang columns = 3
**filter count = 0**
is not min_to_max_range
ranges.count() = 2
get_methods.count() = 2
get_methods 0: 1
get_methods 1: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -874,9 +734,7 @@ count of rang columns = 1
**filter count = 0**
is not min_to_max_range
ranges.count() = 2
get_methods.count() = 2
get_methods 0: 0
get_methods 1: 1
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
star_border_flag[1] = 1
@ -888,9 +746,7 @@ count of rang columns = 2
**filter count = 0**
is not min_to_max_range
ranges.count() = 2
get_methods.count() = 2
get_methods 0: 0
get_methods 1: 0
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
star_border_flag[1] = 0
@ -904,8 +760,7 @@ count of rang columns = 3
**filter count = 0**
is min_to_max_range
ranges.count() = 1
get_methods.count() = 1
get_methods 0: 0
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
count of rang columns = 1
@ -915,8 +770,7 @@ count of rang columns = 1
**filter count = 0**
is min_to_max_range
ranges.count() = 1
get_methods.count() = 1
get_methods 0: 0
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
count of rang columns = 2
@ -926,8 +780,7 @@ count of rang columns = 2
**filter count = 0**
is min_to_max_range
ranges.count() = 1
get_methods.count() = 1
get_methods 0: 0
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
count of rang columns = 3
@ -939,10 +792,7 @@ count of rang columns = 3
**filter count = 0**
is not min_to_max_range
ranges.count() = 3
get_methods.count() = 3
get_methods 0: 1
get_methods 1: 1
get_methods 2: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -956,10 +806,7 @@ count of rang columns = 1
**filter count = 0**
is not min_to_max_range
ranges.count() = 3
get_methods.count() = 3
get_methods 0: 1
get_methods 1: 0
get_methods 2: 0
all_single_value_ranges = 0
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 0
@ -973,10 +820,7 @@ count of rang columns = 2
**filter count = 0**
is not min_to_max_range
ranges.count() = 3
get_methods.count() = 3
get_methods 0: 0
get_methods 1: 0
get_methods 2: 0
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
star_border_flag[1] = 0
@ -992,9 +836,7 @@ count of rang columns = 3
**filter count = 0**
is not min_to_max_range
ranges.count() = 2
get_methods.count() = 2
get_methods 0: 1
get_methods 1: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -1006,9 +848,7 @@ count of rang columns = 1
**filter count = 0**
is not min_to_max_range
ranges.count() = 2
get_methods.count() = 2
get_methods 0: 1
get_methods 1: 0
all_single_value_ranges = 0
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 0
@ -1020,9 +860,7 @@ count of rang columns = 2
**filter count = 0**
is not min_to_max_range
ranges.count() = 2
get_methods.count() = 2
get_methods 0: 0
get_methods 1: 0
all_single_value_ranges = 0
star_border_flag[0] = 0
end_border_flag[0] = 0
star_border_flag[1] = 0
@ -1036,11 +874,7 @@ count of rang columns = 3
**filter count = 0**
is not min_to_max_range
ranges.count() = 4
get_methods.count() = 4
get_methods 0: 1
get_methods 1: 1
get_methods 2: 1
get_methods 3: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -1056,11 +890,7 @@ count of rang columns = 1
**filter count = 0**
is not min_to_max_range
ranges.count() = 4
get_methods.count() = 4
get_methods 0: 1
get_methods 1: 1
get_methods 2: 1
get_methods 3: 0
all_single_value_ranges = 0
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -1076,11 +906,7 @@ count of rang columns = 2
**filter count = 0**
is not min_to_max_range
ranges.count() = 4
get_methods.count() = 4
get_methods 0: 1
get_methods 1: 1
get_methods 2: 0
get_methods 3: 0
all_single_value_ranges = 0
star_border_flag[0] = 1
end_border_flag[0] = 1
star_border_flag[1] = 1
@ -1098,8 +924,7 @@ count of rang columns = 3
**filter count = 0**
is not min_to_max_range
ranges.count() = 1
get_methods.count() = 1
get_methods 0: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
count of rang columns = 1
@ -1109,8 +934,7 @@ count of rang columns = 1
**filter count = 0**
is not min_to_max_range
ranges.count() = 1
get_methods.count() = 1
get_methods 0: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
count of rang columns = 2
@ -1120,8 +944,7 @@ count of rang columns = 2
**filter count = 1**
is not min_to_max_range
ranges.count() = 1
get_methods.count() = 1
get_methods 0: 1
all_single_value_ranges = 1
star_border_flag[0] = 1
end_border_flag[0] = 1
count of rang columns = 3