Remove some rowkey functions (#17)
* Remove some rowkey functions Signed-off-by: disksing <i@disksing.com> * add comment about return code Signed-off-by: disksing <i@disksing.com>
This commit is contained in:
61
deps/oblib/src/common/object/ob_object.cpp
vendored
61
deps/oblib/src/common/object/ob_object.cpp
vendored
@ -638,67 +638,6 @@ int ObObj::check_collation_free_and_compare(const ObObj& other, int& cmp) const
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO : remove this function
|
|
||||||
int ObObj::check_collation_free_and_compare(const ObObj& other) const
|
|
||||||
{
|
|
||||||
int cmp = 0;
|
|
||||||
if (CS_TYPE_COLLATION_FREE != get_collation_type() && CS_TYPE_COLLATION_FREE != other.get_collation_type()) {
|
|
||||||
cmp = compare(other, CS_TYPE_INVALID);
|
|
||||||
} else if (is_null() || other.is_null() || is_min_value() || is_max_value() || other.is_min_value() ||
|
|
||||||
other.is_max_value()) {
|
|
||||||
cmp = ObObjCmpFuncs::compare_nullsafe(*this, other, CS_TYPE_INVALID);
|
|
||||||
} else if (OB_UNLIKELY(get_collation_type() != other.get_collation_type()) ||
|
|
||||||
CS_TYPE_COLLATION_FREE != get_collation_type() || get_type() != other.get_type() || !is_character_type()) {
|
|
||||||
LOG_ERROR("unexpected error, invalid argument", K(*this), K(other));
|
|
||||||
right_to_die_or_duty_to_live();
|
|
||||||
} else {
|
|
||||||
const int32_t lhs_len = get_val_len();
|
|
||||||
const int32_t rhs_len = other.get_val_len();
|
|
||||||
const int32_t cmp_len = std::min(lhs_len, rhs_len);
|
|
||||||
const bool is_oracle = lib::is_oracle_mode();
|
|
||||||
bool need_skip_tail_space = false;
|
|
||||||
cmp = memcmp(get_string_ptr(), other.get_string_ptr(), cmp_len);
|
|
||||||
// if two strings only have different trailing spaces:
|
|
||||||
// 1. in oracle varchar mode, the strings are considered to be different,
|
|
||||||
// 2. in oracle char mode, the strings are considered to be same,
|
|
||||||
// 3. in mysql mode, the strings are considered to be different.
|
|
||||||
if (is_oracle) {
|
|
||||||
if (0 == cmp) {
|
|
||||||
if (!is_varying_len_char_type()) {
|
|
||||||
need_skip_tail_space = true;
|
|
||||||
} else if (lhs_len != cmp_len || rhs_len != cmp_len) {
|
|
||||||
cmp = lhs_len > cmp_len ? 1 : -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
} else if (0 == cmp && (lhs_len != cmp_len || rhs_len != cmp_len)) {
|
|
||||||
need_skip_tail_space = true;
|
|
||||||
}
|
|
||||||
if (need_skip_tail_space) {
|
|
||||||
bool has_non_space = false;
|
|
||||||
const int32_t left_len = (lhs_len > cmp_len) ? lhs_len - cmp_len : rhs_len - cmp_len;
|
|
||||||
const char* ptr = (lhs_len > cmp_len) ? get_string_ptr() : other.get_string_ptr();
|
|
||||||
const unsigned char* uptr = reinterpret_cast<const unsigned char*>(ptr);
|
|
||||||
int32_t i = 0;
|
|
||||||
uptr += cmp_len;
|
|
||||||
for (; i < left_len; ++i) {
|
|
||||||
if (*(uptr + i) != ' ') {
|
|
||||||
has_non_space = true;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if (has_non_space) {
|
|
||||||
// special behavior of mysql: a\1 < a, but ab > a
|
|
||||||
if (*(uptr + i) < ' ') {
|
|
||||||
cmp = lhs_len > cmp_len ? -1 : 1;
|
|
||||||
} else {
|
|
||||||
cmp = lhs_len > cmp_len ? 1 : -1;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return cmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* ATTENTION:
|
* ATTENTION:
|
||||||
*
|
*
|
||||||
|
|||||||
1
deps/oblib/src/common/object/ob_object.h
vendored
1
deps/oblib/src/common/object/ob_object.h
vendored
@ -2041,7 +2041,6 @@ public:
|
|||||||
bool can_compare(const ObObj& other) const;
|
bool can_compare(const ObObj& other) const;
|
||||||
inline bool strict_equal(const ObObj& other) const;
|
inline bool strict_equal(const ObObj& other) const;
|
||||||
int check_collation_free_and_compare(const ObObj& other, int& cmp) const;
|
int check_collation_free_and_compare(const ObObj& other, int& cmp) const;
|
||||||
int check_collation_free_and_compare(const ObObj& other) const;
|
|
||||||
int compare(const ObObj& other, int& cmp) const;
|
int compare(const ObObj& other, int& cmp) const;
|
||||||
int compare(const ObObj& other) const;
|
int compare(const ObObj& other) const;
|
||||||
int compare(const ObObj& other, ObCollationType cs_type, int& cmp) const;
|
int compare(const ObObj& other, ObCollationType cs_type, int& cmp) const;
|
||||||
|
|||||||
34
deps/oblib/src/common/rowkey/ob_rowkey.h
vendored
34
deps/oblib/src/common/rowkey/ob_rowkey.h
vendored
@ -189,7 +189,9 @@ public:
|
|||||||
if (obj_ptr_ == rhs.obj_ptr_) {
|
if (obj_ptr_ == rhs.obj_ptr_) {
|
||||||
cmp = static_cast<int32_t>(obj_cnt_ - rhs.obj_cnt_);
|
cmp = static_cast<int32_t>(obj_cnt_ - rhs.obj_cnt_);
|
||||||
} else {
|
} else {
|
||||||
cmp = compare_prefix(rhs);
|
// Ignore return code because this version of compare does not have
|
||||||
|
// return code. The whole function will be removed later.
|
||||||
|
compare_prefix(rhs, cmp);
|
||||||
if (0 == cmp) {
|
if (0 == cmp) {
|
||||||
cmp = static_cast<int32_t>(obj_cnt_ - rhs.obj_cnt_);
|
cmp = static_cast<int32_t>(obj_cnt_ - rhs.obj_cnt_);
|
||||||
}
|
}
|
||||||
@ -227,36 +229,6 @@ public:
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO : remove this function
|
|
||||||
OB_INLINE int compare_prefix(const ObRowkey& rhs) const
|
|
||||||
{
|
|
||||||
int cmp = 0;
|
|
||||||
int lv = 0;
|
|
||||||
int rv = 0;
|
|
||||||
// TODO remove disgusting loop, useless max min judge
|
|
||||||
if (is_min_row()) {
|
|
||||||
lv = -1;
|
|
||||||
} else if (is_max_row()) {
|
|
||||||
lv = 1;
|
|
||||||
}
|
|
||||||
if (rhs.is_min_row()) {
|
|
||||||
rv = -1;
|
|
||||||
} else if (rhs.is_max_row()) {
|
|
||||||
rv = 1;
|
|
||||||
}
|
|
||||||
if (0 == lv && 0 == rv) {
|
|
||||||
int64_t i = 0;
|
|
||||||
int64_t cmp_cnt = std::min(obj_cnt_, rhs.obj_cnt_);
|
|
||||||
for (; i < cmp_cnt && 0 == cmp; ++i) {
|
|
||||||
// TODO remove collation free check
|
|
||||||
cmp = obj_ptr_[i].check_collation_free_and_compare(rhs.obj_ptr_[i]);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
cmp = lv - rv;
|
|
||||||
}
|
|
||||||
return cmp;
|
|
||||||
}
|
|
||||||
|
|
||||||
inline bool operator<(const ObRowkey& rhs) const
|
inline bool operator<(const ObRowkey& rhs) const
|
||||||
{
|
{
|
||||||
return compare(rhs) < 0;
|
return compare(rhs) < 0;
|
||||||
|
|||||||
Reference in New Issue
Block a user