mariadb/ndb/include/kernel/signaldata/BuildIndx.hpp
unknown 551ac8d69c more removing of "system" files and introducing ndb_global/my_global
BitKeeper/deleted/.del-NdbStdio.h~17be17a4f591c671:
  Delete: ndb/include/portlib/NdbStdio.h
BitKeeper/deleted/.del-NdbString.h~1f9f26341ce5f5f:
  Delete: ndb/include/util/NdbString.h
BitKeeper/deleted/.del-NdbConstant.hpp~de1038c1758cc1f9:
  Delete: ndb/include/portlib/NdbConstant.hpp
BitKeeper/deleted/.del-NdbUnistd.h~a1b3840adcd49985:
  Delete: ndb/include/portlib/NdbUnistd.h
2004-05-07 15:34:12 +02:00

307 lines
7.8 KiB
C++

/* Copyright (C) 2003 MySQL AB
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */
#ifndef BUILD_INDX_HPP
#define BUILD_INDX_HPP
#include "SignalData.hpp"
#include <NodeBitmask.hpp>
#include <signaldata/DictTabInfo.hpp>
/**
* BuildIndxReq
*
* This signal is sent by DICT to TRIX(n)
* as a request to build a secondary index
*/
class BuildIndxReq {
friend bool printBUILD_INDX_REQ(FILE * output, const Uint32 * theData, Uint32 len, Uint16 receiverBlockNo);
public:
enum RequestType {
RT_UNDEFINED = 0,
RT_USER = 1,
RT_ALTER_INDEX = 2,
RT_SYSTEMRESTART = 3,
RT_DICT_PREPARE = 1 << 4,
RT_DICT_TC = 5 << 4,
RT_DICT_TRIX = 7 << 4,
RT_DICT_TUX = 8 << 4,
RT_DICT_COMMIT = 0xC << 4,
RT_DICT_ABORT = 0xF << 4,
RT_TRIX = 7 << 8
};
STATIC_CONST( SignalLength = 9 );
STATIC_CONST( INDEX_COLUMNS = 0 );
STATIC_CONST( KEY_COLUMNS = 1 );
STATIC_CONST( NoOfSections = 2 );
private:
Uint32 m_userRef; // user block reference
Uint32 m_connectionPtr; // user "schema connection"
Uint32 m_requestInfo;
Uint32 m_buildId; // Suma subscription id
Uint32 m_buildKey; // Suma subscription key
Uint32 m_tableId; // table being indexed
Uint32 m_indexType; // from DictTabInfo::TableType
Uint32 m_indexId; // table storing index
Uint32 m_parallelism; // number of parallel insert transactions
// extra
Uint32 m_opKey;
// Sent data ends here
Uint32 m_slack[25 - SignalLength - 1];
Uint32 m_sectionBuffer[MAX_ATTRIBUTES_IN_TABLE * 2];
public:
Uint32 getUserRef() const {
return m_userRef;
}
void setUserRef(Uint32 val) {
m_userRef = val;
}
Uint32 getConnectionPtr() const {
return m_connectionPtr;
}
void setConnectionPtr(Uint32 val) {
m_connectionPtr = val;
}
BuildIndxReq::RequestType getRequestType() const {
const Uint32 val = BitmaskImpl::getField(1, &m_requestInfo, 0, 16);
return (BuildIndxReq::RequestType)val;
}
void setRequestType(BuildIndxReq::RequestType val) {
m_requestInfo = (Uint32)val;
}
Uint32 getRequestFlag() const {
const Uint32 val = BitmaskImpl::getField(1, &m_requestInfo, 16, 16);
return (BuildIndxReq::RequestType)val;
};
void addRequestFlag(Uint32 val) {
val |= BitmaskImpl::getField(1, &m_requestInfo, 16, 16);
BitmaskImpl::setField(1, &m_requestInfo, 16, 16, val);
};
Uint32 getTableId() const {
return m_tableId;
}
void setTableId(Uint32 val) {
m_tableId = val;
}
Uint32 getBuildId() const {
return m_buildId;
}
void setBuildId(Uint32 val) {
m_buildId = val;
}
Uint32 getBuildKey() const {
return m_buildKey;
}
void setBuildKey(Uint32 val) {
m_buildKey = val;
}
Uint32 getIndexType() const {
return m_indexType;
}
void setIndexType(Uint32 val) {
m_indexType = val;
}
Uint32 getIndexId() const {
return m_indexId;
}
void setIndexId(Uint32 val) {
m_indexId = val;
}
Uint32 getParallelism() const {
return m_parallelism;
}
void setParallelism(Uint32 val) {
m_parallelism = val;
}
Uint32 getOpKey() const {
return m_opKey;
}
void setOpKey(Uint32 val) {
m_opKey = val;
}
// Column order
void setColumnOrder(Uint32* indexBuf, Uint32 indexLen,
Uint32* keyBuf, Uint32 keyLen,
struct LinearSectionPtr orderPtr[]);
};
inline
void BuildIndxReq::setColumnOrder(Uint32* indexBuf, Uint32 indexLen,
Uint32* keyBuf, Uint32 keyLen,
struct LinearSectionPtr orderPtr[])
{
printf("BuildIndxReq::setColumnOrder: indexLen %u, keyLen %u\n", indexLen, keyLen);
// Copy buffers
MEMCOPY_NO_WORDS(m_sectionBuffer, indexBuf, indexLen);
MEMCOPY_NO_WORDS(m_sectionBuffer + indexLen, keyBuf, keyLen);
orderPtr[INDEX_COLUMNS].p = m_sectionBuffer;
orderPtr[INDEX_COLUMNS].sz = indexLen;
orderPtr[KEY_COLUMNS].p = m_sectionBuffer + indexLen;
orderPtr[KEY_COLUMNS].sz = keyLen;
}
/**
* BuildIndxConf
*
* This signal is sent back to DICT from TRIX
* as confirmation of succesfull index build
* (BuildIndxReq).
*/
class BuildIndxConf {
friend bool printBUILD_INDX_CONF(FILE * output, const Uint32 * theData, Uint32 len, Uint16 receiverBlockNo);
public:
STATIC_CONST( InternalLength = 3 );
STATIC_CONST( SignalLength = 6 );
private:
friend class BuildIndxRef;
Uint32 m_userRef;
Uint32 m_connectionPtr;
Uint32 m_requestInfo;
Uint32 m_tableId;
Uint32 m_indexType;
Uint32 m_indexId;
public:
Uint32 getUserRef() const {
return m_userRef;
}
void setUserRef(Uint32 val) {
m_userRef = val;
}
Uint32 getConnectionPtr() const {
return m_connectionPtr;
}
void setConnectionPtr(Uint32 val) {
m_connectionPtr = val;
}
BuildIndxReq::RequestType getRequestType() const {
return (BuildIndxReq::RequestType)m_requestInfo;
}
void setRequestType(BuildIndxReq::RequestType val) {
m_requestInfo = (Uint32)val;
}
Uint32 getTableId() const {
return m_tableId;
}
void setTableId(Uint32 val) {
m_tableId = val;
}
Uint32 getIndexType() const {
return m_indexType;
}
void setIndexType(Uint32 val) {
m_indexType = val;
}
Uint32 getIndexId() const {
return m_indexId;
}
void setIndexId(Uint32 val) {
m_indexId = val;
}
};
/**
* BuildIndxRef
*
* This signal is sent back to API from DICT/TRIX
* as refusal of a failed index creation
* (BuildIndxReq). It is also sent as refusal
* from TC to TRIX and TRIX to DICT.
*/
class BuildIndxRef {
friend bool printBUILD_INDX_REF(FILE * output, const Uint32 * theData, Uint32 len, Uint16 receiverBlockNo);
public:
enum ErrorCode {
NoError = 0,
Busy = 701,
BadRequestType = 4247,
InvalidPrimaryTable = 4249,
InvalidIndexType = 4250,
IndexNotUnique = 4251,
AllocationFailure = 4252,
InternalError = 4346
};
STATIC_CONST( SignalLength = BuildIndxConf::SignalLength + 1 );
private:
//Uint32 m_userRef;
//Uint32 m_connectionPtr;
//Uint32 m_requestInfo;
//Uint32 m_tableId;
//Uint32 m_indexType;
//Uint32 m_indexId;
BuildIndxConf m_conf;
Uint32 m_errorCode;
public:
BuildIndxConf* getConf() {
return &m_conf;
}
const BuildIndxConf* getConf() const {
return &m_conf;
}
Uint32 getUserRef() const {
return m_conf.getUserRef();
}
void setUserRef(Uint32 val) {
m_conf.setUserRef(val);
}
Uint32 getConnectionPtr() const {
return m_conf.getConnectionPtr();
}
void setConnectionPtr(Uint32 val) {
m_conf.setConnectionPtr(val);
}
BuildIndxReq::RequestType getRequestType() const {
return m_conf.getRequestType();
}
void setRequestType(BuildIndxReq::RequestType val) {
m_conf.setRequestType(val);
}
Uint32 getTableId() const {
return m_conf.getTableId();
}
void setTableId(Uint32 val) {
m_conf.setTableId(val);
}
Uint32 getIndexType() const {
return m_conf.getIndexType();
}
void setIndexType(Uint32 val) {
m_conf.setIndexType(val);
}
Uint32 getIndexId() const {
return m_conf.getIndexId();
}
void setIndexId(Uint32 val) {
m_conf.setIndexId(val);
}
BuildIndxRef::ErrorCode getErrorCode() const {
return (BuildIndxRef::ErrorCode)m_errorCode;
}
void setErrorCode(BuildIndxRef::ErrorCode val) {
m_errorCode = (Uint32)val;
}
};
#endif