[FEAT MERGE]4_1_sql_feature

Co-authored-by: leslieyuchen <leslieyuchen@gmail.com>
Co-authored-by: Charles0429 <xiezhenjiang@gmail.com>
Co-authored-by: raywill <hustos@gmail.com>
This commit is contained in:
obdev
2023-01-28 16:01:26 +08:00
committed by ob-robot
parent 3080f2b66f
commit 2d19a9d8f5
846 changed files with 161957 additions and 116661 deletions

View File

@ -126,11 +126,11 @@ int ObRADatumStore::StoredRow::to_expr(const common::ObIArray<ObExpr*> &exprs,
ObEvalCtx &ctx) const
{
int ret = OB_SUCCESS;
if (OB_UNLIKELY(cnt_ != exprs.count())) {
if (OB_UNLIKELY(cnt_ < exprs.count())) {
ret = OB_ERR_UNEXPECTED;
LOG_WARN("datum count mismatch", K(ret), K(cnt_), K(exprs.count()));
} else {
for (uint32_t i = 0; i < cnt_; ++i) {
for (uint32_t i = 0; i < exprs.count(); ++i) {
if (exprs.at(i)->is_const_expr()) {
continue;
} else {
@ -349,7 +349,7 @@ int ObRADatumStore::Block::to_copyable()
ObRADatumStore::ObRADatumStore(common::ObIAllocator *alloc /* = NULL */)
: inited_(false), tenant_id_(0), label_(nullptr), ctx_id_(0), mem_limit_(0),
idx_blk_(NULL), save_row_cnt_(0), row_cnt_(0), fd_(-1), dir_id_(-1), file_size_(0),
inner_reader_(*this), mem_hold_(0), allocator_(NULL == alloc ? inner_allocator_ : *alloc),
inner_reader_(*this), mem_hold_(0), allocator_(NULL == alloc ? &inner_allocator_ : alloc),
row_extend_size_(0), mem_stat_(NULL), io_observer_(NULL)
{
}
@ -357,7 +357,8 @@ ObRADatumStore::ObRADatumStore(common::ObIAllocator *alloc /* = NULL */)
int ObRADatumStore::init(int64_t mem_limit,
uint64_t tenant_id /* = common::OB_SERVER_TENANT_ID */,
int64_t mem_ctx_id /* = common::ObCtxIds::DEFAULT_CTX_ID */,
const char *label /* = common::ObModIds::OB_SQL_ROW_STORE) */)
const char *label /* = common::ObModIds::OB_SQL_ROW_STORE) */,
uint32_t row_extend_size /* = 0 */)
{
int ret = OB_SUCCESS;
if (OB_UNLIKELY(inited_)) {
@ -368,6 +369,7 @@ int ObRADatumStore::init(int64_t mem_limit,
ctx_id_ = mem_ctx_id;
label_ = label;
mem_limit_ = mem_limit;
row_extend_size_ = row_extend_size;
inited_ = true;
}
return ret;
@ -420,7 +422,7 @@ void ObRADatumStore::reset()
LinkNode *node = blk_mem_list_.remove_first();
if (NULL != node) {
node->~LinkNode();
allocator_.free(node);
allocator_->free(node);
}
}
blocks_.reset();
@ -434,7 +436,7 @@ void ObRADatumStore::reuse()
int ret = OB_SUCCESS;
save_row_cnt_ = 0;
row_cnt_ = 0;
inner_reader_.reuse();
inner_reader_.reset();
if (is_file_open()) {
if (OB_FAIL(FILE_MANAGER_INSTANCE_V2.remove(fd_))) {
LOG_WARN("remove file failed", K(ret), K_(fd));
@ -450,7 +452,7 @@ void ObRADatumStore::reuse()
if (&(*node) + 1 != static_cast<LinkNode *>(static_cast<void *>(blkbuf_.buf_.data()))) {
node->unlink();
node->~LinkNode();
allocator_.free(node);
allocator_->free(node);
}
}
if (NULL != blkbuf_.buf_.data()) {
@ -492,7 +494,7 @@ void *ObRADatumStore::alloc_blk_mem(const int64_t size)
LOG_WARN("invalid argument", K(size));
} else {
ObMemAttr attr(tenant_id_, label_, ctx_id_);
void *mem = allocator_.alloc(size + sizeof(LinkNode), attr);
void *mem = allocator_->alloc(size + sizeof(LinkNode), attr);
if (OB_UNLIKELY(NULL == mem)) {
ret = OB_ALLOCATE_MEMORY_FAILED;
LOG_WARN("alloc memory failed", K(ret), KP(mem));
@ -502,7 +504,7 @@ void *ObRADatumStore::alloc_blk_mem(const int64_t size)
ret = OB_ERR_UNEXPECTED;
LOG_WARN("add node to list failed", K(ret));
node->~LinkNode();
allocator_.free(mem);
allocator_->free(mem);
} else {
blk = static_cast<char *>(mem) + sizeof(LinkNode);
inc_mem_hold(size + sizeof(LinkNode));
@ -520,7 +522,7 @@ void ObRADatumStore::free_blk_mem(void *mem, const int64_t size /* = 0 */)
node->unlink();
}
node->~LinkNode();
allocator_.free(node);
allocator_->free(node);
inc_mem_hold(-(size + sizeof(LinkNode)));
}
}
@ -1047,11 +1049,7 @@ void ObRADatumStore::Reader::reset()
reset_cursor(file_size);
store_.free_blk_mem(buf_.data(), buf_.capacity());
buf_.reset();
while (NULL != try_free_list_) {
auto next = try_free_list_->next_;
store_.free_blk_mem(try_free_list_, try_free_list_->size_);
try_free_list_ = next;
}
free_all_blks();
store_.free_blk_mem(idx_buf_.data(), idx_buf_.capacity());
idx_buf_.reset();
}
@ -1059,6 +1057,7 @@ void ObRADatumStore::Reader::reset()
void ObRADatumStore::Reader::reuse()
{
reset_cursor(0);
free_all_blks();
buf_.reset();
idx_buf_.reset();
}
@ -1071,6 +1070,15 @@ void ObRADatumStore::Reader::reset_cursor(const int64_t file_size)
blk_ = NULL;
}
void ObRADatumStore::Reader::free_all_blks()
{
while (NULL != try_free_list_) {
auto next = try_free_list_->next_;
store_.free_blk_mem(try_free_list_, try_free_list_->size_);
try_free_list_ = next;
}
}
int ObRADatumStore::Reader::get_row(const int64_t row_id, const StoredRow *&sr)
{
int ret = OB_SUCCESS;