wip:join
This commit is contained in:
parent
ef5f238fed
commit
e45860eb59
|
|
@ -33,6 +33,18 @@
|
|||
|
||||
NUT_BEGIN_NAMESPACE
|
||||
|
||||
/*
|
||||
* Index:
|
||||
* ALTER TABLE `travelLog` ADD INDEX(`driverId`);
|
||||
*
|
||||
* Foreign key:
|
||||
* ALTER TABLE `travelLog`
|
||||
* ADD CONSTRAINT `travelLog_ibfk_1`
|
||||
* FOREIGN KEY (`driverId`)
|
||||
* REFERENCES `account` (`id`)
|
||||
* ON DELETE CASCADE
|
||||
* ON UPDATE CASCADE;
|
||||
*/
|
||||
SqlGeneratorBase::SqlGeneratorBase(Database *parent)
|
||||
: QObject((QObject *)parent)
|
||||
{
|
||||
|
|
@ -50,6 +62,11 @@ QString SqlGeneratorBase::masterDatabaseName(QString databaseName)
|
|||
return "";
|
||||
}
|
||||
|
||||
QString SqlGeneratorBase::createTable(TableModel *table)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
QString SqlGeneratorBase::saveRecord(Table *t, QString tableName)
|
||||
{
|
||||
Q_ASSERT(!tableName.isEmpty() && !tableName.isNull());
|
||||
|
|
@ -161,6 +178,32 @@ QString SqlGeneratorBase::diff(TableModel *oldTable, TableModel *newTable)
|
|||
return sql;
|
||||
}
|
||||
|
||||
QString SqlGeneratorBase::join(const QStringList &list)
|
||||
{
|
||||
if (!list.count())
|
||||
return "";
|
||||
|
||||
if (list.count() == 1)
|
||||
return list.first();
|
||||
|
||||
DatabaseModel model = _database->model();
|
||||
QStringList clone = list;
|
||||
QString mainTable = clone.takeFirst();
|
||||
QString ret = mainTable;
|
||||
|
||||
do {
|
||||
QString t = model.tableByClassName(clone.first())->name();
|
||||
RelationModel *rel = model.relationByTableNames(mainTable, t);
|
||||
|
||||
if (rel) {
|
||||
clone.takeFirst();
|
||||
ret.append(", " + _database->tableName(clone.takeFirst()));
|
||||
}
|
||||
} while (clone.count());
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
QString SqlGeneratorBase::insertRecord(Table *t, QString tableName)
|
||||
{
|
||||
QString sql = "";
|
||||
|
|
|
|||
|
|
@ -59,6 +59,8 @@ public:
|
|||
|
||||
virtual QString masterDatabaseName(QString databaseName);
|
||||
|
||||
virtual QString createTable(TableModel *table);
|
||||
|
||||
virtual QString fieldType(FieldModel *field) = 0;
|
||||
virtual QString fieldDeclare(FieldModel *field);
|
||||
|
||||
|
|
@ -66,6 +68,8 @@ public:
|
|||
virtual QString diff(FieldModel *oldField, FieldModel *newField);
|
||||
virtual QString diff(TableModel *oldTable, TableModel *newTable);
|
||||
|
||||
virtual QString join(const QStringList &list);
|
||||
|
||||
virtual QString saveRecord(Table *t, QString tableName);
|
||||
virtual QString insertRecord(Table *t, QString tableName);
|
||||
virtual QString updateRecord(Table *t, QString tableName);
|
||||
|
|
|
|||
|
|
@ -53,7 +53,7 @@ public:
|
|||
//ddl
|
||||
Query<T> *setWhere(WherePhrase where);
|
||||
|
||||
Query<T> *join(const QString &tableName);
|
||||
Query<T> *join(const QString &className);
|
||||
Query<T> *join(Table *c);
|
||||
|
||||
template<class TABLE>
|
||||
|
|
@ -125,6 +125,8 @@ Q_OUTOFLINE_TEMPLATE QList<T *> Query<T>::toList(int count)
|
|||
QList<T*> result;
|
||||
d->select = "*";
|
||||
|
||||
d->joins.prepend(d->tableName);
|
||||
qDebug() << "JOINS="<< d->database->sqlGenertor()->join(d->joins);
|
||||
// QSqlQuery q =
|
||||
// d->database->exec(d->database->sqlGenertor()->selectCommand(d->wheres,
|
||||
// d->orders, d->tableName, d->joinClassName));
|
||||
|
|
@ -316,10 +318,11 @@ Q_OUTOFLINE_TEMPLATE QVariant Query<T>::average(FieldPhrase<int> &f)
|
|||
}
|
||||
|
||||
template <class T>
|
||||
Q_OUTOFLINE_TEMPLATE Query<T> *Query<T>::join(const QString &tableName)
|
||||
Q_OUTOFLINE_TEMPLATE Query<T> *Query<T>::join(const QString &className)
|
||||
{
|
||||
Q_D(Query);
|
||||
d->joinClassName = tableName;
|
||||
d->joinClassName = className;
|
||||
d->joins.append(className);
|
||||
return this;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@ public:
|
|||
Database *database;
|
||||
TableSetBase *tableSet;
|
||||
QString joinClassName;
|
||||
QStringList joins;
|
||||
QList<WherePhrase> wheres;
|
||||
QList<WherePhrase> orderPhrases;
|
||||
QHash<QString, QString> orders;
|
||||
|
|
|
|||
|
|
@ -98,6 +98,7 @@ void MainTest::selectPosts()
|
|||
auto q = db.posts()->query()
|
||||
// q->join(Post::commentsTable());
|
||||
// q->join(Post::commentsTable());
|
||||
->join<User>()
|
||||
->join<Comment>()
|
||||
->orderBy(!Post::saveDateField() & Post::bodyField())
|
||||
->setWhere(Post::idField() == postId);
|
||||
|
|
|
|||
|
|
@ -29,7 +29,7 @@ class Post : public Table
|
|||
NUT_DECLARE_CHILD_TABLE(Comment, comments)
|
||||
|
||||
public:
|
||||
explicit Post(QObject *tableSet = 0);
|
||||
Q_INVOKABLE Post(QObject *tableSet = 0);
|
||||
|
||||
signals:
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue