diff --git a/BitKeeper/etc/logging_ok b/BitKeeper/etc/logging_ok index 9237eea21c4..e4de8c6ebf2 100644 --- a/BitKeeper/etc/logging_ok +++ b/BitKeeper/etc/logging_ok @@ -8,6 +8,7 @@ Miguel@light.local Sinisa@sinisa.nasamreza.org WAX@sergbook.mysql.com acurtis@pcgem.rdg.cyberkinetica.com +acurtis@xiphis.org administrador@light.hegel.local ahlentz@co3064164-a.rochd1.qld.optusnet.com.au akishkin@work.mysql.com diff --git a/mysql-test/r/ctype_collate.result b/mysql-test/r/ctype_collate.result index bc77e9c2362..cdf890f2c6c 100644 --- a/mysql-test/r/ctype_collate.result +++ b/mysql-test/r/ctype_collate.result @@ -535,6 +535,19 @@ s2 CHAR(5) COLLATE latin1_swedish_ci); SELECT * FROM t1 WHERE s1 = s2; ERROR HY000: Illegal mix of collations (latin1_german1_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation '=' DROP TABLE t1; +CREATE TABLE t1 +(s1 CHAR(5) COLLATE latin1_german1_ci, +s2 CHAR(5) COLLATE latin1_swedish_ci, +s3 CHAR(5) COLLATE latin1_bin); +INSERT INTO t1 VALUES ('a','A','A'); +SELECT * FROM t1 WHERE s1 = s2; +ERROR HY000: Illegal mix of collations (latin1_german1_ci,IMPLICIT) and (latin1_swedish_ci,IMPLICIT) for operation '=' +SELECT * FROM t1 WHERE s1 = s3; +s1 s2 s3 +SELECT * FROM t1 WHERE s2 = s3; +s1 s2 s3 +a A A +DROP TABLE t1; SET NAMES latin1; CREATE TABLE t1 (s1 char(10) COLLATE latin1_german1_ci, diff --git a/mysql-test/r/query_cache.result b/mysql-test/r/query_cache.result index 5fe00e70d3d..5385eec6da3 100644 --- a/mysql-test/r/query_cache.result +++ b/mysql-test/r/query_cache.result @@ -299,6 +299,8 @@ select UNIX_TIMESTAMP() from t1; UNIX_TIMESTAMP() select USER() from t1; USER() +select CURRENT_USER() from t1; +CURRENT_USER() select benchmark(1,1) from t1; benchmark(1,1) explain extended select benchmark(1,1) from t1; diff --git a/mysql-test/r/union.result b/mysql-test/r/union.result index 96baf36d151..c140ecd26e1 100644 --- a/mysql-test/r/union.result +++ b/mysql-test/r/union.result @@ -1103,7 +1103,7 @@ count(*) drop table t1; create table t2 ( a char character set latin1 collate latin1_swedish_ci, -b char character set latin1 collate latin1_bin); +b char character set latin1 collate latin1_german1_ci); create table t1 as (select a from t2) union (select b from t2); diff --git a/mysql-test/t/ctype_collate.test b/mysql-test/t/ctype_collate.test index 3599beeacc4..b65067a36cf 100644 --- a/mysql-test/t/ctype_collate.test +++ b/mysql-test/t/ctype_collate.test @@ -158,6 +158,18 @@ SELECT * FROM t1 WHERE s1 = s2; DROP TABLE t1; +CREATE TABLE t1 +(s1 CHAR(5) COLLATE latin1_german1_ci, + s2 CHAR(5) COLLATE latin1_swedish_ci, + s3 CHAR(5) COLLATE latin1_bin); +INSERT INTO t1 VALUES ('a','A','A'); +--error 1267 +SELECT * FROM t1 WHERE s1 = s2; +SELECT * FROM t1 WHERE s1 = s3; +SELECT * FROM t1 WHERE s2 = s3; +DROP TABLE t1; + + # # Test that optimizer doesn't use indexes with wrong collation # diff --git a/mysql-test/t/query_cache.test b/mysql-test/t/query_cache.test index b0148a689af..ad36d8b425a 100644 --- a/mysql-test/t/query_cache.test +++ b/mysql-test/t/query_cache.test @@ -184,6 +184,7 @@ select LAST_INSERT_ID() from t1; select RAND() from t1; select UNIX_TIMESTAMP() from t1; select USER() from t1; +select CURRENT_USER() from t1; select benchmark(1,1) from t1; explain extended select benchmark(1,1) from t1; show status like "Qcache_queries_in_cache"; diff --git a/mysql-test/t/union.test b/mysql-test/t/union.test index 94cbd71c00c..b0446e1ea4a 100644 --- a/mysql-test/t/union.test +++ b/mysql-test/t/union.test @@ -641,7 +641,7 @@ drop table t1; create table t2 ( a char character set latin1 collate latin1_swedish_ci, -b char character set latin1 collate latin1_bin); +b char character set latin1 collate latin1_german1_ci); --error 1271 create table t1 as (select a from t2) union diff --git a/sql/item.cc b/sql/item.cc index 3b87e5ee2cf..ffde92c4214 100644 --- a/sql/item.cc +++ b/sql/item.cc @@ -474,8 +474,17 @@ bool DTCollation::aggregate(DTCollation &dt, uint flags) set(0, DERIVATION_NONE); return 1; } + if (collation->state & MY_CS_BINSORT) + { + return 0; + } + else if (dt.collation->state & MY_CS_BINSORT) + { + set(dt); + return 0; + } CHARSET_INFO *bin= get_charset_by_csname(collation->csname, - MY_CS_BINSORT,MYF(0)); + MY_CS_BINSORT,MYF(0)); set(bin, DERIVATION_NONE); } } diff --git a/sql/item_create.cc b/sql/item_create.cc index c0361c928be..2b12a1310b9 100644 --- a/sql/item_create.cc +++ b/sql/item_create.cc @@ -306,6 +306,7 @@ Item *create_func_current_user() char buff[HOSTNAME_LENGTH+USERNAME_LENGTH+2]; uint length; + thd->lex->safe_to_cache_query= 0; length= (uint) (strxmov(buff, thd->priv_user, "@", thd->priv_host, NullS) - buff); return new Item_string(NullS, thd->memdup(buff, length), length, diff --git a/sql/sql_udf.cc b/sql/sql_udf.cc index 05df069d69a..661bf6e8197 100644 --- a/sql/sql_udf.cc +++ b/sql/sql_udf.cc @@ -526,8 +526,11 @@ int mysql_drop_function(THD *thd,const LEX_STRING *udf_name) tables.real_name= tables.alias= (char*) "func"; if (!(table = open_ltable(thd,&tables,TL_WRITE))) goto err; - if (!table->file->index_read_idx(table->record[0],0,(byte*) udf_name->str, - (uint) udf_name->length, + table->field[0]->store(udf_name->str, udf_name->length, system_charset_info); + table->file->extra(HA_EXTRA_RETRIEVE_ALL_COLS); + if (!table->file->index_read_idx(table->record[0], 0, + (byte*) table->field[0]->ptr, + table->key_info[0].key_length, HA_READ_KEY_EXACT)) { int error;