From ed20d09b8af58963c431f92b7dc0e9ce3a03f04c Mon Sep 17 00:00:00 2001 From: Rahim Kanji Date: Thu, 16 Oct 2025 12:36:06 +0500 Subject: [PATCH] Replaced std::get_if with std::visit --- lib/PgSQL_Session.cpp | 52 +++++++++++++++++++++++++++---------------- 1 file changed, 33 insertions(+), 19 deletions(-) diff --git a/lib/PgSQL_Session.cpp b/lib/PgSQL_Session.cpp index f62acb81d..a6657486a 100644 --- a/lib/PgSQL_Session.cpp +++ b/lib/PgSQL_Session.cpp @@ -6234,25 +6234,39 @@ int PgSQL_Session::handler___status_PROCESSING_EXTENDED_QUERY_SYNC() { int rc = -1; - if (const std::unique_ptr* parse_msg = std::get_if>(&packet)) { - extended_query_phase = (extended_query_phase & ~EXTQ_PHASE_PROCESSING_MASK) | EXTQ_PHASE_PROCESSING_PARSE; - rc = handle_post_sync_parse_message(parse_msg->get()); - } else if (const std::unique_ptr* describe_msg = std::get_if>(&packet)) { - extended_query_phase = (extended_query_phase & ~EXTQ_PHASE_PROCESSING_MASK) | EXTQ_PHASE_PROCESSING_DESCRIBE; - rc = handle_post_sync_describe_message(describe_msg->get()); - } else if (const std::unique_ptr* close_msg = std::get_if>(&packet)) { - extended_query_phase = (extended_query_phase & ~EXTQ_PHASE_PROCESSING_MASK) | EXTQ_PHASE_PROCESSING_CLOSE; - rc = handle_post_sync_close_message(close_msg->get()); - } else if (const std::unique_ptr* bind_msg = std::get_if>(&packet)) { - extended_query_phase = (extended_query_phase & ~EXTQ_PHASE_PROCESSING_MASK) | EXTQ_PHASE_PROCESSING_BIND; - rc = handle_post_sync_bind_message(bind_msg->get()); - } else if (const std::unique_ptr* execute_msg = std::get_if>(&packet)) { - extended_query_phase = (extended_query_phase & ~EXTQ_PHASE_PROCESSING_MASK) | EXTQ_PHASE_PROCESSING_EXECUTE; - rc = handle_post_sync_execute_message(execute_msg->get()); - } else { - proxy_error("Unknown extended query message\n"); - assert(0); // this should never happen - } + rc = std::visit([&](auto&& msg_ptr) -> int { + using T = std::decay_t; + if constexpr (std::is_same_v>) { + extended_query_phase = (extended_query_phase & ~EXTQ_PHASE_PROCESSING_MASK) + | EXTQ_PHASE_PROCESSING_PARSE; + return handle_post_sync_parse_message(msg_ptr.get()); + } + else if constexpr (std::is_same_v>) { + extended_query_phase = (extended_query_phase & ~EXTQ_PHASE_PROCESSING_MASK) + | EXTQ_PHASE_PROCESSING_DESCRIBE; + return handle_post_sync_describe_message(msg_ptr.get()); + } + else if constexpr (std::is_same_v>) { + extended_query_phase = (extended_query_phase & ~EXTQ_PHASE_PROCESSING_MASK) + | EXTQ_PHASE_PROCESSING_CLOSE; + return handle_post_sync_close_message(msg_ptr.get()); + } + else if constexpr (std::is_same_v>) { + extended_query_phase = (extended_query_phase & ~EXTQ_PHASE_PROCESSING_MASK) + | EXTQ_PHASE_PROCESSING_BIND; + return handle_post_sync_bind_message(msg_ptr.get()); + } + else if constexpr (std::is_same_v>) { + extended_query_phase = (extended_query_phase & ~EXTQ_PHASE_PROCESSING_MASK) + | EXTQ_PHASE_PROCESSING_EXECUTE; + return handle_post_sync_execute_message(msg_ptr.get()); + } + else { + proxy_error("Unknown extended query message\n"); + assert(false); + return -1; + } + }, packet); if (rc == 2) { // incase of error, we discard all pending messages