From ad808afc6c82a5d49740e5773f2ee75486a601da Mon Sep 17 00:00:00 2001 From: Hamed Masafi Date: Mon, 22 Jul 2019 11:48:11 +0430 Subject: [PATCH] fix:datetime test pass by postgresql --- src/generators/postgresqlgenerator.cpp | 56 +++++++++++++++++--------- src/generators/sqlgeneratorbase.cpp | 7 ++++ test/common/consts.h | 4 +- test/tst_quuid/test.cpp | 2 +- 4 files changed, 48 insertions(+), 21 deletions(-) diff --git a/src/generators/postgresqlgenerator.cpp b/src/generators/postgresqlgenerator.cpp index 3a468ac..3b27f99 100644 --- a/src/generators/postgresqlgenerator.cpp +++ b/src/generators/postgresqlgenerator.cpp @@ -341,24 +341,44 @@ QString PostgreSqlGenerator::createConditionalPhrase(const PhraseData *d) const .arg(SqlGeneratorBase::createConditionalPhrase(d->left), escapeValue(d->operand)); } - if (op == PhraseData::AddYears) - return QString("DATEADD(year, %1, %2)") - .arg(d->operand.toString(), createConditionalPhrase(d->left)); - if (op == PhraseData::AddMonths) - return QString("DATEADD(month, %1, %2)") - .arg(d->operand.toString(), createConditionalPhrase(d->left)); - if (op == PhraseData::AddDays) - return QString("DATEADD(day, %1, %2)") - .arg(d->operand.toString(), createConditionalPhrase(d->left)); - if (op == PhraseData::AddHours) - return QString("DATEADD(hour, %1, %2)") - .arg(d->operand.toString(), createConditionalPhrase(d->left)); - if (op == PhraseData::AddMinutes) - return QString("DATEADD(minute, %1, %2)") - .arg(d->operand.toString(), createConditionalPhrase(d->left)); - if (op == PhraseData::AddSeconds) - return QString("DATEADD(second, %1, %2)") - .arg(d->operand.toString(), createConditionalPhrase(d->left)); + switch (op) { + case PhraseData::AddYears: + case PhraseData::AddYearsDateTime: + case PhraseData::AddMonths: + case PhraseData::AddMonthsDateTime: + case PhraseData::AddDays: + case PhraseData::AddDaysDateTime: + case PhraseData::AddHours: + case PhraseData::AddHoursDateTime: + case PhraseData::AddMinutes: + case PhraseData::AddMinutesDateTime: + case PhraseData::AddSeconds: + case PhraseData::AddSecondsDateTime: + return QString("%1 + interval '%2 %3'") + .arg(createConditionalPhrase(d->left), + d->operand.toString(), + SqlGeneratorBase::dateTimePartName(op)); + + default: + break; + } + } + + if (d->type == PhraseData::WithoutOperand) { + switch (op) { + case PhraseData::DatePartYear: + case PhraseData::DatePartMonth: + case PhraseData::DatePartDay: + case PhraseData::DatePartHour: + case PhraseData::DatePartMinute: + case PhraseData::DatePartSecond: + return QString("date_part('%2', %1)") + .arg(createConditionalPhrase(d->left), + SqlGeneratorBase::dateTimePartName(op)); + + default: + break; + } } return SqlGeneratorBase::createConditionalPhrase(d); diff --git a/src/generators/sqlgeneratorbase.cpp b/src/generators/sqlgeneratorbase.cpp index 3f99dda..fee139f 100644 --- a/src/generators/sqlgeneratorbase.cpp +++ b/src/generators/sqlgeneratorbase.cpp @@ -788,21 +788,27 @@ void SqlGeneratorBase::removeTableNames(QString &command) QString SqlGeneratorBase::dateTimePartName(const PhraseData::Condition &op) const { switch (op) { + case PhraseData::DatePartYear: case PhraseData::AddYears: case PhraseData::AddYearsDateTime: return "YEAR"; + case PhraseData::DatePartMonth: case PhraseData::AddMonths: case PhraseData::AddMonthsDateTime: return "MONTH"; + case PhraseData::DatePartDay: case PhraseData::AddDays: case PhraseData::AddDaysDateTime: return "DAY"; + case PhraseData::DatePartHour: case PhraseData::AddHours: case PhraseData::AddHoursDateTime: return "HOUR"; + case PhraseData::DatePartMinute: case PhraseData::AddMinutes: case PhraseData::AddMinutesDateTime: return "MINUTE"; + case PhraseData::DatePartSecond: case PhraseData::AddSeconds: case PhraseData::AddSecondsDateTime: return "SECOND"; @@ -965,6 +971,7 @@ SqlGeneratorBase::operatorString(const PhraseData::Condition &cond) const return "MOD"; default: + qDebug() << "Unsupported" << cond; return QString(" %1").arg(cond); } } diff --git a/test/common/consts.h b/test/common/consts.h index 581dca9..ac5c97b 100644 --- a/test/common/consts.h +++ b/test/common/consts.h @@ -12,11 +12,11 @@ .arg(timer.elapsed() / 1000.) \ .arg(__func__) -#define DRIVER "QSQLITE" +#define DRIVER "QPSQL" #define DATABASE QString("nut_test_%1_db").arg(metaObject()->className()).toLower() #define HOST "127.0.0.1" #define USERNAME "postgres" -#define PASSWORD "856856" +#define PASSWORD "mysecretpassword" #ifdef Q_OS_LINUX # define OS "Linux" diff --git a/test/tst_quuid/test.cpp b/test/tst_quuid/test.cpp index 69ddded..dba4a65 100644 --- a/test/tst_quuid/test.cpp +++ b/test/tst_quuid/test.cpp @@ -1,6 +1,6 @@ #include "test.h" -Test::Test(QObject *parentTableSet) +Test::Test(QObject *parentTableSet) : Table(parentTableSet) { }