bugfix: select into index out of range core
This commit is contained in:
@ -1402,8 +1402,7 @@ int ObSelectIntoOp::into_outfile(ObIOBufferWriter *data_writer)
|
|||||||
select_exprs.at(i)->obj_meta_,
|
select_exprs.at(i)->obj_meta_,
|
||||||
select_exprs.at(i)->obj_datum_map_))) {
|
select_exprs.at(i)->obj_datum_map_))) {
|
||||||
LOG_WARN("failed to get obj from datum", K(ret));
|
LOG_WARN("failed to get obj from datum", K(ret));
|
||||||
} else if (!ob_is_text_tc(select_exprs.at(i)->obj_meta_.get_type())
|
} else if (!ob_is_text_tc(select_exprs.at(i)->obj_meta_.get_type()) || obj.is_null()) {
|
||||||
|| obj.is_null()) {
|
|
||||||
OZ(print_field(obj, *data_writer));
|
OZ(print_field(obj, *data_writer));
|
||||||
} else { // text tc
|
} else { // text tc
|
||||||
OZ(print_lob_field(obj, *select_exprs.at(i), *datum, *data_writer));
|
OZ(print_lob_field(obj, *select_exprs.at(i), *datum, *data_writer));
|
||||||
@ -1520,21 +1519,21 @@ int ObSelectIntoOp::into_odps_batch(const ObBatchRows &brs)
|
|||||||
if (brs.skip_->contain(i)) {
|
if (brs.skip_->contain(i)) {
|
||||||
// do nothing
|
// do nothing
|
||||||
} else {
|
} else {
|
||||||
for (int64_t j = 0; OB_SUCC(ret) && j < select_exprs.count(); ++j) {
|
for (int64_t col_idx = 0; OB_SUCC(ret) && col_idx < select_exprs.count(); ++col_idx) {
|
||||||
if (OB_ISNULL(datum = datum_vectors.at(j).at(i))) {
|
if (OB_ISNULL(datum = datum_vectors.at(col_idx).at(i))) {
|
||||||
ret = OB_ERR_UNEXPECTED;
|
ret = OB_ERR_UNEXPECTED;
|
||||||
LOG_WARN("datum is unexpected null", K(ret));
|
LOG_WARN("datum is unexpected null", K(ret));
|
||||||
} else if (lib::is_mysql_mode()
|
} else if (lib::is_mysql_mode()
|
||||||
&& OB_FAIL(set_odps_column_value_mysql(*table_record, *datum,
|
&& OB_FAIL(set_odps_column_value_mysql(*table_record, *datum,
|
||||||
select_exprs.at(j)->datum_meta_,
|
select_exprs.at(col_idx)->datum_meta_,
|
||||||
select_exprs.at(j)->obj_meta_,
|
select_exprs.at(col_idx)->obj_meta_,
|
||||||
j))) {
|
col_idx))) {
|
||||||
LOG_WARN("failed to set odps column value", K(ret));
|
LOG_WARN("failed to set odps column value", K(ret));
|
||||||
} else if (lib::is_oracle_mode()
|
} else if (lib::is_oracle_mode()
|
||||||
&& OB_FAIL(set_odps_column_value_oracle(*table_record, *datum,
|
&& OB_FAIL(set_odps_column_value_oracle(*table_record, *datum,
|
||||||
select_exprs.at(j)->datum_meta_,
|
select_exprs.at(col_idx)->datum_meta_,
|
||||||
select_exprs.at(j)->obj_meta_,
|
select_exprs.at(col_idx)->obj_meta_,
|
||||||
j))) {
|
col_idx))) {
|
||||||
LOG_WARN("failed to set odps column value", K(ret));
|
LOG_WARN("failed to set odps column value", K(ret));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -2152,22 +2151,21 @@ int ObSelectIntoOp::into_outfile_batch(const ObBatchRows &brs, ObIOBufferWriter
|
|||||||
ret = OB_ERR_UNEXPECTED;
|
ret = OB_ERR_UNEXPECTED;
|
||||||
LOG_WARN("get unexpected null data writer", K(ret));
|
LOG_WARN("get unexpected null data writer", K(ret));
|
||||||
} else {
|
} else {
|
||||||
for (int64_t j = 0; OB_SUCC(ret) && j < select_exprs.count(); ++j) {
|
for (int64_t col_idx = 0; OB_SUCC(ret) && col_idx < select_exprs.count(); ++col_idx) {
|
||||||
if (OB_ISNULL(datum = datum_vectors.at(j).at(i))) {
|
if (OB_ISNULL(datum = datum_vectors.at(col_idx).at(i))) {
|
||||||
ret = OB_ERR_UNEXPECTED;
|
ret = OB_ERR_UNEXPECTED;
|
||||||
LOG_WARN("datum is unexpected null", K(ret));
|
LOG_WARN("datum is unexpected null", K(ret));
|
||||||
} else if (OB_FAIL(datum->to_obj(obj,
|
} else if (OB_FAIL(datum->to_obj(obj,
|
||||||
select_exprs.at(j)->obj_meta_,
|
select_exprs.at(col_idx)->obj_meta_,
|
||||||
select_exprs.at(j)->obj_datum_map_))) {
|
select_exprs.at(col_idx)->obj_datum_map_))) {
|
||||||
LOG_WARN("failed to get obj from datum", K(ret));
|
LOG_WARN("failed to get obj from datum", K(ret));
|
||||||
} else if (!ob_is_text_tc(select_exprs.at(i)->obj_meta_.get_type())
|
} else if (!ob_is_text_tc(select_exprs.at(col_idx)->obj_meta_.get_type()) || obj.is_null()) {
|
||||||
|| obj.is_null()) {
|
|
||||||
OZ(print_field(obj, *data_writer));
|
OZ(print_field(obj, *data_writer));
|
||||||
} else { // text tc
|
} else { // text tc
|
||||||
OZ(print_lob_field(obj, *select_exprs.at(j), *datum, *data_writer));
|
OZ(print_lob_field(obj, *select_exprs.at(col_idx), *datum, *data_writer));
|
||||||
}
|
}
|
||||||
// print field terminator
|
// print field terminator
|
||||||
if (OB_SUCC(ret) && j != select_exprs.count() - 1) {
|
if (OB_SUCC(ret) && col_idx != select_exprs.count() - 1) {
|
||||||
OZ(write_obj_to_file(MY_SPEC.field_str_, *data_writer));
|
OZ(write_obj_to_file(MY_SPEC.field_str_, *data_writer));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user