Browse Source

Fixed bug#10977: No warning issued if a column name is truncated

When an alias is set to a column leading spaces are removed from the alias.
But when this is done on aliases set by user this can lead to confusion.

Now Item::set_name() method issues the warning if leading spaces were removed
from an alias set by user.

New warning message is added.


mysql-test/t/select.test:
  Added test case for bug#10977:No warning issued if a column name is truncated.
mysql-test/r/select.result:
  Added test case for bug#10977:No warning issued if a column name is truncated.
sql/sql_yacc.yy:
  Fixed bug#10977: No warning issued if a column name is truncated
  The is_autogenerated_name flag is set before set_name() method call.
sql/item.cc:
  Fixed bug#10977: No warning issued if a column name is truncated
  Now Item::set_name() method issues the warning if leading spaces were removed
  from an alias set by user.
pull/374/head
unknown 20 years ago
parent
commit
1c96f2d73e
  1. 5
      mysql-test/r/select.result
  2. 5
      mysql-test/t/select.test
  3. 6
      sql/item.cc
  4. 4
      sql/sql_yacc.yy

5
mysql-test/r/select.result

@ -3398,3 +3398,8 @@ drop table t1,t2;
SELECT 0.9888889889 * 1.011111411911;
0.9888889889 * 1.011111411911
0.9998769417899202067879
select 1 as ' a ';
a
1
Warnings:
Warning 1466 Leading spaces are removed from name ' a '

5
mysql-test/t/select.test

@ -2906,3 +2906,8 @@ drop table t1,t2;
# Bug #20569: Garbage in DECIMAL results from some mathematical functions
#
SELECT 0.9888889889 * 1.011111411911;
#
# Bug #10977: No warning issued if a column name is truncated
#
select 1 as ' a ';

6
sql/item.cc

@ -573,6 +573,7 @@ void Item::set_name(const char *str, uint length, CHARSET_INFO *cs)
}
if (cs->ctype)
{
uint orig_len= length;
/*
This will probably need a better implementation in the future:
a function in CHARSET_INFO structure.
@ -582,6 +583,11 @@ void Item::set_name(const char *str, uint length, CHARSET_INFO *cs)
length--;
str++;
}
if (orig_len != length && !is_autogenerated_name)
push_warning_printf(current_thd, MYSQL_ERROR::WARN_LEVEL_WARN,
ER_REMOVED_SPACES, ER(ER_REMOVED_SPACES),
str + length - orig_len);
}
if (!my_charset_same(cs, system_charset_info))
{

4
sql/sql_yacc.yy

@ -4060,8 +4060,8 @@ select_item:
YYABORT;
if ($4.str)
{
$2->set_name($4.str, $4.length, system_charset_info);
$2->is_autogenerated_name= FALSE;
$2->set_name($4.str, $4.length, system_charset_info);
}
else if (!$2->name) {
char *str = $1;
@ -4936,8 +4936,8 @@ udf_expr:
{
if ($4.str)
{
$2->set_name($4.str, $4.length, system_charset_info);
$2->is_autogenerated_name= FALSE;
$2->set_name($4.str, $4.length, system_charset_info);
}
else
$2->set_name($1, (uint) ($3 - $1), YYTHD->charset());

Loading…
Cancel
Save