mirror of
https://github.com/MariaDB/server.git
synced 2025-01-19 05:22:25 +01:00
ndb - hugo - add new method for setting primary key(s)
This commit is contained in:
parent
3ddd25f2f3
commit
3411ba8ba6
4 changed files with 87 additions and 148 deletions
|
@ -83,6 +83,8 @@ public:
|
|||
int equalForAttr(NdbOperation*,
|
||||
int attrId,
|
||||
int rowId);
|
||||
|
||||
int equalForRow(NdbOperation*, int rowid);
|
||||
|
||||
int setValues(NdbOperation*, int rowId, int updateId);
|
||||
|
||||
|
|
|
@ -188,14 +188,11 @@ HugoAsynchTransactions::pkUpdateRecordsAsynch(Ndb* pNdb,
|
|||
// Read
|
||||
// Define primary keys
|
||||
check = pOp->readTupleExclusive();
|
||||
for (a = 0; a < tab.getNoOfColumns(); a++) {
|
||||
if (tab.getColumn(a)->getPrimaryKey() == true) {
|
||||
if (equalForAttr(pOp, a, cReadRecords) != 0){
|
||||
ERR(transactions[t]->getNdbError());
|
||||
pNdb->closeTransaction(transactions[t]);
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
}
|
||||
if (equalForRow(pOp, cReadRecords) != 0)
|
||||
{
|
||||
ERR(transactions[t]->getNdbError());
|
||||
pNdb->closeTransaction(transactions[t]);
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
// Define attributes to read
|
||||
for (a = 0; a < tab.getNoOfColumns(); a++) {
|
||||
|
@ -259,15 +256,12 @@ HugoAsynchTransactions::pkUpdateRecordsAsynch(Ndb* pNdb,
|
|||
}
|
||||
|
||||
// Set search condition for the record
|
||||
for (a = 0; a < tab.getNoOfColumns(); a++) {
|
||||
if (tab.getColumn(a)->getPrimaryKey() == true) {
|
||||
if (equalForAttr(pOp, a, cRecords) != 0) {
|
||||
ERR(transactions[t]->getNdbError());
|
||||
pNdb->closeTransaction(transactions[t]);
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (equalForRow(pOp, cReadRecords) != 0)
|
||||
{
|
||||
ERR(transactions[t]->getNdbError());
|
||||
pNdb->closeTransaction(transactions[t]);
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
|
||||
// Update the record
|
||||
for (a = 0; a < tab.getNoOfColumns(); a++) {
|
||||
|
@ -396,15 +390,12 @@ HugoAsynchTransactions::executeAsynchOperation(Ndb* pNdb,
|
|||
case NO_READ:
|
||||
// Define primary keys
|
||||
check = pOp->readTuple();
|
||||
for (a = 0; a < tab.getNoOfColumns(); a++) {
|
||||
if (tab.getColumn(a)->getPrimaryKey() == true) {
|
||||
if (equalForAttr(pOp, a, cRecords) != 0){
|
||||
ERR(transactions[t]->getNdbError());
|
||||
pNdb->closeTransaction(transactions[t]);
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (equalForRow(pOp, cRecords) != 0)
|
||||
{
|
||||
ERR(transactions[t]->getNdbError());
|
||||
pNdb->closeTransaction(transactions[t]);
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
// Define attributes to read
|
||||
for (a = 0; a < tab.getNoOfColumns(); a++) {
|
||||
if ((rows[cIndex]->attributeStore(a) =
|
||||
|
@ -425,15 +416,12 @@ HugoAsynchTransactions::executeAsynchOperation(Ndb* pNdb,
|
|||
}
|
||||
|
||||
// Define primary keys
|
||||
for (a = 0; a < tab.getNoOfColumns(); a++) {
|
||||
if (tab.getColumn(a)->getPrimaryKey() == true){
|
||||
if (equalForAttr(pOp, a, cRecords) != 0) {
|
||||
ERR(transactions[t]->getNdbError());
|
||||
pNdb->closeTransaction(transactions[t]);
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (equalForRow(pOp, cRecords) != 0)
|
||||
{
|
||||
ERR(transactions[t]->getNdbError());
|
||||
pNdb->closeTransaction(transactions[t]);
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
break;
|
||||
default:
|
||||
// Should not happen...
|
||||
|
|
|
@ -111,14 +111,8 @@ rand_lock_mode:
|
|||
}
|
||||
|
||||
// Define primary keys
|
||||
for(a = 0; a<tab.getNoOfColumns(); a++){
|
||||
if (tab.getColumn(a)->getPrimaryKey() == true){
|
||||
if(equalForAttr(pOp, a, r+recordNo) != 0){
|
||||
ERR(pTrans->getNdbError());
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (equalForRow(pOp, r+recordNo) != 0)
|
||||
return NDBT_FAILED;
|
||||
|
||||
if(pIndexScanOp)
|
||||
pIndexScanOp->end_of_bound(r);
|
||||
|
@ -143,7 +137,6 @@ int HugoOperations::pkUpdateRecord(Ndb* pNdb,
|
|||
int recordNo,
|
||||
int numRecords,
|
||||
int updatesValue){
|
||||
int a;
|
||||
allocRows(numRecords);
|
||||
int check;
|
||||
for(int r=0; r < numRecords; r++){
|
||||
|
@ -172,14 +165,8 @@ HugoOperations::setValues(NdbOperation* pOp, int rowId, int updateId)
|
|||
{
|
||||
// Define primary keys
|
||||
int a;
|
||||
for(a = 0; a<tab.getNoOfColumns(); a++){
|
||||
if (tab.getColumn(a)->getPrimaryKey() == true){
|
||||
if(equalForAttr(pOp, a, rowId) != 0){
|
||||
ERR(pTrans->getNdbError());
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (equalForRow(pOp, rowId) != 0)
|
||||
return NDBT_FAILED;
|
||||
|
||||
for(a = 0; a<tab.getNoOfColumns(); a++){
|
||||
if (tab.getColumn(a)->getPrimaryKey() == false){
|
||||
|
@ -198,7 +185,7 @@ int HugoOperations::pkInsertRecord(Ndb* pNdb,
|
|||
int numRecords,
|
||||
int updatesValue){
|
||||
|
||||
int a, check;
|
||||
int check;
|
||||
for(int r=0; r < numRecords; r++){
|
||||
NdbOperation* pOp = getOperation(pTrans, NdbOperation::InsertRequest);
|
||||
if (pOp == NULL) {
|
||||
|
@ -240,14 +227,8 @@ int HugoOperations::pkWriteRecord(Ndb* pNdb,
|
|||
}
|
||||
|
||||
// Define primary keys
|
||||
for(a = 0; a<tab.getNoOfColumns(); a++){
|
||||
if (tab.getColumn(a)->getPrimaryKey() == true){
|
||||
if(equalForAttr(pOp, a, r+recordNo) != 0){
|
||||
ERR(pTrans->getNdbError());
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (equalForRow(pOp, r+recordNo) != 0)
|
||||
return NDBT_FAILED;
|
||||
|
||||
// Define attributes to update
|
||||
for(a = 0; a<tab.getNoOfColumns(); a++){
|
||||
|
@ -266,7 +247,7 @@ int HugoOperations::pkWritePartialRecord(Ndb* pNdb,
|
|||
int recordNo,
|
||||
int numRecords){
|
||||
|
||||
int a, check;
|
||||
int check;
|
||||
for(int r=0; r < numRecords; r++){
|
||||
NdbOperation* pOp = pTrans->getNdbOperation(tab.getName());
|
||||
if (pOp == NULL) {
|
||||
|
@ -281,14 +262,8 @@ int HugoOperations::pkWritePartialRecord(Ndb* pNdb,
|
|||
}
|
||||
|
||||
// Define primary keys
|
||||
for(a = 0; a<tab.getNoOfColumns(); a++){
|
||||
if (tab.getColumn(a)->getPrimaryKey() == true){
|
||||
if(equalForAttr(pOp, a, r+recordNo) != 0){
|
||||
ERR(pTrans->getNdbError());
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (equalForRow(pOp, r+recordNo) != 0)
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
return NDBT_OK;
|
||||
}
|
||||
|
@ -297,7 +272,7 @@ int HugoOperations::pkDeleteRecord(Ndb* pNdb,
|
|||
int recordNo,
|
||||
int numRecords){
|
||||
|
||||
int a, check;
|
||||
int check;
|
||||
for(int r=0; r < numRecords; r++){
|
||||
NdbOperation* pOp = getOperation(pTrans, NdbOperation::DeleteRequest);
|
||||
if (pOp == NULL) {
|
||||
|
@ -312,14 +287,8 @@ int HugoOperations::pkDeleteRecord(Ndb* pNdb,
|
|||
}
|
||||
|
||||
// Define primary keys
|
||||
for(a = 0; a<tab.getNoOfColumns(); a++){
|
||||
if (tab.getColumn(a)->getPrimaryKey() == true){
|
||||
if(equalForAttr(pOp, a, r+recordNo) != 0){
|
||||
ERR(pTrans->getNdbError());
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (equalForRow(pOp, r+recordNo) != 0)
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
return NDBT_OK;
|
||||
}
|
||||
|
@ -518,6 +487,22 @@ HugoOperations::~HugoOperations(){
|
|||
}
|
||||
}
|
||||
|
||||
int
|
||||
HugoOperations::equalForRow(NdbOperation* pOp, int row)
|
||||
{
|
||||
for(int a = 0; a<tab.getNoOfColumns(); a++)
|
||||
{
|
||||
if (tab.getColumn(a)->getPrimaryKey() == true)
|
||||
{
|
||||
if(equalForAttr(pOp, a, row) != 0)
|
||||
{
|
||||
ERR(pOp->getNdbError());
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
}
|
||||
}
|
||||
return NDBT_OK;
|
||||
}
|
||||
|
||||
int HugoOperations::equalForAttr(NdbOperation* pOp,
|
||||
int attrId,
|
||||
|
@ -676,14 +661,8 @@ int HugoOperations::indexReadRecords(Ndb*, const char * idxName, int recordNo,
|
|||
}
|
||||
|
||||
// Define primary keys
|
||||
for(a = 0; a<tab.getNoOfColumns(); a++){
|
||||
if (tab.getColumn(a)->getPrimaryKey() == true){
|
||||
if(equalForAttr(pOp, a, r+recordNo) != 0){
|
||||
ERR(pTrans->getNdbError());
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (equalForRow(pOp, r+recordNo) != 0)
|
||||
return NDBT_FAILED;
|
||||
|
||||
// Define attributes to read
|
||||
for(a = 0; a<tab.getNoOfColumns(); a++){
|
||||
|
@ -720,14 +699,8 @@ HugoOperations::indexUpdateRecord(Ndb*,
|
|||
}
|
||||
|
||||
// Define primary keys
|
||||
for(a = 0; a<tab.getNoOfColumns(); a++){
|
||||
if (tab.getColumn(a)->getPrimaryKey() == true){
|
||||
if(equalForAttr(pOp, a, r+recordNo) != 0){
|
||||
ERR(pTrans->getNdbError());
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
}
|
||||
}
|
||||
if (equalForRow(pOp, r+recordNo) != 0)
|
||||
return NDBT_FAILED;
|
||||
|
||||
// Define attributes to update
|
||||
for(a = 0; a<tab.getNoOfColumns(); a++){
|
||||
|
|
|
@ -520,10 +520,9 @@ HugoTransactions::loadTable(Ndb* pNdb,
|
|||
bool oneTrans,
|
||||
int value,
|
||||
bool abort){
|
||||
int check, a;
|
||||
int check;
|
||||
int retryAttempt = 0;
|
||||
int retryMax = 5;
|
||||
NdbOperation *pOp;
|
||||
bool first_batch = true;
|
||||
|
||||
const int org = batch;
|
||||
|
@ -667,10 +666,9 @@ HugoTransactions::loadTable(Ndb* pNdb,
|
|||
int
|
||||
HugoTransactions::fillTable(Ndb* pNdb,
|
||||
int batch){
|
||||
int check, a, b;
|
||||
int check;
|
||||
int retryAttempt = 0;
|
||||
int retryMax = 5;
|
||||
NdbOperation *pOp;
|
||||
|
||||
const int org = batch;
|
||||
const int cols = tab.getNoOfColumns();
|
||||
|
@ -791,7 +789,7 @@ HugoTransactions::pkReadRecords(Ndb* pNdb,
|
|||
int reads = 0;
|
||||
int r = 0;
|
||||
int retryAttempt = 0;
|
||||
int check, a;
|
||||
int check;
|
||||
|
||||
if (batch == 0) {
|
||||
g_info << "ERROR: Argument batch == 0 in pkReadRecords(). Not allowed." << endl;
|
||||
|
@ -910,8 +908,7 @@ HugoTransactions::pkUpdateRecords(Ndb* pNdb,
|
|||
int updated = 0;
|
||||
int r = 0;
|
||||
int retryAttempt = 0;
|
||||
int check, a, b;
|
||||
NdbOperation *pOp;
|
||||
int check, b;
|
||||
|
||||
allocRows(batch);
|
||||
|
||||
|
@ -1097,14 +1094,10 @@ HugoTransactions::pkInterpretedUpdateRecords(Ndb* pNdb,
|
|||
}
|
||||
|
||||
// Define primary keys
|
||||
for(a = 0; a<tab.getNoOfColumns(); a++){
|
||||
if (tab.getColumn(a)->getPrimaryKey() == true){
|
||||
if(equalForAttr(pOp, a, r) != 0){
|
||||
ERR(pTrans->getNdbError());
|
||||
closeTransaction(pNdb);
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
}
|
||||
if (equalForRow(pOp, r) != 0)
|
||||
{
|
||||
closeTransaction(pNdb);
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
|
||||
// Read update value
|
||||
|
@ -1153,14 +1146,10 @@ HugoTransactions::pkInterpretedUpdateRecords(Ndb* pNdb,
|
|||
}
|
||||
|
||||
// PKs
|
||||
for(a = 0; a<tab.getNoOfColumns(); a++){
|
||||
if (tab.getColumn(a)->getPrimaryKey() == true){
|
||||
if(equalForAttr(pUpdOp, a, r) != 0){
|
||||
ERR(pTrans->getNdbError());
|
||||
closeTransaction(pNdb);
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
}
|
||||
if (equalForRow(pOp, r) != 0)
|
||||
{
|
||||
closeTransaction(pNdb);
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
|
||||
// Update col
|
||||
|
@ -1236,8 +1225,7 @@ HugoTransactions::pkDelRecords(Ndb* pNdb,
|
|||
int deleted = 0;
|
||||
int r = 0;
|
||||
int retryAttempt = 0;
|
||||
int check, a;
|
||||
NdbOperation *pOp;
|
||||
int check;
|
||||
|
||||
g_info << "|- Deleting records..." << endl;
|
||||
while (r < records){
|
||||
|
@ -1335,8 +1323,7 @@ HugoTransactions::lockRecords(Ndb* pNdb,
|
|||
// and lock som other records
|
||||
int r = 0;
|
||||
int retryAttempt = 0;
|
||||
int check, a, b;
|
||||
NdbOperation *pOp;
|
||||
int check;
|
||||
NdbOperation::LockMode lm = NdbOperation::LM_Exclusive;
|
||||
|
||||
// Calculate how many records to lock in each batch
|
||||
|
@ -1522,14 +1509,10 @@ HugoTransactions::indexReadRecords(Ndb* pNdb,
|
|||
}
|
||||
|
||||
// Define primary keys
|
||||
for(a = 0; a<tab.getNoOfColumns(); a++){
|
||||
if (tab.getColumn(a)->getPrimaryKey() == true){
|
||||
if(equalForAttr(pOp, a, r+b) != 0){
|
||||
ERR(pTrans->getNdbError());
|
||||
closeTransaction(pNdb);
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
}
|
||||
if (equalForRow(pOp, r+b) != 0)
|
||||
{
|
||||
closeTransaction(pNdb);
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
|
||||
// Define attributes to read
|
||||
|
@ -1663,14 +1646,10 @@ HugoTransactions::indexUpdateRecords(Ndb* pNdb,
|
|||
}
|
||||
|
||||
// Define primary keys
|
||||
for(a = 0; a<tab.getNoOfColumns(); a++){
|
||||
if (tab.getColumn(a)->getPrimaryKey() == true){
|
||||
if(equalForAttr(pOp, a, r+b) != 0){
|
||||
ERR(pTrans->getNdbError());
|
||||
closeTransaction(pNdb);
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
}
|
||||
if (equalForRow(pOp, r+b) != 0)
|
||||
{
|
||||
closeTransaction(pNdb);
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
|
||||
// Define attributes to read
|
||||
|
@ -1733,16 +1712,13 @@ HugoTransactions::indexUpdateRecords(Ndb* pNdb,
|
|||
return NDBT_FAILED;
|
||||
}
|
||||
|
||||
if(!ordered){
|
||||
for(a = 0; a<tab.getNoOfColumns(); a++){
|
||||
if (tab.getColumn(a)->getPrimaryKey() == true){
|
||||
if(equalForAttr(pUpdOp, a, r+b) != 0){
|
||||
ERR(pTrans->getNdbError());
|
||||
closeTransaction(pNdb);
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
}
|
||||
}
|
||||
if(!ordered)
|
||||
{
|
||||
if (equalForRow(pOp, r+b) != 0)
|
||||
{
|
||||
closeTransaction(pNdb);
|
||||
return NDBT_FAILED;
|
||||
}
|
||||
}
|
||||
|
||||
for(a = 0; a<tab.getNoOfColumns(); a++){
|
||||
|
|
Loading…
Reference in a new issue