Make white filter compat with former
This commit is contained in:
@ -184,6 +184,7 @@ public:
|
|||||||
bool is_root_job = true);
|
bool is_root_job = true);
|
||||||
inline static void exprs_not_support_vectorize(const ObIArray<ObRawExpr *> &exprs,
|
inline static void exprs_not_support_vectorize(const ObIArray<ObRawExpr *> &exprs,
|
||||||
bool &found);
|
bool &found);
|
||||||
|
inline uint64_t get_cur_cluster_version() { return cur_cluster_version_; }
|
||||||
|
|
||||||
// detect physical operator type from logic operator.
|
// detect physical operator type from logic operator.
|
||||||
static int get_phy_op_type(ObLogicalOperator &op, ObPhyOperatorType &type,
|
static int get_phy_op_type(ObLogicalOperator &op, ObPhyOperatorType &type,
|
||||||
@ -507,7 +508,6 @@ private:
|
|||||||
|| T_FUN_SUM == expr_type
|
|| T_FUN_SUM == expr_type
|
||||||
|| T_FUN_MAX == expr_type
|
|| T_FUN_MAX == expr_type
|
||||||
|| T_FUN_MIN == expr_type; }
|
|| T_FUN_MIN == expr_type; }
|
||||||
uint64_t get_cur_cluster_version() { return cur_cluster_version_; }
|
|
||||||
int check_fk_nested_dup_del(const uint64_t table_id,
|
int check_fk_nested_dup_del(const uint64_t table_id,
|
||||||
const uint64_t root_table_id,
|
const uint64_t root_table_id,
|
||||||
DASTableIdList &parent_tables,
|
DASTableIdList &parent_tables,
|
||||||
|
|||||||
@ -260,6 +260,23 @@ int ObPushdownFilterConstructor::is_white_mode(const ObRawExpr* raw_expr, bool &
|
|||||||
is_white = true;
|
is_white = true;
|
||||||
}
|
}
|
||||||
need_check = false;
|
need_check = false;
|
||||||
|
} else {
|
||||||
|
if (static_cg_.get_cur_cluster_version() < CLUSTER_VERSION_4_3_0_0) {
|
||||||
|
const ObObjMeta &col_meta = child->get_result_meta();
|
||||||
|
for (int64_t i = 1; OB_SUCC(ret) && need_check && i < raw_expr->get_param_count(); i++) {
|
||||||
|
if (OB_ISNULL(child = raw_expr->get_param_expr(i))) {
|
||||||
|
ret = OB_ERR_UNEXPECTED;
|
||||||
|
LOG_WARN("Unexpected null child expr", K(ret), K(i));
|
||||||
|
} else {
|
||||||
|
const ObObjMeta ¶m_meta = child->get_result_meta();
|
||||||
|
need_check = child->is_const_expr();
|
||||||
|
if (need_check && !param_meta.is_null()) {
|
||||||
|
const ObCmpOp cmp_op = sql::ObRelationalExprOperator::get_cmp_op(raw_expr->get_expr_type());
|
||||||
|
obj_cmp_func cmp_func = nullptr;
|
||||||
|
need_check = ObObjCmpFuncs::can_cmp_without_cast(col_meta, param_meta, cmp_op, cmp_func);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
const ObExprResType &col_type = child->get_result_type();
|
const ObExprResType &col_type = child->get_result_type();
|
||||||
for (int64_t i = 1; OB_SUCC(ret) && need_check && i < raw_expr->get_param_count(); i++) {
|
for (int64_t i = 1; OB_SUCC(ret) && need_check && i < raw_expr->get_param_count(); i++) {
|
||||||
@ -276,6 +293,7 @@ int ObPushdownFilterConstructor::is_white_mode(const ObRawExpr* raw_expr, bool &
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
}
|
||||||
if (OB_SUCC(ret) && need_check) {
|
if (OB_SUCC(ret) && need_check) {
|
||||||
switch (item_type) {
|
switch (item_type) {
|
||||||
case T_OP_EQ:
|
case T_OP_EQ:
|
||||||
|
|||||||
Reference in New Issue
Block a user