From 1c196fe3ef82c7fc0aa072a9a52082c2e55ef744 Mon Sep 17 00:00:00 2001 From: Hamed Masafi Date: Sun, 7 Jul 2019 19:42:37 +0430 Subject: [PATCH] polish FieldPhrase --- src/phrases/datephrase.cpp | 125 +++++++++++++++++++++ src/phrases/datephrase.h | 218 +++++++++++++------------------------ 2 files changed, 203 insertions(+), 140 deletions(-) diff --git a/src/phrases/datephrase.cpp b/src/phrases/datephrase.cpp index a9c8d9b..0355377 100644 --- a/src/phrases/datephrase.cpp +++ b/src/phrases/datephrase.cpp @@ -20,3 +20,128 @@ #include "datephrase.h" +NUT_BEGIN_NAMESPACE + +FieldPhrase::FieldPhrase(const char *className, const char *s) : + AbstractFieldPhrase(className, s) +{} + +ConditionalPhrase FieldPhrase::addYears(int years) { + return ConditionalPhrase(this, PhraseData::AddYears, years); +} + +ConditionalPhrase FieldPhrase::addMonths(int months) { + return ConditionalPhrase(this, PhraseData::AddMonths, months); +} + +ConditionalPhrase FieldPhrase::addDays(int days) { + return ConditionalPhrase(this, PhraseData::AddDays, days); +} + +ConditionalPhrase FieldPhrase::year() { + return ConditionalPhrase(this, PhraseData::DatePartYear); +} + +ConditionalPhrase FieldPhrase::month() { + return ConditionalPhrase(this, PhraseData::DatePartMonth); +} + +ConditionalPhrase FieldPhrase::day() { + return ConditionalPhrase(this, PhraseData::DatePartDay); +} + +FieldPhrase::FieldPhrase(const char *className, const char *s) : + AbstractFieldPhrase(className, s) +{} + + +ConditionalPhrase FieldPhrase::addHours(int hours) { + return ConditionalPhrase(this, PhraseData::AddHours, hours); +} + +ConditionalPhrase FieldPhrase::addMinutes(int minutes) { + return ConditionalPhrase(this, PhraseData::AddMinutes, minutes); +} + +ConditionalPhrase FieldPhrase::addSeconds(int seconds) { + return ConditionalPhrase(this, PhraseData::AddSeconds, seconds); +} + +ConditionalPhrase FieldPhrase::hour() { + return ConditionalPhrase(this, PhraseData::DatePartHour); +} + +ConditionalPhrase FieldPhrase::minute() { + return ConditionalPhrase(this, PhraseData::DatePartMinute); +} + +ConditionalPhrase FieldPhrase::second() { + return ConditionalPhrase(this, PhraseData::DatePartSecond); +} + +ConditionalPhrase FieldPhrase::msec() { + return ConditionalPhrase(this, PhraseData::DatePartMilisecond); +} + +FieldPhrase::FieldPhrase(const char *className, const char *s) : + AbstractFieldPhrase(className, s) +{} + +ConditionalPhrase FieldPhrase::addYears(int years) { + return ConditionalPhrase(this, PhraseData::AddYearsDateTime, years); +} + +ConditionalPhrase FieldPhrase::addMonths(int months) { + return ConditionalPhrase(this, PhraseData::AddMonthsDateTime, months); +} + +ConditionalPhrase FieldPhrase::addDays(int days) { + return ConditionalPhrase(this, PhraseData::AddDaysDateTime, days); +} + +ConditionalPhrase FieldPhrase::addHours(int hours) { + return ConditionalPhrase(this, PhraseData::AddHoursDateTime, hours); +} + +ConditionalPhrase FieldPhrase::addMinutes(int minutes) { + return ConditionalPhrase(this, PhraseData::AddMinutesDateTime, minutes); +} + +ConditionalPhrase FieldPhrase::addSeconds(int seconds) { + return ConditionalPhrase(this, PhraseData::AddSecondsDateTime, seconds); +} + +ConditionalPhrase FieldPhrase::year() { + return ConditionalPhrase(this, PhraseData::DatePartYear); +} + +ConditionalPhrase FieldPhrase::month() { + return ConditionalPhrase(this, PhraseData::DatePartMonth); +} + +ConditionalPhrase FieldPhrase::day() { + return ConditionalPhrase(this, PhraseData::DatePartDay); +} + +ConditionalPhrase FieldPhrase::hour() { + return ConditionalPhrase(this, PhraseData::DatePartHour); +} + +ConditionalPhrase FieldPhrase::minute() { + return ConditionalPhrase(this, PhraseData::DatePartMinute); +} + +ConditionalPhrase FieldPhrase::second() { + return ConditionalPhrase(this, PhraseData::DatePartSecond); +} + +ConditionalPhrase FieldPhrase::msec() { + return ConditionalPhrase(this, PhraseData::DatePartMilisecond); +} + + +COMMON_OPERATORS_IMPL(QDate) +COMMON_OPERATORS_IMPL(QTime) +COMMON_OPERATORS_IMPL(QDateTime) + +NUT_END_NAMESPACE diff --git a/src/phrases/datephrase.h b/src/phrases/datephrase.h index ab79d9c..8d3dbd3 100644 --- a/src/phrases/datephrase.h +++ b/src/phrases/datephrase.h @@ -27,158 +27,96 @@ NUT_BEGIN_NAMESPACE +#define COMMON_OPERATORS_DECL(T) \ + AssignmentPhrase operator =(const T &other); \ + ConditionalPhrase operator <(const QVariant &other); \ + ConditionalPhrase operator <=(const QVariant &other); \ + ConditionalPhrase operator >(const QVariant &other); \ + ConditionalPhrase operator >=(const QVariant &other); \ + ConditionalPhrase between(const QVariant &min, const QVariant &max); -template -struct __is_date_helper - : public std::false_type { }; +#define COMMON_OPERATORS_IMPL(T) \ + AssignmentPhrase FieldPhrase::operator =(const T &other) { \ + return AssignmentPhrase(this, other); \ + } \ + ConditionalPhrase FieldPhrase::operator <(const QVariant &other) { \ + return ConditionalPhrase(this, PhraseData::Less, other); \ + } \ + ConditionalPhrase FieldPhrase::operator <=(const QVariant &other) { \ + return ConditionalPhrase(this, PhraseData::LessEqual, other); \ + } \ + ConditionalPhrase FieldPhrase::operator >(const QVariant &other) { \ + return ConditionalPhrase(this, PhraseData::Greater, other); \ + } \ + ConditionalPhrase FieldPhrase::operator >=(const QVariant &other) { \ + return ConditionalPhrase(this, PhraseData::GreaterEqual, other); \ + } \ + ConditionalPhrase FieldPhrase::between(const QVariant &min, const QVariant &max) \ + { \ + return ConditionalPhrase(this, PhraseData::Between, \ + QVariantList() << min << max); \ + } template<> -struct __is_date_helper - : public std::true_type { }; - -template<> -struct __is_date_helper - : public std::true_type { }; - -template<> -struct __is_date_helper - : public std::true_type { }; - -template -struct is_date - : public __is_date_helper::type>::type -{ }; - - -template -inline bool is_valid_template() {return false;} - -template <> -inline bool is_valid_template() {return true;} - -template <> -inline bool is_valid_template() {return true;} - -template <> -inline bool is_valid_template() {return true;} - -template <> -inline bool is_valid_template() {return true;} - -template -class NUT_EXPORT FieldPhrase::value>::type> - : public AbstractFieldPhrase +class NUT_EXPORT FieldPhrase : public AbstractFieldPhrase { public: - FieldPhrase(const char *className, const char *s) : - AbstractFieldPhrase(className, s) - {} + FieldPhrase(const char *className, const char *s); - AssignmentPhrase operator =(const T &other) { - return AssignmentPhrase(this, other); - } + COMMON_OPERATORS_DECL(QDate) - ConditionalPhrase operator <(const QVariant &other) { - return ConditionalPhrase(this, PhraseData::Less, other); - } - ConditionalPhrase operator <=(const QVariant &other) { - return ConditionalPhrase(this, PhraseData::LessEqual, other); - } - ConditionalPhrase operator >(const QVariant &other) { - return ConditionalPhrase(this, PhraseData::Greater, other); - } - ConditionalPhrase operator >=(const QVariant &other) { - return ConditionalPhrase(this, PhraseData::GreaterEqual, other); - } + ConditionalPhrase addYears(int years); + ConditionalPhrase addMonths(int months); + ConditionalPhrase addDays(int days); - ConditionalPhrase between(const QVariant &min, const QVariant &max) - { - return ConditionalPhrase(this, PhraseData::Between, - QVariantList() << min << max); - } + ConditionalPhrase year(); + ConditionalPhrase month(); + ConditionalPhrase day(); +}; -// template::value, int>::type = 0> - ConditionalPhrase addYears(int val) { - if (!is_valid_template()) - return ConditionalPhrase(); - if (std::is_same::value) - return ConditionalPhrase(this, PhraseData::AddYearsDateTime, val); +template<> +class NUT_EXPORT FieldPhrase : public AbstractFieldPhrase +{ +public: + FieldPhrase(const char *className, const char *s); - return ConditionalPhrase(this, PhraseData::AddYears, val); - } - ConditionalPhrase addMonths(int val) { - if (!is_valid_template()) - return ConditionalPhrase(); - if (std::is_same::value) - return ConditionalPhrase(this, PhraseData::AddMonthsDateTime, val); - return ConditionalPhrase(this, PhraseData::AddMonths, val); - } - ConditionalPhrase addDays(int val) { - if (!is_valid_template()) - return ConditionalPhrase(); - if (std::is_same::value) - return ConditionalPhrase(this, PhraseData::AddDaysDateTime, val); - return ConditionalPhrase(this, PhraseData::AddDays, val); - } + COMMON_OPERATORS_DECL(QTime) - ConditionalPhrase addHours(int val) { - if (!is_valid_template()) - return ConditionalPhrase(); - if (std::is_same::value) - return ConditionalPhrase(this, PhraseData::AddHoursDateTime, val); - return ConditionalPhrase(this, PhraseData::AddHours, val); - } - ConditionalPhrase addMinutes(int val) { - if (!is_valid_template()) - return ConditionalPhrase(); - if (std::is_same::value) - return ConditionalPhrase(this, PhraseData::AddMinutesDateTime, val); - return ConditionalPhrase(this, PhraseData::AddMinutes, val); - } - ConditionalPhrase addSeconds(int val) { - if (!is_valid_template()) - return ConditionalPhrase(); - if (std::is_same::value) - return ConditionalPhrase(this, PhraseData::AddSecondsDateTime, val); - return ConditionalPhrase(this, PhraseData::AddSeconds, val); - } + ConditionalPhrase addHours(int hours); + ConditionalPhrase addMinutes(int minutes); + ConditionalPhrase addSeconds(int seconds); - ConditionalPhrase year() { - if (!is_valid_template()) - return ConditionalPhrase(); - return ConditionalPhrase(this, PhraseData::DatePartYear); - } - ConditionalPhrase month() { - if (!is_valid_template()) - return ConditionalPhrase(); - return ConditionalPhrase(this, PhraseData::DatePartMonth); - } - ConditionalPhrase day() { - if (!is_valid_template()) - return ConditionalPhrase(); - return ConditionalPhrase(this, PhraseData::DatePartDay); - } - ConditionalPhrase hour() { - if (!is_valid_template()) - return ConditionalPhrase(); - return ConditionalPhrase(this, PhraseData::DatePartHour); - } - ConditionalPhrase minute() { - if (!is_valid_template()) - return ConditionalPhrase(); - return ConditionalPhrase(this, PhraseData::DatePartMinute); - } - ConditionalPhrase second() { - if (!is_valid_template()) - return ConditionalPhrase(); - return ConditionalPhrase(this, PhraseData::DatePartSecond); - } - ConditionalPhrase msec() { - if (!is_valid_template()) - return ConditionalPhrase(); - return ConditionalPhrase(this, PhraseData::DatePartMilisecond); - } + ConditionalPhrase hour(); + ConditionalPhrase minute(); + ConditionalPhrase second(); + ConditionalPhrase msec(); +}; + +template<> +class NUT_EXPORT FieldPhrase : public AbstractFieldPhrase +{ +public: + FieldPhrase(const char *className, const char *s); + + COMMON_OPERATORS_DECL(QDateTime) + + ConditionalPhrase addYears(int year); + ConditionalPhrase addMonths(int months); + ConditionalPhrase addDays(int days); + + + ConditionalPhrase addHours(int hours); + ConditionalPhrase addMinutes(int minutes); + ConditionalPhrase addSeconds(int seconds); + + ConditionalPhrase year(); + ConditionalPhrase month(); + ConditionalPhrase day(); + + ConditionalPhrase hour(); + ConditionalPhrase minute(); + ConditionalPhrase second(); + ConditionalPhrase msec(); }; NUT_END_NAMESPACE