Commit b2f30816 authored by unknown's avatar unknown
Browse files

Many files:

  After merge fix


mysql-test/r/func_time.result:
  After merge fix
mysql-test/r/func_concat.result:
  After merge fix
mysql-test/r/cast.result:
  After merge fix
sql/item_cmpfunc.h:
  After merge fix
sql/item_cmpfunc.cc:
  After merge fix
sql/field.cc:
  After merge fix
parent 9936533b
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -254,7 +254,7 @@ cast("2001-1-1" as datetime) = "2001-01-01 00:00:00"
1
select cast("1:2:3" as TIME) = "1:02:03";
cast("1:2:3" as TIME) = "1:02:03"
1
0
select cast(NULL as DATE);
cast(NULL as DATE)
NULL
+7 −7
Original line number Diff line number Diff line
@@ -68,13 +68,6 @@ select 'a' union select concat('a', -0.0000);
a
a
a0.0000
create table t1(f1 varchar(6)) charset=utf8;
insert into t1 values ("123456");
select concat(f1, 2) a from t1 union select 'x' a from t1;
a
1234562
x
drop table t1;
select concat((select x from (select 'a' as x) as t1 ),
(select y from (select 'b' as y) as t2 )) from (select 1 union select 2 )
as t3;
@@ -82,3 +75,10 @@ concat((select x from (select 'a' as x) as t1 ),
(select y from (select 'b' as y) as t2 ))
ab
ab
create table t1(f1 varchar(6)) charset=utf8;
insert into t1 values ("123456");
select concat(f1, 2) a from t1 union select 'x' a from t1;
a
1234562
x
drop table t1;
+3 −1
Original line number Diff line number Diff line
@@ -784,7 +784,9 @@ f1
select f1 from t1 where "2006-1-1" between f1 and 'zzz';
f1
Warnings:
Warning	1292	Truncated incorrect date value: 'zzz'
Warning	1292	Incorrect date value: 'zzz' for column 'f1' at row 1
Warning	1292	Truncated incorrect INTEGER value: 'zzz'
Warning	1292	Truncated incorrect INTEGER value: 'zzz'
select f1 from t1 where makedate(2006,1) between date(f1) and date(f3);
f1
2006-01-01
+32 −50
Original line number Diff line number Diff line
@@ -4530,11 +4530,11 @@ int Field_timestamp::store(const char *from,uint len,CHARSET_INFO *cs)
  int error;
  bool have_smth_to_conv;
  my_bool in_dst_time_gap;
  THD *thd= table->in_use;
  THD *thd= table ? table->in_use : current_thd;

  /* We don't want to store invalid or fuzzy datetime values in TIMESTAMP */
  have_smth_to_conv= (str_to_datetime(from, len, &l_time,
                                      (table->in_use->variables.sql_mode &
                                      (thd->variables.sql_mode &
                                       MODE_NO_ZERO_DATE) |
                                      MODE_NO_ZERO_IN_DATE, &error) >
                      MYSQL_TIMESTAMP_ERROR);
@@ -4599,7 +4599,7 @@ int Field_timestamp::store(longlong nr, bool unsigned_val)
  my_time_t timestamp= 0;
  int error;
  my_bool in_dst_time_gap;
  THD *thd= table->in_use;
  THD *thd= table ? table->in_use : current_thd;

  /* We don't want to store invalid or fuzzy datetime values in TIMESTAMP */
  longlong tmp= number_to_datetime(nr, &l_time, (thd->variables.sql_mode &
@@ -4653,7 +4653,7 @@ longlong Field_timestamp::val_int(void)
{
  uint32 temp;
  TIME time_tmp;
  THD  *thd= table->in_use;
  THD  *thd= table ? table->in_use : current_thd;

#ifdef WORDS_BIGENDIAN
  if (table->s->db_low_byte_first)
@@ -4678,7 +4678,7 @@ String *Field_timestamp::val_str(String *val_buffer, String *val_ptr)
{
  uint32 temp, temp2;
  TIME time_tmp;
  THD *thd= table->in_use;
  THD *thd= table ? table->in_use : current_thd;
  char *to;

  val_buffer->alloc(field_length+1);
@@ -4749,7 +4749,7 @@ String *Field_timestamp::val_str(String *val_buffer, String *val_ptr)
bool Field_timestamp::get_date(TIME *ltime, uint fuzzydate)
{
  long temp;
  THD *thd= table->in_use;
  THD *thd= table ? table->in_use : current_thd;
#ifdef WORDS_BIGENDIAN
  if (table->s->db_low_byte_first)
    temp=uint4korr(ptr);
@@ -4832,7 +4832,8 @@ void Field_timestamp::sql_type(String &res) const

void Field_timestamp::set_time()
{
  long tmp= (long) table->in_use->query_start();
  THD *thd= table ? table->in_use : current_thd;
  long tmp= (long) thd->query_start();
  set_notnull();
#ifdef WORDS_BIGENDIAN
  if (table->s->db_low_byte_first)
@@ -5024,12 +5025,13 @@ String *Field_time::val_str(String *val_buffer,
bool Field_time::get_date(TIME *ltime, uint fuzzydate)
{
  long tmp;
  THD *thd= table ? table->in_use : current_thd;
  if (!(fuzzydate & TIME_FUZZY_DATE))
  {
    push_warning_printf(table->in_use, MYSQL_ERROR::WARN_LEVEL_WARN,
    push_warning_printf(thd, MYSQL_ERROR::WARN_LEVEL_WARN,
                        ER_WARN_DATA_OUT_OF_RANGE,
                        ER(ER_WARN_DATA_OUT_OF_RANGE), field_name,
                        table->in_use->row_count);
                        thd->row_count);
    return 1;
  }
  tmp=(long) sint3korr(ptr);
@@ -5217,9 +5219,10 @@ int Field_date::store(const char *from, uint len,CHARSET_INFO *cs)
  TIME l_time;
  uint32 tmp;
  int error;
  THD *thd= table ? table->in_use : current_thd;

  if (str_to_datetime(from, len, &l_time, TIME_FUZZY_DATE |
                      (table->in_use->variables.sql_mode &
                      (thd->variables.sql_mode &
                       (MODE_NO_ZERO_IN_DATE | MODE_NO_ZERO_DATE |
                        MODE_INVALID_DATES)),
                      &error) <= MYSQL_TIMESTAMP_ERROR)
@@ -5272,9 +5275,10 @@ int Field_date::store(longlong nr, bool unsigned_val)
  TIME not_used;
  int error;
  longlong initial_nr= nr;
  THD *thd= table ? table->in_use : current_thd;

  nr= number_to_datetime(nr, &not_used, (TIME_FUZZY_DATE |
                                         (table->in_use->variables.sql_mode &
                                         (thd->variables.sql_mode &
                                          (MODE_NO_ZERO_IN_DATE |
                                           MODE_NO_ZERO_DATE |
                                           MODE_INVALID_DATES))), &error);
@@ -5420,9 +5424,10 @@ int Field_newdate::store(const char *from,uint len,CHARSET_INFO *cs)
  TIME l_time;
  long tmp;
  int error;
  THD *thd= table ? table->in_use : current_thd;
  if (str_to_datetime(from, len, &l_time,
                      (TIME_FUZZY_DATE |
                       (table->in_use->variables.sql_mode &
                       (thd->variables.sql_mode &
                        (MODE_NO_ZERO_IN_DATE | MODE_NO_ZERO_DATE |
                         MODE_INVALID_DATES))),
                      &error) <= MYSQL_TIMESTAMP_ERROR)
@@ -5460,9 +5465,10 @@ int Field_newdate::store(longlong nr, bool unsigned_val)
  TIME l_time;
  longlong tmp;
  int error;
  THD *thd= table ? table->in_use : current_thd;
  if (number_to_datetime(nr, &l_time,
                         (TIME_FUZZY_DATE |
                          (table->in_use->variables.sql_mode &
                          (thd->variables.sql_mode &
                           (MODE_NO_ZERO_IN_DATE | MODE_NO_ZERO_DATE |
                            MODE_INVALID_DATES))),
                         &error) == LL(-1))
@@ -5605,10 +5611,11 @@ int Field_datetime::store(const char *from,uint len,CHARSET_INFO *cs)
  int error;
  ulonglong tmp= 0;
  enum enum_mysql_timestamp_type func_res;
  THD *thd= table ? table->in_use : current_thd;

  func_res= str_to_datetime(from, len, &time_tmp,
                            (TIME_FUZZY_DATE |
                             (table->in_use->variables.sql_mode &
                             (thd->variables.sql_mode &
                              (MODE_NO_ZERO_IN_DATE | MODE_NO_ZERO_DATE |
                               MODE_INVALID_DATES))),
                            &error);
@@ -5655,9 +5662,10 @@ int Field_datetime::store(longlong nr, bool unsigned_val)
  TIME not_used;
  int error;
  longlong initial_nr= nr;
  THD *thd= table ? table->in_use : current_thd;

  nr= number_to_datetime(nr, &not_used, (TIME_FUZZY_DATE |
                                         (table->in_use->variables.sql_mode &
                                         (thd->variables.sql_mode &
                                          (MODE_NO_ZERO_IN_DATE |
                                           MODE_NO_ZERO_DATE |
                                           MODE_INVALID_DATES))), &error);
@@ -9076,10 +9084,10 @@ Field::set_datetime_warning(MYSQL_ERROR::enum_warning_level level, uint code,
                            const char *str, uint str_length, 
                            timestamp_type ts_type, int cuted_increment)
{
  if (table->in_use->really_abort_on_warning() ||
  THD *thd= table ? table->in_use : current_thd;
  if (thd->really_abort_on_warning() ||
      set_warning(level, code, cuted_increment))
    make_truncated_value_warning(table ? table->in_use : current_thd,
                                 str, str_length, ts_type,
    make_truncated_value_warning(thd, str, str_length, ts_type,
                                 field_name);
}

@@ -9106,13 +9114,13 @@ Field::set_datetime_warning(MYSQL_ERROR::enum_warning_level level, uint code,
                            longlong nr, timestamp_type ts_type,
                            int cuted_increment)
{
  if (table->in_use->really_abort_on_warning() ||
  THD *thd= table ? table->in_use : current_thd;
  if (thd->really_abort_on_warning() ||
      set_warning(level, code, cuted_increment))
  {
    char str_nr[22];
    char *str_end= longlong10_to_str(nr, str_nr, -10);
    make_truncated_value_warning(table ? table->in_use : current_thd,
                                 str_nr, (uint) (str_end - str_nr), 
    make_truncated_value_warning(thd, str_nr, (uint) (str_end - str_nr), 
                                 ts_type, field_name);
  }
}
@@ -9138,41 +9146,15 @@ void
Field::set_datetime_warning(MYSQL_ERROR::enum_warning_level level, uint code, 
                            double nr, timestamp_type ts_type)
{
  if (table->in_use->really_abort_on_warning() ||
  THD *thd= table ? table->in_use : current_thd;
  if (thd->really_abort_on_warning() ||
      set_warning(level, code, 1))
  {
    /* DBL_DIG is enough to print '-[digits].E+###' */
    char str_nr[DBL_DIG + 8];
    uint str_len= my_sprintf(str_nr, (str_nr, "%g", nr));
    make_truncated_value_warning(table ? table->in_use : current_thd,
                                 str_nr, str_len, ts_type,
    make_truncated_value_warning(thd, str_nr, str_len, ts_type,
                                 field_name);
  }
}
/*
  maximum possible display length for blob

  SYNOPSIS
    Field_blob::max_length()

  RETURN
    length
*/
uint32 Field_blob::max_length()
{
  switch (packlength)
  {
  case 1:
    return 255 * field_charset->mbmaxlen;
  case 2:
    return 65535 * field_charset->mbmaxlen;
  case 3:
    return 16777215 * field_charset->mbmaxlen;
  case 4:
    return (uint32) 4294967295U;
  default:
    DBUG_ASSERT(0); // we should never go here
    return 0;
  }
}
+4 −4
Original line number Diff line number Diff line
@@ -366,18 +366,18 @@ static bool convert_constant_item(THD *thd, Field *field, Item **item)
  if (!(*item)->with_subselect && (*item)->const_item())
  {
    /* For comparison purposes allow invalid dates like 2000-01-32 */
    ulong orig_sql_mode= field->table->in_use->variables.sql_mode;
    field->table->in_use->variables.sql_mode|= MODE_INVALID_DATES;
    ulong orig_sql_mode= thd->variables.sql_mode;
    thd->variables.sql_mode|= MODE_INVALID_DATES;
    if (!(*item)->save_in_field(field, 1) && !((*item)->null_value))
    {
      Item *tmp=new Item_int_with_ref(field->val_int(), *item,
                                      test(field->flags & UNSIGNED_FLAG));
      field->table->in_use->variables.sql_mode= orig_sql_mode;
      thd->variables.sql_mode= orig_sql_mode;
      if (tmp)
        thd->change_item_tree(item, tmp);
      return 1;					// Item was replaced
    }
    field->table->in_use->variables.sql_mode= orig_sql_mode;
    thd->variables.sql_mode= orig_sql_mode;
  }
  return 0;
}
Loading