From 5589ea624503ff6421da2f3676949565fdbda51d Mon Sep 17 00:00:00 2001 From: Andrew Slabko Date: Wed, 1 Jul 2026 18:04:16 +0200 Subject: [PATCH] Add test for Query::SetParam(..., std::nullopt) - NULL value --- ut/client_ut.cpp | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/ut/client_ut.cpp b/ut/client_ut.cpp index aa5bec2f..f1e0e6c4 100644 --- a/ut/client_ut.cpp +++ b/ut/client_ut.cpp @@ -1962,6 +1962,29 @@ TEST_P(ClientCase, QueryParameters) { client_->Execute("DROP TEMPORARY TABLE " + table_name); } +TEST_P(ClientCase, QueryParametersNullable) { + const std::string table_name = "test_clickhouse_cpp_nullable_query_parameter"; + client_->Execute("CREATE TEMPORARY TABLE IF NOT EXISTS " + table_name + " (" + " id UInt64," + " name Nullable(String))"); + + Query query("insert into " + table_name + " values ({id: UInt64}, {name: Nullable(String)})"); + query.SetParam("id", "1").SetParam("name", std::nullopt); + client_->Execute(query); + + size_t count = 0; + client_->BeginSelect("SELECT name FROM " + table_name + ""); + while (auto block = client_->NextBlock()) { + auto col_name = block->At(0)->AsStrict(); + for (size_t i = 0; i < block->GetRowCount(); ++i) { + EXPECT_TRUE(col_name->Nulls()->AsStrict()->At(i)); + ++count; + } + } + EXPECT_GT(count, 0UL); + + client_->Execute("DROP TEMPORARY TABLE " + table_name); +} TEST_P(ClientCase, ClientName) { const auto server_info = client_->GetServerInfo();