From 011d8f96e84aee90065c47590c62a2cecd963109 Mon Sep 17 00:00:00 2001 From: Tomasz Sowa Date: Wed, 24 Oct 2018 16:28:19 +0000 Subject: [PATCH] fixed: in Finder: we should set model_data to nullptr after fetching an object model_data points often to a local object (on the stack) so it would be incorrect to use it in the future git-svn-id: svn://ttmath.org/publicrep/morm/trunk@1131 e52654a7-88a9-db11-a3e9-0013d4bc506e --- src/finder.h | 25 ++++++++++++++++++------- 1 file changed, 18 insertions(+), 7 deletions(-) diff --git a/src/finder.h b/src/finder.h index f0a17ce..2f06224 100644 --- a/src/finder.h +++ b/src/finder.h @@ -475,6 +475,7 @@ public: // if yes then make sure to call db_connector->clear_last_query_result(); } + result.model_data = nullptr; db_connector->clear_last_query_result(); } } @@ -519,14 +520,24 @@ public: result.emplace_back(); // it returns a reference from c++17 ModelClass & added_model = result.back(); - added_model.set_connector(model_connector); - added_model.clear(); - added_model.set_save_mode(Model::DO_UPDATE_ON_SAVE); // IMPROVE ME check if there is a primary key - added_model.model_data = model_data; - added_model.before_select(); - added_model.map_values_from_query(); - added_model.after_select(); + try + { + added_model.set_connector(model_connector); + added_model.clear(); + added_model.set_save_mode(Model::DO_UPDATE_ON_SAVE); // IMPROVE ME check if there is a primary key + added_model.model_data = model_data; + added_model.before_select(); + added_model.map_values_from_query(); + added_model.after_select(); + } + catch(...) + { + res = false; + // throw or something? + // make sure to call db_connector->clear_last_query_result() + } + added_model.model_data = nullptr; db_connector->advance_current_row(); }