fix: slave to master relation in select query
This commit is contained in:
parent
97757d57b6
commit
08a77bb7a4
|
|
@ -85,8 +85,9 @@ public: \
|
|||
(staticMetaObject.className(), #name "Id"); \
|
||||
return f; \
|
||||
} \
|
||||
public Q_SLOTS: \
|
||||
void write(Nut::Row<type> name); \
|
||||
public : \
|
||||
Q_INVOKABLE void write(Nut::Row<type> name); \
|
||||
Q_INVOKABLE void write(Nut::Row<Nut::Table> name); \
|
||||
void write##Id(keytype name##Id);
|
||||
|
||||
#define NUT_FOREIGN_KEY_IMPLEMENT(class, type, keytype, name, read, write) \
|
||||
|
|
@ -96,7 +97,9 @@ public Q_SLOTS: \
|
|||
m_##name = name; \
|
||||
m_##name##Id = name->primaryValue().value<keytype>(); \
|
||||
} \
|
||||
keytype class::read##Id() const{ \
|
||||
void class::write(Nut::Row<Nut::Table> name){ \
|
||||
write(qSharedPointerObjectCast<type>(name)); \
|
||||
} keytype class::read##Id() const{ \
|
||||
if (m_##name) \
|
||||
return m_##name->primaryValue().value<keytype>(); \
|
||||
return m_##name##Id; \
|
||||
|
|
|
|||
|
|
@ -383,6 +383,21 @@ Q_OUTOFLINE_TEMPLATE RowList<T> Query<T>::toList(int count)
|
|||
auto tableset = levels[master].lastRow.data()->childTableSet(
|
||||
data.table->className());
|
||||
tableset->add(row);
|
||||
|
||||
//set key
|
||||
{
|
||||
QString setterName = data.masterFields[master];
|
||||
setterName[0] = setterName[0].toUpper();
|
||||
setterName.prepend(QStringLiteral("set"));
|
||||
|
||||
bool ok = row->metaObject()->invokeMethod(row.data(),
|
||||
setterName.toStdString().c_str(),
|
||||
Qt::DirectConnection,
|
||||
Q_ARG(Nut::Row<Nut::Table>,
|
||||
levels[master].lastRow));
|
||||
|
||||
qDebug() << "data.masterFields[master]=" << setterName << ok;
|
||||
}
|
||||
}
|
||||
|
||||
row->setStatus(Table::FetchedFromDB);
|
||||
|
|
|
|||
|
|
@ -1,68 +1,19 @@
|
|||
DEFINES += NUT_SHARED_POINTER
|
||||
QT = core sql gui
|
||||
|
||||
INCLUDEPATH += $$PWD
|
||||
|
||||
include(config/config.pri)
|
||||
include(core/core.pri)
|
||||
include(generators/generators.pri)
|
||||
include(types/types.pri)
|
||||
include(phrases/phrases.pri)
|
||||
include(models/models.pri)
|
||||
|
||||
HEADERS += \
|
||||
$$PWD/generators/sqlgeneratorbase_p.h \
|
||||
$$PWD/generators/postgresqlgenerator.h \
|
||||
$$PWD/generators/mysqlgenerator.h \
|
||||
$$PWD/generators/sqlitegenerator.h \
|
||||
$$PWD/generators/sqlservergenerator.h \
|
||||
$$PWD/tablesetbasedata.h \
|
||||
$$PWD/types/dbgeography.h \
|
||||
$$PWD/tableset.h \
|
||||
$$PWD/defines_consts.h \
|
||||
$$PWD/nut_global.h \
|
||||
$$PWD/query.h \
|
||||
$$PWD/databasemodel.h \
|
||||
$$PWD/changelogtable.h \
|
||||
$$PWD/tablesetbase_p.h \
|
||||
$$PWD/querybase_p.h \
|
||||
$$PWD/tablemodel.h \
|
||||
$$PWD/query_p.h \
|
||||
$$PWD/table.h \
|
||||
$$PWD/database.h \
|
||||
$$PWD/database_p.h \
|
||||
$$PWD/serializableobject.h \
|
||||
$$PWD/sqlmodel.h \
|
||||
$$PWD/sqlmodel_p.h \
|
||||
$$PWD/phrase.h \
|
||||
$$PWD/phrases/abstractfieldphrase.h \
|
||||
$$PWD/phrases/assignmentphrase.h \
|
||||
$$PWD/phrases/assignmentphraselist.h \
|
||||
$$PWD/phrases/conditionalphrase.h \
|
||||
$$PWD/phrases/fieldphrase.h \
|
||||
$$PWD/phrases/phrasedata.h \
|
||||
$$PWD/phrases/phrasedatalist.h \
|
||||
$$PWD/phrases/phraselist.h \
|
||||
$$PWD/phrases/datephrase.h \
|
||||
$$PWD/table_p.h
|
||||
$$PWD/phrase.h
|
||||
|
||||
SOURCES += \
|
||||
$$PWD/generators/sqlgeneratorbase.cpp \
|
||||
$$PWD/generators/postgresqlgenerator.cpp \
|
||||
$$PWD/generators/mysqlgenerator.cpp \
|
||||
$$PWD/generators/sqlitegenerator.cpp \
|
||||
$$PWD/generators/sqlservergenerator.cpp \
|
||||
$$PWD/types/dbgeography.cpp \
|
||||
$$PWD/tableset.cpp \
|
||||
$$PWD/query.cpp \
|
||||
$$PWD/databasemodel.cpp \
|
||||
$$PWD/tablesetbase.cpp \
|
||||
$$PWD/changelogtable.cpp \
|
||||
$$PWD/querybase.cpp \
|
||||
$$PWD/tablemodel.cpp \
|
||||
$$PWD/table.cpp \
|
||||
$$PWD/database.cpp \
|
||||
$$PWD/serializableobject.cpp \
|
||||
$$PWD/sqlmodel.cpp \
|
||||
$$PWD/phrase.cpp \
|
||||
$$PWD/phrases/abstractfieldphrase.cpp \
|
||||
$$PWD/phrases/assignmentphrase.cpp \
|
||||
$$PWD/phrases/assignmentphraselist.cpp \
|
||||
$$PWD/phrases/conditionalphrase.cpp \
|
||||
$$PWD/phrases/fieldphrase.cpp \
|
||||
$$PWD/phrases/phrasedata.cpp \
|
||||
$$PWD/phrases/phrasedatalist.cpp \
|
||||
$$PWD/phrases/phraselist.cpp \
|
||||
$$PWD/phrases/datephrase.cpp
|
||||
$$PWD/phrase.cpp
|
||||
|
||||
include($$PWD/../3rdparty/serializer/src/src.pri)
|
||||
include($$PWD/3rdparty/serializer/src/src.pri)
|
||||
|
|
|
|||
|
|
@ -56,7 +56,6 @@ void Comment::setSaveDate(QDateTime saveDate)
|
|||
|
||||
void Comment::setPoint(qreal point)
|
||||
{
|
||||
qWarning("Floating point comparison needs context sanity check");
|
||||
if (qFuzzyCompare(m_point, point))
|
||||
return;
|
||||
|
||||
|
|
|
|||
|
|
@ -225,6 +225,20 @@ void BasicTest::selectPostIds()
|
|||
QCOMPARE(ids.count(), 2);
|
||||
}
|
||||
|
||||
void BasicTest::selectPostsWithComments()
|
||||
{
|
||||
auto posts = db.posts()->query().join<Comment>().toList();
|
||||
|
||||
QCOMPARE(posts.first()->comments()->length(), 3);
|
||||
}
|
||||
|
||||
void BasicTest::selectCommantsWithPost()
|
||||
{
|
||||
auto comments = db.comments()->query().join<Post>().toList();
|
||||
QCOMPARE(comments.length(), 6);
|
||||
QVERIFY(!comments.first()->post().isNull());
|
||||
}
|
||||
|
||||
void BasicTest::testDate()
|
||||
{
|
||||
QDateTime d = QDateTime::currentDateTime();
|
||||
|
|
|
|||
|
|
@ -38,6 +38,8 @@ private Q_SLOTS:
|
|||
void selectPostsWithoutTitle();
|
||||
void selectPostIds();
|
||||
void updatePostOnTheFly();
|
||||
void selectPostsWithComments();
|
||||
void selectCommantsWithPost();
|
||||
void testDate();
|
||||
void testLimitedQuery();
|
||||
void selectWithInvalidRelation();
|
||||
|
|
|
|||
Loading…
Reference in New Issue