mirror of
https://github.com/getredash/redash.git
synced 2025-12-19 17:37:19 -05:00
Support multi column results with using mongo query runner (#6558)
* Support multi column results with using mongo query runner * format Signed-off-by: del-zhenwu <lizhenxiang@pjlab.org.cn> * Update test_mongodb.py update unit test case: nested dict for mongodb runner * Update test_mongodb.py * fix formatting --------- Signed-off-by: del-zhenwu <lizhenxiang@pjlab.org.cn> Co-authored-by: del-zhenwu <dele.zhenwu@gmail.com> Co-authored-by: del-zhenwu <lizhenxiang@pjlab.org.cn>
This commit is contained in:
@@ -93,6 +93,18 @@ def _get_column_by_name(columns, column_name):
|
||||
return None
|
||||
|
||||
|
||||
def _parse_dict(dic):
|
||||
res = {}
|
||||
for key, value in dic.items():
|
||||
if isinstance(value, dict):
|
||||
for tmp_key, tmp_value in _parse_dict(value).items():
|
||||
new_key = "{}.{}".format(key, tmp_key)
|
||||
res[new_key] = tmp_value
|
||||
else:
|
||||
res[key] = value
|
||||
return res
|
||||
|
||||
|
||||
def parse_results(results):
|
||||
rows = []
|
||||
columns = []
|
||||
@@ -100,33 +112,16 @@ def parse_results(results):
|
||||
for row in results:
|
||||
parsed_row = {}
|
||||
|
||||
for key in row:
|
||||
if isinstance(row[key], dict):
|
||||
for inner_key in row[key]:
|
||||
column_name = "{}.{}".format(key, inner_key)
|
||||
if _get_column_by_name(columns, column_name) is None:
|
||||
parsed_row = _parse_dict(row)
|
||||
for column_name, value in parsed_row.items():
|
||||
columns.append(
|
||||
{
|
||||
"name": column_name,
|
||||
"friendly_name": column_name,
|
||||
"type": TYPES_MAP.get(type(row[key][inner_key]), TYPE_STRING),
|
||||
"type": TYPES_MAP.get(type(value), TYPE_STRING),
|
||||
}
|
||||
)
|
||||
|
||||
parsed_row[column_name] = row[key][inner_key]
|
||||
|
||||
else:
|
||||
if _get_column_by_name(columns, key) is None:
|
||||
columns.append(
|
||||
{
|
||||
"name": key,
|
||||
"friendly_name": key,
|
||||
"type": TYPES_MAP.get(type(row[key]), TYPE_STRING),
|
||||
}
|
||||
)
|
||||
|
||||
parsed_row[key] = row[key]
|
||||
|
||||
rows.append(parsed_row)
|
||||
|
||||
return rows, columns
|
||||
|
||||
@@ -141,7 +141,7 @@ class TestMongoResults(TestCase):
|
||||
"column": 2,
|
||||
"column2": "test",
|
||||
"column3": "hello",
|
||||
"nested": {"a": 2, "b": "str2", "c": "c"},
|
||||
"nested": {"a": 2, "b": "str2", "c": "c", "d": {"e": 3}},
|
||||
},
|
||||
]
|
||||
|
||||
@@ -157,6 +157,7 @@ class TestMongoResults(TestCase):
|
||||
"nested.a": 2,
|
||||
"nested.b": "str2",
|
||||
"nested.c": "c",
|
||||
"nested.d.e": 3,
|
||||
},
|
||||
)
|
||||
|
||||
|
||||
Reference in New Issue
Block a user