mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Merge sgluhov@bk-internal.mysql.com:/home/bk/mysql-5.0-opt
into mysql.com:/home/gluh/MySQL/Bugs/5.0.27069 sql/sql_table.cc: Auto merged
This commit is contained in:
@ -1386,4 +1386,9 @@ ERROR 01000: Data truncated for column 'a' at row 1
|
|||||||
insert into t1 values ('2E3x');
|
insert into t1 values ('2E3x');
|
||||||
ERROR 01000: Data truncated for column 'a' at row 1
|
ERROR 01000: Data truncated for column 'a' at row 1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
set sql_mode='traditional';
|
||||||
|
create table t1 (f1 set('a','a'));
|
||||||
|
ERROR HY000: Column 'f1' has duplicated value 'a' in SET
|
||||||
|
create table t1 (f1 enum('a','a'));
|
||||||
|
ERROR HY000: Column 'f1' has duplicated value 'a' in ENUM
|
||||||
End of 5.0 tests
|
End of 5.0 tests
|
||||||
|
@ -1249,4 +1249,13 @@ insert into t1 values ('2000a');
|
|||||||
insert into t1 values ('2E3x');
|
insert into t1 values ('2E3x');
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Bug#27069 set with identical elements are created
|
||||||
|
#
|
||||||
|
set sql_mode='traditional';
|
||||||
|
--error 1291
|
||||||
|
create table t1 (f1 set('a','a'));
|
||||||
|
--error 1291
|
||||||
|
create table t1 (f1 enum('a','a'));
|
||||||
|
|
||||||
--echo End of 5.0 tests
|
--echo End of 5.0 tests
|
||||||
|
@ -414,10 +414,11 @@ static int sort_keys(KEY *a, KEY *b)
|
|||||||
which has some duplicates on its right
|
which has some duplicates on its right
|
||||||
|
|
||||||
RETURN VALUES
|
RETURN VALUES
|
||||||
void
|
0 ok
|
||||||
|
1 Error
|
||||||
*/
|
*/
|
||||||
|
|
||||||
void check_duplicates_in_interval(const char *set_or_name,
|
bool check_duplicates_in_interval(const char *set_or_name,
|
||||||
const char *name, TYPELIB *typelib,
|
const char *name, TYPELIB *typelib,
|
||||||
CHARSET_INFO *cs, unsigned int *dup_val_count)
|
CHARSET_INFO *cs, unsigned int *dup_val_count)
|
||||||
{
|
{
|
||||||
@ -433,6 +434,13 @@ void check_duplicates_in_interval(const char *set_or_name,
|
|||||||
tmp.count--;
|
tmp.count--;
|
||||||
if (find_type2(&tmp, (const char*)*cur_value, *cur_length, cs))
|
if (find_type2(&tmp, (const char*)*cur_value, *cur_length, cs))
|
||||||
{
|
{
|
||||||
|
if ((current_thd->variables.sql_mode &
|
||||||
|
(MODE_STRICT_TRANS_TABLES | MODE_STRICT_ALL_TABLES)))
|
||||||
|
{
|
||||||
|
my_error(ER_DUPLICATED_VALUE_IN_TYPE, MYF(0),
|
||||||
|
name,*cur_value,set_or_name);
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
push_warning_printf(current_thd,MYSQL_ERROR::WARN_LEVEL_NOTE,
|
push_warning_printf(current_thd,MYSQL_ERROR::WARN_LEVEL_NOTE,
|
||||||
ER_DUPLICATED_VALUE_IN_TYPE,
|
ER_DUPLICATED_VALUE_IN_TYPE,
|
||||||
ER(ER_DUPLICATED_VALUE_IN_TYPE),
|
ER(ER_DUPLICATED_VALUE_IN_TYPE),
|
||||||
@ -440,6 +448,7 @@ void check_duplicates_in_interval(const char *set_or_name,
|
|||||||
(*dup_val_count)++;
|
(*dup_val_count)++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -575,9 +584,10 @@ int prepare_create_field(create_field *sql_field,
|
|||||||
if (sql_field->charset->state & MY_CS_BINSORT)
|
if (sql_field->charset->state & MY_CS_BINSORT)
|
||||||
sql_field->pack_flag|=FIELDFLAG_BINARY;
|
sql_field->pack_flag|=FIELDFLAG_BINARY;
|
||||||
sql_field->unireg_check=Field::INTERVAL_FIELD;
|
sql_field->unireg_check=Field::INTERVAL_FIELD;
|
||||||
check_duplicates_in_interval("ENUM",sql_field->field_name,
|
if (check_duplicates_in_interval("ENUM",sql_field->field_name,
|
||||||
sql_field->interval,
|
sql_field->interval,
|
||||||
sql_field->charset, &dup_val_count);
|
sql_field->charset, &dup_val_count))
|
||||||
|
DBUG_RETURN(1);
|
||||||
break;
|
break;
|
||||||
case FIELD_TYPE_SET:
|
case FIELD_TYPE_SET:
|
||||||
sql_field->pack_flag=pack_length_to_packflag(sql_field->pack_length) |
|
sql_field->pack_flag=pack_length_to_packflag(sql_field->pack_length) |
|
||||||
@ -585,9 +595,10 @@ int prepare_create_field(create_field *sql_field,
|
|||||||
if (sql_field->charset->state & MY_CS_BINSORT)
|
if (sql_field->charset->state & MY_CS_BINSORT)
|
||||||
sql_field->pack_flag|=FIELDFLAG_BINARY;
|
sql_field->pack_flag|=FIELDFLAG_BINARY;
|
||||||
sql_field->unireg_check=Field::BIT_FIELD;
|
sql_field->unireg_check=Field::BIT_FIELD;
|
||||||
check_duplicates_in_interval("SET",sql_field->field_name,
|
if (check_duplicates_in_interval("SET",sql_field->field_name,
|
||||||
sql_field->interval,
|
sql_field->interval,
|
||||||
sql_field->charset, &dup_val_count);
|
sql_field->charset, &dup_val_count))
|
||||||
|
DBUG_RETURN(1);
|
||||||
/* Check that count of unique members is not more then 64 */
|
/* Check that count of unique members is not more then 64 */
|
||||||
if (sql_field->interval->count - dup_val_count > sizeof(longlong)*8)
|
if (sql_field->interval->count - dup_val_count > sizeof(longlong)*8)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user