This commit is contained in:
Hamed Masafi 2019-07-20 11:07:08 +04:30
parent b79f4c88bc
commit dfef256598
12 changed files with 79 additions and 80 deletions

View File

@ -178,73 +178,69 @@ NUT_BEGIN_NAMESPACE
inline bool nutClassInfo(const QMetaClassInfo &classInfo, inline bool nutClassInfo(const QMetaClassInfo &classInfo,
QString &type, QString &name, QVariant &value) QString &type, QString &name, QVariant &value)
{ {
if (!QString(classInfo.name()).startsWith(__nut_NAME_PERFIX)) { if (!QString(classInfo.name()).startsWith(__nut_NAME_PERFIX))
return false; return false;
} else {
QStringList parts = QString(classInfo.value()).split("\n");
if (parts.count() != 3)
return false;
type = parts[0]; QStringList parts = QString(classInfo.value()).split("\n");
name = parts[1]; if (parts.count() != 3)
value = qVariantFromValue(parts[2]); return false;
return true;
} type = parts[0];
name = parts[1];
value = qVariantFromValue(parts[2]);
return true;
} }
inline bool nutClassInfoString(const QMetaClassInfo &classInfo, inline bool nutClassInfoString(const QMetaClassInfo &classInfo,
QString &type, QString &name, QString &value) QString &type, QString &name, QString &value)
{ {
if (!QString(classInfo.name()).startsWith(__nut_NAME_PERFIX)) { if (!QString(classInfo.name()).startsWith(__nut_NAME_PERFIX))
return false; return false;
} else {
QStringList parts = QString(classInfo.value()).split("\n");
if (parts.count() != 3)
return false;
type = parts[0]; QStringList parts = QString(classInfo.value()).split("\n");
name = parts[1]; if (parts.count() != 3)
value = parts[2]; return false;
return true;
} type = parts[0];
name = parts[1];
value = parts[2];
return true;
} }
inline bool nutClassInfoBool(const QMetaClassInfo &classInfo, inline bool nutClassInfoBool(const QMetaClassInfo &classInfo,
QString &type, QString &name, bool &value) QString &type, QString &name, bool &value)
{ {
if (!QString(classInfo.name()).startsWith(__nut_NAME_PERFIX)) { if (!QString(classInfo.name()).startsWith(__nut_NAME_PERFIX))
return false; return false;
} else {
QStringList parts = QString(classInfo.value()).split("\n");
if (parts.count() != 3)
return false;
QString buffer = parts[2].toLower(); QStringList parts = QString(classInfo.value()).split("\n");
if (buffer != "true" && buffer != "false") if (parts.count() != 3)
return false; return false;
type = parts[0]; QString buffer = parts[2].toLower();
name = parts[1]; if (buffer != "true" && buffer != "false")
value = (buffer == "true"); return false;
return true;
} type = parts[0];
name = parts[1];
value = (buffer == "true");
return true;
} }
inline bool nutClassInfoInt(const QMetaClassInfo &classInfo, inline bool nutClassInfoInt(const QMetaClassInfo &classInfo,
QString &type, QString &name, bool &value) QString &type, QString &name, bool &value)
{ {
if (!QString(classInfo.name()).startsWith(__nut_NAME_PERFIX)) { if (!QString(classInfo.name()).startsWith(__nut_NAME_PERFIX))
return false; return false;
} else {
QStringList parts = QString(classInfo.value()).split("\n"); QStringList parts = QString(classInfo.value()).split("\n");
if (parts.count() != 3) if (parts.count() != 3)
return false; return false;
bool ok; bool ok;
type = parts[0]; type = parts[0];
name = parts[1]; name = parts[1];
value = parts[2].toInt(&ok); value = parts[2].toInt(&ok);
return ok; return ok;
}
} }
#ifdef NUT_SHARED_POINTER #ifdef NUT_SHARED_POINTER

View File

