From 7ca5d62cc9ef7a126ab33767024358c7d0a9b909 Mon Sep 17 00:00:00 2001 From: Hamed Masafi Date: Tue, 6 Dec 2022 10:25:43 +0330 Subject: [PATCH] Added dayOfWeek to date/datetime fields --- src/nut/generators/sqlitegenerator.cpp | 4 ++++ src/nut/generators/sqlservergenerator.cpp | 3 +++ src/nut/phrases/fieldphrase_date.cpp | 8 ++++++++ src/nut/phrases/fieldphrase_date.h | 4 ++++ 4 files changed, 19 insertions(+) diff --git a/src/nut/generators/sqlitegenerator.cpp b/src/nut/generators/sqlitegenerator.cpp index 2b34db5..015a952 100644 --- a/src/nut/generators/sqlitegenerator.cpp +++ b/src/nut/generators/sqlitegenerator.cpp @@ -287,6 +287,10 @@ QString SqliteGenerator::createConditionalPhrase(const PhraseData *d) const return QStringLiteral("CAST(strftime('%d', %1) AS INT)") .arg(createConditionalPhrase(d->left)); + case PhraseData::DatePartDayOfWeek: + return QStringLiteral("CAST(strftime('%w', %1) AS INT)") + .arg(createConditionalPhrase(d->left)); + case PhraseData::DatePartHour: return QStringLiteral("CAST(strftime('%H', %1) AS INT)") .arg(createConditionalPhrase(d->left)); diff --git a/src/nut/generators/sqlservergenerator.cpp b/src/nut/generators/sqlservergenerator.cpp index 6dced57..97b2bca 100644 --- a/src/nut/generators/sqlservergenerator.cpp +++ b/src/nut/generators/sqlservergenerator.cpp @@ -266,6 +266,9 @@ QString SqlServerGenerator::createConditionalPhrase(const PhraseData *d) const if (d->type == PhraseData::WithoutOperand) { switch (op) { + case PhraseData::DatePartDayOfWeek: + return QStringLiteral("DATEPART(WEEKDAY, %1)") + .arg(createConditionalPhrase(d->left)); case PhraseData::DatePartYear: case PhraseData::DatePartMonth: case PhraseData::DatePartDay: diff --git a/src/nut/phrases/fieldphrase_date.cpp b/src/nut/phrases/fieldphrase_date.cpp index 40e541e..be0e148 100644 --- a/src/nut/phrases/fieldphrase_date.cpp +++ b/src/nut/phrases/fieldphrase_date.cpp @@ -52,6 +52,10 @@ ConditionalPhrase FieldPhrase::day() { return ConditionalPhrase(this, PhraseData::DatePartDay); } +ConditionalPhrase FieldPhrase::dayOfWeek() { + return ConditionalPhrase(this, PhraseData::DatePartDayOfWeek); +} + FieldPhrase::FieldPhrase(const char *className, const char *s) : AbstractFieldPhrase(className, s) {} @@ -125,6 +129,10 @@ ConditionalPhrase FieldPhrase::day() { return ConditionalPhrase(this, PhraseData::DatePartDay); } +ConditionalPhrase FieldPhrase::dayOfWeek() { + return ConditionalPhrase(this, PhraseData::DatePartDayOfWeek); +} + ConditionalPhrase FieldPhrase::hour() { return ConditionalPhrase(this, PhraseData::DatePartHour); } diff --git a/src/nut/phrases/fieldphrase_date.h b/src/nut/phrases/fieldphrase_date.h index c596a93..2f4fd29 100644 --- a/src/nut/phrases/fieldphrase_date.h +++ b/src/nut/phrases/fieldphrase_date.h @@ -75,6 +75,8 @@ public: ConditionalPhrase year(); ConditionalPhrase month(); ConditionalPhrase day(); + + ConditionalPhrase dayOfWeek(); }; template<> @@ -115,6 +117,8 @@ public: ConditionalPhrase month(); ConditionalPhrase day(); + ConditionalPhrase dayOfWeek(); + ConditionalPhrase hour(); ConditionalPhrase minute(); ConditionalPhrase second();