some polish
This commit is contained in:
parent
2b4526fbfe
commit
0af41ed396
6
nut.pri
6
nut.pri
|
|
@ -27,7 +27,8 @@ HEADERS += \
|
||||||
$$PWD/src/serializableobject.h \
|
$$PWD/src/serializableobject.h \
|
||||||
$$PWD/src/sqlmodel.h \
|
$$PWD/src/sqlmodel.h \
|
||||||
$$PWD/src/sqlmodel_p.h \
|
$$PWD/src/sqlmodel_p.h \
|
||||||
$$PWD/src/phrase.h
|
$$PWD/src/phrase.h \
|
||||||
|
$$PWD/src/tuple.h
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
$$PWD/src/generators/sqlgeneratorbase.cpp \
|
$$PWD/src/generators/sqlgeneratorbase.cpp \
|
||||||
|
|
@ -47,4 +48,5 @@ SOURCES += \
|
||||||
$$PWD/src/database.cpp \
|
$$PWD/src/database.cpp \
|
||||||
$$PWD/src/serializableobject.cpp \
|
$$PWD/src/serializableobject.cpp \
|
||||||
$$PWD/src/sqlmodel.cpp \
|
$$PWD/src/sqlmodel.cpp \
|
||||||
$$PWD/src/phrase.cpp
|
$$PWD/src/phrase.cpp \
|
||||||
|
$$PWD/src/tuple.cpp
|
||||||
|
|
|
||||||
|
|
@ -116,10 +116,10 @@ bool DatabasePrivate::open(bool update)
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(update)
|
// if(update)
|
||||||
return updateDatabase();
|
return updateDatabase();
|
||||||
else
|
// else
|
||||||
return true;
|
// return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DatabasePrivate::updateDatabase()
|
bool DatabasePrivate::updateDatabase()
|
||||||
|
|
@ -202,7 +202,7 @@ bool DatabasePrivate::getCurrectScheema()
|
||||||
QString type;
|
QString type;
|
||||||
QString name;
|
QString name;
|
||||||
QString value;
|
QString value;
|
||||||
|
qDebug()<<q->metaObject()->className();
|
||||||
if (!nutClassInfoString(q->metaObject()->classInfo(i),
|
if (!nutClassInfoString(q->metaObject()->classInfo(i),
|
||||||
type, name, value)) {
|
type, name, value)) {
|
||||||
qDebug() << "No valid table in" << q->metaObject()->classInfo(i).value();
|
qDebug() << "No valid table in" << q->metaObject()->classInfo(i).value();
|
||||||
|
|
|
||||||
|
|
@ -43,7 +43,7 @@ class NUT_EXPORT Database : public QObject
|
||||||
Q_DECLARE_PRIVATE(Database)
|
Q_DECLARE_PRIVATE(Database)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit Database(QObject *parent = 0);
|
explicit Database(QObject *parent = nullptr);
|
||||||
explicit Database(const Database &other);
|
explicit Database(const Database &other);
|
||||||
explicit Database(const QSqlDatabase &other);
|
explicit Database(const QSqlDatabase &other);
|
||||||
~Database();
|
~Database();
|
||||||
|
|
|
||||||
|
|
@ -86,7 +86,7 @@ TableModel *DatabaseModel::tableByClassName(QString className) const
|
||||||
return s;
|
return s;
|
||||||
}
|
}
|
||||||
|
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool DatabaseModel::operator ==(const DatabaseModel &other) const
|
bool DatabaseModel::operator ==(const DatabaseModel &other) const
|
||||||
|
|
|
||||||
|
|
@ -138,7 +138,7 @@ inline bool nutClassInfoInt(const QMetaClassInfo &classInfo,
|
||||||
NUT_INFO(__nut_FIELD, name, 0) \
|
NUT_INFO(__nut_FIELD, name, 0) \
|
||||||
type m_##name; \
|
type m_##name; \
|
||||||
public: \
|
public: \
|
||||||
static NUT_WRAP_NAMESPACE(FieldPhrase<type>)& name ## Field(){ \
|
static NUT_WRAP_NAMESPACE(FieldPhrase<type>)& name ## Field(){ \
|
||||||
static NUT_WRAP_NAMESPACE(FieldPhrase<type>) f = \
|
static NUT_WRAP_NAMESPACE(FieldPhrase<type>) f = \
|
||||||
NUT_WRAP_NAMESPACE(FieldPhrase<type>) \
|
NUT_WRAP_NAMESPACE(FieldPhrase<type>) \
|
||||||
(staticMetaObject.className(), #name); \
|
(staticMetaObject.className(), #name); \
|
||||||
|
|
|
||||||
|
|
@ -52,7 +52,7 @@ NUT_BEGIN_NAMESPACE
|
||||||
* INNER JOIN dbo.Entities ON dbo.GiftCards.GiftCardID = dbo.Entities.GiftCardID
|
* INNER JOIN dbo.Entities ON dbo.GiftCards.GiftCardID = dbo.Entities.GiftCardID
|
||||||
*/
|
*/
|
||||||
SqlGeneratorBase::SqlGeneratorBase(Database *parent)
|
SqlGeneratorBase::SqlGeneratorBase(Database *parent)
|
||||||
: QObject((QObject *)parent)
|
: QObject(parent)
|
||||||
{
|
{
|
||||||
if (parent)
|
if (parent)
|
||||||
_database = parent;
|
_database = parent;
|
||||||
|
|
@ -251,7 +251,7 @@ QString SqlGeneratorBase::diffRelation(TableModel *oldTable, TableModel *newTabl
|
||||||
QStringList columnSql;
|
QStringList columnSql;
|
||||||
foreach (QString fieldName, relations) {
|
foreach (QString fieldName, relations) {
|
||||||
RelationModel *newRelation = newTable->foregionKeyByField(fieldName);
|
RelationModel *newRelation = newTable->foregionKeyByField(fieldName);
|
||||||
RelationModel *oldRelation = 0;
|
RelationModel *oldRelation = nullptr;
|
||||||
if (oldTable)
|
if (oldTable)
|
||||||
oldRelation = oldTable->foregionKeyByField(fieldName);
|
oldRelation = oldTable->foregionKeyByField(fieldName);
|
||||||
|
|
||||||
|
|
@ -457,26 +457,18 @@ QString SqlGeneratorBase::agregateText(const AgregateType &t,
|
||||||
switch (t) {
|
switch (t) {
|
||||||
case Min:
|
case Min:
|
||||||
return "MIN(" + arg + ")";
|
return "MIN(" + arg + ")";
|
||||||
break;
|
|
||||||
|
|
||||||
case Max:
|
case Max:
|
||||||
return "MAX(" + arg + ")";
|
return "MAX(" + arg + ")";
|
||||||
break;
|
|
||||||
|
|
||||||
case Average:
|
case Average:
|
||||||
return "AVERAGE(" + arg + ")";
|
return "AVERAGE(" + arg + ")";
|
||||||
break;
|
|
||||||
|
|
||||||
case Count:
|
case Count:
|
||||||
return "COUNT(" + arg + ")";
|
return "COUNT(" + arg + ")";
|
||||||
break;
|
|
||||||
|
|
||||||
case SignleField:
|
case SignleField:
|
||||||
return arg;
|
return arg;
|
||||||
break;
|
|
||||||
|
|
||||||
default:
|
|
||||||
return QString();
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -795,7 +787,6 @@ QString SqlGeneratorBase::escapeValue(const QVariant &v) const
|
||||||
switch (v.type()) {
|
switch (v.type()) {
|
||||||
case QVariant::Bool:
|
case QVariant::Bool:
|
||||||
return v.toBool() ? "1" : "0";
|
return v.toBool() ? "1" : "0";
|
||||||
break;
|
|
||||||
|
|
||||||
case QVariant::Int:
|
case QVariant::Int:
|
||||||
case QVariant::UInt:
|
case QVariant::UInt:
|
||||||
|
|
@ -803,11 +794,9 @@ QString SqlGeneratorBase::escapeValue(const QVariant &v) const
|
||||||
case QVariant::LongLong:
|
case QVariant::LongLong:
|
||||||
case QVariant::Double:
|
case QVariant::Double:
|
||||||
return v.toString();
|
return v.toString();
|
||||||
break;
|
|
||||||
|
|
||||||
case QVariant::Uuid:
|
case QVariant::Uuid:
|
||||||
return "'" + v.toUuid().toString() + "'";
|
return "'" + v.toUuid().toString() + "'";
|
||||||
break;
|
|
||||||
|
|
||||||
case QVariant::Char:
|
case QVariant::Char:
|
||||||
case QVariant::String:
|
case QVariant::String:
|
||||||
|
|
@ -838,9 +827,10 @@ QString SqlGeneratorBase::escapeValue(const QVariant &v) const
|
||||||
|
|
||||||
case QVariant::Invalid:
|
case QVariant::Invalid:
|
||||||
qFatal("Invalud field value");
|
qFatal("Invalud field value");
|
||||||
return "<FAIL>";
|
|
||||||
|
|
||||||
default:
|
default:
|
||||||
|
qDebug() << v.type();
|
||||||
|
qWarning("No field escape rule for: %s", v.typeName());
|
||||||
Q_UNREACHABLE();
|
Q_UNREACHABLE();
|
||||||
return QString();
|
return QString();
|
||||||
}
|
}
|
||||||
|
|
@ -875,9 +865,6 @@ QString SqlGeneratorBase::phrase(const PhraseData *d) const
|
||||||
case PhraseData::WithoutOperand:
|
case PhraseData::WithoutOperand:
|
||||||
ret = phrase(d->left) + " " + operatorString(d->operatorCond);
|
ret = phrase(d->left) + " " + operatorString(d->operatorCond);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
|
||||||
ret = "<FAIL>";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (d->operatorCond == PhraseData::And || d->operatorCond == PhraseData::Or)
|
if (d->operatorCond == PhraseData::And || d->operatorCond == PhraseData::Or)
|
||||||
|
|
@ -968,7 +955,7 @@ QString SqlGeneratorBase::createConditionalPhrase(const PhraseData *d) const
|
||||||
//apply not (!)
|
//apply not (!)
|
||||||
if (d->isNot) {
|
if (d->isNot) {
|
||||||
if (op < 20)
|
if (op < 20)
|
||||||
op = (PhraseData::Condition)((op + 10) % 20);
|
op = static_cast<PhraseData::Condition>((op + 10) % 20);
|
||||||
}
|
}
|
||||||
switch (d->type) {
|
switch (d->type) {
|
||||||
case PhraseData::Field:
|
case PhraseData::Field:
|
||||||
|
|
@ -1007,9 +994,6 @@ QString SqlGeneratorBase::createConditionalPhrase(const PhraseData *d) const
|
||||||
case PhraseData::WithoutOperand:
|
case PhraseData::WithoutOperand:
|
||||||
ret = createConditionalPhrase(d->left) + " " + operatorString(op);
|
ret = createConditionalPhrase(d->left) + " " + operatorString(op);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
default:
|
|
||||||
ret = "<FAIL phrase>";
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (d->operatorCond == PhraseData::And || d->operatorCond == PhraseData::Or)
|
if (d->operatorCond == PhraseData::And || d->operatorCond == PhraseData::Or)
|
||||||
|
|
@ -1069,7 +1053,6 @@ void SqlGeneratorBase::createInsertPhrase(const AssignmentPhraseList &ph, QStrin
|
||||||
|
|
||||||
case PhraseData::Field:
|
case PhraseData::Field:
|
||||||
case PhraseData::WithoutOperand:
|
case PhraseData::WithoutOperand:
|
||||||
default:
|
|
||||||
qFatal("Invalid insert command");
|
qFatal("Invalid insert command");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -180,6 +180,11 @@ AssignmentPhrase AbstractFieldPhrase::operator =(const QVariant &other)
|
||||||
return AssignmentPhrase(this, other);
|
return AssignmentPhrase(this, other);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
AssignmentPhrase AbstractFieldPhrase::operator =(const ConditionalPhrase &other)
|
||||||
|
{
|
||||||
|
return AssignmentPhrase(new PhraseData(data, PhraseData::Equal, other.data));
|
||||||
|
}
|
||||||
|
|
||||||
AssignmentPhrase AbstractFieldPhrase::operator <<(const QVariant &other)
|
AssignmentPhrase AbstractFieldPhrase::operator <<(const QVariant &other)
|
||||||
{
|
{
|
||||||
return AssignmentPhrase(this, other);
|
return AssignmentPhrase(this, other);
|
||||||
|
|
|
||||||
|
|
@ -281,6 +281,7 @@ public:
|
||||||
|
|
||||||
AbstractFieldPhrase operator !();
|
AbstractFieldPhrase operator !();
|
||||||
AssignmentPhrase operator =(const QVariant &other);
|
AssignmentPhrase operator =(const QVariant &other);
|
||||||
|
AssignmentPhrase operator =(const ConditionalPhrase &other);
|
||||||
AssignmentPhrase operator <<(const QVariant &other);
|
AssignmentPhrase operator <<(const QVariant &other);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
@ -335,6 +336,9 @@ class FieldPhrase<type> : public AbstractFieldPhrase \
|
||||||
AssignmentPhrase operator =(const QVariant &other) { \
|
AssignmentPhrase operator =(const QVariant &other) { \
|
||||||
return AssignmentPhrase(this, other); \
|
return AssignmentPhrase(this, other); \
|
||||||
} \
|
} \
|
||||||
|
AssignmentPhrase operator =(const ConditionalPhrase &other) { \
|
||||||
|
return AssignmentPhrase(new PhraseData(data, PhraseData::Equal, other.data)); \
|
||||||
|
} \
|
||||||
ConditionalPhrase between(const QVariant &min, const QVariant &max) \
|
ConditionalPhrase between(const QVariant &min, const QVariant &max) \
|
||||||
{ \
|
{ \
|
||||||
return ConditionalPhrase(this, PhraseData::Between, \
|
return ConditionalPhrase(this, PhraseData::Between, \
|
||||||
|
|
|
||||||
|
|
@ -39,7 +39,7 @@ NUT_BEGIN_NAMESPACE
|
||||||
* This should be fixed to v1.2
|
* This should be fixed to v1.2
|
||||||
*/
|
*/
|
||||||
|
|
||||||
Table::Table(QObject *parent) : QObject(parent), myModel(0), _parentTableSet(0)
|
Table::Table(QObject *parent) : QObject(parent), myModel(nullptr), _parentTableSet(nullptr)
|
||||||
{
|
{
|
||||||
setStatus(NewCreated);
|
setStatus(NewCreated);
|
||||||
}
|
}
|
||||||
|
|
@ -57,7 +57,10 @@ QString Table::primaryKey() const
|
||||||
|
|
||||||
bool Table::isPrimaryKeyAutoIncrement() const
|
bool Table::isPrimaryKeyAutoIncrement() const
|
||||||
{
|
{
|
||||||
return myModel->field(myModel->primaryKey())->isAutoIncrement;
|
FieldModel *pk = myModel->field(myModel->primaryKey());
|
||||||
|
if (!pk)
|
||||||
|
return false;
|
||||||
|
return pk->isAutoIncrement;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
@ -72,7 +75,7 @@ void Table::propertyChanged(QString propName)
|
||||||
myModel = TableModel::findByClassName(metaObject()->className());
|
myModel = TableModel::findByClassName(metaObject()->className());
|
||||||
|
|
||||||
if (!myModel)
|
if (!myModel)
|
||||||
qFatal ("model for this class not found");
|
qFatal ("model for class '%s' not found", qPrintable(metaObject()->className()));
|
||||||
|
|
||||||
foreach (FieldModel *f, myModel->fields())
|
foreach (FieldModel *f, myModel->fields())
|
||||||
if(f->isPrimaryKey && propName == f->name && f->isAutoIncrement)
|
if(f->isPrimaryKey && propName == f->name && f->isAutoIncrement)
|
||||||
|
|
|
||||||
|
|
@ -69,7 +69,7 @@ void TableModel::setTypeId(const int &typeId)
|
||||||
FieldModel *TableModel::field(int n) const
|
FieldModel *TableModel::field(int n) const
|
||||||
{
|
{
|
||||||
if (n < 0 || n >= _fields.count())
|
if (n < 0 || n >= _fields.count())
|
||||||
return 0;
|
return nullptr;
|
||||||
|
|
||||||
return _fields.at(n);
|
return _fields.at(n);
|
||||||
}
|
}
|
||||||
|
|
@ -80,7 +80,7 @@ FieldModel *TableModel::field(QString name) const
|
||||||
if(f->name == name)
|
if(f->name == name)
|
||||||
return f;
|
return f;
|
||||||
|
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
QList<FieldModel *> TableModel::fields() const
|
QList<FieldModel *> TableModel::fields() const
|
||||||
|
|
@ -114,7 +114,7 @@ TableModel *TableModel::findByTypeId(int typeId)
|
||||||
foreach (TableModel *model, _allModels)
|
foreach (TableModel *model, _allModels)
|
||||||
if(model->typeId() == typeId)
|
if(model->typeId() == typeId)
|
||||||
return model;
|
return model;
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -125,11 +125,13 @@ TableModel *TableModel::findByTypeId(int typeId)
|
||||||
*/
|
*/
|
||||||
TableModel *TableModel::findByClassName(QString className)
|
TableModel *TableModel::findByClassName(QString className)
|
||||||
{
|
{
|
||||||
foreach (TableModel *model, _allModels)
|
foreach (TableModel *model, _allModels){
|
||||||
|
qDebug() << model->className();
|
||||||
if(model->className() == className)
|
if(model->className() == className)
|
||||||
return model;
|
return model;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool TableModel::operator ==(const TableModel &t) const{
|
bool TableModel::operator ==(const TableModel &t) const{
|
||||||
|
|
@ -377,7 +379,7 @@ RelationModel *TableModel::foregionKey(const QString &otherTable) const
|
||||||
if(fk->masterClassName == otherTable)
|
if(fk->masterClassName == otherTable)
|
||||||
return fk;
|
return fk;
|
||||||
|
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
RelationModel *TableModel::foregionKeyByField(const QString &fieldName) const
|
RelationModel *TableModel::foregionKeyByField(const QString &fieldName) const
|
||||||
|
|
@ -386,7 +388,7 @@ RelationModel *TableModel::foregionKeyByField(const QString &fieldName) const
|
||||||
if(fk->localColumn == fieldName)
|
if(fk->localColumn == fieldName)
|
||||||
return fk;
|
return fk;
|
||||||
|
|
||||||
return 0;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
QString TableModel::toString() const
|
QString TableModel::toString() const
|
||||||
|
|
@ -440,7 +442,7 @@ RelationModel::RelationModel(const QJsonObject &obj)
|
||||||
localProperty = obj.value("localProperty").toString();
|
localProperty = obj.value("localProperty").toString();
|
||||||
masterClassName = obj.value("masterClassName").toString();
|
masterClassName = obj.value("masterClassName").toString();
|
||||||
foreignColumn = obj.value("foreignColumn").toString();
|
foreignColumn = obj.value("foreignColumn").toString();
|
||||||
slaveTable = masterTable = 0;
|
slaveTable = masterTable = nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
QJsonObject RelationModel::toJson() const
|
QJsonObject RelationModel::toJson() const
|
||||||
|
|
|
||||||
|
|
@ -94,7 +94,7 @@ Q_OUTOFLINE_TEMPLATE int TableSet<T>::length() const
|
||||||
template<class T>
|
template<class T>
|
||||||
Q_OUTOFLINE_TEMPLATE T *TableSet<T >::at(int i) const
|
Q_OUTOFLINE_TEMPLATE T *TableSet<T >::at(int i) const
|
||||||
{
|
{
|
||||||
return (T*)_tablesList.at(i);
|
return reinterpret_cast<T*>(_tablesList.at(i));
|
||||||
}
|
}
|
||||||
|
|
||||||
template<class T>
|
template<class T>
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,2 @@
|
||||||
|
#include "tuple.h"
|
||||||
|
|
||||||
|
|
@ -0,0 +1,18 @@
|
||||||
|
#ifndef TUPLE_H
|
||||||
|
#define TUPLE_H
|
||||||
|
|
||||||
|
#include <QObject>
|
||||||
|
|
||||||
|
//class AbstractTuple
|
||||||
|
//{
|
||||||
|
// Q_GADGET
|
||||||
|
//};
|
||||||
|
|
||||||
|
//template <typename T>
|
||||||
|
//class Tuple
|
||||||
|
//{
|
||||||
|
//public:
|
||||||
|
// T _1;
|
||||||
|
//};
|
||||||
|
|
||||||
|
#endif // TUPLE_H
|
||||||
Loading…
Reference in New Issue