wip: select command creation refactoring
This commit is contained in:
parent
0d8bd9b96b
commit
c65d0e748c
|
|
@ -308,6 +308,7 @@ Database::Database(QObject *parent)
|
|||
// d->changeLogs->sett
|
||||
DatabasePrivate::lastId++;
|
||||
// m__change_logs = new TableSet<ChangeLogTable>(this);
|
||||
qDebug() << "normal constructor called in database";
|
||||
}
|
||||
|
||||
Database::Database(const Database &other, QObject *parent)
|
||||
|
|
@ -323,6 +324,7 @@ Database::Database(const Database &other, QObject *parent)
|
|||
setUserName(other.userName());
|
||||
setPassword(other.password());
|
||||
|
||||
qDebug() << "copy constructor called in database";
|
||||
// m__change_logs = new TableSet<ChangeLogTable>(this);
|
||||
}
|
||||
|
||||
|
|
|
|||
31
src/query.h
31
src/query.h
|
|
@ -48,12 +48,15 @@ public:
|
|||
|
||||
~Query();
|
||||
|
||||
QList<T *> toList(int count = -1);
|
||||
int remove();
|
||||
T *first();
|
||||
|
||||
int count();
|
||||
|
||||
QList<T *> toList(int count = -1);
|
||||
|
||||
template<typename F>
|
||||
QList<F> select(const FieldPhrase<F> f);
|
||||
QVariant max(FieldPhrase<int> &f);
|
||||
QVariant min(FieldPhrase<int> &f);
|
||||
QVariant average(FieldPhrase<int> &f);
|
||||
|
|
@ -104,7 +107,7 @@ Q_OUTOFLINE_TEMPLATE QList<T *> Query<T>::toList(int count)
|
|||
|
||||
// QSqlQuery q = d->database->exec(d->database->sqlGenertor()->selectCommand(d->wheres, d->orders, d->tableName, d->joinClassName));
|
||||
QString sql = d->database->sqlGenertor()->selectCommand(
|
||||
SqlGeneratorBase::SelectALl,
|
||||
SqlGeneratorBase::SelectAll,
|
||||
"",
|
||||
d->wheres,
|
||||
d->orderPhrases,
|
||||
|
|
@ -179,6 +182,30 @@ Q_OUTOFLINE_TEMPLATE QList<T *> Query<T>::toList(int count)
|
|||
return result;
|
||||
}
|
||||
|
||||
template <typename T>
|
||||
template <typename F>
|
||||
Q_OUTOFLINE_TEMPLATE QList<F> Query<T>::select(const FieldPhrase<F> f)
|
||||
{
|
||||
Q_D(Query);
|
||||
QList<F> ret;
|
||||
QString sql = d->database->sqlGenertor()->selectCommand(
|
||||
SqlGeneratorBase::SignleField,
|
||||
f.data()->text,
|
||||
d->wheres,
|
||||
d->orderPhrases,
|
||||
d->tableName,
|
||||
d->joinClassName);
|
||||
QSqlQuery q = d->database->exec(sql);
|
||||
|
||||
while (q.next()) {
|
||||
QVariant v = q.value(f.data()->text);
|
||||
ret.append(v.value<F>());
|
||||
}
|
||||
|
||||
deleteLater();
|
||||
return ret;
|
||||
}
|
||||
|
||||
template<class T>
|
||||
Q_OUTOFLINE_TEMPLATE T *Query<T>::first()
|
||||
{
|
||||
|
|
|
|||
|
|
@ -220,7 +220,7 @@ QString SqlGeneratorBase::deleteRecord(Table *t, QString tableName)
|
|||
QString SqlGeneratorBase::agregateText(const AgregateType &t, const QString &arg) const
|
||||
{
|
||||
switch (t) {
|
||||
case SelectALl:
|
||||
case SelectAll:
|
||||
return "*";
|
||||
break;
|
||||
|
||||
|
|
@ -240,6 +240,10 @@ QString SqlGeneratorBase::agregateText(const AgregateType &t, const QString &arg
|
|||
return "COUNT(" + arg + ")";
|
||||
break;
|
||||
|
||||
case SignleField:
|
||||
return arg;
|
||||
break;
|
||||
|
||||
default:
|
||||
return QString::null;
|
||||
}
|
||||
|
|
@ -309,6 +313,34 @@ QString SqlGeneratorBase::selectCommand(SqlGeneratorBase::AgregateType t, QStrin
|
|||
return sql;
|
||||
}
|
||||
|
||||
QString SqlGeneratorBase::selectCommand(QString selectPhrase, QString agregateArg,
|
||||
QList<WherePhrase> &wheres, QList<WherePhrase> &orders,
|
||||
QString tableName, QString joinClassName)
|
||||
{
|
||||
QString where = createWhere(wheres);
|
||||
QString order = "";
|
||||
QString from = fromTableText(tableName, joinClassName, order);
|
||||
|
||||
foreach(WherePhrase p, orders){
|
||||
if(order != "")
|
||||
order.append(", ");
|
||||
order.append(phraseOrder(p.data()));
|
||||
}
|
||||
|
||||
QString sql = "SELECT " + selectPhrase + " FROM " + from;
|
||||
|
||||
if(where != "")
|
||||
sql.append(" WHERE " + where);
|
||||
|
||||
if(order != "")
|
||||
sql.append(" ORDER BY " + order);
|
||||
|
||||
for(int i = 0; i < _database->model().count(); i++)
|
||||
sql = sql.replace(_database->model().at(i)->className() + "." , _database->model().at(i)->name() + ".");
|
||||
|
||||
return sql;
|
||||
}
|
||||
|
||||
QString SqlGeneratorBase::selectCommand(QList<WherePhrase> &wheres, QHash<QString, QString> &orders, QString tableName, QString joinClassName)
|
||||
{
|
||||
return selectCommand("*", wheres, orders, tableName, joinClassName);
|
||||
|
|
|
|||
|
|
@ -48,11 +48,12 @@ public:
|
|||
Delete
|
||||
};
|
||||
enum AgregateType{
|
||||
SelectALl,
|
||||
SelectAll,
|
||||
Count,
|
||||
Min,
|
||||
Max,
|
||||
Average
|
||||
Average,
|
||||
SignleField
|
||||
};
|
||||
|
||||
SqlGeneratorBase(Database *parent);
|
||||
|
|
@ -79,6 +80,10 @@ public:
|
|||
QList<WherePhrase> &wheres, QList<WherePhrase> &orders,
|
||||
QString tableName, QString joinClassName);
|
||||
|
||||
virtual QString selectCommand(QString selectPhrase, QString agregateArg,
|
||||
QList<WherePhrase> &wheres, QList<WherePhrase> &orders,
|
||||
QString tableName, QString joinClassName);
|
||||
|
||||
virtual QString selectCommand(QList<WherePhrase> &wheres, QHash<QString, QString> &orders,
|
||||
QString tableName, QString joinClassName);
|
||||
virtual QString selectCommand(QString selectPhrase,
|
||||
|
|
|
|||
Loading…
Reference in New Issue