24 #include <QtCore/QVariant>
25 #include <QtCore/QDebug>
26 #include <QtCore/QScopedPointer>
27 #include <QtCore/QRegularExpression>
31 #include "databasemodel.h"
32 #include "tablesetbase_p.h"
33 #include "sqlgeneratorbase_p.h"
34 #include "querybase_p.h"
35 #include "wherephrase.h"
40 class NUT_EXPORT
Query :
public QueryBase
43 Q_DECLARE_PRIVATE(
Query)
49 QList<T *> toList(
int count = -1);
62 Query<T> *join(
const QString &tableName);
66 join(c->metaObject()->className());
71 Query<T> *orderBy(QString fieldName, QString type);
77 d_ptr(new QueryPrivate(this))
81 d->database = database;
82 d->tableSet = tableSet;
83 d->tableName = d->database->tableName(T::staticMetaObject.className());
89 qDebug() <<
"Query::~Query()";
102 QSqlQuery q = d->database->exec(d->database->sqlGenertor()->selectCommand(
103 SqlGeneratorBase::SelectALl,
110 QString pk =d->database->model().model(d->tableName)->primaryKey();
111 QVariant lastPkValue = QVariant();
114 TableSetBase *childTableSet;
115 QStringList masterFields = d->database->model().model(d->tableName)->fieldsNames();
116 QStringList childFields;
117 if(!d->joinClassName.isNull())
118 if(d->database->model().modelByClass(d->joinClassName)){
119 childFields = d->database->model().modelByClass(d->joinClassName)->fieldsNames();
120 QString joinTableName = d->database->tableName(d->joinClassName);
121 childTypeId = d->database->model().model(joinTableName)->typeId();
125 if(lastPkValue != q.value(pk)){
128 foreach (QString field, masterFields)
129 t->setProperty(field.toLatin1().data(), q.value(field));
131 t->setTableSet(d->tableSet);
132 t->setStatus(Table::FeatchedFromDB);
139 QSet<TableSetBase*> tableSets = t->tableSets;
140 foreach (TableSetBase *ts, tableSets)
141 if(ts->childClassName() == d->joinClassName)
147 const QMetaObject *childMetaObject = QMetaType::metaObjectForType(childTypeId);
148 Table *childTable = qobject_cast<
Table*>(childMetaObject->newInstance());
150 foreach (QString field, childFields)
151 childTable->setProperty(field.toLatin1().data(), q.value(field));
153 childTable->setParent(
this);
154 childTable->setParentTable(lastRow);
155 childTable->setStatus(Table::FeatchedFromDB);
156 childTable->setTableSet(childTableSet);
157 childTableSet->add(childTable);
159 lastPkValue = q.value(pk);
172 QList<T *> list = toList(1);
185 d->select =
"COUNT(*)";
186 QSqlQuery q = d->database->exec(d->database->sqlGenertor()->selectCommand(
"COUNT(*)", d->wheres, d->orders, d->tableName, d->joinClassName));
189 return q.value(0).toInt();
197 QSqlQuery q = d->database->exec(d->database->sqlGenertor()->selectCommand(
"MAX(" + f.data()->text +
")", d->wheres, d->orders, d->tableName, d->joinClassName));
200 return q.value(0).toInt();
208 QSqlQuery q = d->database->exec(d->database->sqlGenertor()->selectCommand(
"MIN(" + f.data()->text +
")", d->wheres, d->orders, d->tableName, d->joinClassName));
211 return q.value(0).toInt();
220 QString sql = d->database->sqlGenertor()->deleteCommand(d->wheres, d->tableName);
223 QSqlQuery q = d->database->exec(sql);
224 return q.numRowsAffected();
231 d->joinClassName = tableName;
239 d->wheres.append(where);
247 d->orders.insert(fieldName, type);
255 d->orderPhrases.append(phrase);