@ -178,7 +178,7 @@ QString MySqlGenerator::escapeValue(const QVariant &v) const
// } // }
// default: // default:
return SqlGeneratorBase::escapeValue(v); return SqlGeneratorBase::escapeValue(v);
// } // }
} }
@ -306,19 +306,19 @@ QString MySqlGenerator::createConditionalPhrase(const PhraseData *d) const
if (op == PhraseData::AddYears) if (op == PhraseData::AddYears)
return QString("DATE_ADD(%2, INTERVAL %1 YEAR)") return QString("DATE_ADD(%2, INTERVAL %1 YEAR)")
.arg(d->operand.toString(), createConditionalPhrase(d->left)); .arg(d->operand.toString(), createConditionalPhrase(d->left));
else if (op == PhraseData::AddMonths) if (op == PhraseData::AddMonths)
return QString("DATE_ADD(%2, INTERVAL %1 MONTH)") return QString("DATE_ADD(%2, INTERVAL %1 MONTH)")
.arg(d->operand.toString(), createConditionalPhrase(d->left)); .arg(d->operand.toString(), createConditionalPhrase(d->left));
else if (op == PhraseData::AddDays) if (op == PhraseData::AddDays)
return QString("DATE_ADD(%2, INTERVAL %1 DAY)") return QString("DATE_ADD(%2, INTERVAL %1 DAY)")
.arg(d->operand.toString(), createConditionalPhrase(d->left)); .arg(d->operand.toString(), createConditionalPhrase(d->left));
else if (op == PhraseData::AddHours) if (op == PhraseData::AddHours)
return QString("DATE_ADD(%2, INTERVAL %1 HOUR)") return QString("DATE_ADD(%2, INTERVAL %1 HOUR)")
.arg(d->operand.toString(), createConditionalPhrase(d->left)); .arg(d->operand.toString(), createConditionalPhrase(d->left));
else if (op == PhraseData::AddMinutes) if (op == PhraseData::AddMinutes)
return QString("DATE_ADD(%2, INTERVAL %1 MINUTE)") return QString("DATE_ADD(%2, INTERVAL %1 MINUTE)")
.arg(d->operand.toString(), createConditionalPhrase(d->left)); .arg(d->operand.toString(), createConditionalPhrase(d->left));
else if (op == PhraseData::AddSeconds) if (op == PhraseData::AddSeconds)
return QString("DATE_ADD(%2, INTERVAL %1 SECOND)") return QString("DATE_ADD(%2, INTERVAL %1 SECOND)")
.arg(d->operand.toString(), createConditionalPhrase(d->left)); .arg(d->operand.toString(), createConditionalPhrase(d->left));

View File

@ -29,7 +29,7 @@ NUT_BEGIN_NAMESPACE
class MySqlGenerator : public SqlGeneratorBase class MySqlGenerator : public SqlGeneratorBase
{ {
public: public:
explicit MySqlGenerator(Database *parent = 0); explicit MySqlGenerator(Database *parent = nullptr);
QString fieldType(FieldModel *field) override; QString fieldType(FieldModel *field) override;
QString escapeValue(const QVariant &v) const override; QString escapeValue(const QVariant &v) const override;

View File

@ -344,22 +344,21 @@ QString PostgreSqlGenerator::createConditionalPhrase(const PhraseData *d) const
if (op == PhraseData::AddYears) if (op == PhraseData::AddYears)
return QString("DATEADD(year, %1, %2)") return QString("DATEADD(year, %1, %2)")
.arg(d->operand.toString(), createConditionalPhrase(d->left)); .arg(d->operand.toString(), createConditionalPhrase(d->left));
else if (op == PhraseData::AddMonths) if (op == PhraseData::AddMonths)
return QString("DATEADD(month, %1, %2)") return QString("DATEADD(month, %1, %2)")
.arg(d->operand.toString(), createConditionalPhrase(d->left)); .arg(d->operand.toString(), createConditionalPhrase(d->left));
else if (op == PhraseData::AddDays) if (op == PhraseData::AddDays)
return QString("DATEADD(day, %1, %2)") return QString("DATEADD(day, %1, %2)")
.arg(d->operand.toString(), createConditionalPhrase(d->left)); .arg(d->operand.toString(), createConditionalPhrase(d->left));
else if (op == PhraseData::AddHours) if (op == PhraseData::AddHours)
return QString("DATEADD(hour, %1, %2)") return QString("DATEADD(hour, %1, %2)")
.arg(d->operand.toString(), createConditionalPhrase(d->left)); .arg(d->operand.toString(), createConditionalPhrase(d->left));
else if (op == PhraseData::AddMinutes) if (op == PhraseData::AddMinutes)
return QString("DATEADD(minute, %1, %2)") return QString("DATEADD(minute, %1, %2)")
.arg(d->operand.toString(), createConditionalPhrase(d->left)); .arg(d->operand.toString(), createConditionalPhrase(d->left));
else if (op == PhraseData::AddSeconds) if (op == PhraseData::AddSeconds)
return QString("DATEADD(second, %1, %2)") return QString("DATEADD(second, %1, %2)")
.arg(d->operand.toString(), createConditionalPhrase(d->left)); .arg(d->operand.toString(), createConditionalPhrase(d->left));
} }
return SqlGeneratorBase::createConditionalPhrase(d); return SqlGeneratorBase::createConditionalPhrase(d);

View File

@ -29,7 +29,7 @@ NUT_BEGIN_NAMESPACE
class PostgreSqlGenerator : public SqlGeneratorBase class PostgreSqlGenerator : public SqlGeneratorBase
{ {
private: private:
bool readInsideParentese(QString &ref, QString &out); bool readInsideParentese(QString &text, QString &out);
bool isPostGisType(const QVariant::Type &t) const; bool isPostGisType(const QVariant::Type &t) const;
public: public:
explicit PostgreSqlGenerator(Database *parent = nullptr); explicit PostgreSqlGenerator(Database *parent = nullptr);

View File

@ -160,7 +160,7 @@ protected:
QString fromTableText(const QString &tableName, QString &joinClassName, QString &orderBy) const; QString fromTableText(const QString &tableName, QString &joinClassName, QString &orderBy) const;
// QString createWhere(QList<WherePhrase> &wheres); // QString createWhere(QList<WherePhrase> &wheres);
void replaceTableNames(QString &command); virtual void replaceTableNames(QString &command);
void removeTableNames(QString &command); void removeTableNames(QString &command);
QString dateTimePartName(const PhraseData::Condition &op) const; QString dateTimePartName(const PhraseData::Condition &op) const;
}; };

