100 lines
		
	
	
		
			2.3 KiB
		
	
	
	
		
			C++
		
	
	
	
	
	
			
		
		
	
	
			100 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.
 | 
						|
 */
 | 
						|
 | 
						|
#ifndef UNITTEST_STORAGE_OB_ROW_GENERATE_ADAPTER_H_
 | 
						|
#define UNITTEST_STORAGE_OB_ROW_GENERATE_ADAPTER_H_
 | 
						|
 | 
						|
#include "common/object/ob_object.h"
 | 
						|
#include "storage/ob_i_store.h"
 | 
						|
#include "common/row/ob_row_store.h"
 | 
						|
#include "lib/hash/ob_hashmap.h"
 | 
						|
#include "lib/time/ob_time_utility.h"
 | 
						|
#include "lib/string/ob_string.h"
 | 
						|
#include "storage/ob_i_store.h"
 | 
						|
#include "blocksstable/ob_row_generate.h"
 | 
						|
 | 
						|
namespace oceanbase {
 | 
						|
 | 
						|
using namespace blocksstable;
 | 
						|
 | 
						|
namespace common {
 | 
						|
 | 
						|
class ObMockIterWithLimit : public ObNewRowIterator {
 | 
						|
public:
 | 
						|
  ObMockIterWithLimit() : need_row_count_(0), got_row_count_(0){};
 | 
						|
  ~ObMockIterWithLimit(){};
 | 
						|
 | 
						|
  void set_need_row_count(int64_t count)
 | 
						|
  {
 | 
						|
    need_row_count_ = count;
 | 
						|
  }
 | 
						|
 | 
						|
  int64_t get_need_row_count()
 | 
						|
  {
 | 
						|
    return need_row_count_;
 | 
						|
  }
 | 
						|
 | 
						|
  bool is_iter_end()
 | 
						|
  {
 | 
						|
    return need_row_count_ == got_row_count_;
 | 
						|
  }
 | 
						|
 | 
						|
protected:
 | 
						|
  void advance_iter()
 | 
						|
  {
 | 
						|
    ++got_row_count_;
 | 
						|
  }
 | 
						|
 | 
						|
  int64_t need_row_count_;
 | 
						|
  int64_t got_row_count_;
 | 
						|
};
 | 
						|
 | 
						|
class ObRowGenerateAdapter : public ObMockIterWithLimit {
 | 
						|
 | 
						|
public:
 | 
						|
  ObRowGenerateAdapter(){};
 | 
						|
  ~ObRowGenerateAdapter(){};
 | 
						|
 | 
						|
  virtual int get_next_row(ObNewRow*& row)
 | 
						|
  {
 | 
						|
    int ret = OB_SUCCESS;
 | 
						|
    if (is_iter_end()) {
 | 
						|
      ret = OB_ITER_END;
 | 
						|
    } else {
 | 
						|
      generate_.get_next_row(new_row_);
 | 
						|
      row = &new_row_.row_val_;
 | 
						|
      advance_iter();
 | 
						|
    }
 | 
						|
    return ret;
 | 
						|
  }
 | 
						|
 | 
						|
  int init(const share::schema::ObTableSchema& src_schema, ObIAllocator& buf)
 | 
						|
  {
 | 
						|
    new_row_.row_val_.count_ = src_schema.get_column_count();
 | 
						|
    new_row_.row_val_.cells_ = static_cast<ObObj*>(buf.alloc(new_row_.row_val_.count_ * sizeof(ObObj)));
 | 
						|
    return generate_.init(src_schema);
 | 
						|
  }
 | 
						|
 | 
						|
  virtual void reset()
 | 
						|
  {
 | 
						|
    generate_.reset();
 | 
						|
  }
 | 
						|
 | 
						|
private:
 | 
						|
  ObRowGenerate generate_;
 | 
						|
  ObStoreRow new_row_;
 | 
						|
};
 | 
						|
 | 
						|
}  // namespace common
 | 
						|
}  // namespace oceanbase
 | 
						|
#endif  // OCEANBASE_UNITTEST_MOCK_ITERATOR_H_
 |