Skip to content

Commit

Permalink
[fix](session) fix select * from variables system table (apache#34529)
Browse files Browse the repository at this point in the history
after apache#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 <zxw520blue1@163.com>
  • Loading branch information
nextdreamblue authored and wangbo committed Feb 8, 2025
1 parent fbf3b52 commit c928beb
Show file tree
Hide file tree
Showing 4 changed files with 35 additions and 11 deletions.
29 changes: 26 additions & 3 deletions be/src/exec/schema_scanner/schema_variables_scanner.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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) {}
Expand Down Expand Up @@ -94,7 +95,7 @@ Status SchemaVariablesScanner::_fill_block_impl(vectorized::Block* block) {
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 + idx;
++idx;
}
Expand All @@ -105,12 +106,34 @@ Status SchemaVariablesScanner::_fill_block_impl(vectorized::Block* block) {
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 + idx;
++idx;
}
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();
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -1038,18 +1038,15 @@ public TColumnDesc getColumnDesc(Column column) {
@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;
}

Expand Down
2 changes: 1 addition & 1 deletion gensrc/thrift/FrontendService.thrift
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,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
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,8 @@ suite("set_and_unset_variable") {
qt_cmd """show session variables like 'experimental_enable_agg_state'"""
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'"""
Expand All @@ -69,4 +71,6 @@ suite("set_and_unset_variable") {
qt_cmd """show global variables like 'runtime_filter_type'"""
qt_cmd """show global variables like 'experimental_enable_agg_state'"""
qt_cmd """show global variables like 'show_hidden_columns'"""

qt_cmd """select * from information_schema.global_variables where variable_name = 'show_hidden_columns'"""
}

0 comments on commit c928beb

Please sign in to comment.