mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
Merge bk@192.168.21.1:mysql-5.1-new
into mysql.com:/home/hf/work/mysql-5.1.14573
This commit is contained in:
@@ -418,3 +418,9 @@ a val
|
|||||||
2 1
|
2 1
|
||||||
3 1
|
3 1
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
CREATE TABLE t1 (t1 INT(10) PRIMARY KEY, t2 INT(10));
|
||||||
|
INSERT INTO t1 VALUES(0, 0);
|
||||||
|
INSERT INTO t1 VALUES(1, 1);
|
||||||
|
ALTER TABLE t1 CHANGE t1 t1 INT(10) auto_increment;
|
||||||
|
ERROR 23000: ALTER TABLE causes auto_increment resequencing, causing Duplicate entry '1' for key 'PRIMARY'
|
||||||
|
DROP TABLE t1;
|
||||||
|
@@ -275,3 +275,14 @@ update t1 set a=2 where a=1;
|
|||||||
insert into t1 (val) values (1);
|
insert into t1 (val) values (1);
|
||||||
select * from t1;
|
select * from t1;
|
||||||
drop table t1;
|
drop table t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# Test key duplications with auto-increment in ALTER TABLE
|
||||||
|
# bug #14573
|
||||||
|
#
|
||||||
|
CREATE TABLE t1 (t1 INT(10) PRIMARY KEY, t2 INT(10));
|
||||||
|
INSERT INTO t1 VALUES(0, 0);
|
||||||
|
INSERT INTO t1 VALUES(1, 1);
|
||||||
|
--error ER_DUP_ENTRY
|
||||||
|
ALTER TABLE t1 CHANGE t1 t1 INT(10) auto_increment;
|
||||||
|
DROP TABLE t1;
|
||||||
|
@@ -1818,6 +1818,24 @@ ulonglong handler::get_auto_increment()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void handler::print_keydupp_error(uint key_nr, const char *msg)
|
||||||
|
{
|
||||||
|
/* Write the duplicated key in the error message */
|
||||||
|
char key[MAX_KEY_LENGTH];
|
||||||
|
String str(key,sizeof(key),system_charset_info);
|
||||||
|
/* Table is opened and defined at this point */
|
||||||
|
key_unpack(&str,table,(uint) key_nr);
|
||||||
|
uint max_length=MYSQL_ERRMSG_SIZE-(uint) strlen(msg);
|
||||||
|
if (str.length() >= max_length)
|
||||||
|
{
|
||||||
|
str.length(max_length-4);
|
||||||
|
str.append(STRING_WITH_LEN("..."));
|
||||||
|
}
|
||||||
|
my_printf_error(ER_DUP_ENTRY, msg,
|
||||||
|
MYF(0), str.c_ptr(), table->key_info[key_nr].name);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Print error that we got from handler function
|
Print error that we got from handler function
|
||||||
|
|
||||||
@@ -1857,18 +1875,7 @@ void handler::print_error(int error, myf errflag)
|
|||||||
uint key_nr=get_dup_key(error);
|
uint key_nr=get_dup_key(error);
|
||||||
if ((int) key_nr >= 0)
|
if ((int) key_nr >= 0)
|
||||||
{
|
{
|
||||||
/* Write the duplicated key in the error message */
|
print_keydupp_error(key_nr, ER(ER_DUP_ENTRY));
|
||||||
char key[MAX_KEY_LENGTH];
|
|
||||||
String str(key,sizeof(key),system_charset_info);
|
|
||||||
/* Table is opened and defined at this point */
|
|
||||||
key_unpack(&str,table,(uint) key_nr);
|
|
||||||
uint max_length=MYSQL_ERRMSG_SIZE-(uint) strlen(ER(ER_DUP_ENTRY));
|
|
||||||
if (str.length() >= max_length)
|
|
||||||
{
|
|
||||||
str.length(max_length-4);
|
|
||||||
str.append(STRING_WITH_LEN("..."));
|
|
||||||
}
|
|
||||||
my_error(ER_DUP_ENTRY, MYF(0), str.c_ptr(), table->key_info[key_nr].name);
|
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
textno=ER_DUP_KEY;
|
textno=ER_DUP_KEY;
|
||||||
|
@@ -865,6 +865,7 @@ public:
|
|||||||
virtual int ha_initialise();
|
virtual int ha_initialise();
|
||||||
int ha_open(TABLE *table, const char *name, int mode, int test_if_locked);
|
int ha_open(TABLE *table, const char *name, int mode, int test_if_locked);
|
||||||
bool update_auto_increment();
|
bool update_auto_increment();
|
||||||
|
void print_keydupp_error(uint key_nr, const char *msg);
|
||||||
virtual void print_error(int error, myf errflag);
|
virtual void print_error(int error, myf errflag);
|
||||||
virtual bool get_error_message(int error, String *buf);
|
virtual bool get_error_message(int error, String *buf);
|
||||||
uint get_dup_key(int error);
|
uint get_dup_key(int error);
|
||||||
|
@@ -5842,3 +5842,6 @@ ER_WRONG_PARTITION_NAME
|
|||||||
swe "Felaktigt partitionsnamn"
|
swe "Felaktigt partitionsnamn"
|
||||||
ER_CANT_CHANGE_TX_ISOLATION 25001
|
ER_CANT_CHANGE_TX_ISOLATION 25001
|
||||||
eng "Transaction isolation level can't be changed while a transaction is in progress"
|
eng "Transaction isolation level can't be changed while a transaction is in progress"
|
||||||
|
ER_DUP_ENTRY_AUTOINCREMENT_CASE
|
||||||
|
eng "ALTER TABLE causes auto_increment resequencing, resulting in duplicate entry '%-.64s' for key '%-.64s'"
|
||||||
|
|
||||||
|
@@ -6332,6 +6332,20 @@ copy_data_between_tables(TABLE *from,TABLE *to,
|
|||||||
(error != HA_ERR_FOUND_DUPP_KEY &&
|
(error != HA_ERR_FOUND_DUPP_KEY &&
|
||||||
error != HA_ERR_FOUND_DUPP_UNIQUE))
|
error != HA_ERR_FOUND_DUPP_UNIQUE))
|
||||||
{
|
{
|
||||||
|
if (error == HA_ERR_FOUND_DUPP_KEY)
|
||||||
|
{
|
||||||
|
uint key_nr= to->file->get_dup_key(error);
|
||||||
|
if ((int) key_nr >= 0)
|
||||||
|
{
|
||||||
|
const char *err_msg= ER(ER_DUP_ENTRY);
|
||||||
|
if (key_nr == 0 &&
|
||||||
|
(to->key_info[0].key_part[0].field->flags & AUTO_INCREMENT_FLAG))
|
||||||
|
err_msg= ER(ER_DUP_ENTRY_AUTOINCREMENT_CASE);
|
||||||
|
to->file->print_keydupp_error(key_nr, err_msg);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
to->file->print_error(error,MYF(0));
|
to->file->print_error(error,MYF(0));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user