Commit 38767cad authored by ingo@mysql.com's avatar ingo@mysql.com

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

into mysql.com:/home/mydev/mysql-4.1-bug5318
parents 020731f7 ce8db2bf
...@@ -85,3 +85,26 @@ t1 CREATE TABLE "t1" ( ...@@ -85,3 +85,26 @@ t1 CREATE TABLE "t1" (
UNIQUE KEY "email" ("email") UNIQUE KEY "email" ("email")
) )
drop table t1; 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 ;
...@@ -28,3 +28,24 @@ set sql_mode="postgresql,oracle,mssql,db2,maxdb"; ...@@ -28,3 +28,24 @@ set sql_mode="postgresql,oracle,mssql,db2,maxdb";
select @@sql_mode; select @@sql_mode;
show create table t1; show create table t1;
drop 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 ;
...@@ -454,6 +454,7 @@ inline static uint int_token(const char *str,uint length) ...@@ -454,6 +454,7 @@ inline static uint int_token(const char *str,uint length)
int yylex(void *arg, void *yythd) int yylex(void *arg, void *yythd)
{ {
reg1 uchar c; reg1 uchar c;
bool space_ignored;
int tokval, result_state; int tokval, result_state;
uint length; uint length;
enum my_lex_states state; enum my_lex_states state;
...@@ -572,11 +573,12 @@ int yylex(void *arg, void *yythd) ...@@ -572,11 +573,12 @@ int yylex(void *arg, void *yythd)
result_state= result_state & 0x80 ? IDENT_QUOTED : IDENT; result_state= result_state & 0x80 ? IDENT_QUOTED : IDENT;
} }
length= (uint) (lex->ptr - lex->tok_start)-1; length= (uint) (lex->ptr - lex->tok_start)-1;
space_ignored= FALSE;
if (lex->ignore_space) 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; lex->next_state=MY_LEX_IDENT_SEP;
else else
{ // '(' must follow directly if function { // '(' must follow directly if function
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment