summaryrefslogtreecommitdiff
path: root/sql
diff options
context:
space:
mode:
authorAlexander Barkov <bar@mariadb.org>2015-06-18 22:16:44 +0400
committerAlexander Barkov <bar@mariadb.org>2015-06-18 22:16:44 +0400
commit091f67738e2bede5df2001eedd4be76d9473370d (patch)
tree29e8133cc523cd670191577f6fc3b955d7e90c18 /sql
parentf5ddffd83e627cc0f6a24dfe4d8fc2e0c983bf78 (diff)
downloadmariadb-git-091f67738e2bede5df2001eedd4be76d9473370d.tar.gz
Removing duplicate code: Adding a protected method
Field_temporal_with_date::validate_for_get_date() and reusing it in a few places.
Diffstat (limited to 'sql')
-rw-r--r--sql/field.cc24
-rw-r--r--sql/field.h9
2 files changed, 13 insertions, 20 deletions
diff --git a/sql/field.cc b/sql/field.cc
index fe673469269..9ede072e56c 100644
--- a/sql/field.cc
+++ b/sql/field.cc
@@ -5985,11 +5985,7 @@ bool Field_newdate::get_date(MYSQL_TIME *ltime,ulonglong fuzzydate)
ltime->year= (tmp >> 9);
ltime->time_type= MYSQL_TIMESTAMP_DATE;
ltime->hour= ltime->minute= ltime->second= ltime->second_part= ltime->neg= 0;
- if (!tmp)
- return fuzzydate & TIME_NO_ZERO_DATE;
- if (!ltime->month || !ltime->day)
- return fuzzydate & TIME_NO_ZERO_IN_DATE;
- return 0;
+ return validate_for_get_date(tmp, ltime, fuzzydate);
}
@@ -6113,11 +6109,7 @@ bool Field_datetime::get_date(MYSQL_TIME *ltime, ulonglong fuzzydate)
ltime->day= (int) (part1%100);
ltime->month= (int) (part1/100%100);
ltime->year= (int) (part1/10000);
- if (!tmp)
- return fuzzydate & TIME_NO_ZERO_DATE;
- if (!ltime->month || !ltime->day)
- return fuzzydate & TIME_NO_ZERO_IN_DATE;
- return 0;
+ return validate_for_get_date(tmp, ltime, fuzzydate);
}
int Field_datetime::cmp(const uchar *a_ptr, const uchar *b_ptr)
@@ -6235,11 +6227,7 @@ bool Field_datetime_hires::get_date(MYSQL_TIME *ltime, ulonglong fuzzydate)
{
ulonglong packed= read_bigendian(ptr, Field_datetime_hires::pack_length());
unpack_time(sec_part_unshift(packed, dec), ltime);
- if (!packed)
- return fuzzydate & TIME_NO_ZERO_DATE;
- if (!ltime->month || !ltime->day)
- return fuzzydate & TIME_NO_ZERO_IN_DATE;
- return 0;
+ return validate_for_get_date(packed, ltime, fuzzydate);
}
uint32 Field_datetime_hires::pack_length() const
@@ -6282,11 +6270,7 @@ bool Field_datetimef::get_date(MYSQL_TIME *ltime, ulonglong fuzzydate)
{
longlong tmp= my_datetime_packed_from_binary(ptr, dec);
TIME_from_longlong_datetime_packed(ltime, tmp);
- if (!tmp)
- return fuzzydate & TIME_NO_ZERO_DATE;
- if (!ltime->month || !ltime->day)
- return fuzzydate & TIME_NO_ZERO_IN_DATE;
- return false;
+ return validate_for_get_date(tmp, ltime, fuzzydate);
}
diff --git a/sql/field.h b/sql/field.h
index dac10abd50a..b52e178b39e 100644
--- a/sql/field.h
+++ b/sql/field.h
@@ -1681,6 +1681,15 @@ protected:
int store_TIME_with_warning(MYSQL_TIME *ltime, const ErrConv *str,
int was_cut, int have_smth_to_conv);
virtual void store_TIME(MYSQL_TIME *ltime) = 0;
+ bool validate_for_get_date(bool not_zero_date, const MYSQL_TIME *ltime,
+ ulonglong fuzzydate)
+ {
+ if (!not_zero_date)
+ return fuzzydate & TIME_NO_ZERO_DATE;
+ if (!ltime->month || !ltime->day)
+ return fuzzydate & TIME_NO_ZERO_IN_DATE;
+ return false;
+ }
public:
Field_temporal_with_date(uchar *ptr_arg, uint32 len_arg,
uchar *null_ptr_arg, uchar null_bit_arg,