protected override void OnReadResponse(ResponseStreamReader responseStreamReader) { var requestResponse = responseStreamReader.Read <TDocument>(); CurrentCursorId = requestResponse.CursorId.HasValue ? requestResponse.CursorId.Value : 0; Response.SetDocuments(requestResponse.ReturnedDocuments); }
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); }