View File

@ -167,11 +167,12 @@ QString SqlServerGenerator::escapeValue(const QVariant &v) const
if (mid == QMetaType::QString || mid == QMetaType::QChar) if (mid == QMetaType::QString || mid == QMetaType::QChar)
return "N'" + v.toString() + "'"; return "N'" + v.toString() + "'";
else if (mid == QMetaType::QPoint) { if (mid == QMetaType::QPoint) {
QPoint pt = v.toPoint(); QPoint pt = v.toPoint();
return QString("geography::POINT(%1, %2, 4326)").arg(pt.x()).arg( return QString("geography::POINT(%1, %2, 4326)").arg(pt.x()).arg(
pt.y()); pt.y());
} else if (mid == QMetaType::QPointF) { }
if (mid == QMetaType::QPointF) {
QPointF pt = v.toPointF(); QPointF pt = v.toPointF();
return QString("geography::POINT(%1, %2, 4326)").arg(pt.x()).arg( return QString("geography::POINT(%1, %2, 4326)").arg(pt.x()).arg(
pt.y()); pt.y());

View File

@ -31,15 +31,15 @@ class SqlServerGenerator : public SqlGeneratorBase
public: public:
explicit SqlServerGenerator(Database *parent = nullptr); explicit SqlServerGenerator(Database *parent = nullptr);
QString masterDatabaseName(QString databaseName); QString masterDatabaseName(QString databaseName) override;
QString fieldType(FieldModel *field); QString fieldType(FieldModel *field) override;
QString diff(FieldModel *oldField, FieldModel *newField); QString diff(FieldModel *oldField, FieldModel *newField) override;
QString escapeValue(const QVariant &v) const; QString escapeValue(const QVariant &v) const override;
void appendSkipTake(QString &sql, int skip, int take); void appendSkipTake(QString &sql, int skip, int take) override;
void replaceTableNames(QString &command); void replaceTableNames(QString &command) override;
}; };

View File

@ -28,6 +28,11 @@ QueryPrivate::QueryPrivate(QueryBase *parent) : q_ptr(parent),
} }
QueryPrivate::~QueryPrivate()
{
}
/*! /*!
* \class Query * \class Query
* \brief This class hold a query. A query can be used for getting database rows, editing or deleting without row fetching. * \brief This class hold a query. A query can be used for getting database rows, editing or deleting without row fetching.

View File

@ -39,7 +39,7 @@ class QueryPrivate : public QSharedData {
public: public:
explicit QueryPrivate(QueryBase *parent); explicit QueryPrivate(QueryBase *parent);
~QueryPrivate() = default; ~QueryPrivate();
QString sql; QString sql;
QString className; QString className;

View File

@ -41,7 +41,7 @@ protected:
QExplicitlySharedDataPointer<QueryPrivate> d; QExplicitlySharedDataPointer<QueryPrivate> d;
public: public:
explicit QueryBase(QObject *parent = 0); explicit QueryBase(QObject *parent = nullptr);
protected: protected:
// void addTableToSet(TableSetBase *set, Table *table); // void addTableToSet(TableSetBase *set, Table *table);

View File

@ -31,8 +31,7 @@ NUT_BEGIN_NAMESPACE
class TableModel; class TableModel;
struct FieldModel{ struct FieldModel{
explicit FieldModel() : name(QString()), length(0), defaultValue(QString()), explicit FieldModel() : name(QString()), defaultValue(QString())
notNull(false), isPrimaryKey(false), isAutoIncrement(false), isUnique(false)
{ {
} }
@ -42,12 +41,12 @@ struct FieldModel{
QString name; QString name;
QMetaType::Type type; QMetaType::Type type;
QString typeName; QString typeName;
int length; int length{0};
QString defaultValue; QString defaultValue;
bool notNull; bool notNull{false};
bool isPrimaryKey; bool isPrimaryKey{false};
bool isAutoIncrement; bool isAutoIncrement{false};
bool isUnique; bool isUnique{false};
QString displayName; QString displayName;
bool operator ==(const FieldModel &f) const{ bool operator ==(const FieldModel &f) const{
@ -70,18 +69,17 @@ struct FieldModel{
struct RelationModel{ struct RelationModel{
RelationModel() : localColumn(QString()), localProperty(QString()), RelationModel() : localColumn(QString()), localProperty(QString()),
slaveTable(nullptr), foreignColumn(QString()), masterTable(nullptr), slaveTable(nullptr), foreignColumn(QString()), masterClassName(QString())
masterClassName(QString())
{} {}
explicit RelationModel(const QJsonObject &obj); explicit RelationModel(const QJsonObject &obj);
//slave //slave
QString localColumn; QString localColumn;
QString localProperty; QString localProperty;
TableModel *slaveTable; TableModel *slaveTable{nullptr};
//master //master
QString foreignColumn; QString foreignColumn;
TableModel *masterTable; TableModel *masterTable{nullptr};
QString masterClassName; QString masterClassName;