Loading mysql-test/r/sql_mode.result +23 −0 Original line number Diff line number Diff line Loading @@ -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 ; mysql-test/t/sql_mode.test +21 −0 Original line number Diff line number Diff line Loading @@ -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 ; sql/sql_lex.cc +4 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading Loading
mysql-test/r/sql_mode.result +23 −0 Original line number Diff line number Diff line Loading @@ -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 ;
mysql-test/t/sql_mode.test +21 −0 Original line number Diff line number Diff line Loading @@ -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 ;
sql/sql_lex.cc +4 −2 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 Loading