fix: column with reserved name in mysql

This commit is contained in:
Hamed Masafi 2021-07-14 12:24:08 +04:30
parent 8b8a3c37a9
commit 62d89d7e22
6 changed files with 30 additions and 4 deletions

2
.gitignore vendored
View File

@ -52,3 +52,5 @@ test/tst_json/tst_upgrades*
test/tst_phrases/tst_phrases* test/tst_phrases/tst_phrases*
test/tst_quuid/tst_uuid* test/tst_quuid/tst_uuid*
test/tst_upgrades/tst_upgrades* test/tst_upgrades/tst_upgrades*
.idea

View File

@ -147,7 +147,7 @@ QString AbstractSqlGenerator::fieldDeclare(FieldModel *field)
if (type.isEmpty()) if (type.isEmpty())
return type; return type;
QString ret = field->name + QStringLiteral(" ") + type; QString ret = escaleFieldName(field->name) + QStringLiteral(" ") + type;
if (field->notNull) if (field->notNull)
ret.append(QStringLiteral(" NOT NULL")); ret.append(QStringLiteral(" NOT NULL"));
@ -157,6 +157,11 @@ QString AbstractSqlGenerator::fieldDeclare(FieldModel *field)
return ret; return ret;
} }
QString AbstractSqlGenerator::escaleFieldName(const QString &fieldName) const
{
return fieldName;
}
QStringList AbstractSqlGenerator::constraints(TableModel *table) QStringList AbstractSqlGenerator::constraints(TableModel *table)
{ {
Q_UNUSED(table) Q_UNUSED(table)

View File

@ -80,6 +80,7 @@ public:
//fields //fields
virtual QString fieldType(FieldModel *field) = 0; virtual QString fieldType(FieldModel *field) = 0;
virtual QString fieldDeclare(FieldModel *field); virtual QString fieldDeclare(FieldModel *field);
virtual QString escaleFieldName(const QString &fieldName) const;
virtual QStringList constraints(TableModel *table); virtual QStringList constraints(TableModel *table);
virtual QString escapeValue(const QVariant &v) const; virtual QString escapeValue(const QVariant &v) const;
virtual QVariant unescapeValue(const QMetaType::Type &type, const QVariant &dbValue); virtual QVariant unescapeValue(const QMetaType::Type &type, const QVariant &dbValue);

View File

@ -356,4 +356,14 @@ void MySqlGenerator::appendSkipTake(QString &sql, int skip, int take)
} }
} }
QString MySqlGenerator::primaryKeyConstraint(const TableModel *table) const
{
return QStringLiteral("PRIMARY KEY (%1)")
.arg(table->primaryKey());
}
QString MySqlGenerator::escaleFieldName(const QString &fieldName) const
{
return "`" + fieldName + "`";
}
NUT_END_NAMESPACE NUT_END_NAMESPACE

View File

@ -39,6 +39,8 @@ public:
// QString selectCommand(AgregateType t, QString agregateArg, QString tableName, QList<WherePhrase> &wheres, QList<WherePhrase> &orders, QList<RelationModel *> joins, int skip, int take); // QString selectCommand(AgregateType t, QString agregateArg, QString tableName, QList<WherePhrase> &wheres, QList<WherePhrase> &orders, QList<RelationModel *> joins, int skip, int take);
QString createConditionalPhrase(const PhraseData *d) const override; QString createConditionalPhrase(const PhraseData *d) const override;
void appendSkipTake(QString &sql, int skip, int take) override; void appendSkipTake(QString &sql, int skip, int take) override;
QString primaryKeyConstraint(const TableModel *table) const override;
QString escaleFieldName(const QString &fieldName) const override;
private: private:
bool readInsideParentese(QString &text, QString &out); bool readInsideParentese(QString &text, QString &out);

View File

@ -13,12 +13,18 @@
.arg(QString::fromUtf8(__func__)) .arg(QString::fromUtf8(__func__))
#define DRIVER QStringLiteral("QSQLITE") /*#define DRIVER QStringLiteral("QSQLITE")
#define DATABASE QStringLiteral("nut_test_%1_db") \
.arg(QString::fromUtf8(metaObject()->className())).toLower()
#define HOST QString() #define HOST QString()
#define USERNAME QString() #define USERNAME QString()
#define PASSWORD QString() #define PASSWORD QString()
*/
#define DRIVER QStringLiteral("QMYSQL")
#define HOST QStringLiteral("192.168.10.2")
#define USERNAME QStringLiteral("root")
#define PASSWORD QStringLiteral("lDexDJGvQwx20sfgtsetDSupmn9")
#define DATABASE QStringLiteral("nut_test_%1_db") \
.arg(QString::fromUtf8(metaObject()->className())).toLower()
#ifdef Q_OS_LINUX #ifdef Q_OS_LINUX
# define OS "Linux" # define OS "Linux"