Files
oceanbase/unittest/sql/engine/join/ob_join_fake_table.h
gm 4a92b6d7df reformat source code
according to code styles, 'AccessModifierOffset' should be -2.
2021-06-17 10:40:36 +08:00

151 lines
3.8 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 OB_JOIN_FAKE_TABLE_H_
#define OB_JOIN_FAKE_TABLE_H_
#include "sql/engine/join/ob_join.h"
#include "sql/engine/ob_physical_plan_ctx.h"
#include "sql/engine/ob_phy_operator.h"
#include "sql/engine/ob_exec_context.h"
#include "sql/ob_sql_define.h"
namespace oceanbase {
using namespace common;
namespace sql {
namespace test {
enum TableType { TT_UNKNOWN, TT_LEFT_TABLE, TT_RIGHT_TABLE, TT_OUT_TABLE };
enum JoinOpTestType {
MERGE_JOIN_TEST,
NL_JOIN_TEST,
BNL_JOIN_TEST,
HASH_JOIN_TEST,
JOIN_TEST_TYPE_NUM,
};
static const int DATA_COUNT = 16;
typedef struct {
int64_t left_[DATA_COUNT][2];
int64_t right_[DATA_COUNT][2];
int64_t out_inner_[DATA_COUNT * DATA_COUNT][4];
int64_t out_left_[DATA_COUNT * DATA_COUNT][4];
int64_t out_right_[DATA_COUNT * DATA_COUNT][4];
int64_t out_full_[DATA_COUNT * DATA_COUNT][4];
} JoinData;
class ObQueryRangeDummy {
public:
ObQueryRangeDummy() : scan_key_value_(0)
{}
~ObQueryRangeDummy()
{}
void set_scan_key_value(int64_t join_key_value)
{
scan_key_value_ = join_key_value;
}
int64_t get_scan_key_value()
{
return scan_key_value_;
}
private:
int64_t scan_key_value_;
};
class ObJoinFakeTableScanInput : public ObIPhyOperatorInput {
public:
virtual int init(ObExecContext& ctx, ObTaskInfo& task_info, ObPhyOperator& op)
{
UNUSED(ctx);
UNUSED(task_info);
UNUSED(op);
return OB_SUCCESS;
}
virtual ObPhyOperatorType get_phy_op_type() const
{
return PHY_TABLE_SCAN;
}
ObQueryRangeDummy& get_query_range()
{
return query_range_;
}
private:
ObQueryRangeDummy query_range_;
};
static ObArenaAllocator alloc_;
class ObJoinFakeTable : public ObPhyOperator {
protected:
class ObJoinFakeTableCtx : public ObPhyOperatorCtx {
friend class ObJoinFakeTable;
public:
ObJoinFakeTableCtx(ObExecContext& exex_ctx) : ObPhyOperatorCtx(exex_ctx), iter_(0)
{}
virtual void destroy()
{
return ObPhyOperatorCtx::destroy_base();
}
private:
int64_t iter_;
common::ObAddr server_;
};
public:
ObJoinFakeTable();
virtual ~ObJoinFakeTable();
int init(JoinOpTestType join_op_type);
virtual ObPhyOperatorType get_type() const
{
return op_type_;
}
virtual int set_child(int32_t child_idx, ObPhyOperator& child_operator);
virtual ObPhyOperator* get_child(int32_t child_idx) const;
virtual int32_t get_child_num() const
{
return 0;
}
virtual int inner_open(ObExecContext& exec_ctx) const;
virtual int rescan(ObExecContext& exec_ctx) const;
virtual int init_op_ctx(ObExecContext& exec_ctx) const;
virtual int create_operator_input(ObExecContext& exec_ctx) const;
virtual int inner_get_next_row(ObExecContext& exec_ctx, const common::ObNewRow*& row) const;
public:
int prepare_data(int64_t case_id, TableType table_type, ObJoinType join_type);
void set_type(ObPhyOperatorType op_type)
{
op_type_ = op_type;
}
private:
int cons_row(int64_t col1, int64_t col2, common::ObNewRow& row) const;
int cons_row(int64_t col1, int64_t col2, int64_t col3, int64_t col4, common::ObNewRow& row) const;
private:
int64_t (*left_data_)[2];
int64_t (*right_data_)[2];
int64_t (*out_data_)[4];
JoinOpTestType join_op_type_;
ObPhyOperatorType op_type_;
bool is_inited_;
};
} // namespace test
} // namespace sql
} // namespace oceanbase
#endif /* OB_JOIN_FAKE_TABLE_H_ */