protected override void OnReadResponse(ResponseStreamReader responseStreamReader)
        {
            var requestResponse = responseStreamReader.Read <TDocument>();

            CurrentCursorId = requestResponse.CursorId.HasValue ? requestResponse.CursorId.Value : 0;

            Response.SetDocuments(requestResponse.ReturnedDocuments);
        }
Beispiel #2
0
        protected virtual void OnReadResponse(ResponseStreamReader responseStreamReader)
        {
            var requestResponse = responseStreamReader.Read <TDocument>();

            Response.SetDocuments(requestResponse.ReturnedDocuments);

            if (!requestResponse.CursorExists)
            {
                return;
            }

            var queryCmd = this as QueryDocumentsCommand <TDocument>;

            if (queryCmd != null)
            {
                var numOfDocsToReturn = queryCmd.NumberOfDocumentsToReturn;
                if (numOfDocsToReturn > 1 && numOfDocsToReturn == requestResponse.NumberOfReturnedDocuments)
                {
                    //TODO: Kill cursor
                    return;
                }
            }

            GetMoreCommand <TDocument> getMoreCommand = null;

            while (requestResponse.CursorExists)
            {
                if (getMoreCommand == null)
                {
                    getMoreCommand = new GetMoreCommand <TDocument>(Connection, requestResponse.CursorId.Value, requestResponse.NumberOfReturnedDocuments.Value)
                    {
                        FullCollectionName = NodeName
                    }
                }
                ;

                getMoreCommand.Execute();

                Response.AddDocuments(getMoreCommand.Response.Documents);

                if (getMoreCommand.Response.NumberOfDocuments < 1 || !getMoreCommand.CursorHasMoreResult)
                {
                    break;
                }
            }

            //Note that if a cursor is read until exhausted
            //(read until OP_QUERY or OP_GETMORE returns zero for the cursor id),
            //there is no need to kill the cursor.
        }
    }
        /// <summary>
        /// Overrides, since there is no need to extract more documents
        /// via cursor as a normal response command.
        /// </summary>
        /// <param name="responseStreamReader"></param>
        protected override void OnReadResponse(ResponseStreamReader responseStreamReader)
        {
            var response     = responseStreamReader.Read <SimoKeyValues>();
            var document     = response.ReturnedDocuments[0];
            var commandWasOk = document.GetDouble("ok") == 1.0;

            if (commandWasOk)
            {
                return;
            }

            var errMsg = MongoDbErrorMessage.FromDocument(document);

            if (errMsg == null)
            {
                return;
            }

            throw new SimoCommandException(ExceptionMessages.DatabaseCommand_CommandWasNotOk, errMsg);
        }