fixed: finder.get() didn't check whether the resultset had exactly one item
git-svn-id: svn://ttmath.org/publicrep/morm/trunk@1098 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
22
src/finder.h
22
src/finder.h
@@ -204,16 +204,24 @@ public:
|
|||||||
return *this;
|
return *this;
|
||||||
}
|
}
|
||||||
|
|
||||||
Finder<ModelClass> & select(Model::ModelData * model_data)
|
Finder<ModelClass> & select(Model::ModelData * model_data, bool call_prepare = true)
|
||||||
|
{
|
||||||
|
if( call_prepare )
|
||||||
{
|
{
|
||||||
prepare_to_select();
|
prepare_to_select();
|
||||||
|
}
|
||||||
|
|
||||||
this->model_data = model_data;
|
this->model_data = model_data;
|
||||||
return select(false);
|
return select(false);
|
||||||
}
|
}
|
||||||
|
|
||||||
Finder<ModelClass> & select(Model::ModelData & model_data)
|
Finder<ModelClass> & select(Model::ModelData & model_data, bool call_prepare = true)
|
||||||
|
{
|
||||||
|
if( call_prepare )
|
||||||
{
|
{
|
||||||
prepare_to_select();
|
prepare_to_select();
|
||||||
|
}
|
||||||
|
|
||||||
this->model_data = &model_data;
|
this->model_data = &model_data;
|
||||||
return select(false);
|
return select(false);
|
||||||
}
|
}
|
||||||
@@ -416,18 +424,27 @@ public:
|
|||||||
res = db_connector->query_select(*out_stream);
|
res = db_connector->query_select(*out_stream);
|
||||||
|
|
||||||
if( res )
|
if( res )
|
||||||
|
{
|
||||||
|
if( db_connector->last_select_size() == 1 )
|
||||||
{
|
{
|
||||||
result.set_save_mode(Model::DO_UPDATE_ON_SAVE); // IMPROVE ME check if there is a primary key
|
result.set_save_mode(Model::DO_UPDATE_ON_SAVE); // IMPROVE ME check if there is a primary key
|
||||||
model_connector->map_values_from_query(result);
|
model_connector->map_values_from_query(result);
|
||||||
result.after_select();
|
result.after_select();
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
{
|
||||||
|
res = false;
|
||||||
|
// log some error or throw an exception if there are more items than one?
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
result.after_select_failure();
|
result.after_select_failure();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
{
|
{
|
||||||
|
res = false;
|
||||||
// throw something?
|
// throw something?
|
||||||
// if yes then make sure to call db_connector->clear_last_query_result();
|
// if yes then make sure to call db_connector->clear_last_query_result();
|
||||||
}
|
}
|
||||||
@@ -497,6 +514,7 @@ public:
|
|||||||
}
|
}
|
||||||
catch(...)
|
catch(...)
|
||||||
{
|
{
|
||||||
|
res = false;
|
||||||
// throw or something?
|
// throw or something?
|
||||||
// make sure to call db_connector->clear_last_query_result()
|
// make sure to call db_connector->clear_last_query_result()
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user