Merge bk-internal.mysql.com:/home/bk/mysql-5.0
into bodhi.(none):/opt/local/work/mysql-5.0-runtime
This commit is contained in:
commit
3c6eb0002d
@ -1920,6 +1920,20 @@ a b
|
|||||||
2 Curly
|
2 Curly
|
||||||
drop table federated.t1;
|
drop table federated.t1;
|
||||||
drop table federated.t1;
|
drop table federated.t1;
|
||||||
|
|
||||||
|
Bug#18287 create federated table always times out, error 1159 ' '
|
||||||
|
|
||||||
|
Test that self-references work
|
||||||
|
|
||||||
|
create table federated.t1 (a int primary key);
|
||||||
|
create table federated.t2 (a int primary key)
|
||||||
|
ENGINE=FEDERATED
|
||||||
|
connection='mysql://root@127.0.0.1:SLAVE_PORT/federated/t1';
|
||||||
|
insert into federated.t1 (a) values (1);
|
||||||
|
select * from federated.t2;
|
||||||
|
a
|
||||||
|
1
|
||||||
|
drop table federated.t1, federated.t2;
|
||||||
DROP TABLE IF EXISTS federated.t1;
|
DROP TABLE IF EXISTS federated.t1;
|
||||||
DROP DATABASE IF EXISTS federated;
|
DROP DATABASE IF EXISTS federated;
|
||||||
DROP TABLE IF EXISTS federated.t1;
|
DROP TABLE IF EXISTS federated.t1;
|
||||||
|
@ -1671,5 +1671,19 @@ drop table federated.t1;
|
|||||||
connection slave;
|
connection slave;
|
||||||
drop table federated.t1;
|
drop table federated.t1;
|
||||||
|
|
||||||
|
--echo
|
||||||
|
--echo Bug#18287 create federated table always times out, error 1159 ' '
|
||||||
|
--echo
|
||||||
|
--echo Test that self-references work
|
||||||
|
--echo
|
||||||
|
connection slave;
|
||||||
|
create table federated.t1 (a int primary key);
|
||||||
|
--replace_result $SLAVE_MYPORT SLAVE_PORT
|
||||||
|
eval create table federated.t2 (a int primary key)
|
||||||
|
ENGINE=FEDERATED
|
||||||
|
connection='mysql://root@127.0.0.1:$SLAVE_MYPORT/federated/t1';
|
||||||
|
insert into federated.t1 (a) values (1);
|
||||||
|
select * from federated.t2;
|
||||||
|
drop table federated.t1, federated.t2;
|
||||||
|
|
||||||
source include/federated_cleanup.inc;
|
source include/federated_cleanup.inc;
|
||||||
|
@ -383,6 +383,9 @@ static inline my_bool have_specific_lock(THR_LOCK_DATA *data,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
static void wake_up_waiters(THR_LOCK *lock);
|
||||||
|
|
||||||
|
|
||||||
static enum enum_thr_lock_result
|
static enum enum_thr_lock_result
|
||||||
wait_for_lock(struct st_lock_list *wait, THR_LOCK_DATA *data,
|
wait_for_lock(struct st_lock_list *wait, THR_LOCK_DATA *data,
|
||||||
my_bool in_wait_list)
|
my_bool in_wait_list)
|
||||||
@ -444,8 +447,13 @@ wait_for_lock(struct st_lock_list *wait, THR_LOCK_DATA *data,
|
|||||||
else
|
else
|
||||||
wait->last=data->prev;
|
wait->last=data->prev;
|
||||||
data->type= TL_UNLOCK; /* No lock */
|
data->type= TL_UNLOCK; /* No lock */
|
||||||
|
check_locks(data->lock, "killed or timed out wait_for_lock", 1);
|
||||||
|
wake_up_waiters(data->lock);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
check_locks(data->lock, "aborted wait_for_lock", 0);
|
||||||
}
|
}
|
||||||
check_locks(data->lock,"failed wait_for_lock",0);
|
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -771,6 +779,26 @@ void thr_unlock(THR_LOCK_DATA *data)
|
|||||||
lock->read_no_write_count--;
|
lock->read_no_write_count--;
|
||||||
data->type=TL_UNLOCK; /* Mark unlocked */
|
data->type=TL_UNLOCK; /* Mark unlocked */
|
||||||
check_locks(lock,"after releasing lock",1);
|
check_locks(lock,"after releasing lock",1);
|
||||||
|
wake_up_waiters(lock);
|
||||||
|
pthread_mutex_unlock(&lock->mutex);
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
@brief Wake up all threads which pending requests for the lock
|
||||||
|
can be satisfied.
|
||||||
|
|
||||||
|
@param lock Lock for which threads should be woken up
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void wake_up_waiters(THR_LOCK *lock)
|
||||||
|
{
|
||||||
|
THR_LOCK_DATA *data;
|
||||||
|
enum thr_lock_type lock_type;
|
||||||
|
|
||||||
|
DBUG_ENTER("wake_up_waiters");
|
||||||
|
|
||||||
if (!lock->write.data) /* If no active write locks */
|
if (!lock->write.data) /* If no active write locks */
|
||||||
{
|
{
|
||||||
@ -820,11 +848,7 @@ void thr_unlock(THR_LOCK_DATA *data)
|
|||||||
data=lock->write_wait.data; /* Free this too */
|
data=lock->write_wait.data; /* Free this too */
|
||||||
}
|
}
|
||||||
if (data->type >= TL_WRITE_LOW_PRIORITY)
|
if (data->type >= TL_WRITE_LOW_PRIORITY)
|
||||||
{
|
goto end;
|
||||||
check_locks(lock,"giving write lock",0);
|
|
||||||
pthread_mutex_unlock(&lock->mutex);
|
|
||||||
DBUG_VOID_RETURN;
|
|
||||||
}
|
|
||||||
/* Release possible read locks together with the write lock */
|
/* Release possible read locks together with the write lock */
|
||||||
}
|
}
|
||||||
if (lock->read_wait.data)
|
if (lock->read_wait.data)
|
||||||
@ -879,8 +903,7 @@ void thr_unlock(THR_LOCK_DATA *data)
|
|||||||
free_all_read_locks(lock,0);
|
free_all_read_locks(lock,0);
|
||||||
}
|
}
|
||||||
end:
|
end:
|
||||||
check_locks(lock,"thr_unlock",0);
|
check_locks(lock, "after waking up waiters", 0);
|
||||||
pthread_mutex_unlock(&lock->mutex);
|
|
||||||
DBUG_VOID_RETURN;
|
DBUG_VOID_RETURN;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1094,6 +1117,7 @@ my_bool thr_abort_locks_for_thread(THR_LOCK *lock, pthread_t thread)
|
|||||||
lock->write_wait.last= data->prev;
|
lock->write_wait.last= data->prev;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
wake_up_waiters(lock);
|
||||||
pthread_mutex_unlock(&lock->mutex);
|
pthread_mutex_unlock(&lock->mutex);
|
||||||
DBUG_RETURN(found);
|
DBUG_RETURN(found);
|
||||||
}
|
}
|
||||||
|
@ -1670,7 +1670,7 @@ void Item_ident_for_show::make_field(Send_field *tmp_field)
|
|||||||
tmp_field->type=field->type();
|
tmp_field->type=field->type();
|
||||||
tmp_field->flags= field->table->maybe_null ?
|
tmp_field->flags= field->table->maybe_null ?
|
||||||
(field->flags & ~NOT_NULL_FLAG) : field->flags;
|
(field->flags & ~NOT_NULL_FLAG) : field->flags;
|
||||||
tmp_field->decimals= 0;
|
tmp_field->decimals= field->decimals();
|
||||||
}
|
}
|
||||||
|
|
||||||
/**********************************************/
|
/**********************************************/
|
||||||
|
@ -15570,7 +15570,7 @@ static void test_bug27876()
|
|||||||
int rc;
|
int rc;
|
||||||
MYSQL_RES *result;
|
MYSQL_RES *result;
|
||||||
|
|
||||||
char utf8_func[] =
|
unsigned char utf8_func[] =
|
||||||
{
|
{
|
||||||
0xd1, 0x84, 0xd1, 0x83, 0xd0, 0xbd, 0xd0, 0xba,
|
0xd1, 0x84, 0xd1, 0x83, 0xd0, 0xbd, 0xd0, 0xba,
|
||||||
0xd1, 0x86, 0xd0, 0xb8, 0xd0, 0xb9, 0xd0, 0xba,
|
0xd1, 0x86, 0xd0, 0xb8, 0xd0, 0xb9, 0xd0, 0xba,
|
||||||
@ -15578,7 +15578,7 @@ static void test_bug27876()
|
|||||||
0x00
|
0x00
|
||||||
};
|
};
|
||||||
|
|
||||||
char utf8_param[] =
|
unsigned char utf8_param[] =
|
||||||
{
|
{
|
||||||
0xd0, 0xbf, 0xd0, 0xb0, 0xd1, 0x80, 0xd0, 0xb0,
|
0xd0, 0xbf, 0xd0, 0xb0, 0xd1, 0x80, 0xd0, 0xb0,
|
||||||
0xd0, 0xbc, 0xd0, 0xb5, 0xd1, 0x82, 0xd1, 0x8a,
|
0xd0, 0xbc, 0xd0, 0xb5, 0xd1, 0x82, 0xd1, 0x8a,
|
||||||
@ -15735,6 +15735,55 @@ static void test_bug27592()
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/**
|
||||||
|
Bug#29306 Truncated data in MS Access with decimal (3,1) columns in a VIEW
|
||||||
|
*/
|
||||||
|
|
||||||
|
static void test_bug29306()
|
||||||
|
{
|
||||||
|
MYSQL_FIELD *field;
|
||||||
|
int rc;
|
||||||
|
MYSQL_RES *res;
|
||||||
|
|
||||||
|
DBUG_ENTER("test_bug29306");
|
||||||
|
myheader("test_bug29306");
|
||||||
|
|
||||||
|
rc= mysql_query(mysql, "DROP TABLE IF EXISTS tab17557");
|
||||||
|
myquery(rc);
|
||||||
|
rc= mysql_query(mysql, "DROP VIEW IF EXISTS view17557");
|
||||||
|
myquery(rc);
|
||||||
|
rc= mysql_query(mysql, "CREATE TABLE tab17557 (dd decimal (3,1))");
|
||||||
|
myquery(rc);
|
||||||
|
rc= mysql_query(mysql, "CREATE VIEW view17557 as SELECT dd FROM tab17557");
|
||||||
|
myquery(rc);
|
||||||
|
rc= mysql_query(mysql, "INSERT INTO tab17557 VALUES (7.6)");
|
||||||
|
myquery(rc);
|
||||||
|
|
||||||
|
/* Checking the view */
|
||||||
|
res= mysql_list_fields(mysql, "view17557", NULL);
|
||||||
|
while ((field= mysql_fetch_field(res)))
|
||||||
|
{
|
||||||
|
if (! opt_silent)
|
||||||
|
{
|
||||||
|
printf("field name %s\n", field->name);
|
||||||
|
printf("field table %s\n", field->table);
|
||||||
|
printf("field decimals %d\n", field->decimals);
|
||||||
|
if (field->decimals < 1)
|
||||||
|
printf("Error! No decimals! \n");
|
||||||
|
printf("\n\n");
|
||||||
|
}
|
||||||
|
DIE_UNLESS(field->decimals == 1);
|
||||||
|
}
|
||||||
|
mysql_free_result(res);
|
||||||
|
|
||||||
|
rc= mysql_query(mysql, "DROP TABLE tab17557");
|
||||||
|
myquery(rc);
|
||||||
|
rc= mysql_query(mysql, "DROP VIEW view17557");
|
||||||
|
myquery(rc);
|
||||||
|
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
Read and parse arguments and MySQL options from my.cnf
|
Read and parse arguments and MySQL options from my.cnf
|
||||||
*/
|
*/
|
||||||
@ -16019,6 +16068,7 @@ static struct my_tests_st my_tests[]= {
|
|||||||
{ "test_bug28505", test_bug28505 },
|
{ "test_bug28505", test_bug28505 },
|
||||||
{ "test_bug28934", test_bug28934 },
|
{ "test_bug28934", test_bug28934 },
|
||||||
{ "test_bug27592", test_bug27592 },
|
{ "test_bug27592", test_bug27592 },
|
||||||
|
{ "test_bug29306", test_bug29306 },
|
||||||
{ 0, 0 }
|
{ 0, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user