Files
oceanbase/src/storage/concurrency_control/ob_trans_stat_row.cpp
2024-02-23 08:45:32 +00:00

72 lines
2.7 KiB
C++

/**
* Copyright (c) 2021 OceanBase
* OceanBase CE is licensed under Mulan PubL v2.
* You can use this software according to the terms and conditions of the Mulan PubL v2.
* You may obtain a copy of Mulan PubL v2 at:
* http://license.coscl.org.cn/MulanPubL-2.0
* THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND,
* EITHER EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT,
* MERCHANTABILITY OR FIT FOR A PARTICULAR PURPOSE.
* See the Mulan PubL v2 for more details.
*/
#include "storage/concurrency_control/ob_trans_stat_row.h"
#include "sql/engine/basic/ob_pushdown_filter.h"
namespace oceanbase
{
namespace concurrency_control
{
void build_trans_stat_datum(const storage::ObTableIterParam *param,
const blocksstable::ObDatumRow &row,
const ObTransStatRow trans_stat_row)
{
const int64_t MAX_SIZE_FOR_TRANS_STAT_DATUM = 100;
// trans stat datum index for vectorized execution
TRANS_LOG(DEBUG, "memtable try to generate trans_info",
K(trans_stat_row), K(param), K(param->op_), K(row.trans_info_),
K(lbt()));
char *trans_stat_ptr = row.trans_info_;
if (param->need_trans_info()
&& OB_NOT_NULL(trans_stat_ptr)) {
trans_stat_ptr[0] = '\0';
concurrency_control::build_trans_stat_(trans_stat_row,
MAX_SIZE_FOR_TRANS_STAT_DATUM,
trans_stat_ptr);
TRANS_LOG(DEBUG, "memtable generate trans_info",
K(ObString(strlen(trans_stat_ptr), trans_stat_ptr)),
K(trans_stat_row), K(param));
}
}
void build_trans_stat_(const ObTransStatRow trans_stat_row,
const int64_t trans_stat_len,
char *trans_stat_ptr)
{
int ret = OB_SUCCESS;
int64_t pos = 0;
if (OB_FAIL(databuff_printf(trans_stat_ptr,
trans_stat_len,
pos,
"[%ld, %ld, %ld, (%d,%ld)]",
trans_stat_row.trans_version_.get_val_for_tx(),
trans_stat_row.scn_.get_val_for_tx(),
trans_stat_row.trans_id_.get_id(),
trans_stat_row.seq_no_.get_branch(),
trans_stat_row.seq_no_.get_seq()))) {
TRANS_LOG(WARN, "failed to printf", K(ret), K(pos), K(trans_stat_len), K(trans_stat_row));
trans_stat_ptr[0] = '\0';
} else {
if (pos > trans_stat_len) {
ret = OB_ERR_UNEXPECTED;
TRANS_LOG(ERROR, "unexpected length for datum", K(pos));
trans_stat_ptr[0] = '\0';
}
}
}
} // namespace concurrency_control
} // namespace oceanbase