wip;uuid as primary key [skip ci]

This commit is contained in:
Hamed Masafi 2019-02-10 18:16:21 +03:30
parent 4ea071836b
commit af64d3f24f
6 changed files with 41 additions and 32 deletions

View File

@ -3,9 +3,9 @@ TEMPLATE = subdirs
SUBDIRS += \ SUBDIRS += \
tst_basic \ tst_basic \
tst_benckmark \ tst_benckmark \
tst_commands \ # tst_commands \
tst_datatypes tst_datatypes \
#tst_join \ #tst_join \
# tst_phrases # tst_phrases
# tst_quuid tst_quuid

View File

@ -13,6 +13,7 @@
#include "post.h" #include "post.h"
#include "comment.h" #include "comment.h"
#include "user.h" #include "user.h"
#include "score.h"
MainTest::MainTest(QObject *parent) : QObject(parent) MainTest::MainTest(QObject *parent) : QObject(parent)
{ {

View File

@ -11,13 +11,10 @@ class Test : public Nut::Table
NUT_PRIMARY_KEY(id) NUT_PRIMARY_KEY(id)
NUT_DECLARE_FIELD(QUuid, id, id, setId) NUT_DECLARE_FIELD(QUuid, id, id, setId)
NUT_DECLARE_FIELD(QUuid, uuid, uuid, setUuid)
NUT_NOT_NULL(username)
NUT_LEN(username, 50)
NUT_DECLARE_FIELD(QString, username, username, setUsername)
public: public:
Q_INVOKABLE Test(QObject *parentTableSet = 0); Q_INVOKABLE Test(QObject *parentTableSet = nullptr);
}; };
Q_DECLARE_METATYPE(Test*) Q_DECLARE_METATYPE(Test*)

View File

@ -1,7 +1,7 @@
QT += qml quick testlib sql QT += qml quick testlib sql
QT -= gui QT -= gui
TARGET = tst_nut TARGET = tst_uuid
TEMPLATE = app TEMPLATE = app
CONFIG += warn_on qmltestcase c++11 CONFIG += warn_on qmltestcase c++11
@ -9,12 +9,12 @@ INCLUDEPATH += $$PWD/../../src $$PWD/../common
include(../../nut.pri) include(../../nut.pri)
IMPORTPATH += $$OUT_PWD/../src/imports IMPORTPATH += $$OUT_PWD/../src/imports
SOURCES += \ SOURCES += \
maintest.cpp \
testdatabase.cpp \ testdatabase.cpp \
test.cpp test.cpp \
tst_uuid.cpp
HEADERS += \ HEADERS += \
maintest.h \
../common/consts.h \ ../common/consts.h \
testdatabase.h \ testdatabase.h \
test.h test.h \
tst_uuid.h

View File

@ -6,58 +6,65 @@
#include "consts.h" #include "consts.h"
#include "maintest.h" #include "tst_uuid.h"
#include "query.h" #include "query.h"
#include "tableset.h" #include "tableset.h"
#include "tablemodel.h" #include "tablemodel.h"
#include "test.h" #include "test.h"
MainTest::MainTest(QObject *parent) : QObject(parent) UuidTest::UuidTest(QObject *parent) : QObject(parent)
{ {
} }
void MainTest::initTestCase() void UuidTest::initTestCase()
{ {
qDebug() << "Test type id:" << qRegisterMetaType<Test*>(); qDebug() << "Test type id:" << qRegisterMetaType<Test*>();
qDebug() << "DB type id:" << qRegisterMetaType<TestDatabase*>(); qDebug() << "DB type id:" << qRegisterMetaType<TestDatabase*>();
QFile::remove(DATABASE);
db.setDriver(DRIVER); db.setDriver(DRIVER);
db.setHostName(HOST); db.setHostName(HOST);
db.setDatabaseName("nut_tst_quuid"); db.setDatabaseName(DATABASE);
db.setUserName(USERNAME); db.setUserName(USERNAME);
db.setPassword(PASSWORD); db.setPassword(PASSWORD);
bool ok = db.open(); bool ok = db.open();
db.tests()->query()->remove(); db.tests()->query()->remove();
uuid = QUuid::createUuid();
QTEST_ASSERT(ok); QTEST_ASSERT(ok);
} }
void MainTest::add() void UuidTest::save()
{ {
TIC(); TIC();
QUuid uuid = QUuid::createUuid();
Test t; Test t;
t.setId(uuid); t.setId(QUuid::createUuid());
t.setUsername("test username"); t.setUuid(uuid);
db.tests()->append(&t); db.tests()->append(&t);
db.saveChanges(); int n = db.saveChanges();
TOC(); TOC();
Test *t2 = db.tests()->query()
->where(Test::idField() == uuid)
->first();
TOC(); TOC();
QTEST_ASSERT(t2->id() == uuid); QTEST_ASSERT(n == 1);
} }
void MainTest::cleanupTestCase() void UuidTest::restore()
{
TIC();
auto test = db.tests()->query()->first();
TOC();
QTEST_ASSERT(!test->id().isNull());
QTEST_ASSERT(test->uuid() == uuid);
}
void UuidTest::cleanupTestCase()
{ {
qDeleteAll(Nut::TableModel::allModels()); qDeleteAll(Nut::TableModel::allModels());
// Nut::DatabaseModel::deleteAllModels(); // Nut::DatabaseModel::deleteAllModels();
} }
QTEST_MAIN(MainTest) QTEST_MAIN(UuidTest)

View File

@ -4,21 +4,25 @@
#include <QtCore/QObject> #include <QtCore/QObject>
#include <QtCore/qglobal.h> #include <QtCore/qglobal.h>
#include <QUuid>
#include "testdatabase.h" #include "testdatabase.h"
class Test; class Test;
class MainTest : public QObject class UuidTest : public QObject
{ {
Q_OBJECT Q_OBJECT
TestDatabase db; TestDatabase db;
QUuid uuid;
public: public:
explicit MainTest(QObject *parent = 0); explicit UuidTest(QObject *parent = nullptr);
signals: signals:
private slots: private slots:
void initTestCase(); void initTestCase();
void add(); void save();
void restore();
void cleanupTestCase(); void cleanupTestCase();
}; };