Repository: incubator-ignite Updated Branches: refs/heads/ignite-961-promise 912bdab91 -> 7d489c169
#ignite-961-promise: add close method for query. Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/7d489c16 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/7d489c16 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/7d489c16 Branch: refs/heads/ignite-961-promise Commit: 7d489c169e17396c709f045768a338e90d484360 Parents: 912bdab Author: ivasilinets <ivasilin...@gridgain.com> Authored: Tue Jul 14 17:19:28 2015 +0300 Committer: ivasilinets <ivasilin...@gridgain.com> Committed: Tue Jul 14 17:19:28 2015 +0300 ---------------------------------------------------------------------- examples/src/main/js/cache-query-example.js | 21 +-- .../main/js/cache-sql-fields-query-example.js | 27 +--- .../processors/rest/GridRestCommand.java | 5 +- .../handlers/query/QueryCommandHandler.java | 110 +++++++++++-- modules/nodejs/src/main/js/cache.js | 158 ++++++++++++------- modules/nodejs/src/main/js/server.js | 2 + .../ignite/internal/NodeJsSqlQuerySelfTest.java | 18 +++ modules/nodejs/src/test/js/test-query.js | 65 ++++++-- .../http/jetty/GridJettyRestHandler.java | 11 ++ 9 files changed, 306 insertions(+), 111 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7d489c16/examples/src/main/js/cache-query-example.js ---------------------------------------------------------------------- diff --git a/examples/src/main/js/cache-query-example.js b/examples/src/main/js/cache-query-example.js index a83b577..5edf118 100644 --- a/examples/src/main/js/cache-query-example.js +++ b/examples/src/main/js/cache-query-example.js @@ -68,11 +68,11 @@ main = function() { var fullRes = []; - function onQuery(cursor) { - console.log(">>> Get result on page: " + JSON.stringify(res)); + function onPage(page, cursor) { + console.log(">>> Get result on page: " + JSON.stringify(page)); //Concat query page results. - fullRes.concat(cursor.page()); + fullRes.concat(page); // IsFinished return true if it is the last page. if (cursor.isFinished()) { @@ -85,14 +85,17 @@ main = function() { //Get Promise for next page. var nextPromise = cursor.next(); - nextPromise.then(onQuery); + return nextPromise.then(onQuery); } - // Run query. - ignite.cache(cacheName).query(qry).then(onQuery); - }).then(function(){ - console.log(">>> End of sql query example."); - }); + // Get query cursor. + var cursor = ignite.cache(cacheName).query(qry); + + // Get query's page. + return cursor.nextPage().then(onQuery).then(function(){ + console.log(">>> End of sql query example."); + }); + }) } // Initialize cache for people. http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7d489c16/examples/src/main/js/cache-sql-fields-query-example.js ---------------------------------------------------------------------- diff --git a/examples/src/main/js/cache-sql-fields-query-example.js b/examples/src/main/js/cache-sql-fields-query-example.js index fed91e4..936dd4a 100644 --- a/examples/src/main/js/cache-sql-fields-query-example.js +++ b/examples/src/main/js/cache-sql-fields-query-example.js @@ -65,31 +65,16 @@ main = function() { //Set salary range. qry.setArguments([0, 2000]); - var fullRes = []; - - function onQuery(cursor) { - console.log(">>> Get result on page: " + JSON.stringify(res)); - - //Concat query page results. - fullRes.concat(cursor.page()); - - // IsFinished return true if it is the last page. - if (cursor.isFinished()) { - console.log(">>> Names of all employees: " + JSON.stringify(fullRes)); - - return ignite.destroyCache(cacheName); - } - - //Get Promise for next page. - var nextPromise = cursor.next(); + function onQuery(fullRes) { + console.log(">>> Names of all employees: " + JSON.stringify(fullRes)); - nextPromise.then(onQuery); + return ignite.destroyCache(cacheName); } // Run query. - ignite.cache(cacheName).query(qry).then(onQuery); - }).then(function(){ - console.log(">>> End of sql fields query example."); + ignite.cache(cacheName).query(qry).getAll(onQuery).then(function(){ + console.log(">>> End of sql fields query example."); + }); }); } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7d489c16/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestCommand.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestCommand.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestCommand.java index 45e86e0..f5c2546 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestCommand.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestCommand.java @@ -151,7 +151,10 @@ public enum GridRestCommand { EXECUTE_SQL_FIELDS_QUERY("qryfieldsexecute"), /** Fetch query results. */ - FETCH_SQL_QUERY("qryfetch"); + FETCH_SQL_QUERY("qryfetch"), + + /** Close query. */ + CLOSE_SQL_QUERY("qryclose"); /** Enum values. */ private static final GridRestCommand[] VALS = values(); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7d489c16/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java ---------------------------------------------------------------------- diff --git a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java index ec9575c..e2118b6 100644 --- a/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java +++ b/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java @@ -17,6 +17,7 @@ package org.apache.ignite.internal.processors.rest.handlers.query; +import org.apache.ignite.*; import org.apache.ignite.cache.query.*; import org.apache.ignite.internal.*; import org.apache.ignite.internal.processors.rest.*; @@ -38,7 +39,8 @@ public class QueryCommandHandler extends GridRestCommandHandlerAdapter { /** Supported commands. */ private static final Collection<GridRestCommand> SUPPORTED_COMMANDS = U.sealList(EXECUTE_SQL_QUERY, EXECUTE_SQL_FIELDS_QUERY, - FETCH_SQL_QUERY); + FETCH_SQL_QUERY, + CLOSE_SQL_QUERY); /** Query ID sequence. */ private static final AtomicLong qryIdGen = new AtomicLong(); @@ -46,6 +48,9 @@ public class QueryCommandHandler extends GridRestCommandHandlerAdapter { /** Current queries. */ private final ConcurrentHashMap<Long, Iterator> curs = new ConcurrentHashMap<>(); + /** Current queries cursors. */ + private final ConcurrentHashMap<Long, QueryCursor> qryCurs = new ConcurrentHashMap<>(); + /** * @param ctx Context. */ @@ -63,21 +68,23 @@ public class QueryCommandHandler extends GridRestCommandHandlerAdapter { assert req != null; assert SUPPORTED_COMMANDS.contains(req.command()); + assert req instanceof RestSqlQueryRequest : "Invalid type of query request."; switch (req.command()) { case EXECUTE_SQL_QUERY: case EXECUTE_SQL_FIELDS_QUERY: { - assert req instanceof RestSqlQueryRequest : "Invalid type of query request."; - return ctx.closure().callLocalSafe( - new ExecuteQueryCallable(ctx, (RestSqlQueryRequest)req, curs), false); + new ExecuteQueryCallable(ctx, (RestSqlQueryRequest)req, curs, qryCurs), false); } case FETCH_SQL_QUERY: { - assert req instanceof RestSqlQueryRequest : "Invalid type of query request."; + return ctx.closure().callLocalSafe( + new FetchQueryCallable((RestSqlQueryRequest)req, curs, qryCurs), false); + } + case CLOSE_SQL_QUERY: { return ctx.closure().callLocalSafe( - new FetchQueryCallable((RestSqlQueryRequest)req, curs), false); + new CloseQueryCallable((RestSqlQueryRequest)req, curs, qryCurs), false); } } @@ -94,19 +101,23 @@ public class QueryCommandHandler extends GridRestCommandHandlerAdapter { /** Execute query request. */ private RestSqlQueryRequest req; - /** Queries cursors. */ + /** Queries iterators. */ private ConcurrentHashMap<Long, Iterator> curs; + /** Queries cursors. */ + private ConcurrentHashMap<Long, QueryCursor> qryCurs; + /** * @param ctx Kernal context. * @param req Execute query request. * @param curs Queries cursors. */ public ExecuteQueryCallable(GridKernalContext ctx, RestSqlQueryRequest req, - ConcurrentHashMap<Long, Iterator> curs) { + ConcurrentHashMap<Long, Iterator> curs, ConcurrentHashMap<Long, QueryCursor> qryCurs) { this.ctx = ctx; this.req = req; this.curs = curs; + this.qryCurs = qryCurs; } /** {@inheritDoc} */ @@ -125,13 +136,22 @@ public class QueryCommandHandler extends GridRestCommandHandlerAdapter { ((SqlFieldsQuery)qry).setArgs(req.arguments()); } - Iterator cur = ctx.grid().cache(req.cacheName()).query(qry).iterator(); + IgniteCache<Object, Object> cache = ctx.grid().cache(req.cacheName()); + + if (cache == null) + return new GridRestResponse(GridRestResponse.STATUS_FAILED, + "No cache with name. [cacheName=" + req.cacheName() + "]"); + + QueryCursor qryCur = cache.query(qry); + + Iterator cur = qryCur.iterator(); long qryId = qryIdGen.getAndIncrement(); + qryCurs.put(qryId, qryCur); curs.put(qryId, cur); - CacheQueryResult res = createQueryResult(curs, cur, req, qryId); + CacheQueryResult res = createQueryResult(qryCurs, curs, cur, req, qryId); return new GridRestResponse(res); } @@ -142,23 +162,74 @@ public class QueryCommandHandler extends GridRestCommandHandlerAdapter { } /** + * Close query callable. + */ + private static class CloseQueryCallable implements Callable<GridRestResponse> { + /** Execute query request. */ + private RestSqlQueryRequest req; + + /** Queries iterators. */ + private ConcurrentHashMap<Long, Iterator> curs; + + /** Queries cursors. */ + private ConcurrentHashMap<Long, QueryCursor> qryCurs; + + /** + * @param req Execute query request. + * @param curs Queries cursors. + */ + public CloseQueryCallable(RestSqlQueryRequest req, + ConcurrentHashMap<Long, Iterator> curs, + ConcurrentHashMap<Long, QueryCursor> qryCurs) { + this.req = req; + this.curs = curs; + this.qryCurs = qryCurs; + } + + /** {@inheritDoc} */ + @Override public GridRestResponse call() throws Exception { + try { + QueryCursor cur = qryCurs.get(req.queryId()); + + if (cur == null) + return new GridRestResponse(GridRestResponse.STATUS_FAILED, + "Cannot find query [qryId=" + req.queryId() + "]"); + + cur.close(); + + return new GridRestResponse(true); + } + catch (Exception e) { + qryCurs.remove(req.queryId()); + curs.remove(req.queryId()); + + return new GridRestResponse(GridRestResponse.STATUS_FAILED, e.getMessage()); + } + } + } + + /** * Fetch query callable. */ private static class FetchQueryCallable implements Callable<GridRestResponse> { /** Execute query request. */ private RestSqlQueryRequest req; - /** Queries cursors. */ + /** Queries iterators. */ private ConcurrentHashMap<Long, Iterator> curs; + /** Queries cursors. */ + private ConcurrentHashMap<Long, QueryCursor> qryCurs; + /** * @param req Execute query request. * @param curs Queries cursors. */ - public FetchQueryCallable(RestSqlQueryRequest req, - ConcurrentHashMap<Long, Iterator> curs) { + public FetchQueryCallable(RestSqlQueryRequest req, ConcurrentHashMap<Long, Iterator> curs, + ConcurrentHashMap<Long, QueryCursor> qryCurs) { this.req = req; this.curs = curs; + this.qryCurs = qryCurs; } /** {@inheritDoc} */ @@ -170,12 +241,13 @@ public class QueryCommandHandler extends GridRestCommandHandlerAdapter { return new GridRestResponse(GridRestResponse.STATUS_FAILED, "Cannot find query [qryId=" + req.queryId() + "]"); - CacheQueryResult res = createQueryResult(curs, cur, req, req.queryId()); + CacheQueryResult res = createQueryResult(qryCurs, curs, cur, req, req.queryId()); return new GridRestResponse(res); } catch (Exception e) { curs.remove(req.queryId()); + qryCurs.remove(req.queryId()); return new GridRestResponse(GridRestResponse.STATUS_FAILED, e.getMessage()); } @@ -183,13 +255,15 @@ public class QueryCommandHandler extends GridRestCommandHandlerAdapter { } /** - * @param curs Queries cursors. + * @param qryCurs Query cursors. + * @param curs Queries iterators. * @param cur Current cursor. * @param req Sql request. * @param qryId Query id. * @return Query result with items. */ - private static CacheQueryResult createQueryResult(ConcurrentHashMap<Long, Iterator> curs, Iterator cur, + private static CacheQueryResult createQueryResult(ConcurrentHashMap<Long, QueryCursor> qryCurs, + ConcurrentHashMap<Long, Iterator> curs, Iterator cur, RestSqlQueryRequest req, Long qryId) { CacheQueryResult res = new CacheQueryResult(); @@ -204,8 +278,10 @@ public class QueryCommandHandler extends GridRestCommandHandlerAdapter { res.setQueryId(qryId); - if (!cur.hasNext()) + if (!cur.hasNext()) { + qryCurs.remove(qryId); curs.remove(qryId); + } return res; } http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7d489c16/modules/nodejs/src/main/js/cache.js ---------------------------------------------------------------------- diff --git a/modules/nodejs/src/main/js/cache.js b/modules/nodejs/src/main/js/cache.js index f1396e3..3850cb5 100644 --- a/modules/nodejs/src/main/js/cache.js +++ b/modules/nodejs/src/main/js/cache.js @@ -268,44 +268,7 @@ Cache.prototype.size = function(callback) { * @param {SqlQuery|SqlFieldsQuery} qry Query */ Cache.prototype.query = function(qry) { - var cmd; - - if (qry.type() === "Sql") { - if (qry.returnType() == null) { - return new Promise(function(resolve, reject) { - reject("No type for sql query."); - }); - } - - cmd = this._sqlQuery(qry); - } - else { - cmd = this._sqlFieldsQuery(qry); - } - - var server = this._server; - var cache = this; - - return new Promise(function(resolve, reject) { - server.runCommand(cmd, function(err, res){ - if(err != null) { - reject(err); - } - else { - resolve(new Cursor(qry, res, cache)); - } - }); - }); -} - -Cache.prototype._sqlFieldsQuery = function(qry) { - return this._createQueryCommand("qryfieldsexecute", qry). - setPostData(JSON.stringify({"arg" : qry.arguments()})); -} - -Cache.prototype._sqlQuery = function(qry) { - return this._createQueryCommand("qryexecute", qry).addParam("type", qry.returnType()). - setPostData(JSON.stringify({"arg" : qry.arguments()})); + return new Cursor(this, qry, true, null); } Cache.prototype.__createPromise = function(cmd) { @@ -329,52 +292,139 @@ Cache.prototype._createCommand = function(name) { return command.addParam("cacheName", this._cacheName); } -Cache.prototype._createQueryCommand = function(name, qry) { - var command = this._createCommand(name); +Cursor = function(cache, qry, first, res) { + this._qry = qry; + this._cache = cache; + this._init = first; + this._res = res; +} - command.addParam("qry", qry.query()); +Cursor.prototype.getAll = function() { + if (!this._init) { + return new Promise(function(resolve, reject){ + reject("GetAll is called after nextPage."); + }); + } - return command.addParam("psz", qry.pageSize()); -} + var cmd = this._getQueryCommand(); + var server = this._cache._server; + var cursor = this; -Cursor = function(qry, res, cache) { - this._qry = qry; - this._res = res; - this._cache = cache; + return new Promise(function(resolve, reject) { + var fullRes = []; + + onResult = function (err, res){ + if (err !== null) { + reject(err); + } + else { + cursor._res = res; + + fullRes = fullRes.concat(res["items"]); + + if (res["last"]) { + resolve(fullRes); + } + else { + server.runCommand(cursor._getQueryCommand(), onResult); + } + } + } + + server.runCommand(cmd, onResult); + }); } -Cursor.prototype.next = function() { - if (this._res["last"]) { + +Cursor.prototype.nextPage = function() { + if (this._res !== null && this._res["last"]) { throw "All pages are returned."; } - var cmd = this._cache._createCommand("qryfetch").addParam("qryId", this._res.queryId). - addParam("psz", this._qry.pageSize()); - + var cmd = this._getQueryCommand(); var server = this._cache._server; var qry = this._qry; var cache = this._cache; return new Promise(function(resolve, reject) { server.runCommand(cmd, function(err, res) { - if(err != null) { + if(err !== null) { + console.log("ERR=" + err) reject(err); } else { - resolve(new Cursor(qry, res, cache)); + resolve(new Cursor(cache, qry, false, res)); } }); }); } Cursor.prototype.page = function() { + if (this._res === null) + return null; + return this._res["items"]; } +Cursor.prototype.close = function() { + if (this._init) { + return new Promise(function(resolve, reject) { + return resolve(true); + }); + } + + var server = this._cache._server; + var cmd = this._createQueryCommand("qryclose", this._qry).addParam("qryId", this._res.queryId); + + return new Promise(function(resolve, reject) { + server.runCommand(cmd, function(err, res) { + if(err != null) { + reject(err); + } + else { + resolve(true); + } + }); + }); +} + Cursor.prototype.isFinished = function() { + if (this._res === null) + return false; + return this._res["last"]; } +Cursor.prototype._getQueryCommand = function() { + if (this._init) { + if (this._qry.type() === "Sql") { + return this._sqlQuery(this._qry); + } + + this._init = false; + + return this._sqlFieldsQuery(this._qry); + } + + return this._cache._createCommand("qryfetch").addParam("qryId", this._res.queryId). + addParam("psz", this._qry.pageSize()); +} + +Cursor.prototype._sqlFieldsQuery = function(qry) { + return this._createQueryCommand("qryfieldsexecute", qry). + setPostData(JSON.stringify({"arg" : qry.arguments()})); +} + +Cursor.prototype._sqlQuery = function(qry) { + return this._createQueryCommand("qryexecute", qry).addParam("type", qry.returnType()). + setPostData(JSON.stringify({"arg" : qry.arguments()})); +} + +Cursor.prototype._createQueryCommand = function(name, qry) { + return new Command(name).addParam("cacheName", this._cache._cacheName). + addParam("qry", qry.query()).addParam("psz", qry.pageSize()); +} + /** * @this{CacheEntry} * @param key Key http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7d489c16/modules/nodejs/src/main/js/server.js ---------------------------------------------------------------------- diff --git a/modules/nodejs/src/main/js/server.js b/modules/nodejs/src/main/js/server.js index 5d7430a..f8a98ab 100644 --- a/modules/nodejs/src/main/js/server.js +++ b/modules/nodejs/src/main/js/server.js @@ -86,6 +86,8 @@ Server.prototype.runCommand = function(cmd, callback) { }); response.on('end', function () { + console.log("Full response:" + fullResponseString); + if (response.statusCode !== 200) { if (response.statusCode === 401) { callback.call(null, "Authentication failed. Status code 401."); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7d489c16/modules/nodejs/src/test/java/org/apache/ignite/internal/NodeJsSqlQuerySelfTest.java ---------------------------------------------------------------------- diff --git a/modules/nodejs/src/test/java/org/apache/ignite/internal/NodeJsSqlQuerySelfTest.java b/modules/nodejs/src/test/java/org/apache/ignite/internal/NodeJsSqlQuerySelfTest.java index 9024b93..9a29f52 100644 --- a/modules/nodejs/src/test/java/org/apache/ignite/internal/NodeJsSqlQuerySelfTest.java +++ b/modules/nodejs/src/test/java/org/apache/ignite/internal/NodeJsSqlQuerySelfTest.java @@ -64,6 +64,24 @@ public class NodeJsSqlQuerySelfTest extends NodeJsAbstractTest { /** * @throws Exception If failed. */ + public void testCloseQuery() throws Exception { + initCache(); + + runJsScript("testCloseQuery"); + } + + /** + * @throws Exception If failed. + */ + public void testSqlFieldsGetAllQuery() throws Exception { + initCache(); + + runJsScript("testSqlFieldsGetAllQuery"); + } + + /** + * @throws Exception If failed. + */ public void testSqlQueryWithParams() throws Exception { initCache(); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7d489c16/modules/nodejs/src/test/js/test-query.js ---------------------------------------------------------------------- diff --git a/modules/nodejs/src/test/js/test-query.js b/modules/nodejs/src/test/js/test-query.js index cbdb643..573c4ad 100644 --- a/modules/nodejs/src/test/js/test-query.js +++ b/modules/nodejs/src/test/js/test-query.js @@ -33,6 +33,7 @@ testSqlQuery = function() { var fullRes = []; function onQuery(cursor) { + console.log("PGE=" + cursor.page()); var page = cursor.page(); fullRes = fullRes.concat(page); @@ -52,10 +53,12 @@ testSqlQuery = function() { return; } - cursor.next().then(onQuery); + cursor.nextPage().then(onQuery); } - ignite.cache("mycache").query(qry).then(onQuery); + var cursor = ignite.cache("mycache").query(qry); + + cursor.nextPage().then(onQuery); }).catch(function(err) { assert(err === null, err); }) @@ -86,15 +89,59 @@ testSqlFieldsQuery = function() { console.log("Result: " + JSON.stringify(fullRes)); - TestUtils.testDone(); - - return; + return ignite.cache("mycache").get("key"); } - cursor.next().then(onQuery); + return cursor.nextPage().then(onQuery); } - ignite.cache("person").query(qry).then(onQuery); + ignite.cache("person").query(qry).nextPage().then(onQuery).then(function(){ + TestUtils.testDone(); + }) + }).catch(function(err) { + assert(err === null, err); + }); +} + +testCloseQuery = function() { + TestUtils.startIgniteNode().then(function(ignite) { + var qry = new SqlFieldsQuery("select concat(firstName, ' ', lastName) from Person"); + + function onQuery(cursor) { + return cursor.close(); + } + + ignite.cache("person").query(qry).nextPage().then(onQuery).then(function(res){ + TestUtils.testDone(); + }).catch(function(err){ + assert(err === null, err); + }) + }).catch(function(err) { + assert(err === null, err); + }); +} + +testSqlFieldsGetAllQuery = function() { + TestUtils.startIgniteNode().then(function(ignite) { + var qry = new SqlFieldsQuery("select concat(firstName, ' ', lastName) from Person"); + + function onQuery(fullRes) { + assert(fullRes.length === 4, "Result length is not correct" + + "[expected=1, val = " + fullRes.length + "]"); + + fullRes.sort(); + + assert(fullRes[0].indexOf("Jane Doe") > -1, + "Result does not contain Jane Doe [res=" + fullRes[0] + "]"); + + console.log("Result: " + JSON.stringify(fullRes)); + + return ignite.cache("mycache").get("key"); + } + + return ignite.cache("person").query(qry).getAll().then(onQuery).then(function(){ + TestUtils.testDone(); + }) }).catch(function(err) { assert(err === null, err); }); @@ -130,10 +177,10 @@ testSqlQueryWithParams = function() { return; } - cursor.next().then(onQuery); + cursor.nextPage().then(onQuery); } - ignite.cache("person").query(qry).then(onQuery); + ignite.cache("person").query(qry).nextPage().then(onQuery); }).catch(function(err) { assert(err === null, err); }); http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/7d489c16/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java ---------------------------------------------------------------------- diff --git a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java index 20f0a88..69108a4 100644 --- a/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java +++ b/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java @@ -650,6 +650,17 @@ public class GridJettyRestHandler extends AbstractHandler { break; } + case CLOSE_SQL_QUERY: { + RestSqlQueryRequest restReq0 = new RestSqlQueryRequest(); + + restReq0.queryId(Long.parseLong((String)params.get("qryId"))); + restReq0.cacheName((String)params.get("cacheName")); + + restReq = restReq0; + + break; + } + default: throw new IgniteCheckedException("Invalid command: " + cmd); }