Skip to content

Commit 346c42c

Browse files
committed
Improve mapper handling of new identifiers of the dabase objects
1 parent 1d861f5 commit 346c42c

File tree

4 files changed

+10
-48
lines changed

4 files changed

+10
-48
lines changed

src/corelib/data_layer/mapper/abstract_mapper.cpp

Lines changed: 8 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ namespace DataMappingLayer {
1919

2020
void AbstractMapper::clear()
2121
{
22-
m_isLastIdentifierLoaded = false;
2322
for (auto& [key, value] : m_loadedObjectsMap) {
2423
delete value;
2524
value = nullptr;
@@ -55,16 +54,6 @@ QVector<Domain::DomainObject*> AbstractMapper::abstractFind(const QString& _filt
5554

5655
bool AbstractMapper::abstractInsert(DomainObject* _object)
5756
{
58-
//
59-
// Установим идентификатор для нового объекта
60-
//
61-
_object->setId(findNextIdentifier());
62-
63-
//
64-
// Добавим вновь созданный объект в список загруженных объектов
65-
//
66-
m_loadedObjectsMap.emplace(_object->id(), _object);
67-
6857
//
6958
// Получим данные для формирования запроса на их добавление
7059
//
@@ -85,7 +74,15 @@ bool AbstractMapper::abstractInsert(DomainObject* _object)
8574
//
8675
const auto isInsertSuccesful = executeSql(insertQuery);
8776
if (isInsertSuccesful) {
77+
//
78+
// .. если добавление оказалось успешным, определим идентификатор объекта
79+
//
80+
_object->setId(Identifier(insertQuery.lastInsertId().toInt()));
8881
_object->markChangesStored();
82+
//
83+
// ... и добавим вновь созданный объект в список загруженных объектов
84+
//
85+
m_loadedObjectsMap.emplace(_object->id(), _object);
8986
}
9087
return isInsertSuccesful;
9188
}
@@ -191,31 +188,6 @@ DomainObject* AbstractMapper::loadObjectFromDatabase(const Identifier& _id)
191188
return result;
192189
}
193190

194-
Identifier AbstractMapper::findNextIdentifier()
195-
{
196-
if (!m_isLastIdentifierLoaded) {
197-
//
198-
// Если нет ещё последнего индекса по таблице, загрузим его
199-
//
200-
QSqlQuery query = Database::query();
201-
query.prepare(findLastOneStatement());
202-
query.exec();
203-
query.next();
204-
const QSqlRecord record = query.record();
205-
load(record);
206-
207-
m_isLastIdentifierLoaded = true;
208-
}
209-
210-
Identifier maxId(0);
211-
if (!m_loadedObjectsMap.empty()) {
212-
auto iter = m_loadedObjectsMap.cend();
213-
--iter;
214-
maxId = iter->first;
215-
}
216-
return maxId.next();
217-
}
218-
219191
DomainObject* AbstractMapper::load(const QSqlRecord& _record)
220192
{
221193
const int idValue = _record.value("id").toInt();

src/corelib/data_layer/mapper/abstract_mapper.h

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -71,22 +71,12 @@ class AbstractMapper
7171
*/
7272
Domain::DomainObject* loadObjectFromDatabase(const Domain::Identifier& _id);
7373

74-
/**
75-
* @brief Получить идентификатор для нового объекта на сохранение в БД
76-
*/
77-
Domain::Identifier findNextIdentifier();
78-
7974
/**
8075
* @brief Загрузить или обновить объект из записи в БД
8176
*/
8277
Domain::DomainObject* load(const QSqlRecord& _record);
8378

8479
private:
85-
/**
86-
* @brief Был ли загружен идентификатор последнего элемента
87-
*/
88-
bool m_isLastIdentifierLoaded = false;
89-
9080
/**
9181
* @brief Загруженные объекты из базы данных
9282
*/

src/corelib/data_layer/mapper/document_change_mapper.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -186,7 +186,7 @@ QString DocumentChangeMapper::insertStatement(Domain::DomainObject* _object,
186186

187187
const auto documentChangeObject = static_cast<DocumentChangeObject*>(_object);
188188
_insertValues.clear();
189-
_insertValues.append(documentChangeObject->id().value());
189+
_insertValues.append(QVariant());
190190
_insertValues.append(documentChangeObject->documentUuid().toString());
191191
_insertValues.append(documentChangeObject->uuid().toString());
192192
_insertValues.append(qCompress(documentChangeObject->undoPatch()));

src/corelib/data_layer/mapper/document_mapper.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -126,7 +126,7 @@ QString DocumentMapper::insertStatement(DomainObject* _object, QVariantList& _in
126126

127127
const auto documentObject = static_cast<DocumentObject*>(_object);
128128
_insertValues.clear();
129-
_insertValues.append(documentObject->id().value());
129+
_insertValues.append(QVariant());
130130
_insertValues.append(documentObject->uuid().toString());
131131
_insertValues.append(static_cast<int>(documentObject->type()));
132132
_insertValues.append(documentObject->content());

0 commit comments

Comments
 (0)