1
0
mirror of https://github.com/MariaDB/server.git synced 2025-12-24 11:21:21 +03:00

fixed bug #1427 "enum allows duplicate values in the list"

include/mysqld_error.h:
  added ER_DUPLICATED_VALUE_IN_TYPE
mysql-test/r/create.result:
  added test for bug #1427 "enum allows duplicate values in the list"
mysql-test/t/create.test:
  added test for bug #1427 "enum allows duplicate values in the list"
sql/share/czech/errmsg.txt:
  added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/danish/errmsg.txt:
  added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/dutch/errmsg.txt:
  added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/english/errmsg.txt:
  added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/estonian/errmsg.txt:
  added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/french/errmsg.txt:
  added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/german/errmsg.txt:
  added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/greek/errmsg.txt:
  added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/hungarian/errmsg.txt:
  added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/italian/errmsg.txt:
  added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/japanese/errmsg.txt:
  added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/korean/errmsg.txt:
  added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/norwegian-ny/errmsg.txt:
  added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/norwegian/errmsg.txt:
  added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/polish/errmsg.txt:
  added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/portuguese/errmsg.txt:
  added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/romanian/errmsg.txt:
  added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/russian/errmsg.txt:
  added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/serbian/errmsg.txt:
  added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/slovak/errmsg.txt:
  added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/spanish/errmsg.txt:
  added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/swedish/errmsg.txt:
  added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/share/ukrainian/errmsg.txt:
  added message for ER_DUPLICATED_VALUE_IN_TYPE
sql/sql_table.cc:
  added function check_duplicates_in_interval and 
  calling it from mysql_create_table for enum and set
This commit is contained in:
unknown
2004-03-13 23:13:31 +04:00
parent 8b11f1c106
commit 5a67c11c18
27 changed files with 96 additions and 1 deletions

View File

@@ -342,6 +342,50 @@ static int sort_keys(KEY *a, KEY *b)
0);
}
/*
Check TYPELIB (set or enum) for duplicates
SYNOPSIS
check_duplicates_in_interval()
set_or_name "SET" or "ENUM" string for warning message
name name of the checked column
typelib list of values for the column
DESCRIPTION
This function prints an warning for each value in list
which has some duplicates on its right
RETURN VALUES
void
*/
void check_duplicates_in_interval(const char *set_or_name,
const char *name, TYPELIB *typelib)
{
unsigned int old_count= typelib->count;
const char **old_type_names= typelib->type_names;
if (typelib->count <= 1)
return;
old_count= typelib->count;
old_type_names= typelib->type_names;
const char **cur_value= typelib->type_names;
for ( ; typelib->count > 1; cur_value++)
{
typelib->type_names++;
typelib->count--;
if (find_type((char*)*cur_value,typelib,1))
{
push_warning_printf(current_thd,MYSQL_ERROR::WARN_LEVEL_ERROR,
ER_DUPLICATED_VALUE_IN_TYPE,
ER(ER_DUPLICATED_VALUE_IN_TYPE),
name,*cur_value,set_or_name);
}
}
typelib->count= old_count;
typelib->type_names= old_type_names;
}
/*
Create a table
@@ -546,6 +590,8 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name,
if (sql_field->charset->state & MY_CS_BINSORT)
sql_field->pack_flag|=FIELDFLAG_BINARY;
sql_field->unireg_check=Field::INTERVAL_FIELD;
check_duplicates_in_interval("ENUM",sql_field->field_name,
sql_field->interval);
break;
case FIELD_TYPE_SET:
sql_field->pack_flag=pack_length_to_packflag(sql_field->pack_length) |
@@ -553,6 +599,8 @@ int mysql_create_table(THD *thd,const char *db, const char *table_name,
if (sql_field->charset->state & MY_CS_BINSORT)
sql_field->pack_flag|=FIELDFLAG_BINARY;
sql_field->unireg_check=Field::BIT_FIELD;
check_duplicates_in_interval("SET",sql_field->field_name,
sql_field->interval);
break;
case FIELD_TYPE_DATE: // Rest of string types
case FIELD_TYPE_NEWDATE: