patch 4.0
This commit is contained in:
@ -15,13 +15,21 @@
|
||||
|
||||
#include "sql/engine/expr/ob_expr_operator.h"
|
||||
|
||||
namespace oceanbase {
|
||||
namespace sql {
|
||||
class ObExprBaseLeastGreatest : public ObMinMaxExprOperator {
|
||||
namespace oceanbase
|
||||
{
|
||||
namespace sql
|
||||
{
|
||||
class ObExprLeastGreatest : public ObMinMaxExprOperator
|
||||
{
|
||||
public:
|
||||
explicit ObExprBaseLeastGreatest(
|
||||
common::ObIAllocator& alloc, ObExprOperatorType type, const char* name, int32_t param_num);
|
||||
virtual ~ObExprBaseLeastGreatest();
|
||||
explicit ObExprLeastGreatest(common::ObIAllocator &alloc, ObExprOperatorType type,
|
||||
const char *name, int32_t param_num);
|
||||
virtual ~ObExprLeastGreatest() {}
|
||||
|
||||
virtual int calc_result_typeN(ObExprResType &type,
|
||||
ObExprResType *types_stack,
|
||||
int64_t param_num,
|
||||
common::ObExprTypeCtx &type_ctx) const;
|
||||
int calc_result_typeN_oracle(ObExprResType &type,
|
||||
ObExprResType *types_stack,
|
||||
int64_t param_num,
|
||||
@ -30,10 +38,18 @@ public:
|
||||
ObExprResType *types_stack,
|
||||
int64_t param_num,
|
||||
common::ObExprTypeCtx &type_ctx) const;
|
||||
void set_param_type(const ObExprResType &type,
|
||||
ObExprResType *types,
|
||||
int64_t param_num) const;
|
||||
static int calc(const ObExpr &expr, ObEvalCtx &ctx, ObDatum &expr_datum, bool least);
|
||||
virtual int cg_expr(ObExprCGCtx &op_cg_ctx,
|
||||
const ObRawExpr &raw_expr,
|
||||
ObExpr &rt_expr) const override;
|
||||
static int cast_param(const ObExpr &src_expr, ObEvalCtx &ctx,
|
||||
const ObDatumMeta &dst_meta,
|
||||
const ObCastMode &cm, ObIAllocator &allocator,
|
||||
ObDatum &res_datum);
|
||||
static int cast_result(const ObExpr &src_expr, const ObExpr &dst_expr, ObEvalCtx &ctx,
|
||||
const ObCastMode &cm,
|
||||
ObDatum &expr_datum);
|
||||
static int calc_mysql(const ObExpr &expr, ObEvalCtx &ctx, ObDatum &expr_datum, bool least);
|
||||
static int calc_oracle(const ObExpr &expr, ObEvalCtx &ctx, ObDatum &expr_datum, bool least);
|
||||
// left < right: return true, else return false.
|
||||
static inline bool cmp_integer(const ObDatum &l_datum, const bool l_is_int,
|
||||
const ObDatum &r_datum, const bool r_is_int)
|
||||
@ -52,59 +68,22 @@ public:
|
||||
}
|
||||
private:
|
||||
// disallow copy
|
||||
DISALLOW_COPY_AND_ASSIGN(ObExprBaseLeastGreatest);
|
||||
DISALLOW_COPY_AND_ASSIGN(ObExprLeastGreatest);
|
||||
};
|
||||
|
||||
class ObExprBaseLeast : public ObExprBaseLeastGreatest {
|
||||
class ObExprLeast : public ObExprLeastGreatest
|
||||
{
|
||||
public:
|
||||
explicit ObExprBaseLeast(common::ObIAllocator& alloc, int32_t param_num, ObExprOperatorType type = T_FUN_SYS_LEAST,
|
||||
const char* name = N_LEAST);
|
||||
virtual ~ObExprBaseLeast();
|
||||
virtual int calc_result_typeN(
|
||||
ObExprResType& type, ObExprResType* types_stack, int64_t param_num, common::ObExprTypeCtx& type_ctx) const override;
|
||||
virtual int calc_resultN(
|
||||
common::ObObj& result, const common::ObObj* objs_stack, int64_t param_num, common::ObExprCtx& expr_ctx) const override;
|
||||
virtual int cg_expr(ObExprCGCtx& op_cg_ctx, const ObRawExpr& raw_expr, ObExpr& rt_expr) const override;
|
||||
static int calc_least(const ObExpr& expr, ObEvalCtx& ctx, ObDatum& expr_datum);
|
||||
explicit ObExprLeast(common::ObIAllocator &alloc);
|
||||
virtual ~ObExprLeast() {}
|
||||
|
||||
static int calc_least(const ObExpr &expr, ObEvalCtx &ctx, ObDatum &expr_datum);
|
||||
private:
|
||||
// disallow copy
|
||||
DISALLOW_COPY_AND_ASSIGN(ObExprBaseLeast);
|
||||
DISALLOW_COPY_AND_ASSIGN(ObExprLeast);
|
||||
};
|
||||
|
||||
class ObExprLeastMySQL : public ObExprBaseLeast {
|
||||
public:
|
||||
explicit ObExprLeastMySQL(common::ObIAllocator& alloc);
|
||||
virtual ~ObExprLeastMySQL();
|
||||
virtual int calc_result_typeN(
|
||||
ObExprResType& type, ObExprResType* types_stack, int64_t param_num, common::ObExprTypeCtx& type_ctx) const;
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObExprLeastMySQL);
|
||||
};
|
||||
|
||||
class ObExprLeastMySQLInner : public ObExprBaseLeast {
|
||||
public:
|
||||
explicit ObExprLeastMySQLInner(common::ObIAllocator& alloc);
|
||||
virtual ~ObExprLeastMySQLInner();
|
||||
virtual int calc_result_typeN(
|
||||
ObExprResType& type, ObExprResType* types_stack, int64_t param_num, common::ObExprTypeCtx& type_ctx) const;
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObExprLeastMySQLInner);
|
||||
};
|
||||
|
||||
class ObExprOracleLeast : public ObExprBaseLeast {
|
||||
public:
|
||||
explicit ObExprOracleLeast(common::ObIAllocator& alloc);
|
||||
virtual ~ObExprOracleLeast();
|
||||
virtual int calc_result_typeN(
|
||||
ObExprResType& type, ObExprResType* types_stack, int64_t param_num, common::ObExprTypeCtx& type_ctx) const;
|
||||
|
||||
private:
|
||||
DISALLOW_COPY_AND_ASSIGN(ObExprOracleLeast);
|
||||
};
|
||||
|
||||
} // namespace sql
|
||||
} // namespace oceanbase
|
||||
}
|
||||
}
|
||||
#endif /* _OB_SQL_EXPR_LEAST_H_ */
|
||||
|
||||
Reference in New Issue
Block a user