Merge remote-tracking branch 'remotes/origin/ignite-961-master' into ignite-961
Conflicts: modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestCommand.java modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/cache/GridCacheCommandHandler.java modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java Project: http://git-wip-us.apache.org/repos/asf/incubator-ignite/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-ignite/commit/4699dd88 Tree: http://git-wip-us.apache.org/repos/asf/incubator-ignite/tree/4699dd88 Diff: http://git-wip-us.apache.org/repos/asf/incubator-ignite/diff/4699dd88 Branch: refs/heads/ignite-961 Commit: 4699dd88496de54d6cb95ccd669d7738ce036dc3 Parents: 4e2f26b cab277b Author: ivasilinets <ivasilin...@gridgain.com> Authored: Tue Jul 21 14:24:30 2015 +0300 Committer: ivasilinets <ivasilin...@gridgain.com> Committed: Tue Jul 21 14:24:30 2015 +0300 ---------------------------------------------------------------------- .../JettyRestProcessorAbstractSelfTest.java | 489 ++++++++++--------- .../apache/ignite/internal/IgniteKernal.java | 42 +- .../processors/rest/GridRestProcessor.java | 13 + .../handlers/cache/GridCacheCommandHandler.java | 70 +-- .../handlers/query/QueryCommandHandler.java | 80 ++- .../http/jetty/GridJettyRestHandler.java | 57 +++ 6 files changed, 414 insertions(+), 337 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4699dd88/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java ---------------------------------------------------------------------- diff --cc modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java index 5baab05,55d60d2..4734ecc --- a/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java +++ b/modules/clients/src/test/java/org/apache/ignite/internal/processors/rest/JettyRestProcessorAbstractSelfTest.java @@@ -72,6 -70,6 +72,12 @@@ public abstract class JettyRestProcesso } /** ++ * @return Signature. ++ * @throws Exception If failed. ++ */ ++ protected abstract String signature() throws Exception; ++ ++ /** * @return Port to use for rest. Needs to be changed over time * because Jetty has some delay before port unbind. */ @@@ -380,132 -311,37 +385,238 @@@ assertNull(grid(0).cache("testCache")); } ++ + /** + * @throws Exception If failed. + */ + public void testGetPost() throws Exception { + jcache().put("key0", "val0"); + + String val = "{\"key\":\"key0\"}"; + String ret = makePostRequest(F.asMap("cmd", "get"), val); + + assertNotNull(ret); + assertTrue(!ret.isEmpty()); + + info("Get command result: " + ret); + + jsonEquals(ret, cachePattern("val0", true)); + } + + /** + * @throws Exception If failed. + */ + public void testReplacePost() throws Exception { + jcache().put("key0", "val0"); + + String val = "{\"key\":\"key0\", \"val\":\"val2\", \"oldVal\":\"val1\"}"; + String ret = makePostRequest(F.asMap("cmd", "repval"), val); + + assertNotNull(ret); + assertTrue(!ret.isEmpty()); + + info("Get command result: " + ret); + + jsonEquals(ret, cachePattern(false, true)); + + val = "{\"key\":\"key0\", \"val\":\"val2\"}"; + ret = makePostRequest(F.asMap("cmd", "getandreplace"), val); + + jsonEquals(ret, cachePattern("val0", true)); + + assertEquals("val2", grid(0).cache(null).get("key0")); + + val = "{\"key\":\"key0\", \"val\":\"val3\"}"; + ret = makePostRequest(F.asMap("cmd", "rep"), val); + + assertNotNull(ret); + assertTrue(!ret.isEmpty()); + + info("Get command result: " + ret); + + assertEquals("val3", grid(0).cache(null).get("key0")); + } + + /** + * @throws Exception If failed. + */ + public void testRemovePost() throws Exception { + jcache().put("key0", "val0"); + + String val = "{\"key\":\"key0\", \"val\":\"val2\"}"; + String ret = makePostRequest(F.asMap("cmd", "rmvvalue"), val); + + assertNotNull(ret); + assertTrue(!ret.isEmpty()); + + info("Get command result: " + ret); + + jsonEquals(ret, cachePattern(false, true)); + + assertEquals("val0", grid(0).cache(null).get("key0")); + + val = "{\"key\":\"key0\"}"; + ret = makePostRequest(F.asMap("cmd", "getandrmv"), val); + + jsonEquals(ret, cachePattern("val0", true)); + + assertNull(grid(0).cache(null).get("key0")); + } + + /** + * @throws Exception If failed. + */ + public void testRemoveAllPost() throws Exception { + jcache().put("key0", "val0"); + jcache().put("key1", "val1"); + + String val = "{\"keys\": [\"key0\", \"key1\"]}"; + String ret = makePostRequest(F.asMap("cmd", "rmvall"), val); + + assertNotNull(ret); + assertTrue(!ret.isEmpty()); + + assertEquals(0, grid(0).cache(null).size()); + } + + /** + * @throws Exception If failed. + */ + public void testPutPost() throws Exception { + String val = "{\"key\":\"key0\",\"val\":\"val0\"}"; + String ret = makePostRequest(F.asMap("cmd", "put"), val); + + assertNotNull(ret); + assertTrue(!ret.isEmpty()); + + assertNotNull(grid(0).cache(null).get("key0")); + + val = "{\"key\":\"key0\"}"; + ret = makePostRequest(F.asMap("cmd", "containskey"), val); + + assertNotNull(ret); + assertTrue(!ret.isEmpty()); + + jsonEquals(ret, cachePattern(true, true)); + } + + /** + * @throws Exception If failed. + */ + public void testIncorrectPutPost() throws Exception { + String val = "{\"key\":\"key0\"}"; + String ret = makePostRequest(F.asMap("cmd", "put"), val); + + assertNotNull(ret); + assertTrue(!ret.isEmpty()); + jsonEquals(ret, errorPattern("Failed to find mandatory parameter in request: val")); + } + ++ ++ /** ++ * @throws Exception If failed. ++ */ ++ public void testGetAndPutPost() throws Exception { ++ String val = "{\"key\":\"key0\", \"val\":\"val0\"}"; ++ String ret = makePostRequest(F.asMap("cmd", "getandput"), val); ++ ++ assertNotNull(ret); ++ assertTrue(!ret.isEmpty()); ++ ++ jsonEquals(ret, cacheNullPattern(true)); ++ ++ assertNotNull(grid(0).cache(null).get("key0")); ++ ++ val = "{\"key\": \"key0\", \"val\":\"val1\"}"; ++ ret = makePostRequest(F.asMap("cmd", "getandputifabsent"), val); ++ ++ assertNotNull(ret); ++ assertTrue(!ret.isEmpty()); ++ ++ jsonEquals(ret, cachePattern("val0", true)); ++ ++ assertEquals("val0", grid(0).cache(null).get("key0")); ++ ++ val = "{\"key\": \"key0\"}"; ++ ret = makePostRequest(F.asMap("cmd", "rmv"), val); ++ ++ assertNotNull(ret); ++ assertTrue(!ret.isEmpty()); ++ ++ assertNull(grid(0).cache(null).get("key0")); ++ ++ val = "{\"key\": \"key0\", \"val\":\"val1\"}"; ++ ret = makePostRequest(F.asMap("cmd", "putifabsent"), val); ++ ++ assertNotNull(ret); ++ assertTrue(!ret.isEmpty()); ++ ++ jsonEquals(ret, cachePattern(true, true)); ++ ++ assertEquals("val1", grid(0).cache(null).get("key0")); ++ } ++ ++ /** ++ * @throws Exception If failed. ++ */ ++ public void testPutAllPost() throws Exception { ++ String val = "{\"entries\": [{\"key\":\"key0\", \"value\": \"val0\"}, {\"key\":\"key1\", \"value\":\"val1\"}]}"; ++ String ret = makePostRequest(F.asMap("cmd", "putAll"), val); ++ ++ assertNotNull(ret); ++ assertTrue(!ret.isEmpty()); ++ ++ assertNotNull(grid(0).cache(null).get("key0")); ++ ++ val = "{\"keys\": [\"key0\",\"key1\"]}"; ++ ret = makePostRequest(F.asMap("cmd", "containskeys"), val); ++ ++ assertNotNull(ret); ++ assertTrue(!ret.isEmpty()); ++ ++ jsonEquals(ret, cacheBulkPattern(true, true)); ++ ++ ret = makePostRequest(F.asMap("cmd", "getAll"), val); ++ ++ assertNotNull(ret); ++ assertTrue(!ret.isEmpty()); ++ ++ jsonEquals(ret, cacheBulkPattern( ++ "\\[\\{\\\"key\\\":\\\"key0\\\",\\\"value\\\":\\\"val0\\\"\\}," + ++ "\\{\\\"key\\\":\\\"key1\\\",\\\"value\\\":\\\"val1\\\"\\}\\]", true)); ++ } ++ + /** + * @throws Exception If failed. + */ + public void testGetAll() throws Exception { + jcache().put("getKey1", "getVal1"); + jcache().put("getKey2", "getVal2"); + + String ret = content(F.asMap("cmd", "getall", "k1", "getKey1", "k2", "getKey2")); + + assertNotNull(ret); + assertTrue(!ret.isEmpty()); + + info("Get all command result: " + ret); + + jsonEquals(ret, + // getKey[12] is used since the order is not determined. + cacheBulkPattern("\\{\\\"getKey[12]\\\":\\\"getVal[12]\\\"\\,\\\"getKey[12]\\\":\\\"getVal[12]\\\"\\}", + true)); + } + + /** + * @throws Exception If failed. + */ + public void testIncorrectPut() throws Exception { + String ret = content(F.asMap("cmd", "put", "key", "key0")); + + assertNotNull(ret); + assertTrue(!ret.isEmpty()); + jsonEquals(ret, errorPattern("Failed to find mandatory parameter in request: val")); + } + /** * @throws Exception If failed. */ @@@ -1243,271 -986,154 +1261,324 @@@ /** * @throws Exception If failed. */ + public void testQueryArgs() throws Exception { + String qry = "salary > ? and salary <= ?"; + + Map<String, String> params = new HashMap<>(); + params.put("cmd", "qryexecute"); + params.put("type", "Person"); + params.put("psz", "10"); + params.put("cacheName", "person"); + params.put("qry", URLEncoder.encode(qry)); + params.put("arg1", "1000"); + params.put("arg2", "2000"); + + String ret = content(params); + + assertNotNull(ret); + assertTrue(!ret.isEmpty()); + + JSONObject json = JSONObject.fromObject(ret); + + List items = (List)((Map)json.get("response")).get("items"); + + assertEquals(2, items.size()); + + assertFalse(queryCursorFound()); + } + + /** + * @throws Exception If failed. + */ + public void testQuery() throws Exception { + grid(0).cache(null).put("1", "1"); + grid(0).cache(null).put("2", "2"); + grid(0).cache(null).put("3", "3"); + + Map<String, String> params = new HashMap<>(); + params.put("cmd", "qryexecute"); + params.put("type", "String"); + params.put("psz", "1"); + params.put("qry", URLEncoder.encode("select * from String")); + + String ret = content(params); + + assertNotNull(ret); + assertTrue(!ret.isEmpty()); + + JSONObject json = JSONObject.fromObject(ret); + + Integer qryId = (Integer)((Map)json.get("response")).get("queryId"); + + assertNotNull(qryId); + + ret = content(F.asMap("cmd", "qryfetch", "psz", "1", "qryId", String.valueOf(qryId))); + + json = JSONObject.fromObject(ret); + + Integer qryId0 = (Integer)((Map)json.get("response")).get("queryId"); + + Boolean last = (Boolean)((Map)json.get("response")).get("last"); + + assertEquals(qryId0, qryId); + assertFalse(last); + + ret = content(F.asMap("cmd", "qryfetch", "psz", "1", "qryId", String.valueOf(qryId))); + + json = JSONObject.fromObject(ret); + + qryId0 = (Integer)((Map)json.get("response")).get("queryId"); + + last = (Boolean)((Map)json.get("response")).get("last"); + + assertEquals(qryId0, qryId); + assertTrue(last); + + assertFalse(queryCursorFound()); + } + + /** + * @throws Exception If failed. + */ + public void testSqlFieldsQuery() throws Exception { + String qry = "select concat(firstName, ' ', lastName) from Person"; + + Map<String, String> params = new HashMap<>(); + params.put("cmd", "qryfieldsexecute"); + params.put("psz", "10"); + params.put("cacheName", "person"); + params.put("qry", URLEncoder.encode(qry)); + + String ret = content(params); + + assertNotNull(ret); + assertTrue(!ret.isEmpty()); + + JSONObject json = JSONObject.fromObject(ret); + + List items = (List)((Map)json.get("response")).get("items"); + + assertEquals(4, items.size()); + + assertFalse(queryCursorFound()); + } + + /** + * @throws Exception If failed. + */ + public void testQueryClose() throws Exception { + String qry = "salary > ? and salary <= ?"; + + Map<String, String> params = new HashMap<>(); + params.put("cmd", "qryexecute"); + params.put("type", "Person"); + params.put("psz", "1"); + params.put("cacheName", "person"); + params.put("qry", URLEncoder.encode(qry)); + params.put("arg1", "1000"); + params.put("arg2", "2000"); + + String ret = content(params); + + assertNotNull(ret); + assertTrue(!ret.isEmpty()); + + JSONObject json = JSONObject.fromObject(ret); + + List items = (List)((Map)json.get("response")).get("items"); + + assertEquals(1, items.size()); + + assertTrue(queryCursorFound()); + + Integer qryId = (Integer)((Map)json.get("response")).get("queryId"); + + assertNotNull(qryId); + + ret = content(F.asMap("cmd", "qryclose", "cacheName", "person", "qryId", String.valueOf(qryId))); + + assertNotNull(ret); + assertTrue(!ret.isEmpty()); + + assertFalse(queryCursorFound()); + } + - protected abstract String signature() throws Exception; ++ ++ ++ /** ++ * @throws Exception If failed. ++ */ + public void testRunScriptPost() throws Exception { + String f = "function(param){return param;}"; + String ret = makePostRequest(F.asMap("cmd", "runscript", "func", URLEncoder.encode(f)), "{\"arg\":\"hello\"}"); + + assertNotNull(ret); + assertTrue(!ret.isEmpty()); + + jsonEquals(ret, stringPattern("hello", true)); + } + + /** + * @throws Exception If failed. + */ + public void testRunScript() throws Exception { + String f = "function(param){return param;}"; + String ret = content(F.asMap("cmd", "runscript", "func", URLEncoder.encode(f), "arg", "hello")); + + assertNotNull(ret); + assertTrue(!ret.isEmpty()); + + jsonEquals(ret, stringPattern("hello", true)); + } + + /** + * @throws Exception If failed. + */ + public void testRunAffinityScriptPost() throws Exception { + ClusterNode node = grid(0).affinity(null).mapKeyToNode("key0"); + + Ignite ignite = null; + + for (int i = 0; i < GRID_CNT; ++i) { + if (grid(i).localNode().equals(node)) + ignite = grid(i); + } + + assertNotNull(ignite); + + String f = "function(expName){"+ + "if (expName !== \"hello\") {" + + "throw \"Not correct arg.\"" + + "}" + + "return ignite.name();}"; + + String ret = makePostRequest(F.asMap("cmd", "affrun", "func", URLEncoder.encode(f)), + "{\"arg\":\"" + "hello" + "\",\"key\":\"key0\"}"); + + assertNotNull(ret); + assertTrue(!ret.isEmpty()); + + jsonEquals(ret, stringPattern(ignite.name(), true)); + } + + /** + * @throws Exception If failed. + */ + public void testRunAffinityScript() throws Exception { + ClusterNode node = grid(0).affinity(null).mapKeyToNode("key0"); + + Ignite ignite = null; + + for (int i = 0; i < GRID_CNT; ++i) { + if (grid(i).localNode().equals(node)) + ignite = grid(i); + } + + assertNotNull(ignite); + + String f = "function(expName){"+ + "if (expName !== \"hello\") {" + + "throw \"Not correct arg.\"" + + "}" + + "return ignite.name();}"; + + String ret = content(F.asMap("cmd", "affrun", "func", URLEncoder.encode(f), + "key", "key0", "arg", "hello")); + + assertNotNull(ret); + assertTrue(!ret.isEmpty()); + + jsonEquals(ret, stringPattern(ignite.name(), true)); + } + + /** + * @throws Exception If failed. + */ + public void testMapReduceScriptPost() throws Exception { + String map = "function(nodes, arg) {" + + "var words = arg.split(\" \");" + + "for (var i = 0; i < words.length; i++) {" + + "var f = function(word) {" + + "return word.length;" + + "};" + + "emit(f, words[i], nodes[i % nodes.length]);" + + "}"+ + "};"; + + String reduce = "function(results) {"+ + "var sum = 0;"+ + "for (var i = 0; i < results.size(); ++i) {"+ + "sum += results.get(i).intValue();"+ + "}" + + "return sum;" + + "};"; + + String ret = makePostRequest(F.asMap("cmd", "excmapreduce", "map", URLEncoder.encode(map), + "reduce", URLEncoder.encode(reduce)), "{\"arg\": \"Hello world!\"}"); + + assertNotNull(ret); + assertTrue(!ret.isEmpty()); + + jsonEquals(ret, integerPattern(11, true)); + } + + /** + * @throws Exception If failed. + */ + public void testMapReduceScript() throws Exception { + String map = "function(nodes, arg) {" + + "var words = arg.split(\" \");" + + "for (var i = 0; i < words.length; i++) {" + + "var f = function(word) {" + + "return word.length;" + + "};" + + "emit(f, words[i], nodes[i % nodes.length]);" + + "}"+ + "};"; + + String reduce = "function(results) {"+ + "var sum = 0;"+ + "for (var i = 0; i < results.size(); ++i) {"+ + "sum += results.get(i).intValue();"+ + "}" + + "return sum;" + + "};"; + + String ret = content(F.asMap("cmd", "excmapreduce", "map", URLEncoder.encode(map), + "reduce", URLEncoder.encode(reduce), "arg", URLEncoder.encode("Hello world!"))); + + assertNotNull(ret); + assertTrue(!ret.isEmpty()); + + jsonEquals(ret, integerPattern(11, true)); + } + + /** + * @throws Exception If failed. + */ - public void testQuery() throws Exception { - grid(0).cache(null).put("1", "1"); - grid(0).cache(null).put("2", "2"); - grid(0).cache(null).put("3", "3"); - - String ret = makePostRequest(F.asMap("cmd", "qryexecute", "type", "String", "psz", "1", - "qry", URLEncoder.encode("select * from String")), - "{\"arg\": []}"); - - assertNotNull(ret); - assertTrue(!ret.isEmpty()); - - JSONObject json = JSONObject.fromObject(ret); - - Integer qryId = (Integer)((Map)json.get("response")).get("queryId"); - - assertNotNull(qryId); - - ret = content(F.asMap("cmd", "qryfetch", "psz", "1", "qryId", String.valueOf(qryId))); - - json = JSONObject.fromObject(ret); - - Integer qryId0 = (Integer)((Map)json.get("response")).get("queryId"); - - assertEquals(qryId0, qryId); - - ret = content(F.asMap("cmd", "qryclose", "qryId", String.valueOf(qryId))); - } - - /** - * @throws Exception If failed. - */ + public void testQueryArgsPost() throws Exception { + String qry = "salary > ? and salary <= ?"; + + String ret = makePostRequest(F.asMap("cmd", "qryexecute", "type", "Person", "psz", "10", "cacheName", "person", + "qry", URLEncoder.encode(qry)), + "{\"arg\": [1000, 2000]}"); + + assertNotNull(ret); + assertTrue(!ret.isEmpty()); + + JSONObject json = JSONObject.fromObject(ret); + + List items = (List)((Map)json.get("response")).get("items"); + + assertEquals(2, items.size()); + - for (int i = 0; i < GRID_CNT; ++i) { - Map<GridRestCommand, GridRestCommandHandler> handlers = - GridTestUtils.getFieldValue(grid(i).context().rest(), "handlers"); - - GridRestCommandHandler qryHnd = handlers.get(GridRestCommand.CLOSE_SQL_QUERY); - - ConcurrentHashMap<Long, Iterator> its = GridTestUtils.getFieldValue(qryHnd, "curs"); - - assertEquals(0, its.size()); - } - } - - /** - * @throws Exception If failed. - */ - public void testQueryArgs() throws Exception { - String qry = "salary > ? and salary <= ?"; - - Map<String, String> params = new HashMap<>(); - params.put("cmd", "qryexecute"); - params.put("type", "Person"); - params.put("psz", "10"); - params.put("cacheName", "person"); - params.put("qry", URLEncoder.encode(qry)); - params.put("arg1", "1000"); - params.put("arg2", "2000"); - - String ret = content(params); - - assertNotNull(ret); - assertTrue(!ret.isEmpty()); - - JSONObject json = JSONObject.fromObject(ret); - - List items = (List)((Map)json.get("response")).get("items"); - - assertEquals(2, items.size()); - - for (int i = 0; i < GRID_CNT; ++i) { - Map<GridRestCommand, GridRestCommandHandler> handlers = - GridTestUtils.getFieldValue(grid(i).context().rest(), "handlers"); - - GridRestCommandHandler qryHnd = handlers.get(GridRestCommand.CLOSE_SQL_QUERY); - - ConcurrentHashMap<Long, Iterator> its = GridTestUtils.getFieldValue(qryHnd, "curs"); - - assertEquals(0, its.size()); - } ++ assertFalse(queryCursorFound()); + } /** - * @throws Exception If failed. + * @return True if any query cursor is available. */ - public void testQueryClose() throws Exception { - String qry = "salary > ? and salary <= ?"; - - String ret = makePostRequest(F.asMap("cmd", "qryexecute", "type", "Person", "psz", "1", "cacheName", "person", - "qry", URLEncoder.encode(qry)), - "{\"arg\": [1000, 2000]}"); - - assertNotNull(ret); - assertTrue(!ret.isEmpty()); - - JSONObject json = JSONObject.fromObject(ret); - - List items = (List)((Map)json.get("response")).get("items"); - - assertEquals(1, items.size()); - + private boolean queryCursorFound() { boolean found = false; for (int i = 0; i < GRID_CNT; ++i) { http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4699dd88/modules/core/src/main/java/org/apache/ignite/internal/IgniteKernal.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4699dd88/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/GridRestProcessor.java ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4699dd88/modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java ---------------------------------------------------------------------- diff --cc modules/core/src/main/java/org/apache/ignite/internal/processors/rest/handlers/query/QueryCommandHandler.java index 6eb2e20,defca37..1f92bf3 --- 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 @@@ -188,8 -178,8 +178,8 @@@ public class QueryCommandHandler extend /** {@inheritDoc} */ @Override public GridRestResponse call() throws Exception { -- try { - QueryCursor cur = qryCurs.get(req.queryId()); ++ try { + QueryCursor cur = qryCurs.get(req.queryId()).get1(); if (cur == null) return new GridRestResponse(GridRestResponse.STATUS_FAILED, http://git-wip-us.apache.org/repos/asf/incubator-ignite/blob/4699dd88/modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java ---------------------------------------------------------------------- diff --cc modules/rest-http/src/main/java/org/apache/ignite/internal/processors/rest/protocols/http/jetty/GridJettyRestHandler.java index 2d8fa3e,bf0f2c8..ebe2119 --- 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 @@@ -576,112 -469,63 +576,169 @@@ public class GridJettyRestHandler exten break; } + case EXECUTE_SQL_QUERY: + case EXECUTE_SQL_FIELDS_QUERY: { + RestSqlQueryRequest restReq0 = new RestSqlQueryRequest(); + + restReq0.sqlQuery((String) params.get("qry")); + + restReq0.arguments(values("arg", params).toArray()); + + restReq0.typeName((String) params.get("type")); + + String psz = (String) params.get("psz"); + + if (psz != null) + restReq0.pageSize(Integer.parseInt(psz)); + + restReq0.cacheName((String)params.get("cacheName")); + + restReq = restReq0; + + break; + } + + case FETCH_SQL_QUERY: { + RestSqlQueryRequest restReq0 = new RestSqlQueryRequest(); + + String qryId = (String) params.get("qryId"); + + if (qryId != null) + restReq0.queryId(Long.parseLong(qryId)); + + String psz = (String) params.get("psz"); + + if (psz != null) + restReq0.pageSize(Integer.parseInt(psz)); + + restReq0.cacheName((String)params.get("cacheName")); + + restReq = restReq0; + + break; + } + + case CLOSE_SQL_QUERY: { + RestSqlQueryRequest restReq0 = new RestSqlQueryRequest(); + + String qryId = (String) params.get("qryId"); + + if (qryId != null) + restReq0.queryId(Long.parseLong(qryId)); + + restReq0.cacheName((String)params.get("cacheName")); + + restReq = restReq0; + + break; + } + + case RUN_SCRIPT: { + RestRunScriptRequest restReq0 = new RestRunScriptRequest(); + + restReq0.script((String)params.get("func")); + + if (req.getHeader("Content-Type") != null && req.getHeader("Content-Type").contains("json")) { + Map o = parseRequest(req); + restReq0.argument(ctx.scripting().toJavaObject(o.get("arg"))); + } + else + restReq0.argument(params.get("arg")); + + restReq = restReq0; + + break; + } + + case AFFINITY_RUN_SCRIPT: { + RestRunScriptRequest restReq0 = new RestRunScriptRequest(); + + restReq0.script((String)params.get("func")); + restReq0.cacheName((String) params.get("cacheName")); + + if (req.getHeader("Content-Type") != null && req.getHeader("Content-Type").contains("json")) { + Map o = parseRequest(req); + restReq0.argument(ctx.scripting().toJavaObject(o.get("arg"))); + + Object cacheObj = ctx.scripting().toJavaObject(o.get("key")); + restReq0.affinityKey(cacheObj); + } + else { + restReq0.argument(params.get("arg")); + restReq0.affinityKey(params.get("key")); + } + + restReq = restReq0; + + break; + } + + case EXECUTE_MAP_REDUCE_SCRIPT: { + RestMapReduceScriptRequest restReq0 = new RestMapReduceScriptRequest(); + + restReq0.mapFunction((String) params.get("map")); + + + if (req.getHeader("Content-Type") != null && req.getHeader("Content-Type").contains("json")) { + Map o = parseRequest(req); + restReq0.argument(ctx.scripting().toJavaObject(o.get("arg"))); + } + else + restReq0.argument(params.get("arg")); + + restReq0.reduceFunction((String) params.get("reduce")); + + restReq = restReq0; + + break; + } + + case EXECUTE_SQL_QUERY: + case EXECUTE_SQL_FIELDS_QUERY: { + RestSqlQueryRequest restReq0 = new RestSqlQueryRequest(); + + restReq0.sqlQuery((String) params.get("qry")); + + if (req.getHeader("Content-Type") != null && req.getHeader("Content-Type").contains("json")) { + Map o = parseRequest(req); + List args = (List) ctx.scripting().toJavaObject(o.get("arg")); + restReq0.arguments(args.toArray()); + } + else + restReq0.arguments(values("arg", params).toArray()); + + restReq0.typeName((String)params.get("type")); + restReq0.pageSize(Integer.parseInt((String) params.get("psz"))); + restReq0.cacheName((String)params.get("cacheName")); + + restReq = restReq0; + + break; + } + + case FETCH_SQL_QUERY: { + RestSqlQueryRequest restReq0 = new RestSqlQueryRequest(); + + restReq0.queryId(Long.parseLong((String)params.get("qryId"))); + restReq0.pageSize(Integer.parseInt((String)params.get("psz"))); + restReq0.cacheName((String)params.get("cacheName")); + + restReq = restReq0; + + 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); }