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
|
// d->changeLogs->sett
|
||||||
DatabasePrivate::lastId++;
|
DatabasePrivate::lastId++;
|
||||||
// m__change_logs = new TableSet<ChangeLogTable>(this);
|
// m__change_logs = new TableSet<ChangeLogTable>(this);
|
||||||
|
qDebug() << "normal constructor called in database";
|
||||||
}
|
}
|
||||||
|
|
||||||
Database::Database(const Database &other, QObject *parent)
|
Database::Database(const Database &other, QObject *parent)
|
||||||
|
|
@ -323,6 +324,7 @@ Database::Database(const Database &other, QObject *parent)
|
||||||
setUserName(other.userName());
|
setUserName(other.userName());
|
||||||
setPassword(other.password());
|
setPassword(other.password());
|
||||||
|
|
||||||
|
qDebug() << "copy constructor called in database";
|
||||||
// m__change_logs = new TableSet<ChangeLogTable>(this);
|
// m__change_logs = new TableSet<ChangeLogTable>(this);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
31
src/query.h
31
src/query.h
|
|
@ -48,12 +48,15 @@ public:
|
||||||
|
|
||||||
~Query();
|
~Query();
|
||||||
|
|
||||||
QList<T *> toList(int count = -1);
|
|
||||||
int remove();
|
int remove();
|
||||||
T *first();
|
T *first();
|
||||||
|
|
||||||
int count();
|
int count();
|
||||||
|
|
||||||
|
QList<T *> toList(int count = -1);
|
||||||
|
|
||||||
|
template<typename F>
|
||||||
|
QList<F> select(const FieldPhrase<F> f);
|
||||||
QVariant max(FieldPhrase<int> &f);
|
QVariant max(FieldPhrase<int> &f);
|
||||||
QVariant min(FieldPhrase<int> &f);
|
QVariant min(FieldPhrase<int> &f);
|
||||||
QVariant average(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));
|
// QSqlQuery q = d->database->exec(d->database->sqlGenertor()->selectCommand(d->wheres, d->orders, d->tableName, d->joinClassName));
|
||||||
QString sql = d->database->sqlGenertor()->selectCommand(
|
QString sql = d->database->sqlGenertor()->selectCommand(
|
||||||
SqlGeneratorBase::SelectALl,
|
SqlGeneratorBase::SelectAll,
|
||||||
"",
|
"",
|
||||||
d->wheres,
|
d->wheres,
|
||||||
d->orderPhrases,
|
d->orderPhrases,
|
||||||
|
|
@ -179,6 +182,30 @@ Q_OUTOFLINE_TEMPLATE QList<T *> Query<T>::toList(int count)
|
||||||
return result;
|
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>
|
template<class T>
|
||||||
Q_OUTOFLINE_TEMPLATE T *Query<T>::first()
|
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
|
QString SqlGeneratorBase::agregateText(const AgregateType &t, const QString &arg) const
|
||||||
{
|
{
|
||||||
switch (t) {
|
switch (t) {
|
||||||
case SelectALl:
|
case SelectAll:
|
||||||
return "*";
|
return "*";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
|
@ -240,6 +240,10 @@ QString SqlGeneratorBase::agregateText(const AgregateType &t, const QString &arg
|
||||||
return "COUNT(" + arg + ")";
|
return "COUNT(" + arg + ")";
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case SignleField:
|
||||||
|
return arg;
|
||||||
|
break;
|
||||||
|
|
||||||
default:
|
default:
|
||||||
return QString::null;
|
return QString::null;
|
||||||
}
|
}
|
||||||
|
|
@ -309,6 +313,34 @@ QString SqlGeneratorBase::selectCommand(SqlGeneratorBase::AgregateType t, QStrin
|
||||||
return sql;
|
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)
|
QString SqlGeneratorBase::selectCommand(QList<WherePhrase> &wheres, QHash<QString, QString> &orders, QString tableName, QString joinClassName)
|
||||||
{
|
{
|
||||||
return selectCommand("*", wheres, orders, tableName, joinClassName);
|
return selectCommand("*", wheres, orders, tableName, joinClassName);
|
||||||
|
|
|
||||||
|
|
@ -48,11 +48,12 @@ public:
|
||||||
Delete
|
Delete
|
||||||
};
|
};
|
||||||
enum AgregateType{
|
enum AgregateType{
|
||||||
SelectALl,
|
SelectAll,
|
||||||
Count,
|
Count,
|
||||||
Min,
|
Min,
|
||||||
Max,
|
Max,
|
||||||
Average
|
Average,
|
||||||
|
SignleField
|
||||||
};
|
};
|
||||||
|
|
||||||
SqlGeneratorBase(Database *parent);
|
SqlGeneratorBase(Database *parent);
|
||||||
|
|
@ -79,6 +80,10 @@ public:
|
||||||
QList<WherePhrase> &wheres, QList<WherePhrase> &orders,
|
QList<WherePhrase> &wheres, QList<WherePhrase> &orders,
|
||||||
QString tableName, QString joinClassName);
|
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,
|
virtual QString selectCommand(QList<WherePhrase> &wheres, QHash<QString, QString> &orders,
|
||||||
QString tableName, QString joinClassName);
|
QString tableName, QString joinClassName);
|
||||||
virtual QString selectCommand(QString selectPhrase,
|
virtual QString selectCommand(QString selectPhrase,
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue