uonedb-qt team mailing list archive
-
uonedb-qt team
-
Mailing list archive
-
Message #00336
[Merge] lp:~uonedb-qt/u1db-qt/smartDefaultDocs into lp:u1db-qt
Christian Dywan has proposed merging lp:~uonedb-qt/u1db-qt/smartDefaultDocs into lp:u1db-qt.
Commit message:
Avoid loading contents and revision for default documents
Requested reviews:
U1DB Qt developers (uonedb-qt)
For more details, see:
https://code.launchpad.net/~uonedb-qt/u1db-qt/smartDefaultDocs/+merge/245638
--
Your team U1DB Qt developers is requested to review the proposed merge of lp:~uonedb-qt/u1db-qt/smartDefaultDocs into lp:u1db-qt.
=== modified file 'src/database.cpp'
--- src/database.cpp 2014-11-07 14:30:31 +0000
+++ src/database.cpp 2015-01-06 10:46:20 +0000
@@ -377,55 +377,39 @@
QString Database::getNextDocRevisionNumber(QString doc_id)
{
-
QString revision_number = getReplicaUid()+":1";
-
QString current_revision_number = getCurrentDocRevisionNumber(doc_id);
/*!
Some revisions contain information from previous
conflicts/syncs. Revisions are delimited by '|'.
-
*/
QStringList current_revision_list = current_revision_number.split("|");
-
Q_FOREACH (QString current_revision, current_revision_list) {
/*!
Each revision contains two pieces of information,
the uid of the database that made the revsion, and a counter
for the revsion. This information is delimited by ':'.
-
*/
QStringList current_revision_number_list = current_revision.split(":");
-
if(current_revision_number_list[0]==getReplicaUid()) {
/*!
If the current revision uid is the same as this Database's uid the counter portion is increased by one.
-
*/
int revision_generation_number = current_revision_number_list[1].toInt()+1;
-
revision_number = getReplicaUid()+":"+QString::number(revision_generation_number);
-
}
else {
/*!
If the current revision uid is not the same as this Database's uid then the revision represents a change that originated in another database.
-
- */
- //revision_number+="|"+current_revision;
-
- /* Not sure if the above is necessary,
- *and did not appear to be working as intended either.
- *
- * Commented out, but maybe OK to delete.
- */
+ */
+ // FIXME: revision_number+="|"+current_revision;
}
}
@@ -436,9 +420,7 @@
*/
revision_number = revision_number.replace("{","");
-
revision_number = revision_number.replace("}","");
-
return revision_number;
}
@@ -618,10 +600,10 @@
there's no error.
If no \a docId is given or \a docId is an empty string the \a contents will be
stored under an autogenerated name.
- Returns the new revision of the document, or -1 on failure.
+ Returns the new \a revision of the document, or -1 on failure.
*/
QString
-Database::putDoc(QVariant contents, const QString& docId)
+Database::putDoc(QVariant contents, const QString& docId, const QString& revision)
{
if (!initializeIfNeeded())
return "";
@@ -629,16 +611,15 @@
ScopedTransaction t(m_db);
QString newOrEmptyDocId(docId);
- QVariant oldDoc = newOrEmptyDocId.isEmpty() ? QVariant() : getDocUnchecked(newOrEmptyDocId);
-
- QString revision_number = getNextDocRevisionNumber(newOrEmptyDocId);
+ QVariant oldDoc = newOrEmptyDocId.isEmpty() || !revision.isEmpty() ? QVariant() : getDocUnchecked(newOrEmptyDocId);
+ QString newRevisionNumber = revision.isEmpty() ? getNextDocRevisionNumber(newOrEmptyDocId) : revision;
QSqlQuery query(m_db.exec());
if (oldDoc.isValid())
{
query.prepare("UPDATE document SET doc_rev=:docRev, content=:docJson WHERE doc_id = :docId");
query.bindValue(":docId", newOrEmptyDocId);
- query.bindValue(":docRev", revision_number);
+ query.bindValue(":docRev", newRevisionNumber);
// Parse Variant from QML as JsonDocument, fallback to string
QString json(QJsonDocument::fromVariant(contents).toJson());
query.bindValue(":docJson", json.isEmpty() ? contents : json);
@@ -650,7 +631,6 @@
return setError(QString("Failed to delete document field %1: %2\n%3").arg(newOrEmptyDocId).arg(query.lastError().text()).arg(query.lastQuery())) ? "" : "";
createNewTransaction(newOrEmptyDocId);
-
}
else
{
@@ -661,7 +641,7 @@
query.prepare("INSERT INTO document (doc_id, doc_rev, content) VALUES (:docId, :docRev, :docJson)");
query.bindValue(":docId", newOrEmptyDocId);
- query.bindValue(":docRev", revision_number);
+ query.bindValue(":docRev", newRevisionNumber);
// Parse Variant from QML as JsonDocument, fallback to string
QJsonDocument json(QJsonDocument::fromVariant(contents));
query.bindValue(":docJson", json.isEmpty() ? contents : json.toJson());
@@ -680,7 +660,7 @@
Q_EMIT docChanged(newOrEmptyDocId, contents);
- return revision_number;
+ return newRevisionNumber;
}
/*!
=== modified file 'src/database.h'
--- src/database.h 2014-01-24 11:13:35 +0000
+++ src/database.h 2015-01-06 10:46:20 +0000
@@ -48,7 +48,7 @@
Q_INVOKABLE QVariant getDoc(const QString& docId);
QString getDocumentContents(const QString& docId);
QVariant getDocUnchecked(const QString& docId) const;
- Q_INVOKABLE QString putDoc(QVariant newDoc, const QString& docID=QString());
+ Q_INVOKABLE QString putDoc(QVariant newDoc, const QString& docID=QString(), const QString& rev=QString());
Q_INVOKABLE void deleteDoc(const QString& docID);
Q_INVOKABLE QList<QString> listDocs();
Q_INVOKABLE QString lastError();
@@ -57,6 +57,7 @@
Q_INVOKABLE QStringList getIndexKeys(const QString& indexName);
/* Functions handy for Synchronization */
+ QString getReplicaUid();
QString getNextDocRevisionNumber(QString doc_id);
QString getCurrentDocRevisionNumber(QString doc_id);
void updateDocRevisionNumber(QString doc_id,QString revision);
@@ -81,7 +82,6 @@
QSqlDatabase m_db;
QString m_error;
- QString getReplicaUid();
bool isInitialized();
bool initializeIfNeeded(const QString& path=":memory:");
bool setError(const QString& error);
=== modified file 'src/document.cpp'
--- src/document.cpp 2013-04-23 15:17:24 +0000
+++ src/document.cpp 2015-01-06 10:46:20 +0000
@@ -152,8 +152,8 @@
m_create = create;
Q_EMIT createChanged(create);
- if (m_create && m_database && m_defaults.isValid() && !m_database->getDocUnchecked(m_docId).isValid())
- m_database->putDoc(m_defaults, m_docId);
+ if (m_create && m_database && m_defaults.isValid() && !m_contents.isValid())
+ m_database->putDoc(m_defaults, m_docId, m_database->getReplicaUid() + ":1");
}
QVariant
@@ -178,8 +178,8 @@
m_defaults = defaults;
Q_EMIT defaultsChanged(defaults);
- if (m_create && m_database && m_defaults.isValid() && !m_database->getDocUnchecked(m_docId).isValid())
- m_database->putDoc(m_defaults, m_docId);
+ if (m_create && m_database && m_defaults.isValid() && !m_contents.isValid())
+ m_database->putDoc(m_defaults, m_docId, m_database->getReplicaUid() + ":1");
}
QVariant
Follow ups