Merge rburnett@bk-internal.mysql.com:/home/bk/mysql-5.1-new
into linux.site:/home/reggie/work/mysql-5.1
This commit is contained in:
commit
88ba26e15f
@ -92,7 +92,7 @@ insert into t1 values(1);
|
|||||||
insert ignore into t1 values(1);
|
insert ignore into t1 values(1);
|
||||||
replace into t1 values(100);
|
replace into t1 values(100);
|
||||||
create table t2 (a varchar(200)) engine=blackhole;
|
create table t2 (a varchar(200)) engine=blackhole;
|
||||||
load data infile '../../std_data/words.dat' into table t2;
|
load data infile '../std_data_ln/words.dat' into table t2;
|
||||||
alter table t1 add b int;
|
alter table t1 add b int;
|
||||||
alter table t1 drop b;
|
alter table t1 drop b;
|
||||||
create table t3 like t1;
|
create table t3 like t1;
|
||||||
|
@ -1517,6 +1517,48 @@ bitty
|
|||||||
drop table federated.t1;
|
drop table federated.t1;
|
||||||
drop table federated.t1;
|
drop table federated.t1;
|
||||||
DROP TABLE IF EXISTS federated.t1;
|
DROP TABLE IF EXISTS federated.t1;
|
||||||
|
Warnings:
|
||||||
|
Note 1051 Unknown table 't1'
|
||||||
|
CREATE TABLE federated.t1 (
|
||||||
|
`id` int(20) NOT NULL auto_increment,
|
||||||
|
PRIMARY KEY (`id`));
|
||||||
|
DROP TABLE IF EXISTS federated.t1;
|
||||||
|
Warnings:
|
||||||
|
Note 1051 Unknown table 't1'
|
||||||
|
CREATE TABLE federated.t1 (
|
||||||
|
`id` int(20) NOT NULL auto_increment,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
)
|
||||||
|
ENGINE="FEDERATED" DEFAULT CHARSET=latin1
|
||||||
|
CONNECTION='mysql://root@127.0.0.1:9308/federated/t1';
|
||||||
|
INSERT INTO federated.t1 VALUES ();
|
||||||
|
SELECT LAST_INSERT_ID();
|
||||||
|
LAST_INSERT_ID()
|
||||||
|
1
|
||||||
|
INSERT INTO federated.t1 VALUES ();
|
||||||
|
SELECT LAST_INSERT_ID();
|
||||||
|
LAST_INSERT_ID()
|
||||||
|
2
|
||||||
|
INSERT INTO federated.t1 VALUES ();
|
||||||
|
SELECT LAST_INSERT_ID();
|
||||||
|
LAST_INSERT_ID()
|
||||||
|
3
|
||||||
|
INSERT INTO federated.t1 VALUES ();
|
||||||
|
SELECT LAST_INSERT_ID();
|
||||||
|
LAST_INSERT_ID()
|
||||||
|
4
|
||||||
|
INSERT INTO federated.t1 VALUES ();
|
||||||
|
SELECT LAST_INSERT_ID();
|
||||||
|
LAST_INSERT_ID()
|
||||||
|
5
|
||||||
|
SELECT * FROM federated.t1;
|
||||||
|
id
|
||||||
|
1
|
||||||
|
2
|
||||||
|
3
|
||||||
|
4
|
||||||
|
5
|
||||||
|
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;
|
||||||
DROP DATABASE IF EXISTS federated;
|
DROP DATABASE IF EXISTS federated;
|
||||||
|
@ -30,3 +30,4 @@ flush tables with read lock;
|
|||||||
start slave;
|
start slave;
|
||||||
stop slave;
|
stop slave;
|
||||||
ERROR HY000: Can't execute the given command because you have active locked tables or an active transaction
|
ERROR HY000: Can't execute the given command because you have active locked tables or an active transaction
|
||||||
|
drop table t3, t4, t5;
|
||||||
|
@ -12,7 +12,7 @@ create table t1(n int not null auto_increment primary key);
|
|||||||
insert into t1 values (NULL);
|
insert into t1 values (NULL);
|
||||||
drop table t1;
|
drop table t1;
|
||||||
create table t1 (word char(20) not null);
|
create table t1 (word char(20) not null);
|
||||||
load data infile '../../std_data/words.dat' into table t1 ignore 1 lines;
|
load data infile '../std_data_ln/words.dat' into table t1 ignore 1 lines;
|
||||||
select count(*) from t1;
|
select count(*) from t1;
|
||||||
count(*)
|
count(*)
|
||||||
69
|
69
|
||||||
|
@ -1226,4 +1226,34 @@ drop table federated.t1;
|
|||||||
connection slave;
|
connection slave;
|
||||||
drop table federated.t1;
|
drop table federated.t1;
|
||||||
|
|
||||||
|
#
|
||||||
|
# BUG# 14768 test auto_increment last_insert_id()
|
||||||
|
#
|
||||||
|
connection slave;
|
||||||
|
DROP TABLE IF EXISTS federated.t1;
|
||||||
|
CREATE TABLE federated.t1 (
|
||||||
|
`id` int(20) NOT NULL auto_increment,
|
||||||
|
PRIMARY KEY (`id`));
|
||||||
|
|
||||||
|
connection master;
|
||||||
|
DROP TABLE IF EXISTS federated.t1;
|
||||||
|
eval CREATE TABLE federated.t1 (
|
||||||
|
`id` int(20) NOT NULL auto_increment,
|
||||||
|
PRIMARY KEY (`id`)
|
||||||
|
)
|
||||||
|
ENGINE="FEDERATED" DEFAULT CHARSET=latin1
|
||||||
|
CONNECTION='mysql://root@127.0.0.1:$SLAVE_MYPORT/federated/t1';
|
||||||
|
|
||||||
|
INSERT INTO federated.t1 VALUES ();
|
||||||
|
SELECT LAST_INSERT_ID();
|
||||||
|
INSERT INTO federated.t1 VALUES ();
|
||||||
|
SELECT LAST_INSERT_ID();
|
||||||
|
INSERT INTO federated.t1 VALUES ();
|
||||||
|
SELECT LAST_INSERT_ID();
|
||||||
|
INSERT INTO federated.t1 VALUES ();
|
||||||
|
SELECT LAST_INSERT_ID();
|
||||||
|
INSERT INTO federated.t1 VALUES ();
|
||||||
|
SELECT LAST_INSERT_ID();
|
||||||
|
SELECT * FROM federated.t1;
|
||||||
|
|
||||||
source include/federated_cleanup.inc;
|
source include/federated_cleanup.inc;
|
||||||
|
@ -5243,7 +5243,7 @@ int Field_date::store(double nr)
|
|||||||
else
|
else
|
||||||
tmp= (longlong) rint(nr);
|
tmp= (longlong) rint(nr);
|
||||||
|
|
||||||
return Field_date::store(tmp);
|
return Field_date::store(tmp, TRUE);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -5265,6 +5265,9 @@ int Field_date::store(longlong nr, bool unsigned_val)
|
|||||||
error= 2;
|
error= 2;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (nr >= 19000000000000.0 && nr <= 99991231235959.0)
|
||||||
|
nr=floor(nr/1000000.0); // Timestamp to date
|
||||||
|
|
||||||
if (error)
|
if (error)
|
||||||
set_datetime_warning(MYSQL_ERROR::WARN_LEVEL_WARN,
|
set_datetime_warning(MYSQL_ERROR::WARN_LEVEL_WARN,
|
||||||
error == 2 ? ER_WARN_DATA_OUT_OF_RANGE :
|
error == 2 ? ER_WARN_DATA_OUT_OF_RANGE :
|
||||||
|
@ -1409,6 +1409,12 @@ static int free_share(FEDERATED_SHARE *share)
|
|||||||
hash_delete(&federated_open_tables, (byte*) share);
|
hash_delete(&federated_open_tables, (byte*) share);
|
||||||
my_free((gptr) share->scheme, MYF(MY_ALLOW_ZERO_PTR));
|
my_free((gptr) share->scheme, MYF(MY_ALLOW_ZERO_PTR));
|
||||||
share->scheme= 0;
|
share->scheme= 0;
|
||||||
|
if (share->socket)
|
||||||
|
{
|
||||||
|
my_free((gptr) share->socket, MYF(MY_ALLOW_ZERO_PTR));
|
||||||
|
share->socket= 0;
|
||||||
|
}
|
||||||
|
|
||||||
thr_lock_delete(&share->lock);
|
thr_lock_delete(&share->lock);
|
||||||
VOID(pthread_mutex_destroy(&share->mutex));
|
VOID(pthread_mutex_destroy(&share->mutex));
|
||||||
my_free((gptr) share, MYF(0));
|
my_free((gptr) share, MYF(0));
|
||||||
@ -1688,10 +1694,34 @@ int ha_federated::write_row(byte *buf)
|
|||||||
{
|
{
|
||||||
DBUG_RETURN(stash_remote_error());
|
DBUG_RETURN(stash_remote_error());
|
||||||
}
|
}
|
||||||
|
/*
|
||||||
|
If the table we've just written a record to contains an auto_increment field,
|
||||||
|
then store the last_insert_id() value from the foreign server
|
||||||
|
*/
|
||||||
|
if (table->next_number_field)
|
||||||
|
update_auto_increment();
|
||||||
|
|
||||||
DBUG_RETURN(0);
|
DBUG_RETURN(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
ha_federated::update_auto_increment
|
||||||
|
|
||||||
|
This method ensures that last_insert_id() works properly. What it simply does
|
||||||
|
is calls last_insert_id() on the foreign database immediately after insert
|
||||||
|
(if the table has an auto_increment field) and sets the insert id via
|
||||||
|
thd->insert_id(ID) (as well as storing thd->prev_insert_id)
|
||||||
|
*/
|
||||||
|
void ha_federated::update_auto_increment(void)
|
||||||
|
{
|
||||||
|
THD *thd= current_thd;
|
||||||
|
DBUG_ENTER("ha_federated::update_auto_increment");
|
||||||
|
|
||||||
|
thd->insert_id(mysql->last_used_con->insert_id);
|
||||||
|
DBUG_PRINT("info",("last_insert_id %d", auto_increment_value));
|
||||||
|
|
||||||
|
DBUG_VOID_RETURN;
|
||||||
|
}
|
||||||
|
|
||||||
int ha_federated::optimize(THD* thd, HA_CHECK_OPT* check_opt)
|
int ha_federated::optimize(THD* thd, HA_CHECK_OPT* check_opt)
|
||||||
{
|
{
|
||||||
|
@ -286,6 +286,7 @@ public:
|
|||||||
void position(const byte *record); //required
|
void position(const byte *record); //required
|
||||||
void info(uint); //required
|
void info(uint); //required
|
||||||
|
|
||||||
|
void update_auto_increment(void);
|
||||||
int repair(THD* thd, HA_CHECK_OPT* check_opt);
|
int repair(THD* thd, HA_CHECK_OPT* check_opt);
|
||||||
int optimize(THD* thd, HA_CHECK_OPT* check_opt);
|
int optimize(THD* thd, HA_CHECK_OPT* check_opt);
|
||||||
|
|
||||||
|
@ -2030,7 +2030,7 @@ int ha_binlog_end(THD *thd);
|
|||||||
#define ha_reset_logs(a) 0
|
#define ha_reset_logs(a) 0
|
||||||
#define ha_binlog_index_purge_file(a,b) 0
|
#define ha_binlog_index_purge_file(a,b) 0
|
||||||
#define ha_reset_slave(a)
|
#define ha_reset_slave(a)
|
||||||
#define ha_binlog_log_query(a,b,c,d,e,f);
|
#define ha_binlog_log_query(a,b,c,d,e,f,g);
|
||||||
#define ha_binlog_wait(a)
|
#define ha_binlog_wait(a)
|
||||||
#define ha_binlog_end(a) 0
|
#define ha_binlog_end(a) 0
|
||||||
#endif
|
#endif
|
||||||
|
@ -1183,7 +1183,7 @@ bool Table_triggers_list::process_triggers(THD *thd, trg_event_type event,
|
|||||||
|
|
||||||
my_error(ER_TABLEACCESS_DENIED_ERROR, MYF(0), priv_desc,
|
my_error(ER_TABLEACCESS_DENIED_ERROR, MYF(0), priv_desc,
|
||||||
thd->security_ctx->priv_user, thd->security_ctx->host_or_ip,
|
thd->security_ctx->priv_user, thd->security_ctx->host_or_ip,
|
||||||
table->s->table_name);
|
table->s->table_name.str);
|
||||||
|
|
||||||
sp_restore_security_context(thd, save_ctx);
|
sp_restore_security_context(thd, save_ctx);
|
||||||
return TRUE;
|
return TRUE;
|
||||||
|
@ -370,7 +370,6 @@ void AsyncFile::openReq(Request* request)
|
|||||||
const int mode = S_IRUSR | S_IWUSR |
|
const int mode = S_IRUSR | S_IWUSR |
|
||||||
S_IRGRP | S_IWGRP |
|
S_IRGRP | S_IWGRP |
|
||||||
S_IROTH | S_IWOTH;
|
S_IROTH | S_IWOTH;
|
||||||
retry:
|
|
||||||
if(flags & FsOpenReq::OM_CREATE_IF_NONE){
|
if(flags & FsOpenReq::OM_CREATE_IF_NONE){
|
||||||
if((theFd = ::open(theFileName.c_str(), new_flags, mode)) != -1) {
|
if((theFd = ::open(theFileName.c_str(), new_flags, mode)) != -1) {
|
||||||
close(theFd);
|
close(theFd);
|
||||||
@ -449,9 +448,21 @@ retry:
|
|||||||
}
|
}
|
||||||
if(size != 0)
|
if(size != 0)
|
||||||
{
|
{
|
||||||
|
int err = errno;
|
||||||
|
#ifdef O_DIRECT
|
||||||
|
if ((new_flags & O_DIRECT) && off == 0)
|
||||||
|
{
|
||||||
|
ndbout_c("error on first write(%d), disable O_DIRECT", err);
|
||||||
|
new_flags &= ~O_DIRECT;
|
||||||
|
close(theFd);
|
||||||
|
theFd = ::open(theFileName.c_str(), new_flags, mode);
|
||||||
|
if (theFd != -1)
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
close(theFd);
|
close(theFd);
|
||||||
unlink(theFileName.c_str());
|
unlink(theFileName.c_str());
|
||||||
request->error = errno;
|
request->error = err;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
off += request->par.open.page_size;
|
off += request->par.open.page_size;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user