@@ -54,6 +54,16 @@ namespace {
5454
5555}
5656
57+ void Executor::ConnectionInvalidator::invalidate (const std::shared_ptr<orm::Connection>& connection) {
58+ auto c = std::static_pointer_cast<Connection>(connection);
59+ auto invalidator = c->getInvalidator ();
60+ if (!invalidator) {
61+ throw std::runtime_error (" [oatpp::postgresql::Executor::ConnectionInvalidator::invalidate()]: Error. "
62+ " Connection invalidator was NOT set." );
63+ }
64+ invalidator->invalidate (c);
65+ }
66+
5767Executor::QueryParams::QueryParams (const StringTemplate& queryTemplate,
5868 const std::unordered_map<oatpp::String, oatpp::Void>& params,
5969 const mapping::Serializer& serializer,
@@ -123,8 +133,9 @@ Executor::QueryParams::QueryParams(const StringTemplate& queryTemplate,
123133
124134}
125135
126- Executor::Executor (const std::shared_ptr<provider::Provider<orm::Connection>>& connectionProvider)
127- : m_connectionProvider(connectionProvider)
136+ Executor::Executor (const std::shared_ptr<provider::Provider<Connection>>& connectionProvider)
137+ : m_connectionInvalidator(std::make_shared<ConnectionInvalidator>())
138+ , m_connectionProvider(connectionProvider)
128139 , m_resultMapper(std::make_shared<mapping::ResultMapper>())
129140{
130141 m_defaultTypeResolver->addKnownClasses ({
@@ -288,7 +299,12 @@ data::share::StringTemplate Executor::parseQueryTemplate(const oatpp::String& na
288299provider::ResourceHandle<orm::Connection> Executor::getConnection () {
289300 auto connection = m_connectionProvider->get ();
290301 if (connection) {
291- return connection;
302+ /* set correct invalidator before cast */
303+ connection.object ->setInvalidator (connection.invalidator );
304+ return provider::ResourceHandle<orm::Connection>(
305+ connection.object ,
306+ m_connectionInvalidator
307+ );
292308 }
293309 throw std::runtime_error (" [oatpp::postgresql::Executor::getConnection()]: Error. Can't connect." );
294310}
0 commit comments