diff options
author | unknown <mskold/marty@mysql.com/linux.site> | 2006-10-16 12:14:38 +0200 |
---|---|---|
committer | unknown <mskold/marty@mysql.com/linux.site> | 2006-10-16 12:14:38 +0200 |
commit | a95a9fea795cbfe66cc4b07b7205a941dc36d9d5 (patch) | |
tree | 73adddc38fc971f3cac718f56263edfb08871f43 | |
parent | f0161aacc3e63df30cd98c06e4a47c63703d0ea0 (diff) | |
download | mariadb-git-a95a9fea795cbfe66cc4b07b7205a941dc36d9d5.tar.gz |
Bug #21072 Duplicate key error in NDB references wrong key: Added new printout for duplicate key error when key is unknown
-rw-r--r-- | mysql-test/r/ndb_charset.result | 8 | ||||
-rw-r--r-- | mysql-test/r/ndb_index_unique.result | 12 | ||||
-rw-r--r-- | mysql-test/r/ndb_update.result | 2 | ||||
-rw-r--r-- | sql/handler.cc | 28 |
4 files changed, 31 insertions, 19 deletions
diff --git a/mysql-test/r/ndb_charset.result b/mysql-test/r/ndb_charset.result index b3a2112d50b..ba6342869a9 100644 --- a/mysql-test/r/ndb_charset.result +++ b/mysql-test/r/ndb_charset.result @@ -112,9 +112,9 @@ unique key(a) ) engine=ndb; insert into t1 values(1, 'aAa'); insert into t1 values(2, 'aaa'); -ERROR 23000: Duplicate entry '2' for key 'PRIMARY' +ERROR 23000: Duplicate entry '' for key '*UNKNOWN*' insert into t1 values(3, 'AAA'); -ERROR 23000: Duplicate entry '3' for key 'PRIMARY' +ERROR 23000: Duplicate entry '' for key '*UNKNOWN*' select * from t1 order by p; p a 1 aAa @@ -138,9 +138,9 @@ unique key(a) ) engine=ndb; insert into t1 values (1,'A'),(2,'b '),(3,'C '),(4,'d '),(5,'E'),(6,'f'); insert into t1 values(99,'b'); -ERROR 23000: Duplicate entry '99' for key 'PRIMARY' +ERROR 23000: Duplicate entry '' for key '*UNKNOWN*' insert into t1 values(99,'a '); -ERROR 23000: Duplicate entry '99' for key 'PRIMARY' +ERROR 23000: Duplicate entry '' for key '*UNKNOWN*' select a,length(a) from t1 order by a; a length(a) A 1 diff --git a/mysql-test/r/ndb_index_unique.result b/mysql-test/r/ndb_index_unique.result index 88c6e00e215..bdca141df61 100644 --- a/mysql-test/r/ndb_index_unique.result +++ b/mysql-test/r/ndb_index_unique.result @@ -22,7 +22,7 @@ select * from t1 where b = 4 order by a; a b c 3 4 6 insert into t1 values(8, 2, 3); -ERROR 23000: Duplicate entry '8' for key 'PRIMARY' +ERROR 23000: Duplicate entry '' for key '*UNKNOWN*' select * from t1 order by a; a b c 1 2 3 @@ -93,7 +93,7 @@ a b c 1 1 1 4 4 NULL insert into t1 values(5,1,1); -ERROR 23000: Duplicate entry '5' for key 'PRIMARY' +ERROR 23000: Duplicate entry '' for key '*UNKNOWN*' drop table t1; CREATE TABLE t2 ( a int unsigned NOT NULL PRIMARY KEY, @@ -116,7 +116,7 @@ select * from t2 where b = 4 order by a; a b c 3 4 6 insert into t2 values(8, 2, 3); -ERROR 23000: Duplicate entry '8' for key 'PRIMARY' +ERROR 23000: Duplicate entry '' for key '*UNKNOWN*' select * from t2 order by a; a b c 1 2 3 @@ -181,7 +181,7 @@ pk a 3 NULL 4 4 insert into t1 values (5,0); -ERROR 23000: Duplicate entry '5' for key 'PRIMARY' +ERROR 23000: Duplicate entry '' for key '*UNKNOWN*' select * from t1 order by pk; pk a -1 NULL @@ -214,7 +214,7 @@ pk a b c 0 NULL 18 NULL 1 3 19 abc insert into t2 values(2,3,19,'abc'); -ERROR 23000: Duplicate entry '2' for key 'PRIMARY' +ERROR 23000: Duplicate entry '' for key '*UNKNOWN*' select * from t2 order by pk; pk a b c -1 1 17 NULL @@ -634,7 +634,7 @@ create table t1 (a int primary key, b varchar(1000) not null, unique key (b)) engine=ndb charset=utf8; insert into t1 values (1, repeat(_utf8 0xe288ab6474, 200)); insert into t1 values (2, repeat(_utf8 0xe288ab6474, 200)); -ERROR 23000: Duplicate entry '2' for key 'PRIMARY' +ERROR 23000: Duplicate entry '' for key '*UNKNOWN*' select a, sha1(b) from t1; a sha1(b) 1 08f5d02c8b8bc244f275bdfc22c42c5cab0d9d7d diff --git a/mysql-test/r/ndb_update.result b/mysql-test/r/ndb_update.result index ea6eb1644f2..8166a554084 100644 --- a/mysql-test/r/ndb_update.result +++ b/mysql-test/r/ndb_update.result @@ -18,7 +18,7 @@ pk1 b c 2 2 2 4 1 1 UPDATE t1 set pk1 = 1, c = 2 where pk1 = 4; -ERROR 23000: Duplicate entry '1' for key 'PRIMARY' +ERROR 23000: Duplicate entry '' for key '*UNKNOWN*' select * from t1 order by pk1; pk1 b c 0 0 0 diff --git a/sql/handler.cc b/sql/handler.cc index ccf1a1ef8d9..7716d0d0c02 100644 --- a/sql/handler.cc +++ b/sql/handler.cc @@ -2031,16 +2031,28 @@ void handler::print_keydup_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) + + if (key_nr == MAX_KEY) + { + /* Key is unknown */ + str.length(0); + key_nr= -1; + my_printf_error(ER_DUP_ENTRY, msg, + MYF(0), str.c_ptr(), "*UNKNOWN*"); + } + else { - str.length(max_length-4); - str.append(STRING_WITH_LEN("...")); + /* 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); } - my_printf_error(ER_DUP_ENTRY, msg, - MYF(0), str.c_ptr(), table->key_info[key_nr].name); } |