Пример #1
0
        private int _Read(byte[] b)
        {
            SDBMessage sdbMessage = new SDBMessage();

            // MsgHeader
            sdbMessage.OperationCode = Operation.MSG_BS_LOB_READ_REQ;
            sdbMessage.NodeID        = SequoiadbConstants.ZERO_NODEID;
            sdbMessage.RequestID     = 0;
            // the rest part of _MsgOpLOb
            sdbMessage.Version       = SequoiadbConstants.DEFAULT_VERSION;
            sdbMessage.W             = SequoiadbConstants.DEFAULT_W;
            sdbMessage.Padding       = (short)0;
            sdbMessage.Flags         = SequoiadbConstants.DEFAULT_FLAGS;
            sdbMessage.ContextIDList = new List <long>();
            sdbMessage.ContextIDList.Add(_contextID);
            sdbMessage.BsonLen = 0;
            // MsgLobTuple
            sdbMessage.LobLen      = (uint)b.Length;
            sdbMessage.LobSequence = SDB_LOB_DEFAULT_SEQ;
            sdbMessage.LobOffset   = _readOffset;

            // build send msg
            byte[] request = SDBMessageHelper.BuildReadLobRequest(sdbMessage, _isBigEndian);
            // send msg
            _connection.SendMessage(request);

            // receive and extract return msg from engine
            SDBMessage rtnSDBMessage = SDBMessageHelper.MsgExtractReadLobReply(_connection.ReceiveMessage(_isBigEndian), _isBigEndian);

            // check the result
            int flags   = rtnSDBMessage.Flags;
            int errCode = new BaseException("SDB_DMS_EOC").ErrorCode;

            if (errCode == flags)
            {
                return(-1);
            }
            else if (0 != flags)
            {
                throw new BaseException(flags);
            }
            // return the result
            byte[] lobData = rtnSDBMessage.LobBuff;
            Array.Copy(lobData, b, lobData.Length);

            _readOffset += lobData.Length;
            return(lobData.Length);
        }
Пример #2
0
 /** \fn DBCursor ListLobs()
  * \brief List all of the lobs in current collection
  * \retval DBCursor of lobs
  * \exception SequoiaDB.BaseException
  * \exception System.Exception
  */
 public DBCursor ListLobs()
 {
     DBCursor cursor = null;
     // build command
     string command = SequoiadbConstants.ADMIN_PROMPT
         + SequoiadbConstants.LIST_LOBS_CMD;
     // build a bson to send
     BsonDocument newObj = new BsonDocument();
     newObj.Add(SequoiadbConstants.FIELD_COLLECTION, collectionFullName);
     // run command
     BsonDocument dummyObj = new BsonDocument();
     SDBMessage rtnSDBMessage = AdminCommand(command, newObj, dummyObj, dummyObj, dummyObj, 0, -1, 0);
     // check the return flag
     int flags = rtnSDBMessage.Flags;
     if (flags != 0)
     {
         int errCode = new BaseException("SDB_DMS_EOC").ErrorCode;
         if (errCode == flags)
         {
             return cursor;
         }
         else
         {
             throw new BaseException(flags);
         }
     }
     cursor = new DBCursor(rtnSDBMessage, this);
     return cursor;
 }
Пример #3
0
        private int _Read(byte[] b)
        {
            SDBMessage sdbMessage = new SDBMessage();
            // MsgHeader
            sdbMessage.OperationCode = Operation.MSG_BS_LOB_READ_REQ;
            sdbMessage.NodeID = SequoiadbConstants.ZERO_NODEID;
            sdbMessage.RequestID = 0;
            // the rest part of _MsgOpLOb
            sdbMessage.Version = SequoiadbConstants.DEFAULT_VERSION;
            sdbMessage.W = SequoiadbConstants.DEFAULT_W;
            sdbMessage.Padding = (short)0;
            sdbMessage.Flags = SequoiadbConstants.DEFAULT_FLAGS;
            sdbMessage.ContextIDList = new List<long>();
            sdbMessage.ContextIDList.Add(_contextID);
            sdbMessage.BsonLen = 0;
            // MsgLobTuple
            sdbMessage.LobLen = (uint)b.Length;
            sdbMessage.LobSequence = SDB_LOB_DEFAULT_SEQ;
            sdbMessage.LobOffset = _readOffset;

            // build send msg
            byte[] request = SDBMessageHelper.BuildReadLobRequest(sdbMessage, _isBigEndian);
            // send msg
            _connection.SendMessage(request);

            // receive and extract return msg from engine
            SDBMessage rtnSDBMessage = SDBMessageHelper.MsgExtractReadLobReply(_connection.ReceiveMessage(_isBigEndian), _isBigEndian);

            // check the result
            int flags = rtnSDBMessage.Flags;
            int errCode = new BaseException("SDB_DMS_EOC").ErrorCode;
            if ( errCode == flags)
            {
                return -1;
            }
            else if (0 != flags)
            {
                throw new BaseException(flags);
            }
            // return the result
            byte[] lobData = rtnSDBMessage.LobBuff;
            Array.Copy(lobData, b, lobData.Length);

            _readOffset += lobData.Length;
            return lobData.Length;
        }
Пример #4
0
 public void ExceptionTest()
 {
     string errorType = "SDB_DMS_EOC";
     BaseException ex = new BaseException(errorType);
     Assert.IsTrue(ex.Message.ToString().Equals("End of collection"));
 }