Skip to content

Commit 83701e0

Browse files
authored
Better handling of older CH server
Erroring right away if user tries to send query settings to an old server.
1 parent d4c106c commit 83701e0

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

clickhouse/client.cpp

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -645,12 +645,17 @@ void Client::Impl::SendQuery(const Query& query) {
645645
}
646646
}
647647

648-
/// Per query settings.
649-
assert(server_info_.revision >= DBMS_MIN_REVISION_WITH_SETTINGS_SERIALIZED_AS_STRINGS);
650-
for(const auto& [name, field] : query.GetQuerySettings()) {
651-
WireFormat::WriteString(*output_, name);
652-
WireFormat::WriteVarint64(*output_, field.flags);
653-
WireFormat::WriteString(*output_, field.value);
648+
/// Per query settings
649+
if (server_info_.revision >= DBMS_MIN_REVISION_WITH_SETTINGS_SERIALIZED_AS_STRINGS) {
650+
for(const auto& [name, field] : query.GetQuerySettings()) {
651+
WireFormat::WriteString(*output_, name);
652+
WireFormat::WriteVarint64(*output_, field.flags);
653+
WireFormat::WriteString(*output_, field.value);
654+
}
655+
}
656+
else if (query.GetQuerySettings().size() > 0) {
657+
// Current implementation works only for server version >= v20.1.2.4-stable, since we do not implement binary settings serialization.
658+
throw UnimplementedError(std::string("Can't send query settings to a server, server version is too old"));
654659
}
655660
// Empty string signals end of serialized settings
656661
WireFormat::WriteString(*output_, std::string());

0 commit comments

Comments
 (0)