#4 maintext refactored
This commit is contained in:
parent
a1630271b1
commit
0f47ffd28a
|
|
@ -392,7 +392,11 @@ DatabaseModel Database::model() const
|
|||
QString Database::tableName(QString className)
|
||||
{
|
||||
Q_D(Database);
|
||||
return model().modelByClass(className)->name();
|
||||
TableModel *m = model().modelByClass(className);
|
||||
if (m)
|
||||
return m->name();
|
||||
else
|
||||
return QString::null;;
|
||||
}
|
||||
|
||||
void Database::setDatabaseName(QString databaseName)
|
||||
|
|
|
|||
|
|
@ -109,7 +109,7 @@ public: \
|
|||
#define NUT_NOT_NULL(x) Q_CLASSINFO(QT_STRINGIFY(__nut_NAME_PERFIX #x " " __nut_NOT_NULL), "1")
|
||||
|
||||
#ifndef NUT_NO_KEYWORDS
|
||||
# define FROM(x) /*QScopedPointer<QueryBase*>*/(x->createQuery())
|
||||
# define FROM(x) (x->query())
|
||||
# define WHERE(x) ->setWhere(x)
|
||||
# define JOIN(x) ->join(#x)
|
||||
# define ORDERBY(x) ->orderBy(#x, "ASC");
|
||||
|
|
|
|||
|
|
@ -285,6 +285,9 @@ QString SqlGeneratorBase::deleteRecords(QString tableName, QString where)
|
|||
sql = "DELETE FROM " + tableName;
|
||||
else
|
||||
sql = "DELETE FROM " + tableName + " WHERE " + where;
|
||||
|
||||
replaceTableNames(sql);
|
||||
|
||||
return sql;
|
||||
}
|
||||
|
||||
|
|
@ -312,6 +315,8 @@ QString SqlGeneratorBase::selectCommand(SqlGeneratorBase::AgregateType t, QStrin
|
|||
for(int i = 0; i < _database->model().count(); i++)
|
||||
sql = sql.replace(_database->model().at(i)->className() + "." , _database->model().at(i)->name() + ".");
|
||||
|
||||
replaceTableNames(sql);
|
||||
|
||||
return sql;
|
||||
}
|
||||
|
||||
|
|
@ -340,6 +345,8 @@ QString SqlGeneratorBase::selectCommand(QString selectPhrase, QString agregateAr
|
|||
for(int i = 0; i < _database->model().count(); i++)
|
||||
sql = sql.replace(_database->model().at(i)->className() + "." , _database->model().at(i)->name() + ".");
|
||||
|
||||
replaceTableNames(sql);
|
||||
|
||||
return sql;
|
||||
}
|
||||
|
||||
|
|
@ -368,6 +375,12 @@ QString SqlGeneratorBase::createWhere(QList<WherePhrase> &wheres)
|
|||
return whereText;
|
||||
}
|
||||
|
||||
void SqlGeneratorBase::replaceTableNames(QString &command)
|
||||
{
|
||||
foreach (TableModel *m, TableModel::allModels())
|
||||
command = command.replace("[" + m->className() + "]." , m->name() + ".");
|
||||
}
|
||||
|
||||
QString SqlGeneratorBase::selectCommand(QString selectPhrase, QList<WherePhrase> &wheres, QHash<QString, QString> &orders, QString tableName, QString joinClassName)
|
||||
{
|
||||
QString orderText = "";
|
||||
|
|
@ -414,8 +427,7 @@ QString SqlGeneratorBase::selectCommand(QString selectPhrase, QList<WherePhrase>
|
|||
+ whereText
|
||||
+ orderText;
|
||||
|
||||
foreach (TableModel *m, TableModel::allModels())
|
||||
command = command.replace(m->className() + "." , m->name() + ".");
|
||||
replaceTableNames(command);
|
||||
|
||||
return command;
|
||||
}
|
||||
|
|
@ -430,6 +442,9 @@ QString SqlGeneratorBase::deleteCommand(QList<WherePhrase> &wheres, QString tabl
|
|||
|
||||
for(int i = 0; i < _database->model().count(); i++)
|
||||
command = command.replace(_database->model().at(i)->className() + "." , _database->model().at(i)->name() + ".");
|
||||
|
||||
replaceTableNames(command);
|
||||
|
||||
return command;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -105,6 +105,7 @@ private:
|
|||
QString fromTableText(const QString &tableName, QString &joinClassName, QString &orderBy) const;
|
||||
QString createWhere(QList<WherePhrase> &wheres);
|
||||
QString phraseOrder(const PhraseData *d) const;
|
||||
void replaceTableNames(QString &command);
|
||||
};
|
||||
|
||||
NUT_END_NAMESPACE
|
||||
|
|
|
|||
|
|
@ -28,7 +28,7 @@ NUT_BEGIN_NAMESPACE
|
|||
PhraseData::PhraseData(const char *className, const char *s)
|
||||
{
|
||||
Q_UNUSED(className)
|
||||
text = QString(s); // QString(className) + "." + s;
|
||||
text = QString("[%1].%2").arg(className).arg(s);
|
||||
type = Field;
|
||||
operatorCond = NotAssign;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -33,11 +33,6 @@ void MainTest::initTestCase()
|
|||
bool ok = db.open();
|
||||
|
||||
QTEST_ASSERT(ok);
|
||||
|
||||
// FROM(db.comments())
|
||||
// DELETE();
|
||||
// FROM(db.posts())
|
||||
// DELETE();
|
||||
}
|
||||
|
||||
void MainTest::dataScheema()
|
||||
|
|
@ -96,10 +91,7 @@ void MainTest::createPost2()
|
|||
|
||||
void MainTest::selectPosts()
|
||||
{
|
||||
// auto q = FROM(db.posts())
|
||||
// JOIN(Comment)
|
||||
// WHERE(Post::idField() == postId);
|
||||
auto q = db.posts()->createQuery();
|
||||
auto q = db.posts()->query();
|
||||
q->join(Post::commentsTable());
|
||||
q->orderBy(!Post::saveDateField() & Post::bodyField());
|
||||
q->setWhere(Post::idField() == postId);
|
||||
|
|
@ -121,22 +113,13 @@ void MainTest::selectPosts()
|
|||
|
||||
void MainTest::selectPostsWithoutTitle()
|
||||
{
|
||||
auto q = db.posts()->createQuery();
|
||||
auto q = db.posts()->query();
|
||||
q->setWhere(Post::titleField().isNull());
|
||||
auto count = q->count();
|
||||
qDebug() << "selectPostsWithoutTitle, count=" << count;
|
||||
QTEST_ASSERT(count == 0);
|
||||
}
|
||||
|
||||
void MainTest::selectComments()
|
||||
{
|
||||
auto comments = FROM(post->comments())
|
||||
SELECT();
|
||||
|
||||
qDebug() << "comments count"<<comments.count();
|
||||
// QTEST_ASSERT(comments.count());
|
||||
}
|
||||
|
||||
void MainTest::testDate()
|
||||
{
|
||||
QDateTime d = QDateTime::currentDateTime();
|
||||
|
|
@ -151,9 +134,9 @@ void MainTest::testDate()
|
|||
|
||||
db.saveChanges();
|
||||
|
||||
auto q = FROM(db.posts())
|
||||
WHERE(Post::idField() == newPost->id())
|
||||
FIRST();
|
||||
auto q = db.posts()->query()
|
||||
->setWhere(Post::idField() == newPost->id())
|
||||
->first();
|
||||
|
||||
QTEST_ASSERT(q->saveDate() == d);
|
||||
}
|
||||
|
|
@ -161,21 +144,21 @@ void MainTest::testDate()
|
|||
|
||||
void MainTest::selectWithInvalidRelation()
|
||||
{
|
||||
auto q = db.posts()->createQuery();
|
||||
auto q = db.posts()->query();
|
||||
q->join("Invalid_Class_Name");
|
||||
q->toList();
|
||||
}
|
||||
|
||||
void MainTest::select10NewstPosts()
|
||||
{
|
||||
auto q = db.posts()->createQuery();
|
||||
auto q = db.posts()->query();
|
||||
q->orderBy(!Post::saveDateField());
|
||||
q->toList(10);
|
||||
}
|
||||
|
||||
void MainTest::modifyPost()
|
||||
{
|
||||
auto q = db.posts()->createQuery();
|
||||
auto q = db.posts()->query();
|
||||
q->setWhere(Post::idField() == postId);
|
||||
|
||||
Post *post = q->first();
|
||||
|
|
@ -185,24 +168,24 @@ void MainTest::modifyPost()
|
|||
post->setTitle("new name");
|
||||
db.saveChanges();
|
||||
|
||||
q = FROM(db.posts())
|
||||
WHERE(Post::idField() == postId);
|
||||
q = db.posts()->query()
|
||||
->setWhere(Post::idField() == postId);
|
||||
|
||||
post = q->first();
|
||||
QTEST_ASSERT(post->title() == "new name");
|
||||
}
|
||||
|
||||
void MainTest::deletePost()
|
||||
void MainTest::emptyDatabase()
|
||||
{
|
||||
auto count = FROM(db.posts())
|
||||
WHERE(Post::idField() == postId)
|
||||
DELETE();
|
||||
auto count = db.posts()->query()
|
||||
->setWhere(Post::idField() == postId)
|
||||
->remove();
|
||||
|
||||
QTEST_ASSERT(count == 1);
|
||||
|
||||
count = FROM(db.posts())
|
||||
WHERE(Post::idField() == postId)
|
||||
COUNT();
|
||||
count = db.posts()->query()
|
||||
->setWhere(Post::idField() == postId)
|
||||
->count();
|
||||
|
||||
QTEST_ASSERT(count == 0);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -25,12 +25,11 @@ private slots:
|
|||
void createPost2();
|
||||
void selectPosts();
|
||||
void selectPostsWithoutTitle();
|
||||
void selectComments();
|
||||
void testDate();
|
||||
void selectWithInvalidRelation();
|
||||
void select10NewstPosts();
|
||||
void modifyPost();
|
||||
void deletePost();
|
||||
void emptyDatabase();
|
||||
};
|
||||
|
||||
#endif // MAINTEST_H
|
||||
|
|
|
|||
|
|
@ -0,0 +1,59 @@
|
|||
#include <QtTest>
|
||||
#include <QJsonDocument>
|
||||
#include <QSqlError>
|
||||
|
||||
#include "consts.h"
|
||||
|
||||
#include "maintest.h"
|
||||
#include "query.h"
|
||||
#include "tableset.h"
|
||||
#include "tablemodel.h"
|
||||
#include "databasemodel.h"
|
||||
|
||||
#include "post.h"
|
||||
#include "comment.h"
|
||||
|
||||
MainTest::MainTest(QObject *parent) : QObject(parent)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
void MainTest::initTestCase()
|
||||
{
|
||||
qDebug() << "User type id:" << qRegisterMetaType<Post*>();
|
||||
qDebug() << "Comment type id:" << qRegisterMetaType<Comment*>();
|
||||
qDebug() << "DB type id:" << qRegisterMetaType<WeblogDatabase*>();
|
||||
|
||||
db.setDriver(DRIVER);
|
||||
db.setHostName(HOST);
|
||||
db.setDatabaseName(DATABASE);
|
||||
db.setUserName(USERNAME);
|
||||
db.setPassword(PASSWORD);
|
||||
|
||||
bool ok = db.open();
|
||||
|
||||
QTEST_ASSERT(ok);
|
||||
}
|
||||
|
||||
void MainTest::cmd1()
|
||||
{
|
||||
Query<Post> *q = db.posts()->query()
|
||||
->setWhere(Post::titleField() == "test" && Post::idField() < 4 + 5);
|
||||
|
||||
q->toList();
|
||||
|
||||
qDebug() << q->sqlCommand();
|
||||
}
|
||||
|
||||
void MainTest::cmd2()
|
||||
{
|
||||
Query<Post> *q = db.posts()->query()
|
||||
->setWhere(!Post::idField().in({1, 2, 3, 4}));
|
||||
|
||||
q->toList();
|
||||
// q->update(Post::idField()++);
|
||||
|
||||
qDebug() << q->sqlCommand();
|
||||
}
|
||||
|
||||
QTEST_MAIN(MainTest)
|
||||
|
|
@ -0,0 +1,28 @@
|
|||
#ifndef MAINTEST_H
|
||||
#define MAINTEST_H
|
||||
|
||||
#include <QtCore/QObject>
|
||||
#include <QtCore/qglobal.h>
|
||||
|
||||
#include "weblogdatabase.h"
|
||||
class Post;
|
||||
class MainTest : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
WeblogDatabase db;
|
||||
int postId;
|
||||
Post *post;
|
||||
Query<Post> *q;
|
||||
public:
|
||||
explicit MainTest(QObject *parent = 0);
|
||||
|
||||
signals:
|
||||
|
||||
private slots:
|
||||
void initTestCase();
|
||||
|
||||
void cmd1();
|
||||
void cmd2();
|
||||
};
|
||||
|
||||
#endif // MAINTEST_H
|
||||
|
|
@ -0,0 +1,21 @@
|
|||
QT += qml quick testlib sql
|
||||
|
||||
QT -= gui
|
||||
|
||||
TARGET = tst_nut
|
||||
CONFIG += warn_on qmltestcase c++11
|
||||
INCLUDEPATH += $$PWD/../../src $$PWD/../common
|
||||
include(../../nut.pri)
|
||||
TEMPLATE = app
|
||||
IMPORTPATH += $$OUT_PWD/../src/imports
|
||||
SOURCES += \
|
||||
maintest.cpp \
|
||||
../common/comment.cpp \
|
||||
../common/post.cpp \
|
||||
../common/weblogdatabase.cpp
|
||||
|
||||
HEADERS += \
|
||||
maintest.h \
|
||||
../common/comment.h \
|
||||
../common/post.h \
|
||||
../common/weblogdatabase.h
|
||||
Loading…
Reference in New Issue