// PD_TRACE_DECLARE_FUNCTION( SDB__QGMPLDELETE__EXEC, "_qgmPlDelete::_execute" ) INT32 _qgmPlDelete::_execute( _pmdEDUCB *eduCB ) { PD_TRACE_ENTRY( SDB__QGMPLDELETE__EXEC ) ; INT32 rc = SDB_OK ; _SDB_KRCB *krcb = pmdGetKRCB() ; SDB_ROLE role = krcb->getDBRole() ; CHAR *msg = NULL ; if ( SDB_ROLE_COORD == role ) { INT32 bufSize = 0 ; MsgOpReply dummyReply ; rtnCoordDelete del ; rc = msgBuildDeleteMsg( &msg, &bufSize, _collection.toString().c_str(), 0, 0, _condition.isEmpty()? NULL : &_condition ) ; if ( SDB_OK != rc ) { goto error ; } rc = del.execute( msg, *((SINT32 *)msg), eduCB, dummyReply, NULL ) ; } else { SDB_DPSCB *dpsCB = krcb->getDPSCB() ; if ( dpsCB && eduCB->isFromLocal() && !dpsCB->isLogLocal() ) { dpsCB = NULL ; } SDB_DMSCB *dmsCB = krcb->getDMSCB() ; BSONObj empty ; rc = rtnDelete( _collection.toString().c_str(), _condition, empty, 0, eduCB, dmsCB, dpsCB ) ; } if ( SDB_OK != rc ) { goto error ; } done: if ( NULL != msg ) { SDB_OSS_FREE( msg ) ; msg = NULL ; } PD_TRACE_EXITRC( SDB__QGMPLDELETE__EXEC, rc ) ; return rc ; error: goto done ; }
// PD_TRACE_DECLARE_FUNCTION ( SDB_RTNINSERT1, "rtnInsert" ) INT32 rtnInsert ( const CHAR *pCollectionName, BSONObj &objs, INT32 objNum, INT32 flags, pmdEDUCB *cb ) { INT32 rc = SDB_OK ; PD_TRACE_ENTRY ( SDB_RTNINSERT1 ) ; pmdKRCB *krcb = pmdGetKRCB () ; SDB_DMSCB *dmsCB = krcb->getDMSCB () ; SDB_DPSCB *dpsCB = krcb->getDPSCB () ; if ( dpsCB && cb->isFromLocal() && !dpsCB->isLogLocal() ) { dpsCB = NULL ; } rc = rtnInsert ( pCollectionName, objs, objNum, flags, cb, dmsCB, dpsCB ) ; PD_TRACE_EXITRC ( SDB_RTNINSERT1, rc ) ; return rc ; }
// PD_TRACE_DECLARE_FUNCTION( SDB__QGMPLDELETE__EXEC, "_qgmPlDelete::_execute" ) INT32 _qgmPlDelete::_execute( _pmdEDUCB *eduCB ) { PD_TRACE_ENTRY( SDB__QGMPLDELETE__EXEC ) ; INT32 rc = SDB_OK ; _SDB_KRCB *krcb = pmdGetKRCB() ; SDB_ROLE role = krcb->getDBRole() ; CHAR *msg = NULL ; INT32 bufSize = 0 ; if ( SDB_ROLE_COORD == role ) { CoordCB *pCoord = krcb->getCoordCB() ; INT64 contextID = -1 ; rtnContextBuf buff ; coordDeleteOperator opr ; rc = msgBuildDeleteMsg( &msg, &bufSize, _collection.toString().c_str(), 0, 0, _condition.isEmpty() ? NULL : &_condition, NULL, eduCB ) ; if ( rc ) { PD_LOG( PDERROR, "Build delete message failed, rc: %d", rc ) ; goto error ; } rc = opr.init( pCoord->getResource(), eduCB ) ; if ( rc ) { PD_LOG( PDERROR, "Init operator[%s] failed, rc: %d", opr.getName(), rc ) ; goto error ; } rc = opr.execute( (MsgHeader*)msg, eduCB, contextID, &buff ) ; } else { SDB_DPSCB *dpsCB = krcb->getDPSCB() ; if ( dpsCB && eduCB->isFromLocal() && !dpsCB->isLogLocal() ) { dpsCB = NULL ; } SDB_DMSCB *dmsCB = krcb->getDMSCB() ; BSONObj empty ; rc = rtnDelete( _collection.toString().c_str(), _condition, empty, 0, eduCB, dmsCB, dpsCB ) ; } if ( rc ) { goto error ; } done: if ( NULL != msg ) { msgReleaseBuffer( msg, eduCB ) ; } PD_TRACE_EXITRC( SDB__QGMPLDELETE__EXEC, rc ) ; 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() ; BOOLEAN addInfo = eduCB->getType() == EDU_TYPE_SHARDAGENT ? TRUE : FALSE ; 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("key"<<index<<"name"<<_indexName.toString()), eduCB, dmsCB, dpsCB ) ; } else { BSONObjBuilder indexBuilder ; indexBuilder.append( "key", index) ; indexBuilder.append("name", _indexName.toString()) ; indexBuilder.appendBool( "unique", TRUE ) ; rc = rtnCreateIndexCommand( _fullName.toString().c_str(), indexBuilder.obj(), eduCB, dmsCB, dpsCB ) ; } } else if ( SQL_GRAMMAR::DROPINDEX == _commandType ) { BSONObj identifier = BSON( "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 ; rc = rtnListCommandEntry( CMD_LIST_COLLECTIONSPACES, empty, empty, empty, empty, 0, eduCB, 0, -1, dmsCB, rtnCB, _contextID, addInfo ) ; } else if ( SQL_GRAMMAR::LISTCL == _commandType ) { BSONObj empty ; rc = rtnListCommandEntry( CMD_LIST_COLLECTIONS, empty, empty, empty, empty, 0, eduCB, 0, -1, dmsCB, rtnCB, _contextID, addInfo ) ; } 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 ; }
INT32 _qgmPlInsert::_execute( _pmdEDUCB *eduCB ) { PD_TRACE_ENTRY( SDB__QGMPLINSERT__EXEC ) ; INT32 rc = SDB_OK ; pmdKRCB *pKrcb = pmdGetKRCB(); rtnCoordInsert insert ; CHAR *pMsg = NULL ; INT32 bufSize = 0 ; BSONObj obj ; MsgOpReply dummyReply ; SDB_DMSCB *dmsCB = pKrcb->getDMSCB() ; SDB_DPSCB *dpsCB = pKrcb->getDPSCB() ; BSONObj *err = NULL ; if ( dpsCB && eduCB->isFromLocal() && !dpsCB->isLogLocal() ) { dpsCB = NULL ; } while ( TRUE ) { rc = _nextRecord( eduCB, obj ) ; if ( SDB_DMS_EOC == rc ) { rc = SDB_OK ; goto done ; } else if ( SDB_OK != rc ) { goto error ; } else { if ( SDB_ROLE_COORD == _role ) { rc = msgBuildInsertMsg ( &pMsg, &bufSize, _fullName.c_str(), 0, 0, &obj ) ; if ( SDB_OK != rc ) { goto error ; } rc = insert.execute ( pMsg, *(SINT32*)pMsg, NULL, eduCB, dummyReply, &err ) ; SDB_ASSERT( NULL == err, "impossible" ) ; PD_RC_CHECK ( rc, PDERROR, "Failed to execute insert on coord, " "rc = %d", rc ) ; } else { rc = rtnInsert ( _fullName.c_str(), obj, 1, 0, eduCB, dmsCB, dpsCB ) ; PD_RC_CHECK ( rc, PDERROR, "Failed to insert on non-coord, rc = %d", rc ) ; } } } done: if ( pMsg ) { SDB_OSS_FREE ( pMsg ) ; } PD_TRACE_EXITRC( SDB__QGMPLINSERT__EXEC, rc ) ; 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 ; }