internal byte[] GetInternal(byte[] documentIdBytes, SharpDBTransaction transaction = null)
        {
            if (transaction != null)
            {
                Socket.SendMoreFrame(Protocol.TransactionGet).SendMoreFrame(transaction.TransactionIdBytes);
            }
            else
            {
                Socket.SendMoreFrame(Protocol.Get);
            }

            Socket.SendFrame(documentIdBytes);

            bool result = BitConverter.ToBoolean(Socket.ReceiveFrameBytes(), 0);

            if (result)
            {
                return(Socket.ReceiveFrameBytes());
            }
            else
            {
                string error = Socket.ReceiveFrameString();

                throw new SharpDBException(error);
            }
        }
        internal void TransactionUpdate <T>(SharpDBTransaction transaction, T document)
        {
            object documentId = GetDocumentId(document);

            byte[] documentIdBytes = Serializer.SerializeDocumentId(documentId);

            byte[] blob = Serializer.SerializeDocument(document);

            UpdateInternal(documentIdBytes, blob, transaction);
        }
        internal T TransactionGet <T>(SharpDBTransaction transaction, object documentId)
        {
            byte[] documentIdBytes = Serializer.SerializeDocumentId(documentId);

            byte[] blob = GetInternal(documentIdBytes, transaction);

            if (blob.Length > 0)
            {
                return(Serializer.DeserializeDocument <T>(blob));
            }
            else
            {
                return(default(T));
            }
        }
        internal void RollbackTransaction(SharpDBTransaction transaction)
        {
            Socket.SendMoreFrame(Protocol.Rollback).SendFrame(transaction.TransactionIdBytes);

            bool result = BitConverter.ToBoolean(Socket.ReceiveFrameBytes(), 0);

            m_transactions.Remove(transaction);

            if (!result)
            {
                string error = Socket.ReceiveFrameString();

                Log.ErrorFormat("Failed to rollback transaction {0}, error: {1}", transaction.TransactionId, error);

                throw new SharpDBException(error);
            }
            else
            {
                Log.DebugFormat("Transaction {0} rollbacked", transaction.TransactionId);
            }
        }
Example #5
0
        internal void CommitTransaction(SharpDBTransaction transaction)
        {
            Socket.SendMore(Protocol.Commit).Send(transaction.TransactionIdBytes);

            bool result = BitConverter.ToBoolean(Socket.Receive(), 0);

            m_transactions.Remove(transaction);

            if (!result)
            {
                string error = Socket.ReceiveString();

                Log.ErrorFormat("Failed to commit transaction {0}, error: {1}", transaction.TransactionId, error);

                throw new SharpDBException(error);
            }
            else
            {
                Log.DebugFormat("Transaction {0} committed", transaction.TransactionId);
            }
        }
        public void DeleteInternal(byte[] documentIdBytes, SharpDBTransaction transaction = null)
        {
            if (transaction != null)
            {
                Socket.SendMoreFrame(Protocol.TransactionDelete).SendMoreFrame(transaction.TransactionIdBytes);
            }
            else
            {
                Socket.SendMoreFrame(Protocol.Delete);
            }

            Socket.SendFrame(documentIdBytes);

            bool result = BitConverter.ToBoolean(Socket.ReceiveFrameBytes(), 0);

            if (!result)
            {
                string error = Socket.ReceiveFrameString();

                throw new SharpDBException(error);
            }
        }
Example #7
0
        internal void UpdateInternal(byte[] documentIdBytes, byte[] blob, SharpDBTransaction transaction = null)
        {
            if (transaction != null)
            {
                Socket.SendMore(Protocol.TransactionUpdate).SendMore(transaction.TransactionIdBytes);
            }
            else
            {
                Socket.SendMore(Protocol.Update);
            }

            Socket.SendMore(documentIdBytes).Send(blob);

            bool result = BitConverter.ToBoolean(Socket.Receive(), 0);

            if (!result)
            {
                string error = Socket.ReceiveString();

                throw new SharpDBException(error);
            }
        }
        internal void TransactionDeleteDocumentById(SharpDBTransaction transaction, object documentId)
        {
            byte[] documentIdBytes = Serializer.SerializeDocumentId(documentId);

            DeleteInternal(documentIdBytes, transaction);
        }
 internal void TransactionDeleteDocument <T>(SharpDBTransaction transaction, T document)
 {
     TransactionDeleteDocumentById(transaction, GetDocumentId(document));
 }