This is an automated email from the ASF dual-hosted git repository.

nextdreamblue pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/doris.git


The following commit(s) were added to refs/heads/master by this push:
     new 23e83f263b7 [fix](session) fix select * from variables system table 
(#34529)
23e83f263b7 is described below

commit 23e83f263b7c889c1bfe40842aba9d27e44f86ae
Author: xueweizhang <zxw520bl...@163.com>
AuthorDate: Fri Aug 2 17:03:18 2024 +0800

    [fix](session) fix select * from variables system table (#34529)
    
    after #23017, information_schema.session_variables and 
information_schema.global_variables had 2 new columns, but
    SchemaVariablesScanner just 2 columns. when select * from *_variables, will 
get 'no match column for this column' error
    
    Signed-off-by: nextdreamblue <zxw520bl...@163.com>
---
 .../schema_scanner/schema_variables_scanner.cpp    | 29 +++++++++++++++++++---
 .../apache/doris/service/FrontendServiceImpl.java  | 11 +++-----
 gensrc/thrift/FrontendService.thrift               |  2 +-
 .../data/variable_p0/set_and_unset_variable.out    |  6 +++++
 .../variable_p0/set_and_unset_variable.groovy      |  4 +++
 5 files changed, 41 insertions(+), 11 deletions(-)

diff --git a/be/src/exec/schema_scanner/schema_variables_scanner.cpp 
b/be/src/exec/schema_scanner/schema_variables_scanner.cpp
index 9ebd4d7781f..ad4d5d072cb 100644
--- a/be/src/exec/schema_scanner/schema_variables_scanner.cpp
+++ b/be/src/exec/schema_scanner/schema_variables_scanner.cpp
@@ -40,7 +40,8 @@ std::vector<SchemaScanner::ColumnDesc> 
SchemaVariablesScanner::_s_vars_columns =
         //   name,       type,          size
         {"VARIABLE_NAME", TYPE_VARCHAR, sizeof(StringRef), false},
         {"VARIABLE_VALUE", TYPE_VARCHAR, sizeof(StringRef), false},
-};
+        {"DEFAULT_VALUE", TYPE_VARCHAR, sizeof(StringRef), false},
+        {"CHANGED", TYPE_VARCHAR, sizeof(StringRef), false}};
 
 SchemaVariablesScanner::SchemaVariablesScanner(TVarType::type type)
         : SchemaScanner(_s_vars_columns, TSchemaTableType::SCH_VARIABLES), 
_type(type) {}
@@ -94,7 +95,7 @@ Status 
SchemaVariablesScanner::_fill_block_impl(vectorized::Block* block) {
         std::vector<StringRef> strs(row_num);
         int idx = 0;
         for (auto& it : _var_result.variables) {
-            strs[idx] = StringRef(it.first.c_str(), it.first.size());
+            strs[idx] = StringRef(it[0].c_str(), it[0].size());
             datas[idx] = strs.data() + idx;
             ++idx;
         }
@@ -105,12 +106,34 @@ Status 
SchemaVariablesScanner::_fill_block_impl(vectorized::Block* block) {
         std::vector<StringRef> strs(row_num);
         int idx = 0;
         for (auto& it : _var_result.variables) {
-            strs[idx] = StringRef(it.second.c_str(), it.second.size());
+            strs[idx] = StringRef(it[1].c_str(), it[1].size());
             datas[idx] = strs.data() + idx;
             ++idx;
         }
         RETURN_IF_ERROR(fill_dest_column_for_range(block, 1, datas));
     }
+    // default value
+    {
+        std::vector<StringRef> strs(row_num);
+        int idx = 0;
+        for (auto& it : _var_result.variables) {
+            strs[idx] = StringRef(it[2].c_str(), it[2].size());
+            datas[idx] = strs.data() + idx;
+            ++idx;
+        }
+        RETURN_IF_ERROR(fill_dest_column_for_range(block, 2, datas));
+    }
+    // changed
+    {
+        std::vector<StringRef> strs(row_num);
+        int idx = 0;
+        for (auto& it : _var_result.variables) {
+            strs[idx] = StringRef(it[3].c_str(), it[3].size());
+            datas[idx] = strs.data() + idx;
+            ++idx;
+        }
+        RETURN_IF_ERROR(fill_dest_column_for_range(block, 3, datas));
+    }
     return Status::OK();
 }
 
