82 lines
2.3 KiB
C++
82 lines
2.3 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 "lib/container/ob_se_array.h"
|
|
#include "share/schema/ob_table_schema.h"
|
|
#include "storage/memtable/ob_memtable_interface.h"
|
|
#include "storage/ob_i_store.h"
|
|
#include "lib/allocator/page_arena.h"
|
|
#include "common/object/ob_object.h"
|
|
#include "common/rowkey/ob_rowkey.h"
|
|
|
|
namespace oceanbase
|
|
{
|
|
using namespace oceanbase::common;
|
|
using namespace oceanbase::memtable;
|
|
using namespace oceanbase::storage;
|
|
namespace unittest
|
|
{
|
|
#include "strutils.h"
|
|
typedef ObSEArray<share::schema::ObColDesc, 64> ColDescArray;
|
|
class ColDescBuilder
|
|
{
|
|
public:
|
|
const ColDescArray& get_columns() const { return columns_; }
|
|
void add(uint64_t col_id, ObObjType col_type, ObCollationType col_collation) {
|
|
share::schema::ObColDesc col_desc;
|
|
col_desc.col_id_ = col_id;
|
|
col_desc.col_type_.set_type(col_type);
|
|
col_desc.col_type_.set_collation_type(col_collation);
|
|
columns_.push_back(col_desc);
|
|
}
|
|
private:
|
|
ColDescArray columns_;
|
|
};
|
|
|
|
class RowIterBuilder
|
|
{
|
|
public:
|
|
enum { MAX_ROWKEY_OBJ = 64 };
|
|
RowIterBuilder(const ColDescArray& cols): cols_(cols) {}
|
|
~RowIterBuilder(){}
|
|
ObMtRowIterator& build(const char* str) {
|
|
ObStoreRow row;
|
|
row.row_val_.cells_ = build_obj_array(str);
|
|
row.row_val_.count_ = cols_.count();
|
|
row.set_dml(T_DML_UPDATE);
|
|
iter_.add_row(row);
|
|
return iter_;
|
|
}
|
|
ObObj* build_obj_array(const char* str) {
|
|
char buf[4096];
|
|
Tokenizer tok(strcpy(buf, str), " ");
|
|
for(int64_t i = 0; i < cols_.count(); i++) {
|
|
parse_obj(obj_array_[i], tok.next());
|
|
}
|
|
return obj_array_;
|
|
}
|
|
private:
|
|
static int parse_obj(ObObj& obj, const char* val)
|
|
{
|
|
int err = OB_SUCCESS;
|
|
obj.set_int(atoi(val));
|
|
return err;
|
|
}
|
|
private:
|
|
const ColDescArray& cols_;
|
|
ObObj obj_array_[MAX_ROWKEY_OBJ];
|
|
ObMtRowIterator iter_;
|
|
};
|
|
|
|
}; // end namespace memtable
|
|
}; // end namespace oceanbase
|