summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormskold@mysql.com <>2005-04-07 18:37:04 +0200
committermskold@mysql.com <>2005-04-07 18:37:04 +0200
commite66eaaa2a0afd297930f7957f1765103db373492 (patch)
tree51706344431896fc3c3f558c78bcb2d19822d2c8
parent280fda609322846dd75564307128fcb41ee5779f (diff)
parentb135b175fa47036abd4d7b110d59716ab046c2db (diff)
downloadmariadb-git-e66eaaa2a0afd297930f7957f1765103db373492.tar.gz
Merge
-rw-r--r--mysql-test/t/ndb_basic.test25
-rw-r--r--ndb/src/ndbapi/Ndb.cpp36
-rw-r--r--sql/ha_ndbcluster.cc6
3 files changed, 52 insertions, 15 deletions
diff --git a/mysql-test/t/ndb_basic.test b/mysql-test/t/ndb_basic.test
index a6064f30556..1b4402c5bdd 100644
--- a/mysql-test/t/ndb_basic.test
+++ b/mysql-test/t/ndb_basic.test
@@ -577,3 +577,28 @@ create table t1
engine=ndb
max_rows=1;
drop table t1;
+
+#
+# Test auto_increment
+#
+
+connect (con1,localhost,,,test);
+connect (con2,localhost,,,test);
+
+create table t1
+ (counter int(64) NOT NULL auto_increment,
+ datavalue char(40) default 'XXXX',
+ primary key (counter)
+ ) ENGINE=ndbcluster;
+
+connection con1;
+insert into t1 (datavalue) values ('newval');
+insert into t1 (datavalue) values ('newval');
+select * from t1 order by counter;
+insert into t1 (datavalue) select datavalue from t1 where counter < 100;
+select * from t1 order by counter;
+connection con2;
+insert into t1 (datavalue) select datavalue from t1 where counter < 100;
+select * from t1 order by counter;
+
+drop table t1;
diff --git a/ndb/src/ndbapi/Ndb.cpp b/ndb/src/ndbapi/Ndb.cpp
index b047ae1bd1a..651415cdc00 100644
--- a/ndb/src/ndbapi/Ndb.cpp
+++ b/ndb/src/ndbapi/Ndb.cpp
@@ -756,26 +756,28 @@ Remark: Returns a new TupleId to the application.
Uint64
Ndb::getAutoIncrementValue(const char* aTableName, Uint32 cacheSize)
{
- DEBUG_TRACE("getAutoIncrementValue");
+ DBUG_ENTER("getAutoIncrementValue");
const char * internalTableName = internalizeTableName(aTableName);
Ndb_local_table_info *info=
theDictionary->get_local_table_info(internalTableName, false);
if (info == 0)
- return ~0;
+ DBUG_RETURN(~0);
const NdbTableImpl *table= info->m_table_impl;
Uint64 tupleId = getTupleIdFromNdb(table->m_tableId, cacheSize);
- return tupleId;
+ DBUG_PRINT("info", ("value %u", tupleId));
+ DBUG_RETURN(tupleId);
}
Uint64
Ndb::getAutoIncrementValue(const NdbDictionary::Table * aTable, Uint32 cacheSize)
{
- DEBUG_TRACE("getAutoIncrementValue");
+ DBUG_ENTER("getAutoIncrementValue");
if (aTable == 0)
- return ~0;
+ DBUG_RETURN(~0);
const NdbTableImpl* table = & NdbTableImpl::getImpl(*aTable);
Uint64 tupleId = getTupleIdFromNdb(table->m_tableId, cacheSize);
- return tupleId;
+ DBUG_PRINT("info", ("value %u", tupleId));
+ DBUG_RETURN(tupleId);
}
Uint64
@@ -790,39 +792,45 @@ Ndb::getTupleIdFromNdb(const char* aTableName, Uint32 cacheSize)
Uint64
Ndb::getTupleIdFromNdb(Uint32 aTableId, Uint32 cacheSize)
{
+ DBUG_ENTER("getTupleIdFromNdb");
if ( theFirstTupleId[aTableId] != theLastTupleId[aTableId] )
{
theFirstTupleId[aTableId]++;
- return theFirstTupleId[aTableId];
+ DBUG_PRINT("info", ("next cached value %u", theFirstTupleId[aTableId]));
+ DBUG_RETURN(theFirstTupleId[aTableId]);
}
else // theFirstTupleId == theLastTupleId
{
- return opTupleIdOnNdb(aTableId, cacheSize, 0);
+ DBUG_PRINT("info",("reading %u values from database",
+ (cacheSize == 0) ? 1 : cacheSize));
+ DBUG_RETURN(opTupleIdOnNdb(aTableId, (cacheSize == 0) ? 1 : cacheSize, 0));
}
}
Uint64
Ndb::readAutoIncrementValue(const char* aTableName)
{
- DEBUG_TRACE("readtAutoIncrementValue");
+ DBUG_ENTER("readtAutoIncrementValue");
const NdbTableImpl* table = theDictionary->getTable(aTableName);
if (table == 0) {
theError= theDictionary->getNdbError();
- return ~0;
+ DBUG_RETURN(~0);
}
Uint64 tupleId = readTupleIdFromNdb(table->m_tableId);
- return tupleId;
+ DBUG_PRINT("info", ("value %u", tupleId));
+ DBUG_RETURN(tupleId);
}
Uint64
Ndb::readAutoIncrementValue(const NdbDictionary::Table * aTable)
{
- DEBUG_TRACE("readtAutoIncrementValue");
+ DBUG_ENTER("readtAutoIncrementValue");
if (aTable == 0)
- return ~0;
+ DBUG_RETURN(~0);
const NdbTableImpl* table = & NdbTableImpl::getImpl(*aTable);
Uint64 tupleId = readTupleIdFromNdb(table->m_tableId);
- return tupleId;
+ DBUG_PRINT("info", ("value %u", tupleId));
+ DBUG_RETURN(tupleId);
}
Uint64
diff --git a/sql/ha_ndbcluster.cc b/sql/ha_ndbcluster.cc
index 0668c3db7a8..c1a2f746d44 100644
--- a/sql/ha_ndbcluster.cc
+++ b/sql/ha_ndbcluster.cc
@@ -2970,7 +2970,11 @@ void ha_ndbcluster::start_bulk_insert(ha_rows rows)
DBUG_PRINT("enter", ("rows: %d", (int)rows));
m_rows_inserted= 0;
- m_rows_to_insert= rows;
+ if (rows == 0)
+ /* We don't know how many will be inserted, guess */
+ m_rows_to_insert= m_autoincrement_prefetch;
+ else
+ m_rows_to_insert= rows;
/*
Calculate how many rows that should be inserted