aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authoruzhas <uzhas@yandex-team.ru>2022-02-22 17:11:59 +0300
committeruzhas <uzhas@yandex-team.ru>2022-02-22 17:11:59 +0300
commit5e27728a04ad014b09bd1ae4d2ebe46f6e40256c (patch)
treeb034196f4d7d6fbe818abb940464b808e10efd58
parent50401556c95bb9dbfd2d2c6bcbe80cdc2ba84817 (diff)
downloadydb-5e27728a04ad014b09bd1ae4d2ebe46f6e40256c.tar.gz
YQ-895: use TStringBuilder to compose url, simplify code
ref:4816e92a12fc736734fcf90b6849931f99f703d4
-rw-r--r--ydb/library/yql/utils/url_builder.cpp20
-rw-r--r--ydb/library/yql/utils/url_builder.h3
-rw-r--r--ydb/library/yql/utils/url_builder_ut.cpp9
3 files changed, 19 insertions, 13 deletions
diff --git a/ydb/library/yql/utils/url_builder.cpp b/ydb/library/yql/utils/url_builder.cpp
index 733c616dab..3aa1172ffa 100644
--- a/ydb/library/yql/utils/url_builder.cpp
+++ b/ydb/library/yql/utils/url_builder.cpp
@@ -3,21 +3,25 @@
namespace NYql {
-TUrlBuilder::TUrlBuilder(
- const TString& uri)
+TUrlBuilder::TUrlBuilder(const TString& uri)
: MainUri(uri)
- {}
+{
+}
-void TUrlBuilder::AddUrlParam(const TString& name, const TString& value) {
+TUrlBuilder& TUrlBuilder::AddUrlParam(const TString& name, const TString& value) {
Params.emplace_back(TParam {name, value});
+ return *this;
}
TString TUrlBuilder::Build() const {
- TString res = MainUri + "?";
- for (size_t i = 0; i < Params.size(); ++i) {
- res += TStringBuilder() << (i > 0 ? "&" : "") << Params[i].Name << "=" << CGIEscapeRet(Params[i].Value);
+ TStringBuilder res;
+ res << MainUri << "?";
+ TStringBuf separator = ""sv;
+ for (const auto& p : Params) {
+ res << separator << p.Name << "=" << CGIEscapeRet(p.Value);
+ separator = "&"sv;
}
- return res;
+ return std::move(res);
}
} // NYql
diff --git a/ydb/library/yql/utils/url_builder.h b/ydb/library/yql/utils/url_builder.h
index 87dbd99a52..5ef53e9e3d 100644
--- a/ydb/library/yql/utils/url_builder.h
+++ b/ydb/library/yql/utils/url_builder.h
@@ -13,7 +13,8 @@ class TUrlBuilder {
public:
explicit TUrlBuilder(const TString& uri);
- void AddUrlParam(const TString& name, const TString& value); // Assuming name is already escaped, do not use strings from user input
+ // Assuming name is already escaped, do not use strings from user input
+ TUrlBuilder& AddUrlParam(const TString& name, const TString& value);
TString Build() const;
private:
diff --git a/ydb/library/yql/utils/url_builder_ut.cpp b/ydb/library/yql/utils/url_builder_ut.cpp
index 22a15e85e6..d28ac955b3 100644
--- a/ydb/library/yql/utils/url_builder_ut.cpp
+++ b/ydb/library/yql/utils/url_builder_ut.cpp
@@ -14,10 +14,11 @@ Y_UNIT_TEST_SUITE(TUrlBuilder) {
}
Y_UNIT_TEST(Test1) {
- TUrlBuilder builder("https://localhost/abc");
- builder.AddUrlParam("param1", "=!@#$%^&*(){}[]\" ");
- builder.AddUrlParam("param2", "val2");
+ auto url = TUrlBuilder("https://localhost/abc")
+ .AddUrlParam("param1", "=!@#$%^&*(){}[]\" ")
+ .AddUrlParam("param2", "val2")
+ .Build();
- UNIT_ASSERT_VALUES_EQUAL(builder.Build(), "https://localhost/abc?param1=%3D!@%23$%25^%26*%28%29%7B%7D%5B%5D%22+&param2=val2");
+ UNIT_ASSERT_VALUES_EQUAL(url, "https://localhost/abc?param1=%3D!@%23$%25^%26*%28%29%7B%7D%5B%5D%22+&param2=val2");
}
}