wip: fix same type
This commit is contained in:
parent
c30870ef1f
commit
1fb87d6a03
|
|
@ -131,13 +131,13 @@ QString MySqlGenerator::escapeValue(const QVariant &v) const
|
||||||
return v.toBool() ? QStringLiteral("1") : QStringLiteral("0");
|
return v.toBool() ? QStringLiteral("1") : QStringLiteral("0");
|
||||||
|
|
||||||
if (v.type() == QVariant::Time)
|
if (v.type() == QVariant::Time)
|
||||||
return v.toTime().toString(QStringLiteral("'HH:mm:ss'"));
|
return v.toTime().toString(QStringLiteral("''HH:mm:ss''"));
|
||||||
|
|
||||||
if (v.type() == QVariant::Date)
|
if (v.type() == QVariant::Date)
|
||||||
return v.toDate().toString(QStringLiteral("'yyyy-MM-dd'"));
|
return v.toDate().toString(QStringLiteral("''yyyy-MM-dd''"));
|
||||||
|
|
||||||
if (v.type() == QVariant::DateTime)
|
if (v.type() == QVariant::DateTime)
|
||||||
return v.toDateTime().toString(QStringLiteral("'yyyy-MM-dd HH:mm:ss'"));
|
return v.toDateTime().toString(QStringLiteral("''yyyy-MM-dd HH:mm:ss''"));
|
||||||
|
|
||||||
//#ifdef QT_GUI_LIB
|
//#ifdef QT_GUI_LIB
|
||||||
// if (v.type() == QVariant::Polygon) {
|
// if (v.type() == QVariant::Polygon) {
|
||||||
|
|
|
||||||
|
|
@ -213,13 +213,13 @@ QString PostgreSqlGenerator::diff(FieldModel *oldField, FieldModel *newField)
|
||||||
QString PostgreSqlGenerator::escapeValue(const QVariant &v) const
|
QString PostgreSqlGenerator::escapeValue(const QVariant &v) const
|
||||||
{
|
{
|
||||||
if (v.type() == QVariant::Time)
|
if (v.type() == QVariant::Time)
|
||||||
return v.toTime().toString(QStringLiteral("'HH:mm:ss'"));
|
return v.toTime().toString(QStringLiteral("''HH:mm:ss''"));
|
||||||
|
|
||||||
if (v.type() == QVariant::Date)
|
if (v.type() == QVariant::Date)
|
||||||
return v.toDate().toString(QStringLiteral("'yyyy-MM-dd'"));
|
return v.toDate().toString(QStringLiteral("''yyyy-MM-dd''"));
|
||||||
|
|
||||||
if (v.type() == QVariant::DateTime)
|
if (v.type() == QVariant::DateTime)
|
||||||
return v.toDateTime().toString(QStringLiteral("'yyyy-MM-dd HH:mm:ss'"));
|
return v.toDateTime().toString(QStringLiteral("''yyyy-MM-dd HH:mm:ss''"));
|
||||||
|
|
||||||
if (v.type() == QVariant::StringList)
|
if (v.type() == QVariant::StringList)
|
||||||
return QStringLiteral("'{")
|
return QStringLiteral("'{")
|
||||||
|
|
|
||||||
|
|
@ -302,13 +302,13 @@ QString SqliteGenerator::createConditionalPhrase(const PhraseData *d) const
|
||||||
QString SqliteGenerator::escapeValue(const QVariant &v) const
|
QString SqliteGenerator::escapeValue(const QVariant &v) const
|
||||||
{
|
{
|
||||||
if (v.type() == QVariant::Time)
|
if (v.type() == QVariant::Time)
|
||||||
return v.toTime().toString(QStringLiteral("'HH:mm:ss'"));
|
return v.toTime().toString(QStringLiteral("''HH:mm:ss''"));
|
||||||
|
|
||||||
if (v.type() == QVariant::Date)
|
if (v.type() == QVariant::Date)
|
||||||
return v.toDate().toString(QStringLiteral("'yyyy-MM-dd'"));
|
return v.toDate().toString(QStringLiteral("''yyyy-MM-dd''"));
|
||||||
|
|
||||||
if (v.type() == QVariant::DateTime)
|
if (v.type() == QVariant::DateTime)
|
||||||
return v.toDateTime().toString(QStringLiteral("'yyyy-MM-dd HH:mm:ss'"));
|
return v.toDateTime().toString(QStringLiteral("''yyyy-MM-dd HH:mm:ss''"));
|
||||||
|
|
||||||
return SqlGeneratorBase::escapeValue(v);
|
return SqlGeneratorBase::escapeValue(v);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -184,13 +184,13 @@ QString SqlServerGenerator::escapeValue(const QVariant &v) const
|
||||||
// }
|
// }
|
||||||
|
|
||||||
case QVariant::Time:
|
case QVariant::Time:
|
||||||
return v.toTime().toString(QStringLiteral("'HH:mm:ss'"));
|
return v.toTime().toString(QStringLiteral("''HH:mm:ss''"));
|
||||||
|
|
||||||
case QVariant::Date:
|
case QVariant::Date:
|
||||||
return v.toDate().toString(QStringLiteral("'yyyy-MM-dd'"));
|
return v.toDate().toString(QStringLiteral("''yyyy-MM-dd''"));
|
||||||
|
|
||||||
case QVariant::DateTime:
|
case QVariant::DateTime:
|
||||||
return v.toDateTime().toString(QStringLiteral("'yyyy-MM-dd HH:mm:ss'"));
|
return v.toDateTime().toString(QStringLiteral("''yyyy-MM-dd HH:mm:ss''"));
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return SqlGeneratorBase::escapeValue(v);
|
return SqlGeneratorBase::escapeValue(v);
|
||||||
|
|
|
||||||
|
|
@ -389,7 +389,7 @@ Q_OUTOFLINE_TEMPLATE int Query<T>::count()
|
||||||
Q_D(Query);
|
Q_D(Query);
|
||||||
|
|
||||||
d->joins.prepend(d->tableName);
|
d->joins.prepend(d->tableName);
|
||||||
d->select = "COUNT(*)";
|
d->select = QStringLiteral("COUNT(*)");
|
||||||
d->sql = d->database->sqlGenerator()->selectCommand(
|
d->sql = d->database->sqlGenerator()->selectCommand(
|
||||||
d->tableName,
|
d->tableName,
|
||||||
SqlGeneratorBase::Count,
|
SqlGeneratorBase::Count,
|
||||||
|
|
|
||||||
|
|
@ -9,7 +9,8 @@ SUBDIRS += \
|
||||||
tst_generators \
|
tst_generators \
|
||||||
tst_upgrades \
|
tst_upgrades \
|
||||||
tst_json \
|
tst_json \
|
||||||
tst_datetime
|
tst_datetime \
|
||||||
|
tst_sametype
|
||||||
|
|
||||||
cmake.CONFIG += no_run-tests_target
|
cmake.CONFIG += no_run-tests_target
|
||||||
prepareRecursiveTarget(run-tests)
|
prepareRecursiveTarget(run-tests)
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
#ifndef DATABASE_CONSTS_H
|
||||||
|
#define DATABASE_CONSTS_H
|
||||||
|
|
||||||
|
#define DRIVER QStringLiteral("QMYSQL")
|
||||||
|
#define DATABASE QStringLiteral("nut_test_%1_db").arg(metaObject()->className()).toLower())
|
||||||
|
#define HOST QString()
|
||||||
|
#define USERNAME QString()
|
||||||
|
#define PASSWORD QString()
|
||||||
|
|
||||||
|
#endif // DATABASE_CONSTS_H
|
||||||
|
|
@ -1,7 +1,60 @@
|
||||||
|
contains(debug_and_release, CONFIG): message(debug_and_release)
|
||||||
|
|
||||||
|
debug_and_release:!ReleaseBuild:!DebugBuild {
|
||||||
|
runtarget.target = run-tests
|
||||||
|
runtarget.CONFIG = recursive
|
||||||
|
runtarget.recurse_target = run-tests
|
||||||
|
QMAKE_EXTRA_TARGETS += runtarget
|
||||||
|
} else {
|
||||||
|
oneshell.target = .ONESHELL
|
||||||
|
QMAKE_EXTRA_TARGETS += oneshell
|
||||||
|
|
||||||
|
win32:!win32-g++ {
|
||||||
|
CONFIG(debug, debug|release): outdir_helper = debug
|
||||||
|
CONFIG(release, debug|release): outdir_helper = release
|
||||||
|
runtarget.target = run-tests
|
||||||
|
!compat_test: runtarget.depends += $(DESTDIR_TARGET)
|
||||||
|
runtarget.commands += set PATH=$$shell_path($$shadowed($$dirname(_QMAKE_CONF_))/bin);$$shell_path($$[QT_INSTALL_BINS]);$(PATH)
|
||||||
|
runtarget.commands += $$escape_expand(\\n\\t)set QT_PLUGIN_PATH=$$shadowed($$dirname(_QMAKE_CONF_))/plugins;$$[QT_INSTALL_PLUGINS];$(QT_PLUGIN_PATH)
|
||||||
|
runtarget.commands += $$escape_expand(\\n\\t)set QML2_IMPORT_PATH=$$shadowed($$dirname(_QMAKE_CONF_))/qml;$$[QT_INSTALL_QML];$(QML2_IMPORT_PATH)
|
||||||
|
!isEmpty(LOGGING_RULES): runtarget.commands += $$escape_expand(\\n\\t)set \"QT_LOGGING_RULES=$$LOGGING_RULES\"
|
||||||
|
runtarget.commands += $$escape_expand(\\n\\t)if exist $${outdir_helper}\\fail del $${outdir_helper}\\fail
|
||||||
|
runtarget.commands += $$escape_expand(\\n\\t)start /w call $(DESTDIR_TARGET) ^> $${outdir_helper}\\test.log ^|^| echo FAIL ^> $${outdir_helper}\\fail ^& exit 0
|
||||||
|
runtarget.commands += $$escape_expand(\\n\\t)type $${outdir_helper}\\test.log
|
||||||
|
runtarget.commands += $$escape_expand(\\n\\t)if exist $${outdir_helper}\\fail exit 42
|
||||||
|
QMAKE_EXTRA_TARGETS += runtarget
|
||||||
|
} else {
|
||||||
|
win32-g++: QMAKE_DIRLIST_SEP = ";"
|
||||||
|
runtarget.commands += export PATH=\"$$shell_path($$shadowed($$dirname(_QMAKE_CONF_))/bin):$$shell_path($$[QT_INSTALL_BINS]):$${LITERAL_DOLLAR}$${LITERAL_DOLLAR}PATH\"
|
||||||
|
runtarget.commands += $$escape_expand(\\n\\t)export QT_PLUGIN_PATH=\"$$shadowed($$dirname(_QMAKE_CONF_))/plugins$${QMAKE_DIRLIST_SEP}$$[QT_INSTALL_PLUGINS]$${QMAKE_DIRLIST_SEP}$(QT_PLUGIN_PATH)\"
|
||||||
|
runtarget.commands += $$escape_expand(\\n\\t)export QML2_IMPORT_PATH=\"$$shadowed($$dirname(_QMAKE_CONF_))/qml$${QMAKE_DIRLIST_SEP}$$[QT_INSTALL_QML]$${QMAKE_DIRLIST_SEP}$(QML2_IMPORT_PATH)\"
|
||||||
|
!isEmpty(LOGGING_RULES): runtarget.commands += $$escape_expand(\\n\\t)export QT_LOGGING_RULES=\"$$LOGGING_RULES\"
|
||||||
|
win32-g++: QMAKE_DIRLIST_SEP = ":"
|
||||||
|
|
||||||
|
linux|win32-g++ {
|
||||||
|
runtarget.commands += $$escape_expand(\\n\\t)export LD_LIBRARY_PATH=\"$$shadowed($$dirname(_QMAKE_CONF_))/lib$${QMAKE_DIRLIST_SEP}$$[QT_INSTALL_LIBS]$${QMAKE_DIRLIST_SEP}$(LD_LIBRARY_PATH)\"
|
||||||
|
runtarget.commands += $$escape_expand(\\n\\t)export QT_QPA_PLATFORM=minimal
|
||||||
|
} else:mac {
|
||||||
|
runtarget.commands += $$escape_expand(\\n\\t)export DYLD_LIBRARY_PATH=\"$$shadowed($$dirname(_QMAKE_CONF_))/lib:$$[QT_INSTALL_LIBS]:$(DYLD_LIBRARY_PATH)\"
|
||||||
|
runtarget.commands += $$escape_expand(\\n\\t)export DYLD_FRAMEWORK_PATH=\"$$shadowed($$dirname(_QMAKE_CONF_))/lib:$$[QT_INSTALL_LIBS]:$(DYLD_FRAMEWORK_PATH)\"
|
||||||
|
}
|
||||||
|
|
||||||
|
runtarget.target = run-tests
|
||||||
|
win32-g++ {
|
||||||
|
!compat_test: runtarget.depends += $(DESTDIR_TARGET)
|
||||||
|
runtarget.commands += $$escape_expand(\\n\\t)./$(DESTDIR_TARGET)
|
||||||
|
} else {
|
||||||
|
!compat_test: runtarget.depends += $(TARGET)
|
||||||
|
runtarget.commands += $$escape_expand(\\n\\t)./$(TARGET)
|
||||||
|
}
|
||||||
|
QMAKE_EXTRA_TARGETS += runtarget
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
win32 {
|
win32 {
|
||||||
CONFIG(debug,debug|release): LIBDIR = $$absolute_path($$OUT_PWD/../../../src/nut/debug)
|
CONFIG(debug,debug|release): LIBDIR = $$absolute_path($$OUT_PWD/../../../src/nut/debug)
|
||||||
CONFIG(release,debug|release): LIBDIR = $$absolute_path($$OUT_PWD/../../../src/nut/release)
|
CONFIG(release,debug|release): LIBDIR = $$absolute_path($$OUT_PWD/../../../src/nut/release)
|
||||||
LIBS += -L$$LIBDIR -lnut
|
# LIBS += -L$$LIBDIR -lnut
|
||||||
} else {
|
} else {
|
||||||
LIBDIR = $$absolute_path($$OUT_PWD/../../../lib)
|
LIBDIR = $$absolute_path($$OUT_PWD/../../../lib)
|
||||||
android: {
|
android: {
|
||||||
|
|
@ -19,7 +72,7 @@ win32 {
|
||||||
LIBS += -L$$LIBDIR -lnut_x86_64
|
LIBS += -L$$LIBDIR -lnut_x86_64
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
# LIBS += -L$$LIBDIR -lnut
|
# LIBS += -L$$LIBDIR
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -27,6 +80,7 @@ win32 {
|
||||||
INCLUDEPATH += $$PWD/../common
|
INCLUDEPATH += $$PWD/../common
|
||||||
|
|
||||||
QT += nut
|
QT += nut
|
||||||
|
CONFIG += testcase
|
||||||
|
|
||||||
DEFINES += NUT_SHARED_POINTER
|
DEFINES += NUT_SHARED_POINTER
|
||||||
DEFINES += NUT_PATH=\\\"$$PWD/../../\\\"
|
DEFINES += NUT_PATH=\\\"$$PWD/../../\\\"
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
#ifndef DATABASE_CONSTS_H
|
||||||
|
#define DATABASE_CONSTS_H
|
||||||
|
|
||||||
|
#define DRIVER QStringLiteral("QPSQL")
|
||||||
|
#define DATABASE QStringLiteral("nut_test_%1_db").arg(metaObject()->className()).toLower())
|
||||||
|
#define HOST QString()
|
||||||
|
#define USERNAME QStringLiteral("postgres")
|
||||||
|
#define PASSWORD QStringLiteral("root")
|
||||||
|
|
||||||
|
#endif // DATABASE_CONSTS_H
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
#ifndef DATABASE_CONSTS_H
|
||||||
|
#define DATABASE_CONSTS_H
|
||||||
|
|
||||||
|
#define DRIVER QStringLiteral("QSQLITE")
|
||||||
|
#define DATABASE QStringLiteral("nut_test_%1_db").arg(metaObject()->className()).toLower())
|
||||||
|
#define HOST QString()
|
||||||
|
#define USERNAME QString()
|
||||||
|
#define PASSWORD QString()
|
||||||
|
|
||||||
|
#endif // DATABASE_CONSTS_H
|
||||||
|
|
@ -0,0 +1,11 @@
|
||||||
|
#ifndef DATABASE_CONSTS_H
|
||||||
|
#define DATABASE_CONSTS_H
|
||||||
|
|
||||||
|
#define DRIVER "QODBC"
|
||||||
|
#define DATABASE QString("DRIVER={SQL Server};Server=.;Database=%1;Uid=sa;Port=1433;Pwd=qwe123!@#;WSID=.") \
|
||||||
|
.arg(QString("nut_test_%1_db").arg(metaObject()->className()).toLower())
|
||||||
|
#define HOST QStringLiteral(".")
|
||||||
|
#define USERNAME QString()
|
||||||
|
#define PASSWORD QString()
|
||||||
|
|
||||||
|
#endif // DATABASE_CONSTS_H
|
||||||
|
|
@ -170,10 +170,15 @@ void BasicTest::selectPosts()
|
||||||
|
|
||||||
void BasicTest::selectScoreAverage()
|
void BasicTest::selectScoreAverage()
|
||||||
{
|
{
|
||||||
auto avg = db.scores()->query()
|
bool ok;
|
||||||
|
auto avg = db.scores()
|
||||||
|
->query()
|
||||||
->join<Post>()
|
->join<Post>()
|
||||||
->setWhere(Post::idField() == 1)
|
->where(Post::idField() == postId)
|
||||||
->average(Score::scoreField());
|
->average(Score::scoreField())
|
||||||
|
.toInt(&ok);
|
||||||
|
|
||||||
|
QTEST_ASSERT(ok);
|
||||||
QCOMPARE(avg, 2);
|
QCOMPARE(avg, 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -210,7 +215,7 @@ void BasicTest::selectPostIds()
|
||||||
{
|
{
|
||||||
auto q = db.posts()->query();
|
auto q = db.posts()->query();
|
||||||
auto ids = q->select(Post::idField());
|
auto ids = q->select(Post::idField());
|
||||||
qDebug() << ids.count();
|
|
||||||
QTEST_ASSERT(ids.count() == 2);
|
QTEST_ASSERT(ids.count() == 2);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,73 @@
|
||||||
|
# This file is used to ignore files which are generated
|
||||||
|
# ----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
*~
|
||||||
|
*.autosave
|
||||||
|
*.a
|
||||||
|
*.core
|
||||||
|
*.moc
|
||||||
|
*.o
|
||||||
|
*.obj
|
||||||
|
*.orig
|
||||||
|
*.rej
|
||||||
|
*.so
|
||||||
|
*.so.*
|
||||||
|
*_pch.h.cpp
|
||||||
|
*_resource.rc
|
||||||
|
*.qm
|
||||||
|
.#*
|
||||||
|
*.*#
|
||||||
|
core
|
||||||
|
!core/
|
||||||
|
tags
|
||||||
|
.DS_Store
|
||||||
|
.directory
|
||||||
|
*.debug
|
||||||
|
Makefile*
|
||||||
|
*.prl
|
||||||
|
*.app
|
||||||
|
moc_*.cpp
|
||||||
|
ui_*.h
|
||||||
|
qrc_*.cpp
|
||||||
|
Thumbs.db
|
||||||
|
*.res
|
||||||
|
*.rc
|
||||||
|
/.qmake.cache
|
||||||
|
/.qmake.stash
|
||||||
|
|
||||||
|
# qtcreator generated files
|
||||||
|
*.pro.user*
|
||||||
|
|
||||||
|
# xemacs temporary files
|
||||||
|
*.flc
|
||||||
|
|
||||||
|
# Vim temporary files
|
||||||
|
.*.swp
|
||||||
|
|
||||||
|
# Visual Studio generated files
|
||||||
|
*.ib_pdb_index
|
||||||
|
*.idb
|
||||||
|
*.ilk
|
||||||
|
*.pdb
|
||||||
|
*.sln
|
||||||
|
*.suo
|
||||||
|
*.vcproj
|
||||||
|
*vcproj.*.*.user
|
||||||
|
*.ncb
|
||||||
|
*.sdf
|
||||||
|
*.opensdf
|
||||||
|
*.vcxproj
|
||||||
|
*vcxproj.*
|
||||||
|
|
||||||
|
# MinGW generated files
|
||||||
|
*.Debug
|
||||||
|
*.Release
|
||||||
|
|
||||||
|
# Python byte code
|
||||||
|
*.pyc
|
||||||
|
|
||||||
|
# Binaries
|
||||||
|
# --------
|
||||||
|
*.dll
|
||||||
|
*.exe
|
||||||
|
|
||||||
|
|
@ -0,0 +1,10 @@
|
||||||
|
#include "db.h"
|
||||||
|
#include "sampletable.h"
|
||||||
|
|
||||||
|
DB::DB() : Nut::Database()
|
||||||
|
, m_users1(new Nut::TableSet<SampleTable>(this))
|
||||||
|
, m_users2(new Nut::TableSet<SampleTable>(this))
|
||||||
|
, m_users3(new Nut::TableSet<SampleTable>(this))
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
#ifndef DB1_H
|
||||||
|
#define DB1_H
|
||||||
|
|
||||||
|
#include "database.h"
|
||||||
|
|
||||||
|
class SampleTable;
|
||||||
|
class DB : public Nut::Database
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
NUT_DB_VERSION(1)
|
||||||
|
|
||||||
|
NUT_DECLARE_TABLE(SampleTable, users1)
|
||||||
|
NUT_DECLARE_TABLE(SampleTable, users2)
|
||||||
|
NUT_DECLARE_TABLE(SampleTable, users3)
|
||||||
|
|
||||||
|
public:
|
||||||
|
DB();
|
||||||
|
};
|
||||||
|
|
||||||
|
Q_DECLARE_METATYPE(DB*)
|
||||||
|
|
||||||
|
#endif // DB1_H
|
||||||
|
|
@ -0,0 +1,7 @@
|
||||||
|
#include "sampletable.h"
|
||||||
|
|
||||||
|
|
||||||
|
SampleTable::SampleTable(QObject *parent) : Nut::Table (parent)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
@ -0,0 +1,23 @@
|
||||||
|
#ifndef TABLE1_H
|
||||||
|
#define TABLE1_H
|
||||||
|
|
||||||
|
#include "table.h"
|
||||||
|
|
||||||
|
class SampleTable : public Nut::Table
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
NUT_PRIMARY_AUTO_INCREMENT(id)
|
||||||
|
NUT_DECLARE_FIELD(int, id, id, setId)
|
||||||
|
|
||||||
|
NUT_DECLARE_FIELD(QString, name, name, setName)
|
||||||
|
NUT_DECLARE_FIELD(QString, password, password, setPassword)
|
||||||
|
|
||||||
|
public:
|
||||||
|
Q_INVOKABLE SampleTable(QObject *parent = Q_NULLPTR);
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
Q_DECLARE_METATYPE(SampleTable*)
|
||||||
|
|
||||||
|
#endif // TABLE1_H
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
QT += testlib sql
|
||||||
|
|
||||||
|
TARGET = tst_upgrades
|
||||||
|
TEMPLATE = app
|
||||||
|
CONFIG += warn_on c++11
|
||||||
|
|
||||||
|
include(../common/nut-lib.pri)
|
||||||
|
|
||||||
|
SOURCES += \
|
||||||
|
db.cpp \
|
||||||
|
sampletable.cpp \
|
||||||
|
tst_sametypes.cpp
|
||||||
|
|
||||||
|
HEADERS += \
|
||||||
|
db.h \
|
||||||
|
sampletable.h \
|
||||||
|
tst_sametypes.h
|
||||||
|
|
||||||
|
|
@ -0,0 +1,148 @@
|
||||||
|
#include <QtTest>
|
||||||
|
|
||||||
|
#include "db.h"
|
||||||
|
#include "sampletable.h"
|
||||||
|
#include "query.h"
|
||||||
|
|
||||||
|
#include "tst_sametypes.h"
|
||||||
|
#include "consts.h"
|
||||||
|
|
||||||
|
SameTypes::SameTypes()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
SameTypes::~SameTypes()
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void SameTypes::initTestCase()
|
||||||
|
{
|
||||||
|
REGISTER(DB);
|
||||||
|
REGISTER(SampleTable);
|
||||||
|
|
||||||
|
db.setDriver(DRIVER);
|
||||||
|
db.setHostName(HOST);
|
||||||
|
db.setDatabaseName(DATABASE);
|
||||||
|
db.setUserName(USERNAME);
|
||||||
|
db.setPassword(PASSWORD);
|
||||||
|
|
||||||
|
db.open();
|
||||||
|
}
|
||||||
|
|
||||||
|
void SameTypes::insert()
|
||||||
|
{
|
||||||
|
insertOnList(1, "1");
|
||||||
|
insertOnList(2, "2");
|
||||||
|
insertOnList(3, "3");
|
||||||
|
}
|
||||||
|
|
||||||
|
void SameTypes::counts()
|
||||||
|
{
|
||||||
|
for (int i = 1; i < 4; ++i) {
|
||||||
|
auto t = query(i);
|
||||||
|
|
||||||
|
QTEST_ASSERT(t != nullptr);
|
||||||
|
QCOMPARE(t->toList().count(), 1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void SameTypes::read()
|
||||||
|
{
|
||||||
|
QCOMPARE(readPassword(1), "1");
|
||||||
|
QCOMPARE(readPassword(2), "2");
|
||||||
|
QCOMPARE(readPassword(3), "3");
|
||||||
|
}
|
||||||
|
|
||||||
|
void SameTypes::insertOnList(char no, const QString &password)
|
||||||
|
{
|
||||||
|
Nut::TableSet<SampleTable> *tableSet;
|
||||||
|
|
||||||
|
switch (no) {
|
||||||
|
case 1:
|
||||||
|
tableSet = db.users1();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
tableSet = db.users2();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
tableSet = db.users3();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ok;
|
||||||
|
auto q = tableSet->query();
|
||||||
|
int n = q->insert((SampleTable::nameField() = "user")
|
||||||
|
& (SampleTable::passwordField() = password))
|
||||||
|
.toInt(&ok);
|
||||||
|
|
||||||
|
qDebug() << q->sqlCommand();
|
||||||
|
QTEST_ASSERT(ok);
|
||||||
|
|
||||||
|
QTEST_ASSERT(n != 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
QString SameTypes::readPassword(char no)
|
||||||
|
{
|
||||||
|
Nut::TableSet<SampleTable> *tableSet;
|
||||||
|
|
||||||
|
switch (no) {
|
||||||
|
case 1:
|
||||||
|
tableSet = db.users1();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
tableSet = db.users2();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
tableSet = db.users3();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return QString();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool ok;
|
||||||
|
auto q = tableSet->query();
|
||||||
|
QStringList passwordList = q->where(SampleTable::nameField() == "user")
|
||||||
|
->select(SampleTable::passwordField());
|
||||||
|
|
||||||
|
|
||||||
|
qDebug() << q->sqlCommand();
|
||||||
|
QTEST_ASSERT(passwordList.size() == 1);
|
||||||
|
|
||||||
|
return passwordList.first();
|
||||||
|
}
|
||||||
|
|
||||||
|
Nut::Query<SampleTable> *SameTypes::query(int n)
|
||||||
|
{
|
||||||
|
switch (n) {
|
||||||
|
case 1:
|
||||||
|
return db.users1()->query();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 2:
|
||||||
|
return db.users2()->query();
|
||||||
|
break;
|
||||||
|
|
||||||
|
case 3:
|
||||||
|
return db.users3()->query();
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
return nullptr;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
QTEST_APPLESS_MAIN(SameTypes)
|
||||||
|
|
||||||
|
|
@ -0,0 +1,36 @@
|
||||||
|
#ifndef TST_UPGRADES_H
|
||||||
|
#define TST_UPGRADES_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
#include "db.h"
|
||||||
|
|
||||||
|
|
||||||
|
namespace Nut {
|
||||||
|
class Database;
|
||||||
|
template<class T>
|
||||||
|
class Query;
|
||||||
|
}
|
||||||
|
class SameTypes : public QObject
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
DB db;
|
||||||
|
|
||||||
|
void insertOnList(char no, const QString &password);
|
||||||
|
QString readPassword(char no);
|
||||||
|
Nut::Query<SampleTable> *query(int n);
|
||||||
|
|
||||||
|
public:
|
||||||
|
SameTypes();
|
||||||
|
~SameTypes();
|
||||||
|
|
||||||
|
private slots:
|
||||||
|
void initTestCase();
|
||||||
|
|
||||||
|
void insert();
|
||||||
|
void counts();
|
||||||
|
void read();
|
||||||
|
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // TST_UPGRADES_H
|
||||||
Loading…
Reference in New Issue