tkolanko commented on a change in pull request #1539:
URL: https://github.com/apache/tinkerpop/pull/1539#discussion_r818658387
##########
File path:
gremlin-javascript/src/main/javascript/gremlin-javascript/lib/driver/client.js
##########
@@ -73,41 +72,118 @@ class Client {
return this._connection.isOpen;
}
+ /**
+ * Configuration specific to the current request.
+ * @typedef {Object} RequestOptions
+ * @property {String} requestId - User specified request identifier which
must be a UUID.
+ * @property {Number} batchSize - Indicates whether the Power component is
present.
+ * @property {String} userAgent - The size in which the result of a request
is to be "batched" back to the client
+ * @property {Number} evaluationTimeout - The timeout for the evaluation of
the request.
+ */
+
/**
* Send a request to the Gremlin Server, can send a script or bytecode steps.
* @param {Bytecode|string} message The bytecode or script to send
* @param {Object} [bindings] The script bindings, if any.
- * @param {Object} [requestOptions] Configuration specific to the current
request.
- * @param {String} [requestOptions.requestId] User specified request
identifier which must be a UUID.
- * @param {Number} [requestOptions.batchSize] The size in which the result
of a request is to be "batched" back to the client
- * @param {String} [requestOptions.userAgent] A custom string that specifies
to the server where the request came from.
- * @param {Number} [requestOptions.evaluationTimeout] The timeout for the
evaluation of the request.
+ * @param {RequestOptions} [requestOptions] Configuration specific to the
current request.
* @returns {Promise}
*/
submit(message, bindings, requestOptions) {
- const requestIdOverride = requestOptions && requestOptions.requestId
- if (requestIdOverride) delete requestOptions['requestId'];
+ const requestIdOverride = requestOptions && requestOptions.requestId;
+ if (requestIdOverride) delete requestOptions["requestId"];
+
+ const args = Object.assign(
+ {
+ gremlin: message,
+ aliases: { g: this._options.traversalSource || "g" },
+ },
+ requestOptions
+ );
+
+ if (this._options.session && this._options.processor === "session") {
+ args["session"] = this._options.session;
+ }
+
+ if (message instanceof Bytecode) {
+ if (this._options.session && this._options.processor === "session") {
+ return this._connection.submit(
+ "session",
+ "bytecode",
+ args,
+ requestIdOverride
+ );
+ } else {
+ return this._connection.submit(
+ "traversal",
+ "bytecode",
+ args,
+ requestIdOverride
+ );
+ }
+ } else if (typeof message === "string") {
+ args["bindings"] = bindings;
+ args["language"] = "gremlin-groovy";
+ args["accept"] = this._connection.mimeType;
+ return this._connection.submit(
+ this._options.processor || "",
+ "eval",
+ args,
+ requestIdOverride
+ );
+ } else {
+ throw new TypeError("message must be of type Bytecode or string");
+ }
+ }
+
+ /**
+ * Send a request to the Gremlin Server and receive a stream for the
results, can send a script or bytecode steps.
+ * @param {Bytecode|string} message The bytecode or script to send
+ * @param {Object} [bindings] The script bindings, if any.
+ * @param {RequestOptions} [requestOptions] Configuration specific to the
current request.
+ * @returns {ReadableStream}
+ */
+ stream(message, bindings, requestOptions) {
+ const requestIdOverride = requestOptions && requestOptions.requestId;
+ if (requestIdOverride) delete requestOptions["requestId"];
- const args = Object.assign({
- gremlin: message,
- aliases: { 'g': this._options.traversalSource || 'g' }
- }, requestOptions)
+ const args = Object.assign(
+ {
+ gremlin: message,
+ aliases: { g: this._options.traversalSource || "g" },
+ },
+ requestOptions
+ );
- if (this._options.session && this._options.processor === 'session') {
- args['session'] = this._options.session;
+ if (this._options.session && this._options.processor === "session") {
+ args["session"] = this._options.session;
}
if (message instanceof Bytecode) {
- if (this._options.session && this._options.processor === 'session') {
- return this._connection.submit('session', 'bytecode', args,
requestIdOverride);
+ if (this._options.session && this._options.processor === "session") {
+ return this._connection.stream(
+ "session",
+ "bytecode",
+ args,
+ requestIdOverride
+ );
} else {
- return this._connection.submit('traversal', 'bytecode', args,
requestIdOverride);
+ return this._connection.stream(
+ "traversal",
+ "bytecode",
+ args,
+ requestIdOverride
+ );
}
- } else if (typeof message === 'string') {
- args['bindings'] = bindings;
- args['language'] = 'gremlin-groovy';
- args['accept'] = this._connection.mimeType;
- return this._connection.submit(this._options.processor || '','eval',
args, requestIdOverride);
+ } else if (typeof message === "string") {
+ args["bindings"] = bindings;
+ args["language"] = "gremlin-groovy";
+ args["accept"] = this._connection.mimeType;
+ return this._connection.stream(
+ this._options.processor || "",
+ "eval",
+ args,
+ requestIdOverride
+ );
Review comment:
That's what I originally did in
https://github.com/apache/tinkerpop/pull/1539/commits/fe1e468945ea3a36c53c2b452627bfffd20e0239
but it ended up breaking all the client tests that overwrote the internal
connection object and I couldn't figure out why. I'll take another look to see
if I can get the tests to pass with that
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]