From 8aaff00527cf768daea885c7647c00202306393f Mon Sep 17 00:00:00 2001 From: nextdreamblue Date: Wed, 8 May 2024 15:39:36 +0800 Subject: [PATCH 1/3] [fix](session) fix select * from variables system table Signed-off-by: nextdreamblue --- .../schema_variables_scanner.cpp | 28 +++++++++++++++++-- .../doris/service/FrontendServiceImpl.java | 11 +++----- gensrc/thrift/FrontendService.thrift | 2 +- 3 files changed, 31 insertions(+), 10 deletions(-) diff --git a/be/src/exec/schema_scanner/schema_variables_scanner.cpp b/be/src/exec/schema_scanner/schema_variables_scanner.cpp index 546a0a471cfb01..7f2bbb2e725c25 100644 --- a/be/src/exec/schema_scanner/schema_variables_scanner.cpp +++ b/be/src/exec/schema_scanner/schema_variables_scanner.cpp @@ -40,6 +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) @@ -94,7 +96,7 @@ Status SchemaVariablesScanner::_fill_block_impl(vectorized::Block* block) { 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.data() + idx; ++idx; } @@ -105,12 +107,34 @@ Status SchemaVariablesScanner::_fill_block_impl(vectorized::Block* block) { 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.data() + 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 5f59f4c1a69502..47bcff7c6f51a1 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 @@ 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 d48bd7564362f6..7986c4f7cc6530 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 variables + 1: required list> variables } // Valid table file formats From 88675d1b2ef10e6f862476cf9c3efd2de046516b Mon Sep 17 00:00:00 2001 From: nextdreamblue Date: Wed, 31 Jul 2024 15:38:02 +0800 Subject: [PATCH 2/3] test Signed-off-by: nextdreamblue --- regression-test/data/variable_p0/set_and_unset_variable.out | 6 ++++++ .../suites/variable_p0/set_and_unset_variable.groovy | 4 ++++ 2 files changed, 10 insertions(+) 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 33dd8af7bc15b7..506542ea754557 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 c637d3ae223dca..0ad043cb96c563 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 { From 66e5be136c59cf71ff7f44fa17b0969a4147f952 Mon Sep 17 00:00:00 2001 From: nextdreamblue Date: Wed, 31 Jul 2024 17:36:53 +0800 Subject: [PATCH 3/3] fix Signed-off-by: nextdreamblue --- be/src/exec/schema_scanner/schema_variables_scanner.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/be/src/exec/schema_scanner/schema_variables_scanner.cpp b/be/src/exec/schema_scanner/schema_variables_scanner.cpp index 7f2bbb2e725c25..fd0982f0f35fed 100644 --- a/be/src/exec/schema_scanner/schema_variables_scanner.cpp +++ b/be/src/exec/schema_scanner/schema_variables_scanner.cpp @@ -41,8 +41,7 @@ std::vector SchemaVariablesScanner::_s_vars_columns = {"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} -}; + {"CHANGED", TYPE_VARCHAR, sizeof(StringRef), false}}; SchemaVariablesScanner::SchemaVariablesScanner(TVarType::type type) : SchemaScanner(_s_vars_columns, TSchemaTableType::SCH_VARIABLES), _type(type) {}