[CP] Fix core at resolve paramed const
This commit is contained in:
parent
4891d24b46
commit
a6f1d1d1fe
@ -1336,7 +1336,13 @@ int ObSqlParameterization::resolve_paramed_const(SelectItemTraverseCtx& ctx)
|
|||||||
} else {
|
} else {
|
||||||
const ParseNode* param_node = ctx.raw_params_.at(idx)->node_;
|
const ParseNode* param_node = ctx.raw_params_.at(idx)->node_;
|
||||||
int64_t tmp_len = std::min(ctx.buf_len_ - ctx.param_info_.name_len_, param_node->raw_sql_offset_ - ctx.expr_pos_);
|
int64_t tmp_len = std::min(ctx.buf_len_ - ctx.param_info_.name_len_, param_node->raw_sql_offset_ - ctx.expr_pos_);
|
||||||
if (tmp_len > 0) {
|
// In the case of select _binary 'abc';, special processing is required, because the value of
|
||||||
|
// org_expr_name_ is the same as that of raw param in this scenario.
|
||||||
|
// So it is judged here that if org_expr_name_ is the same as param_node->str_value_ value
|
||||||
|
// there is no need to copy it. paramed_field_name_ should be replaced with '?'
|
||||||
|
if (0 == ctx.org_expr_name_.case_compare(ObString(param_node->str_len_, param_node->str_value_))) {
|
||||||
|
// do nothing
|
||||||
|
} else if (tmp_len > 0) {
|
||||||
int32_t len = static_cast<int64_t>(tmp_len);
|
int32_t len = static_cast<int64_t>(tmp_len);
|
||||||
MEMCPY(ctx.param_info_.paramed_field_name_ + ctx.param_info_.name_len_,
|
MEMCPY(ctx.param_info_.paramed_field_name_ + ctx.param_info_.name_len_,
|
||||||
ctx.org_expr_name_.ptr() + ctx.expr_pos_ - ctx.expr_start_pos_,
|
ctx.org_expr_name_.ptr() + ctx.expr_pos_ - ctx.expr_start_pos_,
|
||||||
|
Loading…
x
Reference in New Issue
Block a user