[bugfix] fix column equal encoder for same timestamp with different timezone

This commit is contained in:
saltonz 2025-01-06 07:19:14 +00:00 committed by ob-robot
parent 6c3224d9ee
commit dbc1956b5a
2 changed files with 2 additions and 16 deletions

View File

@ -107,12 +107,6 @@ int ObColumnEqualEncoder::traverse(bool &suitable)
precision = column_type_.get_stored_precision();
OB_ASSERT(precision != PRECISION_UNKNOWN_YET);
}
sql::ObExprBasicFuncs *basic_funcs = ObDatumFuncs::get_basic_func(
column_type_.get_type(), column_type_.get_collation_type(), column_type_.get_scale(),
lib::is_oracle_mode(), has_lob_header, precision);
ObCmpFunc cmp_func;
cmp_func.cmp_func_ = lib::is_oracle_mode()
? basic_funcs->null_last_cmp_ : basic_funcs->null_first_cmp_;
// get all exception row_ids
for (int64_t row_id = 0; row_id < rows_->count() && OB_SUCC(ret)
@ -120,7 +114,7 @@ int ObColumnEqualEncoder::traverse(bool &suitable)
const ObDatum &datum = ctx_->col_datums_->at(row_id);
const ObDatum &ref_datum = ref_ctx_->col_datums_->at(row_id);
bool equal = false;
if (OB_FAIL(is_datum_equal(datum, ref_datum, cmp_func, equal))) {
if (OB_FAIL(is_datum_equal(datum, ref_datum, equal))) {
LOG_WARN("cmp datum failed", K(ret), K(row_id));
} else if (!equal && OB_FAIL(exc_row_ids_.push_back(row_id))) {
LOG_WARN("push_back failed", K(ret), K(row_id));

View File

@ -77,7 +77,6 @@ private:
OB_INLINE int is_datum_equal(
const common::ObDatum &left,
const common::ObDatum &right,
const common::ObCmpFunc &cmp_func,
bool &equal) const;
int64_t ref_col_idx_;
@ -91,14 +90,11 @@ private:
OB_INLINE int ObColumnEqualEncoder::is_datum_equal(
const common::ObDatum &left,
const common::ObDatum &right,
const common::ObCmpFunc &cmp_func,
bool &equal) const
{
int ret = OB_SUCCESS;
equal = false;
const bool is_int_type = ObIntSC == store_class_ || ObUIntSC == store_class_;
const bool need_binary_equal =
store_class_ != ObNumberSC && store_class_ != ObOTimestampSC && store_class_ != ObIntervalSC;
ObStoredExtValue left_ext = get_stored_ext_value(left);
ObStoredExtValue right_ext = get_stored_ext_value(right);
if (left_ext != right_ext) {
@ -107,12 +103,8 @@ OB_INLINE int ObColumnEqualEncoder::is_datum_equal(
equal = true;
} else if (is_int_type) {
equal = (left.get_uint64() == right.get_uint64());
} else if (need_binary_equal) {
equal = ObDatum::binary_equal(left, right);
} else {
int cmp_ret = 0;
ret = cmp_func.cmp_func_(left, right, cmp_ret);
equal = (0 == cmp_ret);
equal = ObDatum::binary_equal(left, right);
}
return ret;
}