⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 ndbdictionaryimpl.cpp

📁 mysql-5.0.22.tar.gz源码包
💻 CPP
📖 第 1 页 / 共 5 页
字号:
  if(m_replicaCount > 0)  {    Uint32 fragmentId = hashValue & m_hashValueMask;    if(fragmentId < m_hashpointerValue)     {      fragmentId = hashValue & ((m_hashValueMask << 1) + 1);    }    Uint32 pos = fragmentId * m_replicaCount;    if(pos + m_replicaCount <= m_fragments.size())    {      * nodes = m_fragments.getBase()+pos;      return m_replicaCount;    }  }  return 0;}  /** * NdbIndexImpl */NdbIndexImpl::NdbIndexImpl() :   NdbDictionary::Index(* this),   m_facade(this){  init();}NdbIndexImpl::NdbIndexImpl(NdbDictionary::Index & f) :   NdbDictionary::Index(* this),   m_facade(&f){  init();}void NdbIndexImpl::init(){  m_indexId= RNIL;  m_type= NdbDictionary::Index::Undefined;  m_logging= true;  m_table= NULL;}NdbIndexImpl::~NdbIndexImpl(){  for (unsigned i = 0; i < m_columns.size(); i++)    delete m_columns[i];  }void NdbIndexImpl::setName(const char * name){  m_externalName.assign(name);}const char * NdbIndexImpl::getName() const{  return m_externalName.c_str();} void NdbIndexImpl::setTable(const char * table){  m_tableName.assign(table);} const char * NdbIndexImpl::getTable() const{  return m_tableName.c_str();}const NdbTableImpl *NdbIndexImpl::getIndexTable() const{  return m_table;}/** * NdbEventImpl */NdbEventImpl::NdbEventImpl() :   NdbDictionary::Event(* this),  m_facade(this){  init();}NdbEventImpl::NdbEventImpl(NdbDictionary::Event & f) :   NdbDictionary::Event(* this),  m_facade(&f){  init();}void NdbEventImpl::init(){  m_eventId= RNIL;  m_eventKey= RNIL;  m_tableId= RNIL;  mi_type= 0;  m_dur= NdbDictionary::Event::ED_UNDEFINED;  m_tableImpl= NULL;  m_bufferId= RNIL;  eventOp= NULL;}NdbEventImpl::~NdbEventImpl(){  for (unsigned i = 0; i < m_columns.size(); i++)    delete  m_columns[i];}void NdbEventImpl::setName(const char * name){  m_externalName.assign(name);}const char *NdbEventImpl::getName() const{  return m_externalName.c_str();}void NdbEventImpl::setTable(const NdbDictionary::Table& table){  m_tableImpl= &NdbTableImpl::getImpl(table);  m_tableName.assign(m_tableImpl->getName());}void NdbEventImpl::setTable(const char * table){  m_tableName.assign(table);}const char *NdbEventImpl::getTableName() const{  return m_tableName.c_str();}voidNdbEventImpl::addTableEvent(const NdbDictionary::Event::TableEvent t =  NdbDictionary::Event::TE_ALL){  switch (t) {  case NdbDictionary::Event::TE_INSERT : mi_type |= 1; break;  case NdbDictionary::Event::TE_DELETE : mi_type |= 2; break;  case NdbDictionary::Event::TE_UPDATE : mi_type |= 4; break;  default: mi_type = 4 | 2 | 1; // all types  }}voidNdbEventImpl::setDurability(NdbDictionary::Event::EventDurability d){  m_dur = d;}NdbDictionary::Event::EventDurabilityNdbEventImpl::getDurability() const{  return m_dur;}int NdbEventImpl::getNoOfEventColumns() const{  return m_attrIds.size() + m_columns.size();}/** * NdbDictionaryImpl */NdbDictionaryImpl::NdbDictionaryImpl(Ndb &ndb)  : NdbDictionary::Dictionary(* this),     m_facade(this),     m_receiver(m_error),    m_ndb(ndb){  m_globalHash = 0;  m_local_table_data_size= 0;}NdbDictionaryImpl::NdbDictionaryImpl(Ndb &ndb,				     NdbDictionary::Dictionary & f)  : NdbDictionary::Dictionary(* this),     m_facade(&f),     m_receiver(m_error),    m_ndb(ndb){  m_globalHash = 0;  m_local_table_data_size= 0;}static int f_dictionary_count = 0;NdbDictionaryImpl::~NdbDictionaryImpl(){  NdbElement_t<Ndb_local_table_info> * curr = m_localHash.m_tableHash.getNext(0);  if(m_globalHash){    while(curr != 0){      m_globalHash->lock();      m_globalHash->release(curr->theData->m_table_impl);      Ndb_local_table_info::destroy(curr->theData);      m_globalHash->unlock();            curr = m_localHash.m_tableHash.getNext(curr);    }        m_globalHash->lock();    if(--f_dictionary_count == 0){      delete NdbDictionary::Column::FRAGMENT;       delete NdbDictionary::Column::FRAGMENT_MEMORY;      delete NdbDictionary::Column::ROW_COUNT;      delete NdbDictionary::Column::COMMIT_COUNT;      delete NdbDictionary::Column::ROW_SIZE;      delete NdbDictionary::Column::RANGE_NO;      NdbDictionary::Column::FRAGMENT= 0;      NdbDictionary::Column::FRAGMENT_MEMORY= 0;      NdbDictionary::Column::ROW_COUNT= 0;      NdbDictionary::Column::COMMIT_COUNT= 0;      NdbDictionary::Column::ROW_SIZE= 0;      NdbDictionary::Column::RANGE_NO= 0;    }    m_globalHash->unlock();  } else {    assert(curr == 0);  }}Ndb_local_table_info *NdbDictionaryImpl::fetchGlobalTableImpl(const BaseString& internalTableName){  NdbTableImpl *impl;  m_globalHash->lock();  impl = m_globalHash->get(internalTableName.c_str());  m_globalHash->unlock();  if (impl == 0){    impl = m_receiver.getTable(internalTableName,			       m_ndb.usingFullyQualifiedNames());    m_globalHash->lock();    m_globalHash->put(internalTableName.c_str(), impl);    m_globalHash->unlock();        if(impl == 0){      return 0;    }  }  Ndb_local_table_info *info=    Ndb_local_table_info::create(impl, m_local_table_data_size);  m_localHash.put(internalTableName.c_str(), info);  m_ndb.theFirstTupleId[impl->getTableId()] = ~0;  m_ndb.theLastTupleId[impl->getTableId()]  = ~0;    return info;}#if 0boolNdbDictionaryImpl::setTransporter(class TransporterFacade * tf){  if(tf != 0){    m_globalHash = &tf->m_globalDictCache;    return m_receiver.setTransporter(tf);  }    return false;}#endifboolNdbDictionaryImpl::setTransporter(class Ndb* ndb, 				  class TransporterFacade * tf){  m_globalHash = &tf->m_globalDictCache;  if(m_receiver.setTransporter(ndb, tf)){    m_globalHash->lock();    if(f_dictionary_count++ == 0){      NdbDictionary::Column::FRAGMENT= 	NdbColumnImpl::create_psuedo("NDB$FRAGMENT");      NdbDictionary::Column::FRAGMENT_MEMORY= 	NdbColumnImpl::create_psuedo("NDB$FRAGMENT_MEMORY");      NdbDictionary::Column::ROW_COUNT= 	NdbColumnImpl::create_psuedo("NDB$ROW_COUNT");      NdbDictionary::Column::COMMIT_COUNT= 	NdbColumnImpl::create_psuedo("NDB$COMMIT_COUNT");      NdbDictionary::Column::ROW_SIZE=	NdbColumnImpl::create_psuedo("NDB$ROW_SIZE");      NdbDictionary::Column::RANGE_NO= 	NdbColumnImpl::create_psuedo("NDB$RANGE_NO");    }    m_globalHash->unlock();    return true;  }  return false;}NdbTableImpl *NdbDictionaryImpl::getIndexTable(NdbIndexImpl * index,				 NdbTableImpl * table){  const BaseString internalName(    m_ndb.internalize_index_name(table, index->getName()));  return getTable(m_ndb.externalizeTableName(internalName.c_str()));}#if 0boolNdbDictInterface::setTransporter(class TransporterFacade * tf){  if(tf == 0)    return false;    Guard g(tf->theMutexPtr);    m_blockNumber = tf->open(this,			   execSignal,			   execNodeStatus);    if ( m_blockNumber == -1 ) {    m_error.code= 4105;    return false; // no more free blocknumbers  }//if  Uint32 theNode = tf->ownId();  m_reference = numberToRef(m_blockNumber, theNode);  m_transporter = tf;  m_waiter.m_mutex = tf->theMutexPtr;  return true;}#endifboolNdbDictInterface::setTransporter(class Ndb* ndb, class TransporterFacade * tf){  m_reference = ndb->getReference();  m_transporter = tf;  m_waiter.m_mutex = tf->theMutexPtr;    return true;}NdbDictInterface::~NdbDictInterface(){}void NdbDictInterface::execSignal(void* dictImpl, 			     class NdbApiSignal* signal, 			     class LinearSectionPtr ptr[3]){  NdbDictInterface * tmp = (NdbDictInterface*)dictImpl;    const Uint32 gsn = signal->readSignalNumber();  switch(gsn){  case GSN_GET_TABINFOREF:    tmp->execGET_TABINFO_REF(signal, ptr);    break;  case GSN_GET_TABINFO_CONF:    tmp->execGET_TABINFO_CONF(signal, ptr);    break;  case GSN_CREATE_TABLE_REF:    tmp->execCREATE_TABLE_REF(signal, ptr);    break;  case GSN_CREATE_TABLE_CONF:    tmp->execCREATE_TABLE_CONF(signal, ptr);    break;  case GSN_DROP_TABLE_REF:    tmp->execDROP_TABLE_REF(signal, ptr);    break;  case GSN_DROP_TABLE_CONF:    tmp->execDROP_TABLE_CONF(signal, ptr);    break;  case GSN_ALTER_TABLE_REF:    tmp->execALTER_TABLE_REF(signal, ptr);    break;  case GSN_ALTER_TABLE_CONF:    tmp->execALTER_TABLE_CONF(signal, ptr);    break;  case GSN_CREATE_INDX_REF:    tmp->execCREATE_INDX_REF(signal, ptr);    break;  case GSN_CREATE_INDX_CONF:    tmp->execCREATE_INDX_CONF(signal, ptr);    break;  case GSN_DROP_INDX_REF:    tmp->execDROP_INDX_REF(signal, ptr);    break;  case GSN_DROP_INDX_CONF:    tmp->execDROP_INDX_CONF(signal, ptr);    break;  case GSN_CREATE_EVNT_REF:    tmp->execCREATE_EVNT_REF(signal, ptr);    break;  case GSN_CREATE_EVNT_CONF:    tmp->execCREATE_EVNT_CONF(signal, ptr);    break;  case GSN_SUB_START_CONF:    tmp->execSUB_START_CONF(signal, ptr);    break;  case GSN_SUB_START_REF:    tmp->execSUB_START_REF(signal, ptr);    break;  case GSN_SUB_TABLE_DATA:    tmp->execSUB_TABLE_DATA(signal, ptr);    break;  case GSN_SUB_GCP_COMPLETE_REP:    tmp->execSUB_GCP_COMPLETE_REP(signal, ptr);    break;  case GSN_SUB_STOP_CONF:    tmp->execSUB_STOP_CONF(signal, ptr);    break;  case GSN_SUB_STOP_REF:    tmp->execSUB_STOP_REF(signal, ptr);    break;  case GSN_DROP_EVNT_REF:    tmp->execDROP_EVNT_REF(signal, ptr);    break;  case GSN_DROP_EVNT_CONF:    tmp->execDROP_EVNT_CONF(signal, ptr);    break;  case GSN_LIST_TABLES_CONF:    tmp->execLIST_TABLES_CONF(signal, ptr);    break;  default:    abort();  }}voidNdbDictInterface::execNodeStatus(void* dictImpl, Uint32 aNode,				 bool alive, bool nfCompleted){  NdbDictInterface * tmp = (NdbDictInterface*)dictImpl;    if(!alive && !nfCompleted){    return;  }    if (!alive && nfCompleted){    tmp->m_waiter.nodeFail(aNode);  }}intNdbDictInterface::dictSignal(NdbApiSignal* signal, 			     LinearSectionPtr ptr[3],int noLSP,			     const int useMasterNodeId,			     const Uint32 RETRIES,			     const WaitSignalType wst,			     const int theWait,			     const int *errcodes,			     const int noerrcodes,			     const int temporaryMask){  DBUG_ENTER("NdbDictInterface::dictSignal");  DBUG_PRINT("enter", ("useMasterNodeId: %d", useMasterNodeId));  for(Uint32 i = 0; i<RETRIES; i++){    //if (useMasterNodeId == 0)    m_buffer.clear();    // Protected area    m_transporter->lock_mutex();    Uint32 aNodeId;    if (useMasterNodeId) {      if ((m_masterNodeId == 0) ||	  (!m_transporter->get_node_alive(m_masterNodeId))) {	m_masterNodeId = m_transporter->get_an_alive_node();      }//if      aNodeId = m_masterNodeId;    } else {      aNodeId = m_transporter->get_an_alive_node();    }    if(aNodeId == 0){      m_error.code= 4009;      m_transporter->unlock_mutex();      DBUG_RETURN(-1);    }    {      int r;      if (ptr) {#ifdef EVENT_DEBUG	printf("Long signal %d ptr", noLSP);	for (int q=0;q<noLSP;q++) {	  printf(" sz %d", ptr[q].sz);	}	printf("\n");#endif	r = m_transporter->sendFragmentedSignal(signal, aNodeId, ptr, noLSP);      } else {#ifdef EVENT_DEBUG	printf("Short signal\n");#endif	r = m_transporter->sendSignal(signal, aNodeId);      }      if(r != 0){	m_transporter->unlock_mutex();	continue;      }

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -