ravendb
Version:
RavenDB client for Node.js
65 lines • 2.37 kB
JavaScript
import { GetRequest } from "../../../Commands/MultiGet/GetRequest.js";
import { writeIndexQuery } from "../../../Queries/IndexQuery.js";
import { QueryCommand } from "../../../Commands/QueryCommand.js";
import { stringToReadable } from "../../../../Utility/StreamUtil.js";
export class LazyQueryOperation {
_clazz;
_session;
_queryOperation;
_parent;
constructor(session, queryOperation, parent, clazz) {
this._clazz = clazz;
this._session = session;
this._queryOperation = queryOperation;
this._parent = parent;
}
createRequest() {
const request = new GetRequest();
request.canCacheAggressively = !this._queryOperation.indexQuery.disableCaching && !this._queryOperation.indexQuery.waitForNonStaleResults;
request.url = "/queries";
request.method = "POST";
request.query = "?queryHash=" + this._queryOperation.indexQuery.getQueryHash(this._session.conventions.objectMapper);
request.body = writeIndexQuery(this._session.conventions, this._queryOperation.indexQuery);
return request;
}
_result;
_queryResult;
_requiresRetry;
get result() {
return this._result;
}
set result(result) {
this._result = result;
}
get queryResult() {
return this._queryResult;
}
set queryResult(queryResult) {
this._queryResult = queryResult;
}
get requiresRetry() {
return this._requiresRetry;
}
set requiresRetry(result) {
this._requiresRetry = result;
}
async handleResponseAsync(response) {
if (response.forceRetry) {
this._result = null;
this._requiresRetry = true;
return;
}
let queryResult;
if (response.result) {
queryResult = await QueryCommand.parseQueryResultResponseAsync(stringToReadable(response.result), this._session.conventions, false);
}
this._handleResponse(queryResult, response.elapsed);
}
_handleResponse(queryResult, duration) {
this._queryOperation.ensureIsAcceptableAndSaveResult(queryResult, duration);
this._parent.emit("afterQueryExecuted", queryResult);
this.result = this._queryOperation.complete(this._clazz);
this.queryResult = queryResult;
}
}
//# sourceMappingURL=LazyQueryOperation.js.map