Commit dbd8e761 authored by unknown's avatar unknown
Browse files

Merge mysql.com:/home/mydev/mysql-4.1

into mysql.com:/home/mydev/mysql-4.1-bug5318

parents 37125a77 b4e557fd
Loading
Loading
Loading
Loading
+23 −0
Original line number Diff line number Diff line
@@ -85,3 +85,26 @@ t1 CREATE TABLE "t1" (
  UNIQUE KEY "email" ("email")
)
drop table t1;
set session sql_mode = '';
create table t1 ( min_num   dec(6,6)     default .000001);
show create table t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `min_num` decimal(7,6) default '0.000001'
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1 ;
set session sql_mode = 'IGNORE_SPACE';
create table t1 ( min_num   dec(6,6)     default 0.000001);
show create table t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `min_num` decimal(7,6) default '0.000001'
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1 ;
create table t1 ( min_num   dec(6,6)     default .000001);
show create table t1;
Table	Create Table
t1	CREATE TABLE `t1` (
  `min_num` decimal(7,6) default '0.000001'
) ENGINE=MyISAM DEFAULT CHARSET=latin1
drop table t1 ;
+21 −0
Original line number Diff line number Diff line
@@ -28,3 +28,24 @@ set sql_mode="postgresql,oracle,mssql,db2,maxdb";
select @@sql_mode;
show create table t1;
drop table t1;

#
# BUG#5318 - failure: 'IGNORE_SPACE' affects numeric values after DEFAULT
#
# Force the usage of the default
set session sql_mode = '';
# statement for comparison, value starts with '.'
create table t1 ( min_num   dec(6,6)     default .000001);
show create table t1;
drop table t1 ;
#
set session sql_mode = 'IGNORE_SPACE';
# statement for comparison, value starts with '0'
create table t1 ( min_num   dec(6,6)     default 0.000001);
show create table t1;
drop table t1 ;
# This statement fails, value starts with '.'
create table t1 ( min_num   dec(6,6)     default .000001);
show create table t1;
drop table t1 ;
+4 −2
Original line number Diff line number Diff line
@@ -454,6 +454,7 @@ inline static uint int_token(const char *str,uint length)
int yylex(void *arg, void *yythd)
{
  reg1	uchar c;
  bool  space_ignored;
  int	tokval, result_state;
  uint length;
  enum my_lex_states state;
@@ -572,11 +573,12 @@ int yylex(void *arg, void *yythd)
        result_state= result_state & 0x80 ? IDENT_QUOTED : IDENT;
      }
      length= (uint) (lex->ptr - lex->tok_start)-1;
      space_ignored= FALSE;
      if (lex->ignore_space)
      {
	for (; state_map[c] == MY_LEX_SKIP ; c= yyGet());
        for (; state_map[c] == MY_LEX_SKIP ; space_ignored= TRUE, c= yyGet());
      }
      if (c == '.' && ident_map[yyPeek()])
      if (! space_ignored && c == '.' && ident_map[yyPeek()])
	lex->next_state=MY_LEX_IDENT_SEP;
      else
      {					// '(' must follow directly if function