Commit a109df80 authored by gkodinov/kgeorge@magare.gmz's avatar gkodinov/kgeorge@magare.gmz
Browse files

Merge gkodinov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt

into  magare.gmz:/home/kgeorge/mysql/autopush/B28605-5.0-opt
parents a6ebd634 268fdf5d
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -84,4 +84,15 @@ CAST('2006-09-26' AS DATE) + INTERVAL 1 YEAR
SELECT CAST('2006-09-26' AS DATE) + INTERVAL 1 WEEK;
CAST('2006-09-26' AS DATE) + INTERVAL 1 WEEK
2006-10-03
create table t1 (a int, b varchar(10));
insert into t1 values (1, '2001-01-01'),(2, '2002-02-02');
select '2007-01-01' + interval a day from t1;
'2007-01-01' + interval a day
2007-01-02
2007-01-03
select b + interval a day from t1;
b + interval a day
2001-01-02
2002-02-04
drop table t1;
End of 5.0 tests
+10 −0
Original line number Diff line number Diff line
@@ -77,4 +77,14 @@ SELECT CAST('2006-09-26' AS DATE) + INTERVAL 1 MONTH;
SELECT CAST('2006-09-26' AS DATE) + INTERVAL 1 YEAR;
SELECT CAST('2006-09-26' AS DATE) + INTERVAL 1 WEEK;

#
# Bug#28450: The Item_date_add_interval in select list may fail the field 
#            type assertion.
#
create table t1 (a int, b varchar(10));
insert into t1 values (1, '2001-01-01'),(2, '2002-02-02'); 
select '2007-01-01' + interval a day from t1;
select b + interval a day from t1;
drop table t1;

--echo End of 5.0 tests
+6 −1
Original line number Diff line number Diff line
@@ -766,7 +766,12 @@ get_datetime_value(THD *thd, Item ***item_arg, Item **cache_arg,
  {
    value= item->val_int();
    *is_null= item->null_value;
    if (item->field_type() == MYSQL_TYPE_DATE)
    /*
      Item_date_add_interval may return MYSQL_TYPE_STRING as the result
      field type. To detect that the DATE value has been returned we
      compare it with 1000000L - any DATE value should be less than it.
    */
    if (item->field_type() == MYSQL_TYPE_DATE || value < 100000000L)
      value*= 1000000L;
  }
  else
+0 −21
Original line number Diff line number Diff line
@@ -2180,27 +2180,6 @@ bool Item_date_add_interval::get_date(MYSQL_TIME *ltime, uint fuzzy_date)
  default:
    goto null_date;
  }

  /* Adjust cached_field_type according to the detected type. */
  if (cached_field_type == MYSQL_TYPE_STRING)
  {
    switch (ltime->time_type)
    {
    case MYSQL_TIMESTAMP_DATE:
      cached_field_type= MYSQL_TYPE_DATE;
      break;
    case MYSQL_TIMESTAMP_DATETIME:
      cached_field_type= MYSQL_TYPE_DATETIME;
      break;
    case MYSQL_TIMESTAMP_TIME:
      cached_field_type= MYSQL_TYPE_TIME;
      break;
    default:
      /* Shouldn't get here. */
      DBUG_ASSERT(0);
      break;
    }
  }
  return 0;					// Ok

invalid_date: