Commit 7540feca authored by unknown's avatar unknown
Browse files

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

added testcase

parent b8f24215
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -75,6 +75,7 @@ drop table t1;
DROP TABLE IF EXISTS t2;
create table t2 (a int NOT NULL PRIMARY KEY) engine=myisam;
alter table t2 engine=ndbcluster;
alter table t2 add c int;
delete from t2;
ERROR HY000: Got temporary error 1217 '1217' from ndbcluster
select count(*) from t2 where a+0 > 0;
+1 −0
Original line number Diff line number Diff line
@@ -62,6 +62,7 @@ while ($1)
}
enable_query_log;
alter table t2 engine=ndbcluster;
alter table t2 add c int;
--error 1297
delete from t2;
#to make sure we do a full table scan
+2 −0
Original line number Diff line number Diff line
@@ -201,7 +201,9 @@ NdbConnection::restart(){
    } else {
      theNdb->theFirstTransId = tTransid + 1;
    }
    theCommitStatus = Started;
    theCompletionStatus = NotCompleted;
    theTransactionIsStarted = false;
    DBUG_RETURN(0);
  }
  DBUG_PRINT("error",("theCompletionStatus != CompletedSuccess"));
+9 −23
Original line number Diff line number Diff line
@@ -1451,7 +1451,8 @@ int ha_ndbcluster::write_row(byte *record)
			(int)rows_inserted, (int)bulk_insert_rows));

    bulk_insert_not_flushed= false;
    if (thd->transaction.on) {
    if (thd->transaction.on)
    {
      if (trans->execute(NoCommit) != 0)
      {
	skip_auto_increment= true;
@@ -1465,22 +1466,7 @@ int ha_ndbcluster::write_row(byte *record)
	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;
	ERR_RETURN(m_ndb->getNdbError());
      }
      trans= m_active_trans;
#endif
    }
  }
  if ((has_auto_increment) && (skip_auto_increment))