From 8080f4a8b233315d38f4aab818b8f05f33061881 Mon Sep 17 00:00:00 2001 From: xueweizhang Date: Fri, 2 Aug 2024 17:03:18 +0800 Subject: [PATCH] [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 --- .../schema_variables_scanner.cpp | 33 ++++++++++++++++--- .../doris/service/FrontendServiceImpl.java | 11 +++---- gensrc/thrift/FrontendService.thrift | 2 +- .../variable_p0/set_and_unset_variable.out | 6 ++++ .../variable_p0/set_and_unset_variable.groovy | 4 +++ 5 files changed, 43 insertions(+), 13 deletions(-) diff --git a/be/src/exec/schema_scanner/schema_variables_scanner.cpp b/be/src/exec/schema_scanner/schema_variables_scanner.cpp index 445089b36ab3706..3e6d64593ae542c 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 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) {} @@ -91,10 +92,10 @@ Status SchemaVariablesScanner::_fill_block_impl(vectorized::Block* block) { std::vector datas(row_num); // variables names { - StringRef strs[row_num]; + std::vector 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 + idx; ++idx; } @@ -102,15 +103,37 @@ Status SchemaVariablesScanner::_fill_block_impl(vectorized::Block* block) { } // value { - StringRef strs[row_num]; + std::vector 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 + idx; ++idx; } RETURN_IF_ERROR(fill_dest_column_for_range(block, 1, datas)); } + // default value + { + std::vector 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 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 90a9edace2ef970..5a98b04b0b762b6 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 @@ -955,18 +955,15 @@ private TColumnDesc getColumnDesc(Column column) { @Override public TShowVariableResult showVariables(TShowVariableRequest params) throws TException { TShowVariableResult result = new TShowVariableResult(); - Map map = Maps.newHashMap(); - result.setVariables(map); + List> vars = Lists.newArrayList(); + result.setVariables(vars); // Find connect ConnectContext ctx = exeEnv.getScheduler().getContext((int) params.getThreadId()); if (ctx == null) { return result; } - List> rows = VariableMgr.dump(SetType.fromThrift(params.getVarType()), ctx.getSessionVariable(), - null); - for (List 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 2b753a45ac1e627..88343f9f32c305d 100644 --- a/gensrc/thrift/FrontendService.thrift +++ b/gensrc/thrift/FrontendService.thrift @@ -107,7 +107,7 @@ struct TShowVariableRequest { // Results of a call to describeTable() struct TShowVariableResult { - 1: required map variables + 1: required list> 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 33dd8af7bc15b7a..506542ea754557d 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 c637d3ae223dca2..0ad043cb96c5638 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 {