added: Model::ModelData base class to use with Finder, Model.update(), Model.insert() and Model.remove()

added: Model.add_field_for_select() method 




git-svn-id: svn://ttmath.org/publicrep/morm/trunk@1092 e52654a7-88a9-db11-a3e9-0013d4bc506e
This commit is contained in:
2018-04-22 21:04:50 +00:00
parent 4c0d203fc8
commit fd1cc7debe
11 changed files with 287 additions and 63 deletions

View File

@@ -41,6 +41,7 @@ namespace morm
Model::Model()
{
model_connector = nullptr;
model_data = nullptr;
save_mode = DO_INSERT_ON_SAVE;
}
@@ -181,15 +182,30 @@ void Model::generate_insert_query(PT::TextStream & stream)
}
void Model::insert()
bool Model::insert(ModelData * model_data)
{
bool result = false;
if( model_connector )
{
this->model_data = model_data;
if( model_connector->insert(*this) )
{
save_mode = DO_UPDATE_ON_SAVE;
save_mode = DO_UPDATE_ON_SAVE; // IMPROVE ME check if there is a primary key
result = true;
}
this->model_data = nullptr;
}
return result;
}
bool Model::insert(ModelData & model_data)
{
return insert(&model_data);
}
@@ -202,12 +218,24 @@ void Model::generate_update_query(PT::TextStream & stream)
}
void Model::update()
bool Model::update(ModelData * model_data)
{
bool result = false;
if( model_connector )
{
model_connector->update(*this);
this->model_data = model_data;
result = model_connector->update(*this);
this->model_data = nullptr;
}
return result;
}
bool Model::update(ModelData & model_data)
{
return update(&model_data);
}
@@ -220,37 +248,63 @@ void Model::generate_remove_query(PT::TextStream & stream)
}
void Model::remove()
bool Model::remove(ModelData * model_data)
{
bool result = false;
if( model_connector )
{
this->model_data = model_data;
if( model_connector->remove(*this) )
{
save_mode = DO_INSERT_ON_SAVE;
result = true;
}
this->model_data = nullptr;
}
return result;
}
void Model::save()
bool Model::remove(ModelData & model_data)
{
return remove(&model_data);
}
bool Model::save(ModelData * model_data)
{
bool result = false;
switch( save_mode )
{
case DO_DELETE_ON_SAVE:
remove();
result = remove(model_data);
break;
case DO_INSERT_ON_SAVE:
insert();
result = insert(model_data);
break;
case DO_UPDATE_ON_SAVE:
update();
result = update(model_data);
break;
case DO_NOTHING_ON_SAVE:
// may return true?
break;
}
return result;
}
bool Model::save(ModelData & model_data)
{
return save(&model_data);
}
@@ -262,6 +316,7 @@ void Model::clear()
}
save_mode = DO_INSERT_ON_SAVE;
model_data = nullptr;
}