:-(
This commit is contained in:
parent
d39c6aee37
commit
9a10c53bee
|
|
@ -1 +1 @@
|
|||
Subproject commit 2dc11b380a07424a4face3046cc6b5e50aefb700
|
||||
Subproject commit acbd68924feb9ee412b4d69bbf24cb3a3cffdfd6
|
||||
|
|
@ -281,7 +281,7 @@ bool DatabasePrivate::getCurrectSchema()
|
|||
DatabaseModel DatabasePrivate::getLastSchema()
|
||||
{
|
||||
Row<ChangeLogTable> u = changeLogs->query()
|
||||
->orderBy(!ChangeLogTable::idField())
|
||||
.orderBy(!ChangeLogTable::idField())
|
||||
.first();
|
||||
|
||||
// DatabaseModel ret(q->metaObject()->className());
|
||||
|
|
|
|||
|
|
@ -63,7 +63,21 @@ struct NUT_EXPORT QueryData {
|
|||
ConditionalPhrase wherePhrase;
|
||||
|
||||
QueryData *clone() {
|
||||
return new QueryData;
|
||||
auto r = new QueryData;
|
||||
r->sql = sql;
|
||||
r->className = className;
|
||||
r->tableName = tableName;
|
||||
r->select = select;
|
||||
r->database = database;
|
||||
r->tableSet = tableSet;
|
||||
r->joins = joins;
|
||||
r->relations = relations;
|
||||
r->skip = skip;
|
||||
r->take = take;
|
||||
r->orderPhrase = orderPhrase;
|
||||
r->fieldPhrase = fieldPhrase;
|
||||
r->wherePhrase = wherePhrase;
|
||||
return r;
|
||||
}
|
||||
};
|
||||
|
||||
|
|
@ -189,7 +203,7 @@ Q_OUTOFLINE_TEMPLATE Query<T>::Query(const Query<T> &other) {
|
|||
template<class T>
|
||||
Q_OUTOFLINE_TEMPLATE Query<T>::Query(Query<T> &&other) {
|
||||
d = std::move(other.d);
|
||||
other._data = nullptr;
|
||||
other.d = nullptr;
|
||||
}
|
||||
|
||||
template <class T>
|
||||
|
|
@ -204,7 +218,7 @@ Q_OUTOFLINE_TEMPLATE Query<T> &Query<T>::operator=(const Query<T> &q)
|
|||
{
|
||||
if (this != &q)
|
||||
{
|
||||
T *p = q._data ? q._data->detach() : nullptr;
|
||||
QueryData *p = q.d ? q.d->clone() : nullptr;
|
||||
delete d;
|
||||
d = p;
|
||||
}
|
||||
|
|
@ -371,7 +385,7 @@ Q_OUTOFLINE_TEMPLATE RowList<T> Query<T>::toList(int count)
|
|||
}
|
||||
|
||||
row->setStatus(Table::FetchedFromDB);
|
||||
row->setParent(this);
|
||||
// row->setParent(this);
|
||||
row->clear();
|
||||
|
||||
//set last created row
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ public:
|
|||
Row<T> at(int i) const;
|
||||
Row<T> operator[](int i) const;
|
||||
|
||||
Query<T> *query(bool autoDelete = true);
|
||||
Query<T> query(bool autoDelete = true);
|
||||
BulkInserter *bulkInserter();
|
||||
};
|
||||
|
||||
|
|
@ -80,11 +80,9 @@ Q_OUTOFLINE_TEMPLATE TableSet<T>::TableSet(Table *parent) : AbstractTableSet(par
|
|||
}
|
||||
|
||||
template<class T>
|
||||
Q_OUTOFLINE_TEMPLATE Query<T> *TableSet<T>::query(bool autoDelete)
|
||||
Q_OUTOFLINE_TEMPLATE Query<T> TableSet<T>::query(bool autoDelete)
|
||||
{
|
||||
Query<T> *q = new Query<T>(data->database, this, autoDelete);
|
||||
|
||||
return q;
|
||||
return Query<T>(data->database, this, autoDelete);
|
||||
}
|
||||
|
||||
template<class T>
|
||||
|
|
|
|||
|
|
@ -38,10 +38,10 @@ void BasicTest::initTestCase()
|
|||
bool ok = db.open();
|
||||
QVERIFY(ok);
|
||||
|
||||
db.comments()->query()->remove();
|
||||
db.posts()->query()->remove();
|
||||
db.users()->query()->remove();
|
||||
db.scores()->query()->remove();
|
||||
db.comments()->query().remove();
|
||||
db.posts()->query().remove();
|
||||
db.users()->query().remove();
|
||||
db.scores()->query().remove();
|
||||
}
|
||||
|
||||
void BasicTest::dataSchema()
|
||||
|
|
@ -97,7 +97,7 @@ void BasicTest::createPost()
|
|||
void BasicTest::createPost2()
|
||||
{
|
||||
//create post on the fly
|
||||
QVariant postIdVar = db.posts()->query()->insert(
|
||||
QVariant postIdVar = db.posts()->query().insert(
|
||||
(Post::titleField() = QStringLiteral("This is a sample"))
|
||||
& (Post::isPublicField() = true));
|
||||
|
||||
|
|
@ -123,15 +123,15 @@ void BasicTest::createPost2()
|
|||
void BasicTest::updatePostOnTheFly()
|
||||
{
|
||||
auto c = db.posts()->query()
|
||||
->where(Post::idField() == postId)
|
||||
->update(Post::titleField() = QStringLiteral("New title"));
|
||||
.where(Post::idField() == postId)
|
||||
.update(Post::titleField() = QStringLiteral("New title"));
|
||||
|
||||
QCOMPARE(c, 1);
|
||||
|
||||
auto titles = db.posts()
|
||||
->query()
|
||||
->where(Post::idField() == postId)
|
||||
->select(Post::titleField());
|
||||
.where(Post::idField() == postId)
|
||||
.select(Post::titleField());
|
||||
|
||||
QCOMPARE(titles.count(), 1);
|
||||
QCOMPARE(titles.at(0), QStringLiteral("New title"));
|
||||
|
|
@ -140,12 +140,12 @@ void BasicTest::updatePostOnTheFly()
|
|||
void BasicTest::selectPublicts()
|
||||
{
|
||||
auto q = db.posts()->query()
|
||||
->where(Post::isPublicField())
|
||||
->count();
|
||||
.where(Post::isPublicField())
|
||||
.count();
|
||||
|
||||
auto q2 = db.posts()->query()
|
||||
->where(!Post::isPublicField())
|
||||
->count();
|
||||
.where(!Post::isPublicField())
|
||||
.count();
|
||||
|
||||
QCOMPARE(q, 1);
|
||||
QCOMPARE(q2, 1);
|
||||
|
|
@ -154,11 +154,11 @@ void BasicTest::selectPublicts()
|
|||
void BasicTest::selectPosts()
|
||||
{
|
||||
auto q = db.posts()->query()
|
||||
->join<Comment>()
|
||||
->orderBy((!Post::saveDateField()) | Post::bodyField())
|
||||
->setWhere(Post::idField() == postId);
|
||||
.join<Comment>()
|
||||
.orderBy((!Post::saveDateField()) | Post::bodyField())
|
||||
.where(Post::idField() == postId);
|
||||
|
||||
auto posts = q->toList();
|
||||
auto posts = q.toList();
|
||||
post = posts.at(0);
|
||||
post->setBody(QStringLiteral(""));
|
||||
|
||||
|
|
@ -179,9 +179,9 @@ void BasicTest::selectScoreAverage()
|
|||
bool ok;
|
||||
auto avg = db.scores()
|
||||
->query()
|
||||
->join<Post>()
|
||||
->where(Post::idField() == postId)
|
||||
->average(Score::scoreField())
|
||||
.join<Post>()
|
||||
.where(Post::idField() == postId)
|
||||
.average(Score::scoreField())
|
||||
.toInt(&ok);
|
||||
|
||||
QVERIFY(ok);
|
||||
|
|
@ -190,21 +190,21 @@ void BasicTest::selectScoreAverage()
|
|||
|
||||
void BasicTest::selectScoreSum()
|
||||
{
|
||||
auto sum = db.scores()->query()->sum(Score::scoreField());
|
||||
auto sum = db.scores()->query().sum(Score::scoreField());
|
||||
QCOMPARE(sum, 20);
|
||||
}
|
||||
|
||||
void BasicTest::selectScoreCount()
|
||||
{
|
||||
auto count = db.scores()->query()->count();
|
||||
auto count = db.scores()->query().count();
|
||||
QCOMPARE(count, 10);
|
||||
}
|
||||
|
||||
void BasicTest::selectFirst()
|
||||
{
|
||||
auto posts = db.posts()->query()
|
||||
->orderBy(Post::idField())
|
||||
->first();
|
||||
.orderBy(Post::idField())
|
||||
.first();
|
||||
|
||||
QVERIFY(posts != Q_NULLPTR);
|
||||
}
|
||||
|
|
@ -212,15 +212,15 @@ void BasicTest::selectFirst()
|
|||
void BasicTest::selectPostsWithoutTitle()
|
||||
{
|
||||
auto q = db.posts()->query();
|
||||
q->setWhere(Post::titleField().isNull());
|
||||
auto count = q->count();
|
||||
q.where(Post::titleField().isNull());
|
||||
auto count = q.count();
|
||||
QCOMPARE(count, 0);
|
||||
}
|
||||
|
||||
void BasicTest::selectPostIds()
|
||||
{
|
||||
auto q = db.posts()->query();
|
||||
auto ids = q->select(Post::idField());
|
||||
auto ids = q.select(Post::idField());
|
||||
|
||||
QCOMPARE(ids.count(), 2);
|
||||
}
|
||||
|
|
@ -240,9 +240,9 @@ void BasicTest::testDate()
|
|||
db.saveChanges(true);
|
||||
|
||||
auto q = db.posts()->query()
|
||||
->setWhere(Post::idField() == newPost->id())
|
||||
->orderBy(Post::idField())
|
||||
->first();
|
||||
.where(Post::idField() == newPost->id())
|
||||
.orderBy(Post::idField())
|
||||
.first();
|
||||
|
||||
QCOMPARE(q->saveDate(), d);
|
||||
}
|
||||
|
|
@ -250,8 +250,8 @@ void BasicTest::testDate()
|
|||
void BasicTest::testLimitedQuery()
|
||||
{
|
||||
auto q = db.comments()->query();
|
||||
auto comments = q->toList(2);
|
||||
qDebug() << q->sqlCommand();
|
||||
auto comments = q.toList(2);
|
||||
qDebug() << q.sqlCommand();
|
||||
QCOMPARE(comments.length(), 2);
|
||||
}
|
||||
|
||||
|
|
@ -274,17 +274,17 @@ void BasicTest::join()
|
|||
void BasicTest::selectWithInvalidRelation()
|
||||
{
|
||||
auto q = db.posts()->query();
|
||||
q->join(QStringLiteral("Invalid_Class_Name"));
|
||||
q->toList();
|
||||
q.join(QStringLiteral("Invalid_Class_Name"));
|
||||
q.toList();
|
||||
}
|
||||
|
||||
void BasicTest::modifyPost()
|
||||
{
|
||||
auto q = db.posts()->query()
|
||||
->setWhere(Post::idField() == postId)
|
||||
->orderBy(Post::idField());
|
||||
.where(Post::idField() == postId)
|
||||
.orderBy(Post::idField());
|
||||
|
||||
Nut::Row<Post> post = q->first();
|
||||
Nut::Row<Post> post = q.first();
|
||||
|
||||
QTEST_ASSERT(post != nullptr);
|
||||
|
||||
|
|
@ -292,18 +292,18 @@ void BasicTest::modifyPost()
|
|||
db.saveChanges();
|
||||
|
||||
q = db.posts()->query()
|
||||
->setWhere(Post::idField() == postId)
|
||||
->orderBy(Post::idField());
|
||||
.where(Post::idField() == postId)
|
||||
.orderBy(Post::idField());
|
||||
|
||||
post = q->first();
|
||||
post = q.first();
|
||||
PRINT(post->title());
|
||||
QCOMPARE(post->title(), "new name");
|
||||
}
|
||||
|
||||
void BasicTest::emptyDatabase()
|
||||
{
|
||||
// auto commentsCount = db.comments()->query()->remove();
|
||||
// auto postsCount = db.posts()->query()->remove();
|
||||
// auto commentsCount = db.comments()->query().remove();
|
||||
// auto postsCount = db.posts()->query().remove();
|
||||
// QTEST_ASSERT(postsCount == 3);
|
||||
// QTEST_ASSERT(commentsCount == 6);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -80,7 +80,7 @@ void DataTypesTest::initTestCase()
|
|||
|
||||
QTEST_ASSERT(ok);
|
||||
|
||||
db.sampleTables()->query()->remove();
|
||||
db.sampleTables()->query().remove();
|
||||
}
|
||||
|
||||
void DataTypesTest::insert()
|
||||
|
|
@ -130,7 +130,7 @@ void DataTypesTest::insert()
|
|||
|
||||
void DataTypesTest::retrive()
|
||||
{
|
||||
Nut::RowList<SampleTable> list = db.sampleTables()->query()->toList();
|
||||
Nut::RowList<SampleTable> list = db.sampleTables()->query().toList();
|
||||
QTEST_ASSERT(list.count() == 1);
|
||||
Nut::Row<SampleTable> t = list.first();
|
||||
|
||||
|
|
@ -179,8 +179,8 @@ void DataTypesTest::retrive()
|
|||
|
||||
#define CHECK(name) \
|
||||
c = db.sampleTables()->query() \
|
||||
->where(SampleTable::f_ ## name ## Field() == f_ ## name) \
|
||||
->count(); \
|
||||
.where(SampleTable::f_ ## name ## Field() == f_ ## name) \
|
||||
.count(); \
|
||||
QTEST_ASSERT(c == 1);
|
||||
|
||||
void DataTypesTest::check()
|
||||
|
|
@ -224,7 +224,7 @@ void DataTypesTest::check()
|
|||
|
||||
void DataTypesTest::cleanupTestCase()
|
||||
{
|
||||
db.sampleTables()->query()->remove();
|
||||
db.sampleTables()->query().remove();
|
||||
db.close();
|
||||
|
||||
PRINT_FORM(db);
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ void DateTimeTest::initTestCase()
|
|||
|
||||
QTEST_ASSERT(db.open());
|
||||
|
||||
db.sampleTables()->query()->remove();
|
||||
db.sampleTables()->query().remove();
|
||||
}
|
||||
|
||||
#define TEST_DATE(date, command, n) \
|
||||
|
|
@ -42,8 +42,8 @@ do { \
|
|||
db.sampleTables()->append(s); \
|
||||
db.saveChanges(); \
|
||||
auto count = db.sampleTables()->query() \
|
||||
->where(SampleTable::dField().command(n) == date.command(n)) \
|
||||
->count(); \
|
||||
.where(SampleTable::dField().command(n) == date.command(n)) \
|
||||
.count(); \
|
||||
QTEST_ASSERT(count); \
|
||||
} while (false)
|
||||
|
||||
|
|
@ -54,8 +54,8 @@ do { \
|
|||
db.sampleTables()->append(s); \
|
||||
db.saveChanges(); \
|
||||
auto count = db.sampleTables()->query() \
|
||||
->where(SampleTable::tField().command(n) == time.addSecs(num)) \
|
||||
->count(); \
|
||||
.where(SampleTable::tField().command(n) == time.addSecs(num)) \
|
||||
.count(); \
|
||||
QTEST_ASSERT(count); \
|
||||
} while (false)
|
||||
|
||||
|
|
@ -66,8 +66,8 @@ do { \
|
|||
db.sampleTables()->append(s); \
|
||||
db.saveChanges(); \
|
||||
auto count = db.sampleTables()->query() \
|
||||
->where(SampleTable::dtField().command(n) == datetime.command(n)) \
|
||||
->count(); \
|
||||
.where(SampleTable::dtField().command(n) == datetime.command(n)) \
|
||||
.count(); \
|
||||
QTEST_ASSERT(count); \
|
||||
} while (false)
|
||||
|
||||
|
|
@ -78,8 +78,8 @@ do { \
|
|||
db.sampleTables()->append(s); \
|
||||
db.saveChanges(); \
|
||||
auto count = db.sampleTables()->query() \
|
||||
->where(SampleTable::dtField().command(n) == datetime.addSecs(num)) \
|
||||
->count(); \
|
||||
.where(SampleTable::dtField().command(n) == datetime.addSecs(num)) \
|
||||
.count(); \
|
||||
QTEST_ASSERT(count); \
|
||||
} while (false)
|
||||
|
||||
|
|
@ -136,7 +136,7 @@ void DateTimeTest::dateTimeAdd()
|
|||
|
||||
void DateTimeTest::datePart()
|
||||
{
|
||||
db.sampleTables()->query()->remove();
|
||||
db.sampleTables()->query().remove();
|
||||
|
||||
QDate d = QDate::currentDate();
|
||||
auto s = Nut::create<SampleTable>();
|
||||
|
|
@ -146,18 +146,18 @@ void DateTimeTest::datePart()
|
|||
|
||||
int count;
|
||||
|
||||
count = db.sampleTables()->query()->where(SampleTable::dField().year() == d.year())->count();
|
||||
count = db.sampleTables()->query().where(SampleTable::dField().year() == d.year()).count();
|
||||
QTEST_ASSERT(count);
|
||||
count = db.sampleTables()->query()->where(SampleTable::dField().month() == d.month())->count();
|
||||
count = db.sampleTables()->query().where(SampleTable::dField().month() == d.month()).count();
|
||||
QTEST_ASSERT(count);
|
||||
count = db.sampleTables()->query()->where(SampleTable::dField().day() == d.day())->count();
|
||||
count = db.sampleTables()->query().where(SampleTable::dField().day() == d.day()).count();
|
||||
QTEST_ASSERT(count);
|
||||
|
||||
}
|
||||
|
||||
void DateTimeTest::timePart()
|
||||
{
|
||||
db.sampleTables()->query()->remove();
|
||||
db.sampleTables()->query().remove();
|
||||
|
||||
QTime t = QTime::currentTime();
|
||||
auto s = Nut::create<SampleTable>();
|
||||
|
|
@ -167,17 +167,17 @@ void DateTimeTest::timePart()
|
|||
|
||||
int count;
|
||||
|
||||
count = db.sampleTables()->query()->where(SampleTable::tField().hour() == t.hour())->count();
|
||||
count = db.sampleTables()->query().where(SampleTable::tField().hour() == t.hour()).count();
|
||||
QTEST_ASSERT(count);
|
||||
count = db.sampleTables()->query()->where(SampleTable::tField().minute() == t.minute())->count();
|
||||
count = db.sampleTables()->query().where(SampleTable::tField().minute() == t.minute()).count();
|
||||
QTEST_ASSERT(count);
|
||||
count = db.sampleTables()->query()->where(SampleTable::tField().second() == t.second())->count();
|
||||
count = db.sampleTables()->query().where(SampleTable::tField().second() == t.second()).count();
|
||||
QTEST_ASSERT(count);
|
||||
}
|
||||
|
||||
void DateTimeTest::dateTimePart()
|
||||
{
|
||||
db.sampleTables()->query()->remove();
|
||||
db.sampleTables()->query().remove();
|
||||
|
||||
QDateTime dt = QDateTime::currentDateTime();
|
||||
auto s = Nut::create<SampleTable>();
|
||||
|
|
@ -187,24 +187,24 @@ void DateTimeTest::dateTimePart()
|
|||
|
||||
int count;
|
||||
|
||||
count = db.sampleTables()->query()->where(SampleTable::dtField().year() == dt.date().year())->count();
|
||||
count = db.sampleTables()->query().where(SampleTable::dtField().year() == dt.date().year()).count();
|
||||
QTEST_ASSERT(count);
|
||||
count = db.sampleTables()->query()->where(SampleTable::dtField().month() == dt.date().month())->count();
|
||||
count = db.sampleTables()->query().where(SampleTable::dtField().month() == dt.date().month()).count();
|
||||
QTEST_ASSERT(count);
|
||||
count = db.sampleTables()->query()->where(SampleTable::dtField().day() == dt.date().day())->count();
|
||||
count = db.sampleTables()->query().where(SampleTable::dtField().day() == dt.date().day()).count();
|
||||
QTEST_ASSERT(count);
|
||||
|
||||
count = db.sampleTables()->query()->where(SampleTable::dtField().hour() == dt.time().hour())->count();
|
||||
count = db.sampleTables()->query().where(SampleTable::dtField().hour() == dt.time().hour()).count();
|
||||
QTEST_ASSERT(count);
|
||||
count = db.sampleTables()->query()->where(SampleTable::dtField().minute() == dt.time().minute())->count();
|
||||
count = db.sampleTables()->query().where(SampleTable::dtField().minute() == dt.time().minute()).count();
|
||||
QTEST_ASSERT(count);
|
||||
count = db.sampleTables()->query()->where(SampleTable::dtField().second() == dt.time().second())->count();
|
||||
count = db.sampleTables()->query().where(SampleTable::dtField().second() == dt.time().second()).count();
|
||||
QTEST_ASSERT(count);
|
||||
}
|
||||
|
||||
void DateTimeTest::cleanupTestCase()
|
||||
{
|
||||
db.sampleTables()->query()->remove();
|
||||
db.sampleTables()->query().remove();
|
||||
db.close();
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -49,9 +49,9 @@ void TestJson::store()
|
|||
|
||||
int id = t->id();
|
||||
auto newObj = db.sampleTable()->query()
|
||||
->where(Table::idField() == id)
|
||||
->orderBy(Table::idField())
|
||||
->first();
|
||||
.where(Table::idField() == id)
|
||||
.orderBy(Table::idField())
|
||||
.first();
|
||||
|
||||
Q_ASSERT(newObj != nullptr);
|
||||
Q_ASSERT(newObj->doc() == t->doc());
|
||||
|
|
|
|||
|
|
@ -32,7 +32,7 @@ void UuidTest::initTestCase()
|
|||
|
||||
bool ok = db.open();
|
||||
|
||||
db.tests()->query()->remove();
|
||||
db.tests()->query().remove();
|
||||
uuid = QUuid::createUuid();
|
||||
|
||||
QTEST_ASSERT(ok);
|
||||
|
|
@ -54,7 +54,7 @@ void UuidTest::save()
|
|||
void UuidTest::restore()
|
||||
{
|
||||
TIC();
|
||||
auto test = db.tests()->query()->first();
|
||||
auto test = db.tests()->query().first();
|
||||
TOC();
|
||||
QTEST_ASSERT(!test->id().isNull());
|
||||
QTEST_ASSERT(test->uuid() == uuid);
|
||||
|
|
|
|||
|
|
@ -49,7 +49,7 @@ void Upgrades::version1()
|
|||
DB1 db;
|
||||
initDb(db);
|
||||
QTEST_ASSERT(db.open());
|
||||
db.sampleTable()->query()->remove();
|
||||
db.sampleTable()->query().remove();
|
||||
}
|
||||
|
||||
void Upgrades::version2()
|
||||
|
|
@ -72,7 +72,7 @@ void Upgrades::version3()
|
|||
QTEST_ASSERT(db.open());
|
||||
|
||||
auto t = db.sampleTable()->query()
|
||||
->first();
|
||||
.first();
|
||||
QTEST_ASSERT(id == t->id());
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue