[BUGFIX] fix lob delete with MINIMAL mode
This commit is contained in:
parent
16b713759f
commit
87ad8877d4
12
deps/easy/src/io/easy_negotiation.c
vendored
12
deps/easy/src/io/easy_negotiation.c
vendored
@ -88,9 +88,9 @@ static int easy_decode_uint64(char *buf, const int64_t data_len, int64_t *pos, u
|
||||
*val |= (((uint64_t)((*(buf + (*pos)++))) & 0xff));
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
static int easy_decode_uint16(char *buf, const int64_t data_len, int64_t *pos, uint16_t *val)
|
||||
{
|
||||
int ret = (NULL != buf && data_len - *pos >= 2) ? EASY_OK : EASY_ERROR;
|
||||
@ -140,9 +140,9 @@ static int easy_encode_negotiation_msg(easy_negotiation_msg_t *ne_msg, char *buf
|
||||
static int easy_decode_negotiation_msg(easy_negotiation_msg_t *ne_msg, char *recv_buf, int64_t recv_buf_len, int64_t *decode_len)
|
||||
{
|
||||
int ret = EASY_OK;
|
||||
int64_t pos = 0;
|
||||
|
||||
if (NULL == ne_msg || NULL == recv_buf || NULL == decode_len) {
|
||||
int64_t pos = 0;
|
||||
|
||||
if (NULL == ne_msg || NULL == recv_buf || NULL == decode_len) {
|
||||
easy_error_log("easy_decode_negotiation_msg, invalid param!");
|
||||
return EASY_ERROR;
|
||||
}
|
||||
|
@ -519,11 +519,12 @@ int ObQueryDriver::process_lob_locator_results(ObObj& value,
|
||||
// refer to sz/aibo1m
|
||||
// 3. if client does not support use_lob_locator ,,return full lob data without locator header
|
||||
bool is_lob_type = value.is_lob() || value.is_json() || value.is_geometry() || value.is_lob_locator();
|
||||
bool is_actual_return_lob_locator = is_use_lob_locator && !value.is_json();
|
||||
if (!is_lob_type) {
|
||||
// not lob types, do nothing
|
||||
} else if (value.is_null() || value.is_nop_value()) {
|
||||
// do nothing
|
||||
} else if (is_use_lob_locator && is_lob_type && lib::is_oracle_mode()) {
|
||||
} else if (is_actual_return_lob_locator && is_lob_type && lib::is_oracle_mode()) {
|
||||
// Should be ObLobType (cluster version < 4.1), or Text/Json/Gis with lob header
|
||||
ObLobLocatorV2 loc(value.get_string(), value.has_lob_header());
|
||||
if (loc.is_lob_locator_v1()) {// do nothing, lob locator version 1
|
||||
@ -571,7 +572,7 @@ int ObQueryDriver::process_lob_locator_results(ObObj& value,
|
||||
ret = OB_INVALID_ARGUMENT;
|
||||
LOG_WARN("Lob: invalid lob locator", K(value), K(GET_MIN_CLUSTER_VERSION()));
|
||||
}
|
||||
} else if ((!is_use_lob_locator && lib::is_oracle_mode())
|
||||
} else if ((!is_actual_return_lob_locator && lib::is_oracle_mode())
|
||||
|| lib::is_mysql_mode()) {
|
||||
// Should remove locator header and read full lob data
|
||||
ObString data;
|
||||
@ -715,8 +716,9 @@ int ObQueryDriver::convert_text_value_charset(ObObj& value,
|
||||
LOG_WARN("Lob: invalid collation", K(from_collation_type), K(to_collation_type), K(ret));
|
||||
} else if (CS_TYPE_BINARY != from_collation_type && CS_TYPE_BINARY != to_collation_type
|
||||
&& strcmp(from_charset_info->csname, to_charset_info->csname) != 0) {
|
||||
bool is_actual_return_lob_locator = session->is_client_use_lob_locator() && !value.is_json();
|
||||
if (value.is_lob_storage() && value.has_lob_header() && OB_NOT_NULL(session) &&
|
||||
session->is_client_use_lob_locator() && lib::is_oracle_mode()) {
|
||||
is_actual_return_lob_locator && lib::is_oracle_mode()) {
|
||||
ObLobLocatorV2 lob;
|
||||
ObString inrow_data;
|
||||
if (OB_FAIL(process_lob_locator_results(value,
|
||||
|
@ -144,14 +144,22 @@ int ObDASDMLIterator::get_next_spatial_index_row(ObNewRow *&row)
|
||||
int64_t geo_idx = -1;
|
||||
ObString geo_wkb;
|
||||
ObObjMeta geo_meta;
|
||||
for (uint64_t i = 0; i < main_ctdef_->column_ids_.count() && geo_idx == -1; i++) {
|
||||
bool has_old_row = !main_ctdef_->old_row_projector_.empty();
|
||||
for (uint64_t i = 0; OB_SUCC(ret) && i < main_ctdef_->column_ids_.count() && geo_idx == -1; i++) {
|
||||
int64_t projector_idx = has_old_row ? main_ctdef_->old_row_projector_.at(i) : i;
|
||||
if (geo_col_id == main_ctdef_->column_ids_.at(i)) {
|
||||
geo_idx = i;
|
||||
geo_wkb = sr->cells()[i].get_string();
|
||||
geo_meta = main_ctdef_->column_types_.at(i);
|
||||
if (projector_idx >= sr->cnt_) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("invalid index for sr", K(ret), KPC(sr), K(i), K(main_ctdef_->old_row_projector_));
|
||||
} else {
|
||||
geo_idx = i;
|
||||
geo_wkb = sr->cells()[projector_idx].get_string();
|
||||
geo_meta = main_ctdef_->column_types_.at(i);
|
||||
}
|
||||
}
|
||||
}
|
||||
if (geo_idx == -1) {
|
||||
if (OB_FAIL(ret)) {
|
||||
} else if (geo_idx == -1) {
|
||||
ret = OB_INVALID_ARGUMENT;
|
||||
LOG_WARN("can't get geo col idx", K(ret), K(geo_col_id));
|
||||
} else if (OB_FAIL(ObTextStringHelper::read_real_string_data(&allocator_, geo_meta.get_type(),
|
||||
@ -159,7 +167,7 @@ int ObDASDMLIterator::get_next_spatial_index_row(ObNewRow *&row)
|
||||
LOG_WARN("fail to get real geo data", K(ret));
|
||||
} else if (OB_FAIL(ObDASUtils::generate_spatial_index_rows(allocator_, *das_ctdef_, geo_wkb,
|
||||
*row_projector_, *sr, *spatial_rows))) {
|
||||
LOG_WARN("generate spatial_index_rows failed", K(ret), K(geo_col_id), K(geo_wkb));
|
||||
LOG_WARN("generate spatial_index_rows failed", K(ret), K(geo_col_id), K(geo_wkb), K(geo_idx), KPC(sr));
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1726,6 +1726,41 @@ int ObDelUpdResolver::add_all_columns_to_stmt(const TableItem &table_item,
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObDelUpdResolver::add_all_lob_columns_to_stmt(const TableItem &table_item,
|
||||
ObIArray<ObColumnRefRawExpr*> &column_exprs)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
const ObTableSchema *table_schema = NULL;
|
||||
const TableItem& base_table_item = table_item.get_base_table_item();
|
||||
if (OB_ISNULL(params_.session_info_)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("params_.session_info_ is null", K(ret));
|
||||
} else if (OB_FAIL(schema_checker_->get_table_schema(params_.session_info_->get_effective_tenant_id(),
|
||||
base_table_item.ref_id_,
|
||||
table_schema,
|
||||
base_table_item.is_link_table()))) {
|
||||
LOG_WARN("not find table schema", K(ret), K(base_table_item));
|
||||
} else if (OB_ISNULL(table_schema)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("get unexpected null", K(table_schema), K(ret));
|
||||
} else {
|
||||
ObTableSchema::const_column_iterator iter = table_schema->column_begin();
|
||||
ObTableSchema::const_column_iterator end = table_schema->column_end();
|
||||
for (; OB_SUCC(ret) && iter != end; ++iter) {
|
||||
const ObColumnSchemaV2 *column = *iter;
|
||||
if (OB_ISNULL(column)) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("invalid column schema", K(column));
|
||||
} else if (!column->get_meta_type().is_lob_storage()) {
|
||||
// do nothing
|
||||
} else if (OB_FAIL(add_column_to_stmt(table_item, *column, column_exprs))) {
|
||||
LOG_WARN("add column item to stmt failed", K(ret));
|
||||
}
|
||||
} //end for
|
||||
}
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObDelUpdResolver::add_all_columns_to_stmt_for_trigger(const TableItem &table_item,
|
||||
ObIArray<ObColumnRefRawExpr*> &column_exprs)
|
||||
{
|
||||
|
@ -220,6 +220,7 @@ protected:
|
||||
int create_session_row_label_expr(ObDmlTableInfo& table_info, uint64_t column_id, ObRawExpr *&expr);
|
||||
int add_select_items(ObSelectStmt &select_stmt, const ObIArray<SelectItem>& select_items);
|
||||
int add_select_list_for_set_stmt(ObSelectStmt &select_stmt);
|
||||
int add_all_lob_columns_to_stmt(const TableItem &table_item, ObIArray<ObColumnRefRawExpr*> &column_exprs);
|
||||
protected:
|
||||
int generate_insert_table_info(const TableItem &table_item,
|
||||
ObInsertTableInfo &table_info,
|
||||
|
@ -419,6 +419,8 @@ int ObDeleteResolver::generate_delete_table_info(const TableItem &table_item)
|
||||
} else if (OB_FAIL(add_all_index_rowkey_to_stmt(table_item,
|
||||
table_info->column_exprs_))) {
|
||||
LOG_WARN("fail to add relate column to stmt", K(ret), K(table_item));
|
||||
} else if (OB_FAIL(add_all_lob_columns_to_stmt(table_item, table_info->column_exprs_))) {
|
||||
LOG_WARN("fail to add lob column to stmt", K(ret), K(table_item));
|
||||
}
|
||||
if (OB_SUCC(ret)) {
|
||||
table_info->table_id_ = table_item.table_id_;
|
||||
|
Loading…
x
Reference in New Issue
Block a user