diff --git a/src/intTest/java/com/surrealdb/refactor/DemoScenarioTest.java b/src/intTest/java/com/surrealdb/refactor/DemoScenarioTest.java index 8dd17888..4a785afe 100644 --- a/src/intTest/java/com/surrealdb/refactor/DemoScenarioTest.java +++ b/src/intTest/java/com/surrealdb/refactor/DemoScenarioTest.java @@ -17,7 +17,7 @@ public class DemoScenarioTest extends BaseIntegrationTest { @Test - @Disabled("Functionality is unimplemented, but having the tests shows the design") +// @Disabled("Functionality is unimplemented, but having the tests shows the design") public void testDemoScenario() throws Exception { // Setup URI address = @@ -49,7 +49,7 @@ public void testDemoScenario() throws Exception { List results = surrealDB.query(query.toString(), params); // Validate the results of the multi-statement query - assertEquals(results.size(), 3); + assertEquals(results.size(), 3, results.toString()); assertEquals( results.get(0).intoJson(), asJson( diff --git a/src/main/java/com/surrealdb/refactor/driver/QueryMessage.java b/src/main/java/com/surrealdb/refactor/driver/QueryMessage.java new file mode 100644 index 00000000..8dc56934 --- /dev/null +++ b/src/main/java/com/surrealdb/refactor/driver/QueryMessage.java @@ -0,0 +1,32 @@ +package com.surrealdb.refactor.driver; + +import com.google.gson.Gson; +import com.google.gson.JsonObject; +import com.surrealdb.refactor.types.Param; +import lombok.Getter; +import lombok.ToString; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +@Getter +@ToString +public class QueryMessage { + private final String method = "query"; + private final String id; + + private final String[] params; + + public QueryMessage(String requestID, String query, List params) { + id = requestID; + List list = new ArrayList<>(); + list.add(query); + for (Param param: params) { + JsonObject paramEntry = new JsonObject(); + paramEntry.add(param.getIdentifier(), param.getValue().intoJson()); + list.add(paramEntry.toString()); + } + this.params = list.toArray(new String[0]); + } +} diff --git a/src/main/java/com/surrealdb/refactor/driver/SurrealDBWebsocketClientProtocolHandler.java b/src/main/java/com/surrealdb/refactor/driver/SurrealDBWebsocketClientProtocolHandler.java index 78a31c84..b7fb0663 100644 --- a/src/main/java/com/surrealdb/refactor/driver/SurrealDBWebsocketClientProtocolHandler.java +++ b/src/main/java/com/surrealdb/refactor/driver/SurrealDBWebsocketClientProtocolHandler.java @@ -8,9 +8,13 @@ import com.surrealdb.refactor.exception.UnhandledSurrealDBNettyState; import com.surrealdb.refactor.exception.UnknownResponseToRequest; import com.surrealdb.refactor.types.Credentials; +import com.surrealdb.refactor.types.Param; import io.netty.channel.*; import io.netty.handler.codec.http.websocketx.*; import io.netty.util.concurrent.Promise; + +import java.util.List; +import java.util.Map; import java.util.UUID; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.ConcurrentMap; @@ -82,6 +86,13 @@ public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) { ctx.close(); } + public Future query(String requestID, String query, List params) { + String method = "query"; + checkChannelAndThrow(method); + QueryMessage queryMessage = new QueryMessage(requestID, query, params); + return sendAndPromise(method, requestID, new Gson().toJson(queryMessage)); + } + public Future signin(Credentials credentials) { return signin(UUID.randomUUID().toString(), credentials); } @@ -96,11 +107,11 @@ public Future signin(String requestID, Credentials credentials) { return sendAndPromise(method, requestID, new Gson().toJson(signinMessage)); } - public Promise use(String namespace, String database) { + public Future use(String namespace, String database) { return use(UUID.randomUUID().toString(), namespace, database); } - public Promise use(String requestID, String namespace, String database) { + public Future use(String requestID, String namespace, String database) { String method = "use"; checkChannelAndThrow(method); UseMessage useMessage = new UseMessage(requestID, namespace, database); @@ -145,4 +156,5 @@ private void registerRequest(String requestID, Promise promise) { requestID)); } } + } diff --git a/src/main/java/com/surrealdb/refactor/driver/WsPlaintextConnection.java b/src/main/java/com/surrealdb/refactor/driver/WsPlaintextConnection.java index ea6d2159..7e690845 100644 --- a/src/main/java/com/surrealdb/refactor/driver/WsPlaintextConnection.java +++ b/src/main/java/com/surrealdb/refactor/driver/WsPlaintextConnection.java @@ -14,7 +14,9 @@ import io.netty.handler.codec.http.websocketx.WebSocketClientProtocolHandler; import io.netty.handler.codec.http.websocketx.WebSocketVersion; import java.net.URI; +import java.util.Arrays; import java.util.List; +import java.util.UUID; import java.util.concurrent.ExecutionException; import java.util.concurrent.TimeUnit; import java.util.concurrent.TimeoutException; @@ -53,9 +55,14 @@ public UnusedSurrealDB authenticate(Credentials credenti @Override public List query(String query, List params) { - throw new SurrealDBUnimplementedException( - "https://github.com/surrealdb/surrealdb.java/issues/62", - "Plaintext websocket connections are not supported yet"); + Object resp = null; + try { + resp = srdbHandler.query(UUID.randomUUID().toString(), query, params).get(2, TimeUnit.SECONDS); + } catch (InterruptedException | ExecutionException | TimeoutException e) { + throw new RuntimeException(e); + } + List casted = Arrays.asList(new Value(resp.toString())); + return casted; } }; return new UnusedSurrealDB<>() { diff --git a/src/main/java/com/surrealdb/refactor/types/Param.java b/src/main/java/com/surrealdb/refactor/types/Param.java index 3458c2f4..edda6112 100644 --- a/src/main/java/com/surrealdb/refactor/types/Param.java +++ b/src/main/java/com/surrealdb/refactor/types/Param.java @@ -1,7 +1,11 @@ package com.surrealdb.refactor.types; import com.surrealdb.refactor.types.surrealdb.Value; +import lombok.Getter; +import lombok.ToString; +@Getter +@ToString public class Param { private final String identifier; private final Value value; diff --git a/src/main/java/com/surrealdb/refactor/types/surrealdb/Value.java b/src/main/java/com/surrealdb/refactor/types/surrealdb/Value.java index 7943172c..4d9730a2 100644 --- a/src/main/java/com/surrealdb/refactor/types/surrealdb/Value.java +++ b/src/main/java/com/surrealdb/refactor/types/surrealdb/Value.java @@ -4,8 +4,11 @@ import com.google.gson.JsonPrimitive; import com.surrealdb.refactor.exception.SurrealDBUnimplementedException; import com.surrealdb.refactor.types.IntoJson; +import lombok.ToString; + import java.util.Optional; +@ToString public class Value implements IntoJson { private final String string;