From 37a2e8f5fc6e5bac0262555046d89ce7b5dc4de0 Mon Sep 17 00:00:00 2001 From: Hamed Masafi Date: Sat, 9 Mar 2019 18:59:24 +0330 Subject: [PATCH 1/8] added toModel(QSqlQueryModel*) to Nut::Query [skip ci] --- src/bulkinserter.h | 58 ++++++++++++++++++++++++++++++++++++++++++++++ src/query.h | 16 +++++++++---- 2 files changed, 69 insertions(+), 5 deletions(-) diff --git a/src/bulkinserter.h b/src/bulkinserter.h index 04df4b2..9f450b4 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 @@ -30,6 +31,63 @@ public: int apply(); }; +//#define HEAD(x, ...) x +//#define TAIL(x, ...) __VA_ARGS__ +//#define ENCLOSE(...) ( __VA_ARGS__ ) +//#define REM_ENCLOSE_(...) __VA_ARGS__ +//#define REM_ENCLOSE(...) REM_ENCLOSE_ __VA_ARGS__ + +//#define IF_ENCLOSED_1(true, ...) true +//#define IF_ENCLOSED_0(true, ...) __VA_ARGS__ +//#define IF_ENCLOSED(...) CAT(IF_ENCLOSED_, IF_ENCLOSED(__VA_ARGS__)) +//// This function will optionally remove brackets around its arguments +//// if there are any. Otherwise it will return normally +//#define OPT_REM_ENCLOSE(...) \ +// IF_ENCLOSED (__VA_ARGS__) ( REM_ENCLOSE(__VA_ARGS__), __VA_ARGS__ ) + +//#define TEST_LAST EXISTS(1) +//#define IS_LIST_EMPTY(...) \ +// TRY_EXTRACT_EXISTS( \ +// DEFER(HEAD) (__VA_ARGS__ EXISTS(1))\ +// , 0) +//#define IS_LIST_NOT_EMPTY(...) NOT(IS_LIST_EMPTY(__VA_ARGS__)) + +//#define FOR_EACH(fVisitor, ...) \ +// fVisitor( OPT_REM_ENCLOSE(HEAD(__VA_ARGS__)) ) \ +// FOR_EACH(fVisitor, TAIL(__VA_ARGS__)) + +//#define NUT_FOREACH(F, ...) \ +// F(HEAD(__VA_ARGS__)); \ +// NUT_FOREACH(F, TAIL(__VA_ARGS__)) +//template +//class Bulk +//{ +//public: +// void f(int){} +// Bulk() +// { +// int a, b, c, d; +// NUT_FOREACH(f, a, c, d) + +// } +//}; + +//template +//class Bulk +//{ +//public: +// Bulk(FieldPhrase) +// {} +//}; + +//template +//class Bulk +//{ +//public: +// Bulk(FieldPhrase, FieldPhrase) +// {} +//}; + NUT_END_NAMESPACE #endif // BULKINSERTER_H diff --git a/src/query.h b/src/query.h index d5cc823..ef582a6 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; @@ -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() @@ -541,6 +542,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 +560,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 +581,6 @@ Q_OUTOFLINE_TEMPLATE QSqlQueryModel *Query::toModel() f->displayName); } } - - return model; } template From df4586a408e98460235171f18a41850b2a8e668e Mon Sep 17 00:00:00 2001 From: Hamed Masafi Date: Sat, 9 Mar 2019 19:28:56 +0330 Subject: [PATCH 2/8] Add a Codacy badge to README.md [skip ci] --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index aa4fddd..03791af 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,8 @@ | 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) | +[![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 From 7f0e188cb37afec33313b024962f095026091ddd Mon Sep 17 00:00:00 2001 From: Hamed Masafi Date: Sat, 9 Mar 2019 19:36:28 +0330 Subject: [PATCH 3/8] licende badget [skip ci] --- README.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/README.md b/README.md index 03791af..6c3c12a 100644 --- a/README.md +++ b/README.md @@ -8,6 +8,8 @@ | 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/hamedmasaffi/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) From 40611b4ef41e8ff1e6b06914bf1f8d995fc3e0d3 Mon Sep 17 00:00:00 2001 From: Hamed Masafi Date: Sat, 9 Mar 2019 19:39:33 +0330 Subject: [PATCH 4/8] fix licance badget url [skip ci] --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 6c3c12a..8eacca4 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@ | 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/hamedmasaffi/nut)](https://gitlicense.com/license/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) From 2c7ee423de8f1af0126fbb7d96da65d1d28e1163 Mon Sep 17 00:00:00 2001 From: Hamed Masafi Date: Sun, 10 Mar 2019 19:04:16 +0330 Subject: [PATCH 5/8] remove some comments --- src/bulkinserter.h | 57 ---------------------------------------------- 1 file changed, 57 deletions(-) diff --git a/src/bulkinserter.h b/src/bulkinserter.h index 9f450b4..734689a 100644 --- a/src/bulkinserter.h +++ b/src/bulkinserter.h @@ -31,63 +31,6 @@ public: int apply(); }; -//#define HEAD(x, ...) x -//#define TAIL(x, ...) __VA_ARGS__ -//#define ENCLOSE(...) ( __VA_ARGS__ ) -//#define REM_ENCLOSE_(...) __VA_ARGS__ -//#define REM_ENCLOSE(...) REM_ENCLOSE_ __VA_ARGS__ - -//#define IF_ENCLOSED_1(true, ...) true -//#define IF_ENCLOSED_0(true, ...) __VA_ARGS__ -//#define IF_ENCLOSED(...) CAT(IF_ENCLOSED_, IF_ENCLOSED(__VA_ARGS__)) -//// This function will optionally remove brackets around its arguments -//// if there are any. Otherwise it will return normally -//#define OPT_REM_ENCLOSE(...) \ -// IF_ENCLOSED (__VA_ARGS__) ( REM_ENCLOSE(__VA_ARGS__), __VA_ARGS__ ) - -//#define TEST_LAST EXISTS(1) -//#define IS_LIST_EMPTY(...) \ -// TRY_EXTRACT_EXISTS( \ -// DEFER(HEAD) (__VA_ARGS__ EXISTS(1))\ -// , 0) -//#define IS_LIST_NOT_EMPTY(...) NOT(IS_LIST_EMPTY(__VA_ARGS__)) - -//#define FOR_EACH(fVisitor, ...) \ -// fVisitor( OPT_REM_ENCLOSE(HEAD(__VA_ARGS__)) ) \ -// FOR_EACH(fVisitor, TAIL(__VA_ARGS__)) - -//#define NUT_FOREACH(F, ...) \ -// F(HEAD(__VA_ARGS__)); \ -// NUT_FOREACH(F, TAIL(__VA_ARGS__)) -//template -//class Bulk -//{ -//public: -// void f(int){} -// Bulk() -// { -// int a, b, c, d; -// NUT_FOREACH(f, a, c, d) - -// } -//}; - -//template -//class Bulk -//{ -//public: -// Bulk(FieldPhrase) -// {} -//}; - -//template -//class Bulk -//{ -//public: -// Bulk(FieldPhrase, FieldPhrase) -// {} -//}; - NUT_END_NAMESPACE #endif // BULKINSERTER_H From 94753fbb2feb31299ad980531f523ef377124c91 Mon Sep 17 00:00:00 2001 From: Hamed Masafi Date: Tue, 9 Apr 2019 11:55:19 +0430 Subject: [PATCH 6/8] bool {,de}serialization --- 3rdparty/serializer | 2 +- src/database.cpp | 8 ++++++++ src/database.h | 1 + src/generators/sqlgeneratorbase.cpp | 1 + src/query.h | 3 ++- 5 files changed, 13 insertions(+), 2 deletions(-) diff --git a/3rdparty/serializer b/3rdparty/serializer index b3c550c..531e241 160000 --- a/3rdparty/serializer +++ b/3rdparty/serializer @@ -1 +1 @@ -Subproject commit b3c550c5bb7c570b1b10492fcedf287c1915af39 +Subproject commit 531e2411a5ada2cd468b5382ec7a35396d6f2a88 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/query.h b/src/query.h index ef582a6..4103590 100644 --- a/src/query.h +++ b/src/query.h @@ -138,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(); @@ -519,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) From 0f86f0a5e7bec7aceb940b38bd2f06baf6649237 Mon Sep 17 00:00:00 2001 From: Hamed Masafi Date: Thu, 11 Apr 2019 13:28:38 +0430 Subject: [PATCH 7/8] fix:ConditionalPhrase operators --- src/phrases/conditionalphrase.cpp | 4 ++++ 1 file changed, 4 insertions(+) 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; \ From 45c2a6c136c2bf3012b3e01f96f0f819d1314804 Mon Sep 17 00:00:00 2001 From: Hamed Masafi Date: Tue, 16 Apr 2019 19:51:00 +0430 Subject: [PATCH 8/8] new serializer commit [skip ci] --- 3rdparty/serializer | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/3rdparty/serializer b/3rdparty/serializer index 531e241..e2d8a72 160000 --- a/3rdparty/serializer +++ b/3rdparty/serializer @@ -1 +1 @@ -Subproject commit 531e2411a5ada2cd468b5382ec7a35396d6f2a88 +Subproject commit e2d8a726ef1396c47bf35347ea8b55ca47c6af3b