mirror of
https://github.com/MariaDB/server.git
synced 2025-08-07 00:04:31 +03:00
wl2240 - ndb - more testing
ndb/test/ndbapi/testPartitioning.cpp: Update test partitioning to add primary keys (distribution keys) incase of either - only 1 primary key - primary keys with charsets ndb/test/src/HugoCalculator.cpp: Fix so that Hugo can cope with pk's in the "end" of the table
This commit is contained in:
@@ -60,20 +60,53 @@ add_distribution_key(Ndb*, NdbDictionary::Table& tab, int when)
|
|||||||
int keys = tab.getNoOfPrimaryKeys();
|
int keys = tab.getNoOfPrimaryKeys();
|
||||||
int dks = (2 * keys + 2) / 3; dks = (dks > max_dks ? max_dks : dks);
|
int dks = (2 * keys + 2) / 3; dks = (dks > max_dks ? max_dks : dks);
|
||||||
int cnt = 0;
|
int cnt = 0;
|
||||||
ndbout_c("%s pks: %d dks: %d", tab.getName(), keys, dks);
|
|
||||||
for(unsigned i = 0; i<tab.getNoOfColumns(); i++)
|
for(unsigned i = 0; i<tab.getNoOfColumns(); i++)
|
||||||
{
|
if(tab.getColumn(i)->getPrimaryKey() &&
|
||||||
NdbDictionary::Column* col = tab.getColumn(i);
|
tab.getColumn(i)->getCharset() != 0)
|
||||||
if(col->getPrimaryKey())
|
|
||||||
{
|
|
||||||
if(dks >= keys || (rand() % 100) > 50)
|
|
||||||
{
|
|
||||||
col->setDistributionKey(true);
|
|
||||||
dks--;
|
|
||||||
}
|
|
||||||
keys--;
|
keys--;
|
||||||
|
|
||||||
|
Uint32 max = NDB_MAX_NO_OF_ATTRIBUTES_IN_KEY - tab.getNoOfPrimaryKeys();
|
||||||
|
|
||||||
|
if(max_dks < max)
|
||||||
|
max = max_dks;
|
||||||
|
|
||||||
|
if(keys <= 1 && max > 0)
|
||||||
|
{
|
||||||
|
dks = 1 + (rand() % max);
|
||||||
|
ndbout_c("%s pks: %d dks: %d", tab.getName(), keys, dks);
|
||||||
|
while(dks--)
|
||||||
|
{
|
||||||
|
NdbDictionary::Column col;
|
||||||
|
BaseString name;
|
||||||
|
name.assfmt("PK_DK_%d", dks);
|
||||||
|
col.setName(name.c_str());
|
||||||
|
col.setType(NdbDictionary::Column::Unsigned);
|
||||||
|
col.setLength(1);
|
||||||
|
col.setNullable(false);
|
||||||
|
col.setPrimaryKey(1);
|
||||||
|
col.setDistributionKey(true);
|
||||||
|
tab.addColumn(col);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for(unsigned i = 0; i<tab.getNoOfColumns(); i++)
|
||||||
|
{
|
||||||
|
NdbDictionary::Column* col = tab.getColumn(i);
|
||||||
|
if(col->getPrimaryKey() && col->getCharset() == 0)
|
||||||
|
{
|
||||||
|
if(dks >= keys || (rand() % 100) > 50)
|
||||||
|
{
|
||||||
|
col->setDistributionKey(true);
|
||||||
|
dks--;
|
||||||
|
}
|
||||||
|
keys--;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
ndbout << (NDBT_Table&)tab << endl;
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -81,7 +114,7 @@ static int
|
|||||||
run_create_table(NDBT_Context* ctx, NDBT_Step* step)
|
run_create_table(NDBT_Context* ctx, NDBT_Step* step)
|
||||||
{
|
{
|
||||||
max_dks = ctx->getProperty("distributionkey", (unsigned)0);
|
max_dks = ctx->getProperty("distributionkey", (unsigned)0);
|
||||||
|
|
||||||
if(NDBT_Tables::createTable(GETNDB(step),
|
if(NDBT_Tables::createTable(GETNDB(step),
|
||||||
ctx->getTab()->getName(),
|
ctx->getTab()->getName(),
|
||||||
false, false,
|
false, false,
|
||||||
|
@@ -40,7 +40,8 @@ HugoCalculator::HugoCalculator(const NdbDictionary::Table& tab) : m_tab(tab) {
|
|||||||
// The "number of updates" column for this table is found in the last column
|
// The "number of updates" column for this table is found in the last column
|
||||||
for (i=m_tab.getNoOfColumns()-1; i>=0; i--){
|
for (i=m_tab.getNoOfColumns()-1; i>=0; i--){
|
||||||
const NdbDictionary::Column* attr = m_tab.getColumn(i);
|
const NdbDictionary::Column* attr = m_tab.getColumn(i);
|
||||||
if (attr->getType() == NdbDictionary::Column::Unsigned){
|
if (attr->getType() == NdbDictionary::Column::Unsigned &&
|
||||||
|
!attr->getPrimaryKey()){
|
||||||
m_updatesCol = i;
|
m_updatesCol = i;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user