diff --git 
a/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java 
b/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
index 5f59f4c1a69..47bcff7c6f5 100644
--- a/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
+++ b/fe/fe-core/src/main/java/org/apache/doris/service/FrontendServiceImpl.java
@@ -957,18 +957,15 @@ public class FrontendServiceImpl implements 
FrontendService.Iface {
     @Override
     public TShowVariableResult showVariables(TShowVariableRequest params) 
throws TException {
         TShowVariableResult result = new TShowVariableResult();
-        Map<String, String> map = Maps.newHashMap();
-        result.setVariables(map);
+        List<List<String>> vars = Lists.newArrayList();
+        result.setVariables(vars);
         // Find connect
         ConnectContext ctx = exeEnv.getScheduler().getContext((int) 
params.getThreadId());
         if (ctx == null) {
             return result;
         }
-        List<List<String>> rows = 
VariableMgr.dump(SetType.fromThrift(params.getVarType()), 
ctx.getSessionVariable(),
-                null);
-        for (List<String> row : rows) {
-            map.put(row.get(0), row.get(1));
-        }
+        vars = VariableMgr.dump(SetType.fromThrift(params.getVarType()), 
ctx.getSessionVariable(), null);
+        result.setVariables(vars);
         return result;
     }
 
diff --git a/gensrc/thrift/FrontendService.thrift 
b/gensrc/thrift/FrontendService.thrift
index cce9e93fcc9..07ed2c37369 100644
--- a/gensrc/thrift/FrontendService.thrift
+++ b/gensrc/thrift/FrontendService.thrift
@@ -105,7 +105,7 @@ struct TShowVariableRequest {
 
 // Results of a call to describeTable()
 struct TShowVariableResult {
-    1: required map<string, string> variables
+    1: required list<list<string>> variables
 }
 
 // Valid table file formats
diff --git a/regression-test/data/variable_p0/set_and_unset_variable.out 
b/regression-test/data/variable_p0/set_and_unset_variable.out
index 33dd8af7bc1..506542ea754 100644
--- a/regression-test/data/variable_p0/set_and_unset_variable.out
+++ b/regression-test/data/variable_p0/set_and_unset_variable.out
@@ -134,6 +134,9 @@ deprecated_enable_local_exchange    true    true    0
 -- !cmd --
 show_hidden_columns    false   false   0
 
+-- !cmd --
+show_hidden_columns    false   false   0
+
 -- !cmd --
 0
 
@@ -161,6 +164,9 @@ deprecated_enable_local_exchange    true    true    0
 -- !cmd --
 show_hidden_columns    false   false   0
 
+-- !cmd --
+show_hidden_columns    false   false   0
+
 -- !cmd --
 read_only      true    true    0
 
diff --git a/regression-test/suites/variable_p0/set_and_unset_variable.groovy 
b/regression-test/suites/variable_p0/set_and_unset_variable.groovy
index c637d3ae223..0ad043cb96c 100644
--- a/regression-test/suites/variable_p0/set_and_unset_variable.groovy
+++ b/regression-test/suites/variable_p0/set_and_unset_variable.groovy
@@ -73,6 +73,8 @@ suite("set_and_unset_variable") {
     qt_cmd """show session variables like 'deprecated_enable_local_exchange'"""
     qt_cmd """show session variables like 'show_hidden_columns'"""
 
+    qt_cmd """select * from information_schema.session_variables where 
variable_name = 'show_hidden_columns'"""
+
     // test UNSET GLOBAL VARIABLE ALL
     qt_cmd """set global runtime_filter_type='BLOOM_FILTER'"""
     qt_cmd """set global experimental_enable_agg_state='true'"""
@@ -84,6 +86,8 @@ suite("set_and_unset_variable") {
     qt_cmd """show global variables like 'deprecated_enable_local_exchange'"""
     qt_cmd """show global variables like 'show_hidden_columns'"""
 
+    qt_cmd """select * from information_schema.global_variables where 
variable_name = 'show_hidden_columns'"""
+
     // test read_only
     qt_cmd """show variables like 'read_only'"""
     test {


---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscr...@doris.apache.org
For additional commands, e-mail: commits-h...@doris.apache.org

Reply via email to