You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@doris.apache.org by mo...@apache.org on 2022/05/18 08:34:44 UTC

[incubator-doris] 09/09: [BUG] fix information_schema.columns results not correctly on vec engine (#9612)

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 <10...@qq.com>
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 <zh...@baidu.com>
---
 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: commits-unsubscribe@doris.apache.org
For additional commands, e-mail: commits-help@doris.apache.org