Commit 7d192fcb authored by tomas@poseidon.(none)'s avatar tomas@poseidon.(none)

fixed NdbConnection::restart and made use of it in ha_ndbcluster

added testcase
parent 01879785
...@@ -75,6 +75,7 @@ drop table t1; ...@@ -75,6 +75,7 @@ drop table t1;
DROP TABLE IF EXISTS t2; DROP TABLE IF EXISTS t2;
create table t2 (a int NOT NULL PRIMARY KEY) engine=myisam; create table t2 (a int NOT NULL PRIMARY KEY) engine=myisam;
alter table t2 engine=ndbcluster; alter table t2 engine=ndbcluster;
alter table t2 add c int;
delete from t2; delete from t2;
ERROR HY000: Got temporary error 1217 '1217' from ndbcluster ERROR HY000: Got temporary error 1217 '1217' from ndbcluster
select count(*) from t2 where a+0 > 0; select count(*) from t2 where a+0 > 0;
......
...@@ -62,6 +62,7 @@ while ($1) ...@@ -62,6 +62,7 @@ while ($1)
} }
enable_query_log; enable_query_log;
alter table t2 engine=ndbcluster; alter table t2 engine=ndbcluster;
alter table t2 add c int;
--error 1297 --error 1297
delete from t2; delete from t2;
#to make sure we do a full table scan #to make sure we do a full table scan
......
...@@ -201,7 +201,9 @@ NdbConnection::restart(){ ...@@ -201,7 +201,9 @@ NdbConnection::restart(){
} else { } else {
theNdb->theFirstTransId = tTransid + 1; theNdb->theFirstTransId = tTransid + 1;
} }
theCommitStatus = Started;
theCompletionStatus = NotCompleted; theCompletionStatus = NotCompleted;
theTransactionIsStarted = false;
DBUG_RETURN(0); DBUG_RETURN(0);
} }
DBUG_PRINT("error",("theCompletionStatus != CompletedSuccess")); DBUG_PRINT("error",("theCompletionStatus != CompletedSuccess"));
......
...@@ -1451,36 +1451,22 @@ int ha_ndbcluster::write_row(byte *record) ...@@ -1451,36 +1451,22 @@ int ha_ndbcluster::write_row(byte *record)
(int)rows_inserted, (int)bulk_insert_rows)); (int)rows_inserted, (int)bulk_insert_rows));
bulk_insert_not_flushed= false; bulk_insert_not_flushed= false;
if (thd->transaction.on) { if (thd->transaction.on)
if (trans->execute(NoCommit) != 0) {
{ if (trans->execute(NoCommit) != 0)
skip_auto_increment= true; {
DBUG_RETURN(ndb_err(trans)); skip_auto_increment= true;
} DBUG_RETURN(ndb_err(trans));
}
} }
else else
{ {
if (trans->execute(Commit) != 0) if (trans->execute(Commit) != 0)
{
skip_auto_increment= true;
DBUG_RETURN(ndb_err(trans));
}
#if 0 // this is what we want to use but it is not functional
trans->restart();
#else
m_ndb->closeTransaction(m_active_trans);
m_active_trans= m_ndb->startTransaction();
if (thd->transaction.all.ndb_tid)
thd->transaction.all.ndb_tid= m_active_trans;
else
thd->transaction.stmt.ndb_tid= m_active_trans;
if (m_active_trans == NULL)
{ {
skip_auto_increment= true; skip_auto_increment= true;
ERR_RETURN(m_ndb->getNdbError()); DBUG_RETURN(ndb_err(trans));
} }
trans= m_active_trans; trans->restart();
#endif
} }
} }
if ((has_auto_increment) && (skip_auto_increment)) if ((has_auto_increment) && (skip_auto_increment))
......
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