From 1713a237eb5c3cc9ef0175f7cdce30afeec6b9e4 Mon Sep 17 00:00:00 2001 From: Hamed Masafi Date: Thu, 11 Jan 2018 10:43:01 +0330 Subject: [PATCH] uuid detect --- src/generators/sqlgeneratorbase.cpp | 45 ++++++++++++++++++----------- src/generators/sqlgeneratorbase_p.h | 12 +++++--- src/query.h | 8 +++-- test/basic/maintest.cpp | 12 +++++++- test/basic/maintest.h | 3 ++ 5 files changed, 56 insertions(+), 24 deletions(-) diff --git a/src/generators/sqlgeneratorbase.cpp b/src/generators/sqlgeneratorbase.cpp index d30538f..06029a2 100644 --- a/src/generators/sqlgeneratorbase.cpp +++ b/src/generators/sqlgeneratorbase.cpp @@ -23,6 +23,7 @@ #include #include #include +#include #include #include "sqlgeneratorbase_p.h" @@ -381,6 +382,17 @@ QString SqlGeneratorBase::selectCommand(SqlGeneratorBase::AgregateType t, QList &wheres, QList &orders, QStringList joins, int skip, int take) +{ + return selectCommand(t, agregateArg, wheres, orders, joins, skip, take); +} + +QString SqlGeneratorBase::selectCommand(SqlGeneratorBase::AgregateType t, + QString agregateArg, + QList &wheres, + QList &orders, + QStringList joins, + int skip, int take, + QStringList *order) { Q_UNUSED(take); Q_UNUSED(skip); @@ -389,12 +401,14 @@ QString SqlGeneratorBase::selectCommand(SqlGeneratorBase::AgregateType t, QString select = agregateText(t, agregateArg); QString from = join(joins, &joinedOrders); QString where = createWhere(wheres); - QString order = joinedOrders.join(", "); + QString orderText = joinedOrders.join(", "); + if (order != Q_NULLPTR) + order = joinedOrders; foreach (WherePhrase p, orders) { - if (order != "") - order.append(", "); - order.append(phraseOrder(p.data())); + if (orderText != "") + orderText.append(", "); + orderText.append(phraseOrder(p.data())); } QString sql = "SELECT " + select + " FROM " + from; @@ -402,8 +416,8 @@ QString SqlGeneratorBase::selectCommand(SqlGeneratorBase::AgregateType t, if (where != "") sql.append(" WHERE " + where); - if (order != "") - sql.append(" ORDER BY " + order); + if (orderText != "") + sql.append(" ORDER BY " + orderText); for (int i = 0; i < _database->model().count(); i++) sql = sql.replace(_database->model().at(i)->className() + ".", @@ -479,14 +493,6 @@ QString SqlGeneratorBase::updateCommand(WherePhrase &phrase, return sql; } -QString SqlGeneratorBase::joinTables(QStringList tables) -{ - Q_UNUSED(tables); - //TODO: implement me -// _database->model().relationByClassNames() - return ""; -} - QString SqlGeneratorBase::escapeValue(const QVariant &v) const { switch (v.type()) { @@ -502,18 +508,22 @@ QString SqlGeneratorBase::escapeValue(const QVariant &v) const return v.toString(); break; + case QVariant::Uuid: + return v.toUuid().toString(); + break; + case QVariant::Char: case QVariant::String: return "'" + v.toString() + "'"; case QVariant::DateTime: - return "'" + v.toDateTime().toString() + "'"; + return "'" + v.toDateTime().toString(Qt::ISODate) + "'"; case QVariant::Date: - return "'" + v.toDate().toString() + "'"; + return "'" + v.toDate().toString(Qt::ISODate) + "'"; case QVariant::Time: - return "'" + v.toTime().toString() + "'"; + return "'" + v.toTime().toString(Qt::ISODate) + "'"; case QVariant::StringList: case QVariant::List: @@ -534,6 +544,7 @@ QString SqlGeneratorBase::escapeValue(const QVariant &v) const return ""; default: + Q_UNREACHABLE(); return ""; } } diff --git a/src/generators/sqlgeneratorbase_p.h b/src/generators/sqlgeneratorbase_p.h index 5803654..5668116 100644 --- a/src/generators/sqlgeneratorbase_p.h +++ b/src/generators/sqlgeneratorbase_p.h @@ -71,11 +71,10 @@ public: virtual QString join(const QStringList &list, QStringList *order = Q_NULLPTR); virtual QString saveRecord(Table *t, QString tableName); + virtual QString insertRecord(Table *t, QString tableName); virtual QString updateRecord(Table *t, QString tableName); virtual QString deleteRecord(Table *t, QString tableName); - - virtual QString deleteRecords(QString tableName, QString where); virtual QString selectCommand(AgregateType t, @@ -84,13 +83,18 @@ public: QList &orders, QStringList joins, int skip = -1, int take = -1); + virtual QString selectCommand(AgregateType t, + QString agregateArg, + QList &wheres, + QList &orders, + QStringList joins, + int skip = -1, int take = -1, + QStringList *order = Q_NULLPTR); virtual QString deleteCommand(QList &wheres, QString tableName); virtual QString updateCommand(WherePhrase &phrase, QList &wheres, QString tableName); - virtual QString joinTables(QStringList tables); - virtual QString escapeValue(const QVariant &v) const; virtual QVariant readValue(const QVariant::Type &type, const QVariant &dbValue); virtual QString phrase(const PhraseData *d) const; diff --git a/src/query.h b/src/query.h index 4b6fa8a..51150e1 100644 --- a/src/query.h +++ b/src/query.h @@ -131,12 +131,16 @@ Q_OUTOFLINE_TEMPLATE QList Query::toList(int count) // QSqlQuery q = // d->database->exec(d->database->sqlGenertor()->selectCommand(d->wheres, // d->orders, d->tableName, d->joinClassName)); + QStringList orders; d->sql = d->database->sqlGenertor()->selectCommand( SqlGeneratorBase::SelectAll, "", d->wheres, d->orderPhrases, - d->joins, d->skip, d->take); + d->joins, d->skip, d->take, &orders); QSqlQuery q = d->database->exec(d->sql); - // QString pk = TableModel::findByName(d->tableName)->primaryKey(); + while (q.next()) { + + } + QString pk = d->database->model().tableByName(d->tableName)->primaryKey(); QVariant lastPkValue = QVariant(); int childTypeId = 0; diff --git a/test/basic/maintest.cpp b/test/basic/maintest.cpp index 338440c..9183869 100644 --- a/test/basic/maintest.cpp +++ b/test/basic/maintest.cpp @@ -46,7 +46,16 @@ void MainTest::dataScheema() // qDebug() << model.toJson(); // qDebug() << db.model().toJson(); -// QTEST_ASSERT(model == db.model()); + // QTEST_ASSERT(model == db.model()); +} + +void MainTest::createUser() +{ + user = new User; + user->setUsername("admin"); + user->setPassword("123456"); + db.users()->append(user); + db.saveChanges(); } void MainTest::createPost() @@ -84,6 +93,7 @@ void MainTest::createPost2() Comment *comment = new Comment; comment->setMessage("comment #" + QString::number(i)); comment->setSaveDate(QDateTime::currentDateTime()); + comment->setAuthor(user); comment->setPostId(newPost->id()); db.comments()->append(comment); } diff --git a/test/basic/maintest.h b/test/basic/maintest.h index b00d259..06e3ee1 100644 --- a/test/basic/maintest.h +++ b/test/basic/maintest.h @@ -6,12 +6,14 @@ #include "weblogdatabase.h" class Post; +class User; class MainTest : public QObject { Q_OBJECT WeblogDatabase db; int postId; Post *post; + User *User; public: explicit MainTest(QObject *parent = 0); @@ -22,6 +24,7 @@ private slots: void initTestCase(); void dataScheema(); + void createUser(); void createPost(); void createPost2(); void selectPosts();