This is an automated email from the ASF dual-hosted git repository. morningman pushed a commit to branch dev-1.0.1 in repository https://gitbox.apache.org/repos/asf/incubator-doris.git
commit 3c414e75b8ef7aaba973501c9beb5415b0387540 Author: camby <[email protected]> AuthorDate: Wed May 18 07:44:32 2022 +0800 [BUG] fix information_schema.columns results not correctly on vec engine (#9612) * VSchemaScanNode get_next bugfix * add regression-test case for VSchemaScanNode Co-authored-by: cambyzju <[email protected]> --- be/src/vec/exec/vmysql_scan_node.cpp | 1 + be/src/vec/exec/vodbc_scan_node.cpp | 1 + be/src/vec/exec/vschema_scan_node.cpp | 10 ++++--- .../data/account/test_information_schema.out | 31 ++++++++++++++++++++++ 4 files changed, 39 insertions(+), 4 deletions(-) diff --git a/be/src/vec/exec/vmysql_scan_node.cpp b/be/src/vec/exec/vmysql_scan_node.cpp index 980fb57eb8..d5cec3e215 100644 --- a/be/src/vec/exec/vmysql_scan_node.cpp +++ b/be/src/vec/exec/vmysql_scan_node.cpp @@ -46,6 +46,7 @@ Status VMysqlScanNode::get_next(RuntimeState* state, vectorized::Block* block, b bool mysql_eos = false; do { + columns.resize(_slot_num); for (int i = 0; i < _slot_num; ++i) { if (mem_reuse) { columns[i] = std::move(*block->get_by_position(i).column).mutate(); diff --git a/be/src/vec/exec/vodbc_scan_node.cpp b/be/src/vec/exec/vodbc_scan_node.cpp index dc685c57cc..2669858454 100644 --- a/be/src/vec/exec/vodbc_scan_node.cpp +++ b/be/src/vec/exec/vodbc_scan_node.cpp @@ -58,6 +58,7 @@ Status VOdbcScanNode::get_next(RuntimeState* state, Block* block, bool* eos) { do { RETURN_IF_CANCELLED(state); + columns.resize(column_size); for (auto i = 0; i < column_size; i++) { if (mem_reuse) { columns[i] = std::move(*block->get_by_position(i).column).mutate(); diff --git a/be/src/vec/exec/vschema_scan_node.cpp b/be/src/vec/exec/vschema_scan_node.cpp index dfd2c08dcf..5a8968ed58 100644 --- a/be/src/vec/exec/vschema_scan_node.cpp +++ b/be/src/vec/exec/vschema_scan_node.cpp @@ -64,12 +64,14 @@ Status VSchemaScanNode::get_next(RuntimeState* state, vectorized::Block* block, if (!_is_init) return Status::InternalError("used before initialize."); RETURN_IF_ERROR(exec_debug_action(TExecNodePhase::GETNEXT)); RETURN_IF_CANCELLED(state); - bool mem_reuse = block->mem_reuse(); - DCHECK(block->rows() == 0); std::vector<vectorized::MutableColumnPtr> columns(_slot_num); bool schema_eos = false; do { + bool mem_reuse = block->mem_reuse(); + DCHECK(block->rows() == 0); + + columns.resize(_slot_num); for (int i = 0; i < _slot_num; ++i) { if (mem_reuse) { columns[i] = std::move(*block->get_by_position(i).column).mutate(); @@ -81,8 +83,8 @@ Status VSchemaScanNode::get_next(RuntimeState* state, vectorized::Block* block, RETURN_IF_CANCELLED(state); // get all slots from schema table. - RETURN_IF_ERROR(_schema_scanner->get_next_row(_src_single_tuple, _tuple_pool.get(), &schema_eos)); - + RETURN_IF_ERROR(_schema_scanner->get_next_row(_src_single_tuple, _tuple_pool.get(), + &schema_eos)); if (schema_eos) { *eos = true; break; diff --git a/regression-test/data/account/test_information_schema.out b/regression-test/data/account/test_information_schema.out new file mode 100644 index 0000000000..1e6a3994f3 --- /dev/null +++ b/regression-test/data/account/test_information_schema.out @@ -0,0 +1,31 @@ +-- This file is automatically generated. You should know what you did if you want to edit this +-- !sql -- +612 + +-- !sql -- +578 + +-- !sql -- +544 + +-- !sql -- +510 + +-- !sql -- +476 + +-- !sql -- +612 + +-- !sql -- +578 + +-- !sql -- +544 + +-- !sql -- +510 + +-- !sql -- +476 + --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
