use of org.apache.calcite.avatica.remote.Service.Request in project calcite-avatica by apache.
the class ProtobufTranslationImplTest method getRequestsWithNulls.
private static List<Request> getRequestsWithNulls() {
LinkedList<Request> requests = new LinkedList<>();
// We're pretty fast and loose on what can be null.
requests.add(new SchemasRequest(null, null, null));
// Repeated fields default to an empty list
requests.add(new TablesRequest(null, null, null, null, Collections.<String>emptyList()));
requests.add(new ColumnsRequest(null, null, null, null, null));
requests.add(new PrepareAndExecuteRequest(null, 0, null, 0));
requests.add(new PrepareRequest(null, null, 0));
requests.add(new CreateStatementRequest(null));
requests.add(new CloseStatementRequest(null, 0));
requests.add(new OpenConnectionRequest(null, null));
requests.add(new CloseConnectionRequest(null));
requests.add(new ConnectionSyncRequest(null, null));
return requests;
}
use of org.apache.calcite.avatica.remote.Service.Request in project calcite-avatica by apache.
the class AbstractHandlerTest method testFailedResponseSerialization.
@Test
public void testFailedResponseSerialization() throws IOException {
@SuppressWarnings("unchecked") final AbstractHandler<String> handler = Mockito.mock(AbstractHandler.class);
final Request request = Mockito.mock(Request.class);
final Response response = Mockito.mock(Response.class);
final IOException exception = new IOException();
final ErrorResponse errorResponse = Mockito.mock(ErrorResponse.class);
final String serializedErrorResponse = "An ErrorResponse";
// Accept a serialized request
Mockito.when(handler.apply(Mockito.anyString())).thenCallRealMethod();
// Deserialize it back into a POJO
Mockito.when(handler.decode(Mockito.anyString())).thenReturn(request);
// Construct the Response for that Request
Mockito.when(request.accept(Mockito.nullable(Service.class))).thenReturn(response);
// Throw an IOException when serializing the Response.
Mockito.when(handler.encode(response)).thenThrow(exception);
Mockito.when(handler.convertToErrorResponse(exception)).thenCallRealMethod();
// Convert the IOException into an ErrorResponse
Mockito.when(handler.unwrapException(exception)).thenReturn(errorResponse);
Mockito.when(handler.encode(errorResponse)).thenReturn(serializedErrorResponse);
HandlerResponse<String> handlerResp = handler.apply("this is mocked out");
assertEquals(500, handlerResp.getStatusCode());
assertEquals(serializedErrorResponse, handlerResp.getResponse());
}
use of org.apache.calcite.avatica.remote.Service.Request in project calcite-avatica by apache.
the class ProtobufSerializationTest method testExecuteSerialization.
@Test
public void testExecuteSerialization() throws Exception {
Service.ExecuteRequest executeRequest = new Service.ExecuteRequest(new StatementHandle("connection", 12345, getSignature()), getTypedValues(), 0);
Requests.ExecuteRequest pbExecuteRequest = executeRequest.serialize();
ByteArrayOutputStream baos = new ByteArrayOutputStream(1024);
pbExecuteRequest.writeTo(baos);
byte[] serialized = baos.toByteArray();
baos.reset();
WireMessage wireMsg = WireMessage.newBuilder().setName(Requests.ExecuteRequest.class.getName()).setWrappedMessage(UnsafeByteOperations.unsafeWrap(serialized)).build();
wireMsg.writeTo(baos);
serialized = baos.toByteArray();
ProtobufTranslation translator = new ProtobufTranslationImpl();
Request newRequest = translator.parseRequest(serialized);
Assert.assertEquals(executeRequest, newRequest);
}
use of org.apache.calcite.avatica.remote.Service.Request in project calcite-avatica by apache.
the class AbstractHandler method apply.
/**
* Compute a response for the given request, handling errors generated by that computation.
*
* @param serializedRequest The caller's request.
* @return A {@link Response} with additional context about that response.
*/
public HandlerResponse<T> apply(T serializedRequest) {
try {
final Service.Request request = decode(serializedRequest);
final Service.Response response = request.accept(service);
return new HandlerResponse<>(encode(response), HTTP_OK);
} catch (Exception e) {
return convertToErrorResponse(e);
}
}
use of org.apache.calcite.avatica.remote.Service.Request in project calcite-avatica by apache.
the class ProtobufTranslationImplTest method getRequests.
/**
* Generates a collection of Requests whose serialization will be tested.
*/
private static List<Request> getRequests() {
LinkedList<Request> requests = new LinkedList<>();
requests.add(new CatalogsRequest());
requests.add(new DatabasePropertyRequest());
requests.add(new SchemasRequest("connectionId", "catalog", "schemaPattern"));
requests.add(new TablesRequest("connectionId", "catalog", "schemaPattern", "tableNamePattern", Arrays.asList("STRING", "BOOLEAN", "INT")));
requests.add(new TableTypesRequest());
requests.add(new ColumnsRequest("connectionId", "catalog", "schemaPattern", "tableNamePattern", "columnNamePattern"));
requests.add(new TypeInfoRequest());
requests.add(new PrepareAndExecuteRequest("connectionId", Integer.MAX_VALUE, "sql", Long.MAX_VALUE));
requests.add(new PrepareRequest("connectionId", "sql", Long.MAX_VALUE));
List<TypedValue> paramValues = Arrays.asList(TypedValue.create(Rep.BOOLEAN.name(), Boolean.TRUE), TypedValue.create(Rep.STRING.name(), "string"));
FetchRequest fetchRequest = new FetchRequest("connectionId", Integer.MAX_VALUE, Long.MAX_VALUE, Integer.MAX_VALUE);
requests.add(fetchRequest);
requests.add(new CreateStatementRequest("connectionId"));
requests.add(new CloseStatementRequest("connectionId", Integer.MAX_VALUE));
Map<String, String> info = new HashMap<>();
info.put("param1", "value1");
info.put("param2", "value2");
requests.add(new OpenConnectionRequest("connectionId", info));
requests.add(new CloseConnectionRequest("connectionId"));
requests.add(new ConnectionSyncRequest("connectionId", new ConnectionPropertiesImpl(Boolean.FALSE, Boolean.FALSE, Integer.MAX_VALUE, "catalog", "schema")));
requests.add(new SyncResultsRequest("connectionId", 12345, getSqlQueryState(), 150));
requests.add(new SyncResultsRequest("connectionId2", 54321, getMetadataQueryState1(), 0));
requests.add(new SyncResultsRequest("connectionId3", 5, getMetadataQueryState2(), 10));
requests.add(new CommitRequest("connectionId"));
requests.add(new RollbackRequest("connectionId"));
// ExecuteBatchRequest omitted because of the special protobuf conversion it does
List<String> commands = Arrays.asList("command1", "command2", "command3");
requests.add(new PrepareAndExecuteBatchRequest("connectionId", 12345, commands));
List<ColumnMetaData> columns = Collections.emptyList();
List<AvaticaParameter> params = Collections.emptyList();
Meta.CursorFactory cursorFactory = Meta.CursorFactory.create(Style.LIST, Object.class, Collections.<String>emptyList());
Signature signature = Signature.create(columns, "sql", params, cursorFactory, Meta.StatementType.SELECT);
Meta.StatementHandle handle = new Meta.StatementHandle("1234", 1, signature);
requests.add(new ExecuteRequest(handle, Arrays.<TypedValue>asList((TypedValue) null), 10));
requests.add(new ExecuteRequest(handle, Arrays.asList(TypedValue.EXPLICIT_NULL), 10));
return requests;
}
Aggregations