INT32 _pmdDataProcessor::_onTransBeginMsg () { INT32 rc = SDB_OK ; if ( pmdGetDBRole() != SDB_ROLE_STANDALONE ) { rc = SDB_PERM ; PD_LOG( PDERROR, "In sharding mode, couldn't execute " "transaction operation from local service" ) ; goto error ; } else { rc = rtnTransBegin( eduCB() ) ; } done: return rc ; error: goto done ; }
// PD_TRACE_DECLARE_FUNCTION( SDB__QGMPLCOMMAND__EXECONDATA, "_qgmPlCommand::_executeOnData" ) INT32 _qgmPlCommand::_executeOnData( _pmdEDUCB *eduCB ) { PD_TRACE_ENTRY( SDB__QGMPLCOMMAND__EXECONDATA ) ; INT32 rc = SDB_OK ; pmdKRCB *pKrcb = pmdGetKRCB(); SDB_DMSCB *dmsCB = pKrcb->getDMSCB() ; SDB_DPSCB *dpsCB = pKrcb->getDPSCB() ; SDB_RTNCB *rtnCB = pKrcb->getRTNCB() ; if ( dpsCB && eduCB->isFromLocal() && !dpsCB->isLogLocal() ) { dpsCB = NULL ; } if ( SQL_GRAMMAR::CRTCS == _commandType ) { rc = rtnCreateCollectionSpaceCommand( _fullName.toString().c_str(), eduCB, dmsCB, dpsCB ) ; } else if ( SQL_GRAMMAR::DROPCS == _commandType ) { rc = rtnDropCollectionSpaceCommand( _fullName.toString().c_str(), eduCB, dmsCB, dpsCB ) ; } else if ( SQL_GRAMMAR::CRTCL == _commandType ) { if ( _partition.isEmpty() ) { rc = rtnCreateCollectionCommand( _fullName.toString().c_str(), 0, eduCB, dmsCB, dpsCB ) ; } else { rc = rtnCreateCollectionCommand( _fullName.toString().c_str(), _partition, 0, eduCB, dmsCB, dpsCB ) ; } } else if ( SQL_GRAMMAR::DROPCL == _commandType ) { rc = rtnDropCollectionCommand( _fullName.toString().c_str(), eduCB, dmsCB, dpsCB ) ; } else if ( SQL_GRAMMAR::CRTINDEX == _commandType ) { BSONObjBuilder builder ; BSONObj index ; qgmOPFieldVec::const_iterator itr = _indexColumns.begin() ; for ( ; itr != _indexColumns.end(); itr++ ) { builder.append( itr->value.attr().toString(), SQL_GRAMMAR::ASC == itr->type? 1 : -1 ) ; } index = builder.obj() ; if ( !_uniqIndex ) { rc = rtnCreateIndexCommand( _fullName.toString().c_str(), BSON( IXM_FIELD_NAME_KEY << index << IXM_FIELD_NAME_NAME << _indexName.toString() ), eduCB, dmsCB, dpsCB ) ; } else { BSONObjBuilder indexBuilder ; indexBuilder.append( IXM_FIELD_NAME_KEY, index ) ; indexBuilder.append( IXM_FIELD_NAME_NAME, _indexName.toString() ) ; indexBuilder.appendBool( IXM_FIELD_NAME_UNIQUE, TRUE ) ; rc = rtnCreateIndexCommand( _fullName.toString().c_str(), indexBuilder.obj(), eduCB, dmsCB, dpsCB ) ; } } else if ( SQL_GRAMMAR::DROPINDEX == _commandType ) { BSONObj identifier = BSON( IXM_FIELD_NAME_NAME << _indexName.toString() ) ; BSONElement ele = identifier.firstElement() ; rc = rtnDropIndexCommand( _fullName.toString().c_str(), ele, eduCB, dmsCB, dpsCB ) ; } else if ( SQL_GRAMMAR::LISTCS == _commandType ) { BSONObj empty ; _rtnListCollectionspacesInner cmdListCS ; rc = cmdListCS.init( 0, 0, -1, empty.objdata(), empty.objdata(), empty.objdata(), empty.objdata() ) ; if ( rc ) { PD_LOG( PDERROR, "Init command[list collectionspace] failed, " "rc: %d", rc ) ; goto error ; } rc = cmdListCS.doit( eduCB, dmsCB, rtnCB, dpsCB, 1, &_contextID ) ; if ( rc ) { PD_LOG( PDERROR, "Run command[list collectionspace] failed, " "rc: %d", rc ) ; goto error ; } } else if ( SQL_GRAMMAR::LISTCL == _commandType ) { BSONObj empty ; _rtnListCollections cmdListCL ; rc = cmdListCL.init( 0, 0, -1, empty.objdata(), empty.objdata(), empty.objdata(), empty.objdata() ) ; if ( rc ) { PD_LOG( PDERROR, "Init command[list collection] failed, rc: %d", rc ) ; goto error ; } rc = cmdListCL.doit( eduCB, dmsCB, rtnCB, dpsCB, 1, &_contextID ) ; if ( rc ) { PD_LOG( PDERROR, "Run command[list collection] failed, rc: %d", rc ) ; goto error ; } } else if ( SQL_GRAMMAR::BEGINTRAN == _commandType ) { rc = rtnTransBegin( eduCB ) ; } else if ( SQL_GRAMMAR::ROLLBACK == _commandType ) { rc = rtnTransRollback( eduCB, dpsCB ) ; } else if ( SQL_GRAMMAR::COMMIT == _commandType ) { rc = rtnTransCommit( eduCB, dpsCB ) ; } else { PD_LOG( PDERROR, "invalid command type:%d", _commandType ) ; rc = SDB_SYS ; goto error ; } if ( SDB_OK != rc ) { goto error ; } done: PD_TRACE_EXITRC( SDB__QGMPLCOMMAND__EXECONDATA, rc ) ; return rc ; error: goto done ; }