Fix decimal int related bugs
This commit is contained in:
@ -101,7 +101,7 @@ int ObExprGetSysVar::calc_result_type2(ObExprResType &type,
|
||||
OX(type.set_collation_type(conn_coll));
|
||||
}
|
||||
}
|
||||
} else if (ob_is_int_tc(data_type)) {
|
||||
} else if (ob_is_int_uint_tc(data_type)) {
|
||||
type.set_accuracy(ObAccuracy::MAX_ACCURACY2[lib::is_oracle_mode()][data_type]);
|
||||
}
|
||||
}
|
||||
|
||||
@ -70,8 +70,7 @@ int ObExprGetUserVar::calc_result_type1(ObExprResType &type,
|
||||
}
|
||||
}
|
||||
if (session_var.meta_.is_decimal_int()) {
|
||||
type.set_precision(wide::ObDecimalIntConstValue::get_max_precision_by_int_bytes(
|
||||
session_var.value_.get_int_bytes()));
|
||||
type.set_precision(static_cast<ObPrecision>(OB_MAX_DECIMAL_POSSIBLE_PRECISION));
|
||||
}
|
||||
type.set_collation_level(session_var.meta_.get_collation_level());
|
||||
type.set_collation_type(session_var.meta_.get_collation_type());
|
||||
@ -137,6 +136,11 @@ int ObExprGetUserVar::eval_get_user_var(const ObExpr &expr, ObEvalCtx &ctx, ObDa
|
||||
if (is_lob_storage(res_obj.get_type())) {
|
||||
OZ(ob_adjust_lob_datum(res_obj, expr.obj_meta_, ctx.exec_ctx_.get_allocator(), res));
|
||||
}
|
||||
} else if (sess_obj.is_decimal_int() && sess_obj.get_int_bytes() != sizeof(int512_t)) {
|
||||
ObDecimalIntBuilder res_builder;
|
||||
res_builder.from(sess_obj.get_decimal_int(), sess_obj.get_int_bytes());
|
||||
res_builder.extend(sizeof(int512_t));
|
||||
res.set_decimal_int(res_builder.get_decimal_int(), res_builder.get_int_bytes());
|
||||
} else {
|
||||
OZ(res.from_obj(sess_obj));
|
||||
if (is_lob_storage(sess_obj.get_type())) {
|
||||
|
||||
@ -154,6 +154,8 @@ int ObExprOracleDecode::calc_result_typeN(ObExprResType &type,
|
||||
type.set_calc_type(ObVarcharType);
|
||||
} else if (lib::is_oracle_mode() && ob_is_nchar(calc_type.get_type())) {
|
||||
type.set_calc_type(ObNVarchar2Type);
|
||||
} else if (ob_is_decimal_int_tc(calc_type.get_type())) {
|
||||
type.set_calc_type(ObNumberType);
|
||||
} else {
|
||||
// 保留原mysql下的行为
|
||||
type.set_calc_type(calc_type.get_type());
|
||||
|
||||
Reference in New Issue
Block a user