Skip to content

Commit 7036a0a

Browse files
author
ivsudarikov
committed
feat postgresql: Allow passing ParameterStore to QueryQueue
Allow passing ParameterStore to QueryQueue commit_hash:a1891874f17ffc8e179ce3d2f02bef9d062e220a
1 parent 598550b commit 7036a0a

File tree

3 files changed

+32
-0
lines changed

3 files changed

+32
-0
lines changed

postgresql/include/userver/storages/postgres/query_queue.hpp

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@ USERVER_NAMESPACE_BEGIN
1818

1919
namespace storages::postgres {
2020

21+
class ParameterStore;
22+
2123
/// @brief A container to enqueue queries in FIFO order and execute them all
2224
/// within a single network round-trip.
2325
///
@@ -59,10 +61,12 @@ class QueryQueue final {
5961
/// timeout for later execution.
6062
template <typename... Args>
6163
void Push(CommandControl cc, const Query& query, const Args&... args);
64+
void Push(CommandControl cc, const Query& query, const ParameterStore& store);
6265

6366
/// Add a query into the queue with default command-control.
6467
template <typename... Args>
6568
void Push(const Query& query, const Args&... args);
69+
void Push(const Query& query, const ParameterStore& store);
6670

6771
/// Collect results of all the queued queries, with specified timeout.
6872
/// Either returns a vector of N `ResultSet`s, where N is the number of

postgresql/src/storages/postgres/query_queue.cpp

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -94,6 +94,12 @@ void QueryQueue::DoPush(CommandControl cc, const Query& query, ParamsHolder&& pa
9494

9595
void QueryQueue::ValidateUsage() const { UINVARIANT(conn_, "The query queue is finalized and no longer usable."); }
9696

97+
void QueryQueue::Push(CommandControl cc, const Query& query, const ParameterStore& store) {
98+
DoPush(cc, query, ParamsHolder{{}, detail::QueryParameters(store.GetInternalData())});
99+
}
100+
101+
void QueryQueue::Push(const Query& query, const ParameterStore& store) { Push(default_cc_, query, store); }
102+
97103
} // namespace storages::postgres
98104

99105
USERVER_NAMESPACE_END

postgresql/src/storages/postgres/tests/query_queue_pgtest.cpp

Lines changed: 22 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,28 @@ UTEST_P(PostgreConnection, QueryQueueSelectMultiple) {
5151
}
5252
}
5353

54+
UTEST_P(PostgreConnection, QueryQueueParametersStore) {
55+
CheckConnection(GetConn());
56+
if (!GetConn()->IsPipelineActive()) {
57+
return;
58+
}
59+
60+
using RowTuple = std::tuple<int, std::string>;
61+
const auto values = RowTuple{1, "str"};
62+
63+
pg::QueryQueue query_queue{kDefaultCC, std::move(GetConn())};
64+
pg::ParameterStore store;
65+
store.PushBack(std::get<0>(values));
66+
store.PushBack(std::get<1>(values));
67+
68+
UEXPECT_NO_THROW(query_queue.Push(kDefaultCC, "SELECT $1, $2", store));
69+
QueryQueueResult result{};
70+
UEXPECT_NO_THROW(result = query_queue.Collect(kCollectTimeout));
71+
72+
ASSERT_EQ(1, result.size());
73+
EXPECT_EQ(values, result.front().AsSingleRow<RowTuple>(pg::kRowTag));
74+
}
75+
5476
UTEST_P(PostgreConnection, QueryQueueTimeout) {
5577
CheckConnection(GetConn());
5678
if (!GetConn()->IsPipelineActive()) {

0 commit comments

Comments
 (0)