Skip to content

Commit 7f30fb7

Browse files
authored
Merge pull request ClickHouse#56941 from Avogar/fix-auto-schema
Fix generating deep nested columns in CapnProto/Protobuf schemas
2 parents 56222dd + 6366819 commit 7f30fb7

File tree

3 files changed

+77
-0
lines changed

3 files changed

+77
-0
lines changed

src/Formats/StructureToFormatSchemaUtils.cpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,10 @@ NamesAndTypesList collectNested(const NamesAndTypesList & names_and_types, bool
9696
nested[field_name].emplace_back(nested_name, type);
9797
}
9898

99+
/// Collect nested recursively.
100+
for (auto & [field_name, elements] : nested)
101+
elements = collectNested(elements, allow_split_by_underscore, format_name);
102+
99103
for (const auto & [field_name, elements]: nested)
100104
result.emplace_back(field_name, std::make_shared<DataTypeTuple>(elements.getTypes(), elements.getNames()));
101105

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
2+
message Message
3+
{
4+
message H
5+
{
6+
uint32 k = 1;
7+
}
8+
H h = 1;
9+
message A
10+
{
11+
uint32 g = 1;
12+
message B
13+
{
14+
uint32 c = 1;
15+
uint32 f = 2;
16+
message D
17+
{
18+
uint32 e = 1;
19+
}
20+
D d = 3;
21+
}
22+
B b = 2;
23+
}
24+
A a = 2;
25+
}
26+
46 (45,(42,44,43))
27+
28+
struct Message
29+
{
30+
struct H
31+
{
32+
k @0 : UInt8;
33+
}
34+
h @0 : H;
35+
struct A
36+
{
37+
g @0 : UInt8;
38+
struct B
39+
{
40+
c @0 : UInt8;
41+
f @1 : UInt8;
42+
struct D
43+
{
44+
e @0 : UInt8;
45+
}
46+
d @2 : D;
47+
}
48+
b @1 : B;
49+
}
50+
a @1 : A;
51+
}
52+
(46) (45,(42,44,(43)))
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
#!/usr/bin/env bash
2+
# Tags: no-fasttest
3+
4+
CURDIR=$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)
5+
# shellcheck source=../shell_config.sh
6+
. "$CURDIR"/../shell_config.sh
7+
8+
SCHEMA_FILE=$CLICKHOUSE_TEST_UNIQUE_NAME-schema
9+
FILE=$CLICKHOUSE_TEST_UNIQUE_NAME
10+
11+
$CLICKHOUSE_LOCAL -q "select 42 as \`a.b.c\`, 43 as \`a.b.d.e\`, 44 as \`a.b.f\`, 45 as \`a.g\`, 46 as \`h.k\` format Protobuf settings output_format_schema='$SCHEMA_FILE.proto'" > $FILE.pb
12+
tail -n +2 $SCHEMA_FILE.proto
13+
$CLICKHOUSE_LOCAL -q "select * from file('$FILE.pb') settings format_schema='$SCHEMA_FILE:Message'"
14+
15+
$CLICKHOUSE_LOCAL -q "select 42 as a_b_c, 43 as a_b_d_e, 44 as a_b_f, 45 as a_g, 46 as h_k format CapnProto settings output_format_schema='$SCHEMA_FILE.capnp'" > $FILE.capnp
16+
tail -n +2 $SCHEMA_FILE.capnp
17+
$CLICKHOUSE_LOCAL -q "select * from file('$FILE.capnp') settings format_schema='$SCHEMA_FILE:Message'"
18+
19+
rm $SCHEMA_FILE*
20+
rm $FILE.*
21+

0 commit comments

Comments
 (0)