Loading mysql-test/r/sp-error.result +10 −2 Original line number Diff line number Diff line Loading @@ -634,10 +634,18 @@ flush tables; return 5; end| ERROR 0A000: FLUSH is not allowed in stored function or trigger create procedure bug9529_90123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123() create procedure bug9529_901234567890123456789012345678901234567890123456789012345() begin end| ERROR 42000: Identifier name 'bug9529_90123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890' is too long ERROR 42000: Identifier name 'bug9529_901234567890123456789012345678901234567890123456789012345' is too long drop procedure if exists bug17015_0123456789012345678901234567890123456789012345678901234| create procedure bug17015_0123456789012345678901234567890123456789012345678901234() begin end| show procedure status like 'bug17015%'| Db Name Type Definer Modified Created Security_type Comment test bug17015_0123456789012345678901234567890123456789012345678901234 PROCEDURE root@localhost 0000-00-00 00:00:00 0000-00-00 00:00:00 DEFINER drop procedure bug17015_0123456789012345678901234567890123456789012345678901234| drop procedure if exists bug10969| create procedure bug10969() begin Loading mysql-test/t/sp-error.test +16 −3 Original line number Diff line number Diff line Loading @@ -904,12 +904,26 @@ end| # # BUG#9529: Stored Procedures: No Warning on truncation of procedure name # during creation. # Note: When using utf8 for mysql.proc, this limit is much higher than before # BUG#17015: Routine name truncation not an error # When we started using utf8 for mysql.proc, this limit appeared # to be higher, but in reality the names were truncated. --error ER_TOO_LONG_IDENT create procedure bug9529_90123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123() create procedure bug9529_901234567890123456789012345678901234567890123456789012345() begin end| --disable_warnings drop procedure if exists bug17015_0123456789012345678901234567890123456789012345678901234| --enable_warnings # Check the upper limit, just to make sure. create procedure bug17015_0123456789012345678901234567890123456789012345678901234() begin end| --replace_column 5 '0000-00-00 00:00:00' 6 '0000-00-00 00:00:00' show procedure status like 'bug17015%'| drop procedure bug17015_0123456789012345678901234567890123456789012345678901234| # # BUG#10969: Stored procedures: crash if default() function Loading Loading @@ -1699,4 +1713,3 @@ create aggregate function bug16896() returns int return 1; #drop procedure if exists bugNNNN| #--enable_warnings #create procedure bugNNNN... sql/field.h +6 −0 Original line number Diff line number Diff line Loading @@ -320,6 +320,12 @@ class Field /* convert decimal to longlong with overflow check */ longlong convert_decimal2longlong(const my_decimal *val, bool unsigned_flag, int *err); /* The max. number of characters */ inline uint32 Field::char_length() const { return field_length / charset()->mbmaxlen; } friend bool reopen_table(THD *,struct st_table *,bool); friend int cre_myisam(my_string name, register TABLE *form, uint options, ulonglong auto_increment_value); Loading sql/sp.cc +5 −1 Original line number Diff line number Diff line Loading @@ -534,7 +534,11 @@ db_create_routine(THD *thd, int type, sp_head *sp) ret= SP_GET_FIELD_FAILED; goto done; } if (sp->m_name.length > table->field[MYSQL_PROC_FIELD_NAME]->field_length) if (system_charset_info->cset->numchars(system_charset_info, sp->m_name.str, sp->m_name.str+sp->m_name.length) > table->field[MYSQL_PROC_FIELD_NAME]->char_length()) { ret= SP_BAD_IDENTIFIER; goto done; Loading Loading
mysql-test/r/sp-error.result +10 −2 Original line number Diff line number Diff line Loading @@ -634,10 +634,18 @@ flush tables; return 5; end| ERROR 0A000: FLUSH is not allowed in stored function or trigger create procedure bug9529_90123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123() create procedure bug9529_901234567890123456789012345678901234567890123456789012345() begin end| ERROR 42000: Identifier name 'bug9529_90123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890' is too long ERROR 42000: Identifier name 'bug9529_901234567890123456789012345678901234567890123456789012345' is too long drop procedure if exists bug17015_0123456789012345678901234567890123456789012345678901234| create procedure bug17015_0123456789012345678901234567890123456789012345678901234() begin end| show procedure status like 'bug17015%'| Db Name Type Definer Modified Created Security_type Comment test bug17015_0123456789012345678901234567890123456789012345678901234 PROCEDURE root@localhost 0000-00-00 00:00:00 0000-00-00 00:00:00 DEFINER drop procedure bug17015_0123456789012345678901234567890123456789012345678901234| drop procedure if exists bug10969| create procedure bug10969() begin Loading
mysql-test/t/sp-error.test +16 −3 Original line number Diff line number Diff line Loading @@ -904,12 +904,26 @@ end| # # BUG#9529: Stored Procedures: No Warning on truncation of procedure name # during creation. # Note: When using utf8 for mysql.proc, this limit is much higher than before # BUG#17015: Routine name truncation not an error # When we started using utf8 for mysql.proc, this limit appeared # to be higher, but in reality the names were truncated. --error ER_TOO_LONG_IDENT create procedure bug9529_90123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123456789012345678901234567890123() create procedure bug9529_901234567890123456789012345678901234567890123456789012345() begin end| --disable_warnings drop procedure if exists bug17015_0123456789012345678901234567890123456789012345678901234| --enable_warnings # Check the upper limit, just to make sure. create procedure bug17015_0123456789012345678901234567890123456789012345678901234() begin end| --replace_column 5 '0000-00-00 00:00:00' 6 '0000-00-00 00:00:00' show procedure status like 'bug17015%'| drop procedure bug17015_0123456789012345678901234567890123456789012345678901234| # # BUG#10969: Stored procedures: crash if default() function Loading Loading @@ -1699,4 +1713,3 @@ create aggregate function bug16896() returns int return 1; #drop procedure if exists bugNNNN| #--enable_warnings #create procedure bugNNNN...
sql/field.h +6 −0 Original line number Diff line number Diff line Loading @@ -320,6 +320,12 @@ class Field /* convert decimal to longlong with overflow check */ longlong convert_decimal2longlong(const my_decimal *val, bool unsigned_flag, int *err); /* The max. number of characters */ inline uint32 Field::char_length() const { return field_length / charset()->mbmaxlen; } friend bool reopen_table(THD *,struct st_table *,bool); friend int cre_myisam(my_string name, register TABLE *form, uint options, ulonglong auto_increment_value); Loading
sql/sp.cc +5 −1 Original line number Diff line number Diff line Loading @@ -534,7 +534,11 @@ db_create_routine(THD *thd, int type, sp_head *sp) ret= SP_GET_FIELD_FAILED; goto done; } if (sp->m_name.length > table->field[MYSQL_PROC_FIELD_NAME]->field_length) if (system_charset_info->cset->numchars(system_charset_info, sp->m_name.str, sp->m_name.str+sp->m_name.length) > table->field[MYSQL_PROC_FIELD_NAME]->char_length()) { ret= SP_BAD_IDENTIFIER; goto done; Loading