diff options
author | Alexander Barkov <bar@mnogosearch.org> | 2013-11-21 13:09:08 +0400 |
---|---|---|
committer | Alexander Barkov <bar@mnogosearch.org> | 2013-11-21 13:09:08 +0400 |
commit | c7355b19828c37d8efb9f1d4b5010544aa110bd4 (patch) | |
tree | b74e960c3447f7c3c876c1262e5703c7dcf75b4f /sql/item.cc | |
parent | 160236f880e92d2872d95ce72aab144f08456bcc (diff) | |
parent | 2394fa67d4908f62ef14f3ca90269fb32806d193 (diff) | |
download | mariadb-git-c7355b19828c37d8efb9f1d4b5010544aa110bd4.tar.gz |
Merge 5.3->5.5
Diffstat (limited to 'sql/item.cc')
-rw-r--r-- | sql/item.cc | 69 |
1 files changed, 69 insertions, 0 deletions
diff --git a/sql/item.cc b/sql/item.cc index 2bf149c58ba..bfe065ceced 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -396,6 +396,27 @@ my_decimal *Item::val_decimal_from_time(my_decimal *decimal_value) } +longlong Item::val_int_from_date() +{ + DBUG_ASSERT(fixed == 1); + MYSQL_TIME ltime; + if (get_date(<ime, 0)) + return 0; + longlong v= TIME_to_ulonglong(<ime); + return ltime.neg ? -v : v; +} + + +double Item::val_real_from_date() +{ + DBUG_ASSERT(fixed == 1); + MYSQL_TIME ltime; + if (get_date(<ime, 0)) + return 0; + return TIME_to_double(<ime); +} + + double Item::val_real_from_decimal() { /* Note that fix_fields may not be called for Item_avg_field items */ @@ -8831,6 +8852,18 @@ Item_cache_temporal::Item_cache_temporal(enum_field_types field_type_arg): } +longlong Item_cache_temporal::val_temporal_packed() +{ + DBUG_ASSERT(fixed == 1); + if ((!value_cached && !cache_value()) || null_value) + { + null_value= TRUE; + return 0; + } + return value; +} + + String *Item_cache_temporal::val_str(String *str) { DBUG_ASSERT(fixed == 1); @@ -8843,6 +8876,42 @@ String *Item_cache_temporal::val_str(String *str) } +my_decimal *Item_cache_temporal::val_decimal(my_decimal *decimal_value) +{ + DBUG_ASSERT(fixed == 1); + if ((!value_cached && !cache_value()) || null_value) + { + null_value= true; + return NULL; + } + return val_decimal_from_date(decimal_value); +} + + +longlong Item_cache_temporal::val_int() +{ + DBUG_ASSERT(fixed == 1); + if ((!value_cached && !cache_value()) || null_value) + { + null_value= true; + return 0; + } + return val_int_from_date(); +} + + +double Item_cache_temporal::val_real() +{ + DBUG_ASSERT(fixed == 1); + if ((!value_cached && !cache_value()) || null_value) + { + null_value= true; + return 0; + } + return val_real_from_date(); +} + + bool Item_cache_temporal::cache_value() { if (!example) |