Commit d9d2bf5b authored by rburnett@bk-internal.mysql.com's avatar rburnett@bk-internal.mysql.com

Merge bk-internal.mysql.com:/data0/bk/mysql-5.1

into  bk-internal.mysql.com:/data0/bk/mysql-5.1-kt
parents ebe57fc7 b072ecd0
...@@ -14,15 +14,15 @@ set global general_log= ON; ...@@ -14,15 +14,15 @@ set global general_log= ON;
create table t1(f1 int); create table t1(f1 int);
select * from mysql.general_log; select * from mysql.general_log;
event_time user_host thread_id server_id command_type argument event_time user_host thread_id server_id command_type argument
TIMESTAMP root[root] @ localhost [] # 1 Query create table t1(f1 int) TIMESTAMP USER_HOST # 1 Query create table t1(f1 int)
TIMESTAMP root[root] @ localhost [] # 1 Query select * from mysql.general_log TIMESTAMP USER_HOST # 1 Query select * from mysql.general_log
set global general_log= OFF; set global general_log= OFF;
drop table t1; drop table t1;
select * from mysql.general_log; select * from mysql.general_log;
event_time user_host thread_id server_id command_type argument event_time user_host thread_id server_id command_type argument
TIMESTAMP root[root] @ localhost [] # 1 Query create table t1(f1 int) TIMESTAMP USER_HOST # 1 Query create table t1(f1 int)
TIMESTAMP root[root] @ localhost [] # 1 Query select * from mysql.general_log TIMESTAMP USER_HOST # 1 Query select * from mysql.general_log
TIMESTAMP root[root] @ localhost [] # 1 Query set global general_log= OFF TIMESTAMP USER_HOST # 1 Query set global general_log= OFF
set global general_log= ON; set global general_log= ON;
flush logs; flush logs;
show global variables show global variables
...@@ -46,7 +46,7 @@ sleep(2) ...@@ -46,7 +46,7 @@ sleep(2)
0 0
select * from mysql.slow_log; select * from mysql.slow_log;
start_time user_host query_time lock_time rows_sent rows_examined db last_insert_id insert_id server_id sql_text start_time user_host query_time lock_time rows_sent rows_examined db last_insert_id insert_id server_id sql_text
TIMESTAMP, root[root] @ localhost [] USER_HOST, QUERY_TIME 1 0 test 0 0 1 select sleep(2) TIMESTAMP USER_HOST QUERY_TIME 00:00:00 1 0 test 0 0 1 select sleep(2)
show global variables show global variables
where Variable_name = 'log' or Variable_name = 'log_slow_queries' or where Variable_name = 'log' or Variable_name = 'log_slow_queries' or
Variable_name = 'general_log' or Variable_name = 'slow_query_log'; Variable_name = 'general_log' or Variable_name = 'slow_query_log';
...@@ -67,9 +67,9 @@ create table t1(f1 int); ...@@ -67,9 +67,9 @@ create table t1(f1 int);
drop table t1; drop table t1;
select * from mysql.general_log; select * from mysql.general_log;
event_time user_host thread_id server_id command_type argument event_time user_host thread_id server_id command_type argument
TIMESTAMP root[root] @ localhost [] # 1 Query create table t1(f1 int) TIMESTAMP USER_HOST # 1 Query create table t1(f1 int)
TIMESTAMP root[root] @ localhost [] # 1 Query drop table t1 TIMESTAMP USER_HOST # 1 Query drop table t1
TIMESTAMP root[root] @ localhost [] # 1 Query select * from mysql.general_log TIMESTAMP USER_HOST # 1 Query select * from mysql.general_log
set global general_log= OFF; set global general_log= OFF;
truncate table mysql.general_log; truncate table mysql.general_log;
select * from mysql.general_log; select * from mysql.general_log;
...@@ -151,5 +151,5 @@ set global general_log=ON; ...@@ -151,5 +151,5 @@ set global general_log=ON;
drop table t1; drop table t1;
select * from mysql.general_log; select * from mysql.general_log;
event_time user_host thread_id server_id command_type argument event_time user_host thread_id server_id command_type argument
TIMESTAMP root[root] @ localhost [] # 1 Query drop table t1 TIMESTAMP USER_HOST # 1 Query drop table t1
TIMESTAMP root[root] @ localhost [] # 1 Query select * from mysql.general_log TIMESTAMP USER_HOST # 1 Query select * from mysql.general_log
...@@ -92,3 +92,18 @@ DROP TABLE IF EXISTS t1; ...@@ -92,3 +92,18 @@ DROP TABLE IF EXISTS t1;
DROP TABLE IF EXISTS t0_aux; DROP TABLE IF EXISTS t0_aux;
DROP TABLE IF EXISTS t0_definition; DROP TABLE IF EXISTS t0_definition;
DROP TABLE IF EXISTS t0_template; DROP TABLE IF EXISTS t0_template;
create table t1 (id varchar(64) primary key) engine=innodb
partition by key(id) partitions 5;
insert into t1 values ('a');
insert into t1 values ('aa');
insert into t1 values ('aaa');
select * from t1 where id = 'a';
id
a
select * from t1 where id = 'aa';
id
aa
select * from t1 where id = 'aaa';
id
aaa
drop table t1;
...@@ -31,7 +31,7 @@ id select_type table partitions type possible_keys key key_len ref rows Extra ...@@ -31,7 +31,7 @@ id select_type table partitions type possible_keys key key_len ref rows Extra
1 SIMPLE t2 p0,p1 ALL NULL NULL NULL NULL 3 Using where 1 SIMPLE t2 p0,p1 ALL NULL NULL NULL NULL 3 Using where
explain partitions select * from t2 where a=1 and b=1; explain partitions select * from t2 where a=1 and b=1;
id select_type table partitions type possible_keys key key_len ref rows Extra id select_type table partitions type possible_keys key key_len ref rows Extra
1 SIMPLE t2 p0 ALL NULL NULL NULL NULL 3 Using where 1 SIMPLE t2 p0 ALL NULL NULL NULL NULL 2 Using where
create table t3 ( create table t3 (
a int a int
) )
......
...@@ -27,3 +27,7 @@ a ...@@ -27,3 +27,7 @@ a
2 2
3 3
drop database testdb2; drop database testdb2;
create database testdb1;
rename database testdb1 to testdb1;
ERROR HY000: Can't create database 'testdb1'; database exists
drop database testdb1;
...@@ -11,11 +11,11 @@ Variable_name = 'general_log' or Variable_name = 'slow_query_log'; ...@@ -11,11 +11,11 @@ Variable_name = 'general_log' or Variable_name = 'slow_query_log';
flush logs; flush logs;
set global general_log= ON; set global general_log= ON;
create table t1(f1 int); create table t1(f1 int);
--replace_column 1 TIMESTAMP 3 # --replace_column 1 TIMESTAMP 2 USER_HOST 3 #
select * from mysql.general_log; select * from mysql.general_log;
set global general_log= OFF; set global general_log= OFF;
drop table t1; drop table t1;
--replace_column 1 TIMESTAMP 3 # --replace_column 1 TIMESTAMP 2 USER_HOST 3 #
select * from mysql.general_log; select * from mysql.general_log;
set global general_log= ON; set global general_log= ON;
flush logs; flush logs;
...@@ -27,7 +27,7 @@ connect (con1,localhost,root,,); ...@@ -27,7 +27,7 @@ connect (con1,localhost,root,,);
connection con1; connection con1;
set session long_query_time=1; set session long_query_time=1;
select sleep(2); select sleep(2);
--replace_column 1 TIMESTAMP, 3 USER_HOST, 4 QUERY_TIME --replace_column 1 TIMESTAMP 2 USER_HOST 3 QUERY_TIME
select * from mysql.slow_log; select * from mysql.slow_log;
connection default; connection default;
...@@ -35,7 +35,7 @@ set global slow_query_log= ON; ...@@ -35,7 +35,7 @@ set global slow_query_log= ON;
connection con1; connection con1;
set session long_query_time=1; set session long_query_time=1;
select sleep(2); select sleep(2);
--replace_column 1 TIMESTAMP, 3 USER_HOST, 4 QUERY_TIME --replace_column 1 TIMESTAMP 2 USER_HOST 3 QUERY_TIME
select * from mysql.slow_log; select * from mysql.slow_log;
disconnect con1; disconnect con1;
connection default; connection default;
...@@ -54,11 +54,11 @@ set global general_log= ON; ...@@ -54,11 +54,11 @@ set global general_log= ON;
truncate table mysql.general_log; truncate table mysql.general_log;
create table t1(f1 int); create table t1(f1 int);
drop table t1; drop table t1;
--replace_column 1 TIMESTAMP 3 # --replace_column 1 TIMESTAMP 2 USER_HOST 3 #
select * from mysql.general_log; select * from mysql.general_log;
set global general_log= OFF; set global general_log= OFF;
truncate table mysql.general_log; truncate table mysql.general_log;
--replace_column 1 TIMESTAMP 3 # --replace_column 1 TIMESTAMP 2 USER_HOST 3 #
select * from mysql.general_log; select * from mysql.general_log;
set global general_log= ON; set global general_log= ON;
show global variables show global variables
...@@ -109,14 +109,14 @@ truncate table mysql.general_log; ...@@ -109,14 +109,14 @@ truncate table mysql.general_log;
show variables like 'log_output'; show variables like 'log_output';
set global general_log=ON; set global general_log=ON;
create table t1(f1 int); create table t1(f1 int);
--replace_column 1 TIMESTAMP 3 # --replace_column 1 TIMESTAMP 2 USER_HOST 3 #
select * from mysql.general_log; select * from mysql.general_log;
set global general_log=OFF; set global general_log=OFF;
set global log_output="FILE,TABLE"; set global log_output="FILE,TABLE";
show variables like 'log_output'; show variables like 'log_output';
set global general_log=ON; set global general_log=ON;
drop table t1; drop table t1;
--replace_column 1 TIMESTAMP 3 # --replace_column 1 TIMESTAMP 2 USER_HOST 3 #
select * from mysql.general_log; select * from mysql.general_log;
--enable_ps_protocol --enable_ps_protocol
...@@ -66,3 +66,15 @@ DROP TABLE IF EXISTS t0_definition; ...@@ -66,3 +66,15 @@ DROP TABLE IF EXISTS t0_definition;
DROP TABLE IF EXISTS t0_template; DROP TABLE IF EXISTS t0_template;
--enable_warnings --enable_warnings
#
# Bug#20086: Can't get data from key partitioned tables with VARCHAR key
#
create table t1 (id varchar(64) primary key) engine=innodb
partition by key(id) partitions 5;
insert into t1 values ('a');
insert into t1 values ('aa');
insert into t1 values ('aaa');
select * from t1 where id = 'a';
select * from t1 where id = 'aa';
select * from t1 where id = 'aaa';
drop table t1;
...@@ -16,3 +16,11 @@ select database(); ...@@ -16,3 +16,11 @@ select database();
show tables; show tables;
select a from t1 order by a; select a from t1 order by a;
drop database testdb2; drop database testdb2;
#
# Bug#19392 Rename Database: Crash if case change
#
create database testdb1;
--error 1007
rename database testdb1 to testdb1;
drop database testdb1;
...@@ -1243,6 +1243,21 @@ uint Field::offset() ...@@ -1243,6 +1243,21 @@ uint Field::offset()
} }
void Field::hash(ulong *nr, ulong *nr2)
{
if (is_null())
{
*nr^= (*nr << 1) | 1;
}
else
{
uint len= pack_length();
CHARSET_INFO *cs= charset();
cs->coll->hash_sort(cs, (uchar*) ptr, len, nr, nr2);
}
}
void Field::copy_from_tmp(int row_offset) void Field::copy_from_tmp(int row_offset)
{ {
memcpy(ptr,ptr+row_offset,pack_length()); memcpy(ptr,ptr+row_offset,pack_length());
...@@ -6925,6 +6940,21 @@ uint Field_varstring::is_equal(create_field *new_field) ...@@ -6925,6 +6940,21 @@ uint Field_varstring::is_equal(create_field *new_field)
} }
void Field_varstring::hash(ulong *nr, ulong *nr2)
{
if (is_null())
{
*nr^= (*nr << 1) | 1;
}
else
{
uint len= length_bytes == 1 ? (uint) (uchar) *ptr : uint2korr(ptr);
CHARSET_INFO *cs= charset();
cs->coll->hash_sort(cs, (uchar*) ptr + length_bytes, len, nr, nr2);
}
}
/**************************************************************************** /****************************************************************************
** blob type ** blob type
** A blob is saved as a length and a pointer. The length is stored in the ** A blob is saved as a length and a pointer. The length is stored in the
......
...@@ -351,6 +351,8 @@ class Field ...@@ -351,6 +351,8 @@ class Field
return field_length / charset()->mbmaxlen; return field_length / charset()->mbmaxlen;
} }
/* Hash value */
virtual void hash(ulong *nr, ulong *nr2);
friend bool reopen_table(THD *,struct st_table *,bool); friend bool reopen_table(THD *,struct st_table *,bool);
friend int cre_myisam(my_string name, register TABLE *form, uint options, friend int cre_myisam(my_string name, register TABLE *form, uint options,
ulonglong auto_increment_value); ulonglong auto_increment_value);
...@@ -1120,6 +1122,7 @@ class Field_varstring :public Field_longstr { ...@@ -1120,6 +1122,7 @@ class Field_varstring :public Field_longstr {
char *new_ptr, uchar *new_null_ptr, char *new_ptr, uchar *new_null_ptr,
uint new_null_bit); uint new_null_bit);
uint is_equal(create_field *new_field); uint is_equal(create_field *new_field);
void hash(ulong *nr, ulong *nr2);
}; };
......
...@@ -210,9 +210,13 @@ void key_restore(byte *to_record, byte *from_key, KEY *key_info, ...@@ -210,9 +210,13 @@ void key_restore(byte *to_record, byte *from_key, KEY *key_info,
} }
else if (key_part->key_part_flag & HA_VAR_LENGTH_PART) else if (key_part->key_part_flag & HA_VAR_LENGTH_PART)
{ {
my_bitmap_map *old_map;
key_length-= HA_KEY_BLOB_LENGTH; key_length-= HA_KEY_BLOB_LENGTH;
length= min(key_length, key_part->length); length= min(key_length, key_part->length);
old_map= dbug_tmp_use_all_columns(key_part->field->table,
key_part->field->table->write_set);
key_part->field->set_key_image((char *) from_key, length); key_part->field->set_key_image((char *) from_key, length);
dbug_tmp_restore_column_map(key_part->field->table->write_set, old_map);
from_key+= HA_KEY_BLOB_LENGTH; from_key+= HA_KEY_BLOB_LENGTH;
} }
else else
......
...@@ -134,9 +134,9 @@ void lock_db_delete(const char *name, uint length) ...@@ -134,9 +134,9 @@ void lock_db_delete(const char *name, uint length)
{ {
my_dblock_t *opt; my_dblock_t *opt;
safe_mutex_assert_owner(&LOCK_lock_db); safe_mutex_assert_owner(&LOCK_lock_db);
opt= (my_dblock_t *)hash_search(&lock_db_cache, (const byte*) name, length); if ((opt= (my_dblock_t *)hash_search(&lock_db_cache,
DBUG_ASSERT(opt != NULL); (const byte*) name, length)))
hash_delete(&lock_db_cache, (byte*) opt); hash_delete(&lock_db_cache, (byte*) opt);
} }
......
...@@ -2103,26 +2103,15 @@ static inline longlong part_val_int(Item *item_expr) ...@@ -2103,26 +2103,15 @@ static inline longlong part_val_int(Item *item_expr)
static uint32 calculate_key_value(Field **field_array) static uint32 calculate_key_value(Field **field_array)
{ {
uint32 hashnr= 0; ulong nr1= 1;
ulong nr2= 4; ulong nr2= 4;
do do
{ {
Field *field= *field_array; Field *field= *field_array;
if (field->is_null()) field->hash(&nr1, &nr2);
{
hashnr^= (hashnr << 1) | 1;
}
else
{
uint len= field->pack_length();
ulong nr1= 1;
CHARSET_INFO *cs= field->charset();
cs->coll->hash_sort(cs, (uchar*)field->ptr, len, &nr1, &nr2);
hashnr^= (uint32)nr1;
}
} while (*(++field_array)); } while (*(++field_array));
return hashnr; return (uint32) nr1;
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment