[bugfix] fix column equal encoder for same timestamp with different timezone
This commit is contained in:
parent
6c3224d9ee
commit
dbc1956b5a
@ -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));
|
||||
|
@ -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;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user