diff options
author | mskold@mysql.com <> | 2005-10-14 11:23:02 +0200 |
---|---|---|
committer | mskold@mysql.com <> | 2005-10-14 11:23:02 +0200 |
commit | f9b58b0805d54d6066687ce5996afc703d54cf7e (patch) | |
tree | 3cbcbef4ccf762c0d54c20605564491114cc06bd /sql/ha_ndbcluster.cc | |
parent | 5e204d46f1999bf04f0bfd6736e4feb8b15f1235 (diff) | |
download | mariadb-git-f9b58b0805d54d6066687ce5996afc703d54cf7e.tar.gz |
Fix for Bug #13961 Triggers on tables with auto_increment insert bogus values into table (clean version)
Diffstat (limited to 'sql/ha_ndbcluster.cc')
-rw-r--r-- | sql/ha_ndbcluster.cc | 30 |
1 files changed, 16 insertions, 14 deletions
diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc index c478e565220..608dc3eaa54 100644 --- a/sql/ha_ndbcluster.cc +++ b/sql/ha_ndbcluster.cc @@ -3177,7 +3177,7 @@ int ha_ndbcluster::external_lock(THD *thd, int lock_type) { PRINT_OPTION_FLAGS(thd); - if (!(thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN | OPTION_TABLE_LOCK))) + if (!(thd->options & (OPTION_NOT_AUTOCOMMIT | OPTION_BEGIN))) { // Autocommit transaction DBUG_ASSERT(!thd->transaction.stmt.ndb_tid); @@ -3328,11 +3328,11 @@ int ha_ndbcluster::external_lock(THD *thd, int lock_type) } /* - When using LOCK TABLE's external_lock is only called when the actual - TABLE LOCK is done. - Under LOCK TABLES, each used tables will force a call to start_stmt. - Ndb doesn't currently support table locks, and will do ordinary - startTransaction for each transaction/statement. + Start a transaction for running a statement if one is not + already running in a transaction. This will be the case in + a BEGIN; COMMIT; block + When using LOCK TABLE's external_lock will start a transaction + since ndb does not currently does not support table locking */ int ha_ndbcluster::start_stmt(THD *thd) @@ -3341,16 +3341,13 @@ int ha_ndbcluster::start_stmt(THD *thd) DBUG_ENTER("start_stmt"); PRINT_OPTION_FLAGS(thd); - NdbConnection *trans= (NdbConnection*)thd->transaction.stmt.ndb_tid; + NdbConnection *trans= + (thd->transaction.stmt.ndb_tid) + ? (NdbConnection *)(thd->transaction.stmt.ndb_tid) + : (NdbConnection *)(thd->transaction.all.ndb_tid); if (!trans){ Ndb *ndb= ((Thd_ndb*)thd->transaction.thd_ndb)->ndb; DBUG_PRINT("trans",("Starting transaction stmt")); - - NdbConnection *tablock_trans= - (NdbConnection*)thd->transaction.all.ndb_tid; - DBUG_PRINT("info", ("tablock_trans: %x", (UintPtr)tablock_trans)); - DBUG_ASSERT(tablock_trans); -// trans= ndb->hupp(tablock_trans); trans= ndb->startTransaction(); if (trans == NULL) ERR_RETURN(ndb->getNdbError()); @@ -4041,7 +4038,12 @@ longlong ha_ndbcluster::get_auto_increment() --retries && ndb->getNdbError().status == NdbError::TemporaryError); if (auto_value == NDB_FAILED_AUTO_INCREMENT) - ERR_RETURN(ndb->getNdbError()); + { + const NdbError err= ndb->getNdbError(); + sql_print_error("Error %lu in ::get_auto_increment(): %s", + (ulong) err.code, err.message); + DBUG_RETURN(~(ulonglong) 0); + } DBUG_RETURN((longlong)auto_value); } |