Skip to content

Commit bb2e157

Browse files
committed
pqxx::field wrapper for psql_array_to_vector
1 parent 4509dca commit bb2e157

File tree

2 files changed

+16
-11
lines changed

2 files changed

+16
-11
lines changed

include/cgimap/backend/apidb/common_pgsql_selection.hpp

+1
Original file line numberDiff line numberDiff line change
@@ -54,5 +54,6 @@ void extract_changesets(
5454
// parses psql array based on specs given
5555
// https://www.postgresql.org/docs/current/static/arrays.html#ARRAYS-IO
5656
std::vector<std::string> psql_array_to_vector(std::string_view str);
57+
std::vector<std::string> psql_array_to_vector(const pqxx::field& field);
5758

5859
#endif /* CGIMAP_BACKEND_APIDB_COMMON_PGSQL_SELECTION_HPP */

src/backend/apidb/common_pgsql_selection.cpp

+15-11
Original file line numberDiff line numberDiff line change
@@ -199,8 +199,8 @@ std::optional<T> extract_optional(const pqxx_field &f) {
199199

200200
tags_t tags;
201201

202-
auto keys = psql_array_to_vector(row[col.tag_k_col].c_str());
203-
auto values = psql_array_to_vector(row[col.tag_v_col].c_str());
202+
auto keys = psql_array_to_vector(row[col.tag_k_col]);
203+
auto values = psql_array_to_vector(row[col.tag_v_col]);
204204

205205
if (keys.size() != values.size()) {
206206
throw std::runtime_error("Mismatch in tags key and value size");
@@ -218,7 +218,7 @@ std::optional<T> extract_optional(const pqxx_field &f) {
218218

219219
nodes_t nodes;
220220

221-
auto ids = psql_array_to_vector(row[col.node_ids_col].c_str());
221+
auto ids = psql_array_to_vector(row[col.node_ids_col]);
222222

223223
nodes.reserve(ids.size());
224224

@@ -269,9 +269,9 @@ element_type type_from_name(const char *name) {
269269

270270
members_t members;
271271

272-
auto types = psql_array_to_vector(row[col.member_types_col].c_str());
273-
auto ids = psql_array_to_vector(row[col.member_ids_col].c_str());
274-
auto roles = psql_array_to_vector(row[col.member_roles_col].c_str());
272+
auto types = psql_array_to_vector(row[col.member_types_col]);
273+
auto ids = psql_array_to_vector(row[col.member_ids_col]);
274+
auto roles = psql_array_to_vector(row[col.member_roles_col]);
275275

276276
if (types.size() != ids.size() ||
277277
ids.size() != roles.size()) {
@@ -303,11 +303,11 @@ element_type type_from_name(const char *name) {
303303

304304
comments_t comments;
305305

306-
auto id = psql_array_to_vector(row[col.comment_id_col].c_str());
307-
auto author_id = psql_array_to_vector(row[col.comment_author_id_col].c_str());
308-
auto display_name = psql_array_to_vector(row[col.comment_display_name_col].c_str());
309-
auto body = psql_array_to_vector(row[col.comment_body_col].c_str());
310-
auto created_at = psql_array_to_vector(row[col.comment_created_at_col].c_str());
306+
auto id = psql_array_to_vector(row[col.comment_id_col]);
307+
auto author_id = psql_array_to_vector(row[col.comment_author_id_col]);
308+
auto display_name = psql_array_to_vector(row[col.comment_display_name_col]);
309+
auto body = psql_array_to_vector(row[col.comment_body_col]);
310+
auto created_at = psql_array_to_vector(row[col.comment_created_at_col]);
311311

312312
if (id.size() != author_id.size() ||
313313
author_id.size() != display_name.size() ||
@@ -465,6 +465,10 @@ void extract_changesets(
465465
}
466466
}
467467

468+
std::vector<std::string> psql_array_to_vector(const pqxx::field& field) {
469+
return psql_array_to_vector(std::string_view(field.c_str(), field.size()));
470+
}
471+
468472
std::vector<std::string> psql_array_to_vector(std::string_view str) {
469473
std::vector<std::string> strs;
470474
std::string value;

0 commit comments

Comments
 (0)