Merge branch 'dev' of https://github.com/HamedMasafi/Nut into dev
This commit is contained in:
commit
7bdb0fdd6d
|
|
@ -1 +1 @@
|
||||||
Subproject commit b3c550c5bb7c570b1b10492fcedf287c1915af39
|
Subproject commit e2d8a726ef1396c47bf35347ea8b55ca47c6af3b
|
||||||
|
|
@ -8,6 +8,10 @@
|
||||||
| master | [](https://travis-ci.org/HamedMasafi/Nut) |
|
| master | [](https://travis-ci.org/HamedMasafi/Nut) |
|
||||||
| dev | [](https://travis-ci.org/HamedMasafi/Nut) |
|
| dev | [](https://travis-ci.org/HamedMasafi/Nut) |
|
||||||
|
|
||||||
|
[](https://gitlicense.com/license/hamedmasafi/nut)
|
||||||
|
|
||||||
|
[](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
|
## Advanced, Powerful and easy to use ORM for Qt5
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -5,6 +5,7 @@
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include "defines.h"
|
#include "defines.h"
|
||||||
#include "phrases/phraselist.h"
|
#include "phrases/phraselist.h"
|
||||||
|
#include "phrases/fieldphrase.h"
|
||||||
|
|
||||||
NUT_BEGIN_NAMESPACE
|
NUT_BEGIN_NAMESPACE
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -175,6 +175,9 @@ bool DatabasePrivate::updateDatabase()
|
||||||
if (db.lastError().type() == QSqlError::NoError) {
|
if (db.lastError().type() == QSqlError::NoError) {
|
||||||
|
|
||||||
q->databaseUpdated(last.version(), current.version());
|
q->databaseUpdated(last.version(), current.version());
|
||||||
|
if (!last.count())
|
||||||
|
q->databaseCreated();
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
qWarning("Unable update database, error = %s",
|
qWarning("Unable update database, error = %s",
|
||||||
db.lastError().text().toLatin1().data());
|
db.lastError().text().toLatin1().data());
|
||||||
|
|
@ -541,6 +544,11 @@ QSqlDatabase Database::database()
|
||||||
return d->db;
|
return d->db;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void Database::databaseCreated()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
void Database::databaseUpdated(int oldVersion, int newVersion)
|
void Database::databaseUpdated(int oldVersion, int newVersion)
|
||||||
{
|
{
|
||||||
Q_UNUSED(oldVersion);
|
Q_UNUSED(oldVersion);
|
||||||
|
|
|
||||||
|
|
@ -73,6 +73,7 @@ public:
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
//remove minor version
|
//remove minor version
|
||||||
|
virtual void databaseCreated();
|
||||||
virtual void databaseUpdated(int oldVersion, int newVersion);
|
virtual void databaseUpdated(int oldVersion, int newVersion);
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
|
|
|
||||||
|
|
@ -827,6 +827,7 @@ QString SqlGeneratorBase::escapeValue(const QVariant &v) const
|
||||||
qWarning("No field escape rule for: %s", v.typeName());
|
qWarning("No field escape rule for: %s", v.typeName());
|
||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
|
|
||||||
return "'" + serialized + "'";
|
return "'" + serialized + "'";
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -144,6 +144,7 @@ ConditionalPhrase operator op(const ConditionalPhrase &l, \
|
||||||
{ \
|
{ \
|
||||||
ConditionalPhrase p; \
|
ConditionalPhrase p; \
|
||||||
p.data = new PhraseData; \
|
p.data = new PhraseData; \
|
||||||
|
p.data->type = PhraseData::WithOther; \
|
||||||
p.data->operatorCond = cond; \
|
p.data->operatorCond = cond; \
|
||||||
p.data->left = l.data; \
|
p.data->left = l.data; \
|
||||||
p.data->right = r.data; \
|
p.data->right = r.data; \
|
||||||
|
|
@ -156,6 +157,7 @@ ConditionalPhrase operator op(const ConditionalPhrase &l, \
|
||||||
{ \
|
{ \
|
||||||
ConditionalPhrase p; \
|
ConditionalPhrase p; \
|
||||||
p.data = new PhraseData; \
|
p.data = new PhraseData; \
|
||||||
|
p.data->type = PhraseData::WithOther; \
|
||||||
p.data->operatorCond = cond; \
|
p.data->operatorCond = cond; \
|
||||||
p.data->left = l.data; \
|
p.data->left = l.data; \
|
||||||
p.data->right = r.data; \
|
p.data->right = r.data; \
|
||||||
|
|
@ -168,6 +170,7 @@ ConditionalPhrase operator op(ConditionalPhrase &&l, \
|
||||||
{ \
|
{ \
|
||||||
ConditionalPhrase p; \
|
ConditionalPhrase p; \
|
||||||
p.data = new PhraseData; \
|
p.data = new PhraseData; \
|
||||||
|
p.data->type = PhraseData::WithOther; \
|
||||||
p.data->operatorCond = cond; \
|
p.data->operatorCond = cond; \
|
||||||
p.data->left = l.data; \
|
p.data->left = l.data; \
|
||||||
p.data->right = r.data; \
|
p.data->right = r.data; \
|
||||||
|
|
@ -179,6 +182,7 @@ ConditionalPhrase operator op(ConditionalPhrase &&l, ConditionalPhrase &&r) \
|
||||||
{ \
|
{ \
|
||||||
ConditionalPhrase p; \
|
ConditionalPhrase p; \
|
||||||
p.data = new PhraseData; \
|
p.data = new PhraseData; \
|
||||||
|
p.data->type = PhraseData::WithOther; \
|
||||||
p.data->operatorCond = cond; \
|
p.data->operatorCond = cond; \
|
||||||
p.data->left = l.data; \
|
p.data->left = l.data; \
|
||||||
p.data->right = r.data; \
|
p.data->right = r.data; \
|
||||||
|
|
|
||||||
19
src/query.h
19
src/query.h
|
|
@ -83,7 +83,7 @@ public:
|
||||||
QVariant min(const FieldPhrase<int> &f);
|
QVariant min(const FieldPhrase<int> &f);
|
||||||
QVariant average(const FieldPhrase<int> &f);
|
QVariant average(const FieldPhrase<int> &f);
|
||||||
|
|
||||||
QVariant insert(AssignmentPhraseList p);
|
QVariant insert(const AssignmentPhraseList &p);
|
||||||
|
|
||||||
//data mailpulation
|
//data mailpulation
|
||||||
int update(const AssignmentPhraseList &ph);
|
int update(const AssignmentPhraseList &ph);
|
||||||
|
|
@ -91,6 +91,7 @@ public:
|
||||||
int remove();
|
int remove();
|
||||||
|
|
||||||
QSqlQueryModel *toModel();
|
QSqlQueryModel *toModel();
|
||||||
|
void toModel(QSqlQueryModel *model);
|
||||||
|
|
||||||
//debug purpose
|
//debug purpose
|
||||||
QString sqlCommand() const;
|
QString sqlCommand() const;
|
||||||
|
|
@ -137,7 +138,7 @@ Q_OUTOFLINE_TEMPLATE QList<T *> Query<T>::toList(int count)
|
||||||
d->sql = d->database->sqlGenertor()->selectCommand(
|
d->sql = d->database->sqlGenertor()->selectCommand(
|
||||||
d->tableName, d->fieldPhrase, d->wherePhrase, d->orderPhrase,
|
d->tableName, d->fieldPhrase, d->wherePhrase, d->orderPhrase,
|
||||||
d->relations, d->skip, d->take);
|
d->relations, d->skip, d->take);
|
||||||
qDebug() << d->sql;
|
|
||||||
QSqlQuery q = d->database->exec(d->sql);
|
QSqlQuery q = d->database->exec(d->sql);
|
||||||
if (q.lastError().isValid()) {
|
if (q.lastError().isValid()) {
|
||||||
qDebug() << q.lastError().text();
|
qDebug() << q.lastError().text();
|
||||||
|
|
@ -410,7 +411,7 @@ Q_OUTOFLINE_TEMPLATE QVariant Query<T>::average(const FieldPhrase<int> &f)
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
Q_OUTOFLINE_TEMPLATE QVariant Query<T>::insert(AssignmentPhraseList p)
|
Q_OUTOFLINE_TEMPLATE QVariant Query<T>::insert(const AssignmentPhraseList &p)
|
||||||
{
|
{
|
||||||
Q_D(Query);
|
Q_D(Query);
|
||||||
d->sql = d->database->sqlGenertor()
|
d->sql = d->database->sqlGenertor()
|
||||||
|
|
@ -518,6 +519,7 @@ Q_OUTOFLINE_TEMPLATE int Query<T>::update(const AssignmentPhraseList &ph)
|
||||||
d->tableName,
|
d->tableName,
|
||||||
ph,
|
ph,
|
||||||
d->wherePhrase);
|
d->wherePhrase);
|
||||||
|
|
||||||
QSqlQuery q = d->database->exec(d->sql);
|
QSqlQuery q = d->database->exec(d->sql);
|
||||||
|
|
||||||
if (m_autoDelete)
|
if (m_autoDelete)
|
||||||
|
|
@ -541,6 +543,14 @@ Q_OUTOFLINE_TEMPLATE int Query<T>::remove()
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
Q_OUTOFLINE_TEMPLATE QSqlQueryModel *Query<T>::toModel()
|
Q_OUTOFLINE_TEMPLATE QSqlQueryModel *Query<T>::toModel()
|
||||||
|
{
|
||||||
|
QSqlQueryModel *model = new QSqlQueryModel;
|
||||||
|
toModel(model);
|
||||||
|
return model;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
Q_OUTOFLINE_TEMPLATE void Query<T>::toModel(QSqlQueryModel *model)
|
||||||
{
|
{
|
||||||
Q_D(Query);
|
Q_D(Query);
|
||||||
|
|
||||||
|
|
@ -551,7 +561,6 @@ Q_OUTOFLINE_TEMPLATE QSqlQueryModel *Query<T>::toModel()
|
||||||
d->skip, d->take);
|
d->skip, d->take);
|
||||||
|
|
||||||
DatabaseModel dbModel = d->database->model();
|
DatabaseModel dbModel = d->database->model();
|
||||||
QSqlQueryModel *model = new QSqlQueryModel;
|
|
||||||
model->setQuery(d->sql, d->database->database());
|
model->setQuery(d->sql, d->database->database());
|
||||||
|
|
||||||
int fieldIndex = 0;
|
int fieldIndex = 0;
|
||||||
|
|
@ -573,8 +582,6 @@ Q_OUTOFLINE_TEMPLATE QSqlQueryModel *Query<T>::toModel()
|
||||||
f->displayName);
|
f->displayName);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
return model;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
template <class T>
|
template <class T>
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue