diff --git a/3rdparty/serializer b/3rdparty/serializer index b3c550c..e2d8a72 160000 --- a/3rdparty/serializer +++ b/3rdparty/serializer @@ -1 +1 @@ -Subproject commit b3c550c5bb7c570b1b10492fcedf287c1915af39 +Subproject commit e2d8a726ef1396c47bf35347ea8b55ca47c6af3b diff --git a/README.md b/README.md index aa4fddd..8eacca4 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,10 @@ | master | [![Build Status](https://travis-ci.org/HamedMasafi/Nut.svg?branch=master)](https://travis-ci.org/HamedMasafi/Nut) | | dev | [![Build Status](https://travis-ci.org/HamedMasafi/Nut.svg?branch=dev)](https://travis-ci.org/HamedMasafi/Nut) | +[![GitLicense](https://gitlicense.com/badge/hamedmasafi/nut)](https://gitlicense.com/license/hamedmasafi/nut) + +[![Codacy +Badge](https://api.codacy.com/project/badge/Grade/f3802610beb946068f6cd2c2b6608a8b)](https://www.codacy.com/app/HamedMasafi/Nut?utm_source=github.com&utm_medium=referral&utm_content=HamedMasafi/Nut&utm_campaign=Badge_Grade) ## Advanced, Powerful and easy to use ORM for Qt5 diff --git a/src/bulkinserter.h b/src/bulkinserter.h index 04df4b2..734689a 100644 --- a/src/bulkinserter.h +++ b/src/bulkinserter.h @@ -5,6 +5,7 @@ #include #include "defines.h" #include "phrases/phraselist.h" +#include "phrases/fieldphrase.h" NUT_BEGIN_NAMESPACE diff --git a/src/database.cpp b/src/database.cpp index ade2fb6..ce9dfe3 100644 --- a/src/database.cpp +++ b/src/database.cpp @@ -175,6 +175,9 @@ bool DatabasePrivate::updateDatabase() if (db.lastError().type() == QSqlError::NoError) { q->databaseUpdated(last.version(), current.version()); + if (!last.count()) + q->databaseCreated(); + } else { qWarning("Unable update database, error = %s", db.lastError().text().toLatin1().data()); @@ -541,6 +544,11 @@ QSqlDatabase Database::database() return d->db; } +void Database::databaseCreated() +{ + +} + void Database::databaseUpdated(int oldVersion, int newVersion) { Q_UNUSED(oldVersion); diff --git a/src/database.h b/src/database.h index bfeab75..65d088a 100644 --- a/src/database.h +++ b/src/database.h @@ -73,6 +73,7 @@ public: protected: //remove minor version + virtual void databaseCreated(); virtual void databaseUpdated(int oldVersion, int newVersion); public slots: diff --git a/src/generators/sqlgeneratorbase.cpp b/src/generators/sqlgeneratorbase.cpp index 4d9bfcd..22b0757 100644 --- a/src/generators/sqlgeneratorbase.cpp +++ b/src/generators/sqlgeneratorbase.cpp @@ -827,6 +827,7 @@ QString SqlGeneratorBase::escapeValue(const QVariant &v) const qWarning("No field escape rule for: %s", v.typeName()); return QString(); } + return "'" + serialized + "'"; } diff --git a/src/phrases/conditionalphrase.cpp b/src/phrases/conditionalphrase.cpp index 6fcb09d..ec210b6 100644 --- a/src/phrases/conditionalphrase.cpp +++ b/src/phrases/conditionalphrase.cpp @@ -144,6 +144,7 @@ ConditionalPhrase operator op(const ConditionalPhrase &l, \ { \ ConditionalPhrase p; \ p.data = new PhraseData; \ + p.data->type = PhraseData::WithOther; \ p.data->operatorCond = cond; \ p.data->left = l.data; \ p.data->right = r.data; \ @@ -156,6 +157,7 @@ ConditionalPhrase operator op(const ConditionalPhrase &l, \ { \ ConditionalPhrase p; \ p.data = new PhraseData; \ + p.data->type = PhraseData::WithOther; \ p.data->operatorCond = cond; \ p.data->left = l.data; \ p.data->right = r.data; \ @@ -168,6 +170,7 @@ ConditionalPhrase operator op(ConditionalPhrase &&l, \ { \ ConditionalPhrase p; \ p.data = new PhraseData; \ + p.data->type = PhraseData::WithOther; \ p.data->operatorCond = cond; \ p.data->left = l.data; \ p.data->right = r.data; \ @@ -179,6 +182,7 @@ ConditionalPhrase operator op(ConditionalPhrase &&l, ConditionalPhrase &&r) \ { \ ConditionalPhrase p; \ p.data = new PhraseData; \ + p.data->type = PhraseData::WithOther; \ p.data->operatorCond = cond; \ p.data->left = l.data; \ p.data->right = r.data; \ diff --git a/src/query.h b/src/query.h index d5cc823..4103590 100644 --- a/src/query.h +++ b/src/query.h @@ -83,7 +83,7 @@ public: QVariant min(const FieldPhrase &f); QVariant average(const FieldPhrase &f); - QVariant insert(AssignmentPhraseList p); + QVariant insert(const AssignmentPhraseList &p); //data mailpulation int update(const AssignmentPhraseList &ph); @@ -91,6 +91,7 @@ public: int remove(); QSqlQueryModel *toModel(); + void toModel(QSqlQueryModel *model); //debug purpose QString sqlCommand() const; @@ -137,7 +138,7 @@ Q_OUTOFLINE_TEMPLATE QList Query::toList(int count) d->sql = d->database->sqlGenertor()->selectCommand( d->tableName, d->fieldPhrase, d->wherePhrase, d->orderPhrase, d->relations, d->skip, d->take); -qDebug() << d->sql; + QSqlQuery q = d->database->exec(d->sql); if (q.lastError().isValid()) { qDebug() << q.lastError().text(); @@ -410,7 +411,7 @@ Q_OUTOFLINE_TEMPLATE QVariant Query::average(const FieldPhrase &f) } template -Q_OUTOFLINE_TEMPLATE QVariant Query::insert(AssignmentPhraseList p) +Q_OUTOFLINE_TEMPLATE QVariant Query::insert(const AssignmentPhraseList &p) { Q_D(Query); d->sql = d->database->sqlGenertor() @@ -518,6 +519,7 @@ Q_OUTOFLINE_TEMPLATE int Query::update(const AssignmentPhraseList &ph) d->tableName, ph, d->wherePhrase); + QSqlQuery q = d->database->exec(d->sql); if (m_autoDelete) @@ -541,6 +543,14 @@ Q_OUTOFLINE_TEMPLATE int Query::remove() template Q_OUTOFLINE_TEMPLATE QSqlQueryModel *Query::toModel() +{ + QSqlQueryModel *model = new QSqlQueryModel; + toModel(model); + return model; +} + +template +Q_OUTOFLINE_TEMPLATE void Query::toModel(QSqlQueryModel *model) { Q_D(Query); @@ -551,7 +561,6 @@ Q_OUTOFLINE_TEMPLATE QSqlQueryModel *Query::toModel() d->skip, d->take); DatabaseModel dbModel = d->database->model(); - QSqlQueryModel *model = new QSqlQueryModel; model->setQuery(d->sql, d->database->database()); int fieldIndex = 0; @@ -573,8 +582,6 @@ Q_OUTOFLINE_TEMPLATE QSqlQueryModel *Query::toModel() f->displayName); } } - - return model; } template