Exemple #1
0
   INT32 _pmdDataProcessor::_onTransCommitMsg ( SDB_DPSCB *dpsCB )
   {
      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 = rtnTransCommit( eduCB(), dpsCB ) ;
      }

   done:
      return rc ;
   error:
      goto done ;
   }
Exemple #2
0
   // 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 ;
   }