Search in sources :

Example 1 with Frame

use of org.apache.calcite.avatica.Meta.Frame in project calcite-avatica by apache.

the class ProtobufTranslationImplTest method getResponses.

/**
 * Generates a collection of Responses whose serialization will be tested.
 */
private static List<Response> getResponses() {
    final RpcMetadataResponse rpcMetadata = new RpcMetadataResponse("localhost:8765");
    LinkedList<Response> responses = new LinkedList<>();
    // Nested classes (Signature, ColumnMetaData, CursorFactory, etc) are implicitly getting tested)
    // Stub out the metadata for a row
    ScalarType arrayComponentType = ColumnMetaData.scalar(Types.INTEGER, "integer", Rep.INTEGER);
    ColumnMetaData arrayColumnMetaData = getArrayColumnMetaData(arrayComponentType, 2, "counts");
    List<ColumnMetaData> columns = Arrays.asList(MetaImpl.columnMetaData("str", 0, String.class, true), MetaImpl.columnMetaData("count", 1, Integer.class, true), arrayColumnMetaData);
    List<AvaticaParameter> params = Arrays.asList(new AvaticaParameter(false, 10, 0, Types.VARCHAR, "VARCHAR", String.class.getName(), "str"));
    Meta.CursorFactory cursorFactory = Meta.CursorFactory.create(Style.LIST, Object.class, Arrays.asList("str", "count", "counts"));
    // The row values
    List<Object> rows = new ArrayList<>();
    rows.add(new Object[] { "str_value1", 50, Arrays.asList(1, 2, 3) });
    rows.add(new Object[] { "str_value2", 100, Arrays.asList(1) });
    // Create the signature and frame using the metadata and values
    Signature signature = Signature.create(columns, "sql", params, cursorFactory, Meta.StatementType.SELECT);
    Frame frame = Frame.create(Integer.MAX_VALUE, true, rows);
    // And then create a ResultSetResponse
    ResultSetResponse results1 = new ResultSetResponse("connectionId", Integer.MAX_VALUE, true, signature, frame, Long.MAX_VALUE, rpcMetadata);
    responses.add(results1);
    responses.add(new CloseStatementResponse(rpcMetadata));
    ConnectionPropertiesImpl connProps = new ConnectionPropertiesImpl(false, true, Integer.MAX_VALUE, "catalog", "schema");
    responses.add(new ConnectionSyncResponse(connProps, rpcMetadata));
    responses.add(new OpenConnectionResponse(rpcMetadata));
    responses.add(new CloseConnectionResponse(rpcMetadata));
    responses.add(new CreateStatementResponse("connectionId", Integer.MAX_VALUE, rpcMetadata));
    Map<Meta.DatabaseProperty, Object> propertyMap = new HashMap<>();
    for (Meta.DatabaseProperty prop : Meta.DatabaseProperty.values()) {
        propertyMap.put(prop, prop.defaultValue);
    }
    responses.add(new DatabasePropertyResponse(propertyMap, rpcMetadata));
    responses.add(new ExecuteResponse(Arrays.asList(results1, results1, results1), false, rpcMetadata));
    responses.add(new FetchResponse(frame, false, false, rpcMetadata));
    responses.add(new FetchResponse(frame, true, true, rpcMetadata));
    responses.add(new FetchResponse(frame, false, true, rpcMetadata));
    responses.add(new PrepareResponse(new Meta.StatementHandle("connectionId", Integer.MAX_VALUE, signature), rpcMetadata));
    StringWriter sw = new StringWriter();
    new Exception().printStackTrace(new PrintWriter(sw));
    responses.add(new ErrorResponse(Collections.singletonList(sw.toString()), "Test Error Message", ErrorResponse.UNKNOWN_ERROR_CODE, ErrorResponse.UNKNOWN_SQL_STATE, AvaticaSeverity.WARNING, rpcMetadata));
    // No more results, statement not missing
    responses.add(new SyncResultsResponse(false, false, rpcMetadata));
    // Missing statement, no results
    responses.add(new SyncResultsResponse(false, true, rpcMetadata));
    // More results, no missing statement
    responses.add(new SyncResultsResponse(true, false, rpcMetadata));
    // Some tests to make sure ErrorResponse doesn't fail.
    responses.add(new ErrorResponse((List<String>) null, null, 0, null, null, null));
    responses.add(new ErrorResponse(Arrays.asList("stacktrace1", "stacktrace2"), null, 0, null, null, null));
    responses.add(new CommitResponse());
    responses.add(new RollbackResponse());
    long[] updateCounts = new long[] { 1, 0, 1, 1 };
    responses.add(new ExecuteBatchResponse("connectionId", 12345, updateCounts, false, rpcMetadata));
    return responses;
}
Also used : Meta(org.apache.calcite.avatica.Meta) Frame(org.apache.calcite.avatica.Meta.Frame) HashMap(java.util.HashMap) ScalarType(org.apache.calcite.avatica.ColumnMetaData.ScalarType) ArrayList(java.util.ArrayList) DatabasePropertyResponse(org.apache.calcite.avatica.remote.Service.DatabasePropertyResponse) RpcMetadataResponse(org.apache.calcite.avatica.remote.Service.RpcMetadataResponse) ConnectionPropertiesImpl(org.apache.calcite.avatica.ConnectionPropertiesImpl) RollbackResponse(org.apache.calcite.avatica.remote.Service.RollbackResponse) AvaticaParameter(org.apache.calcite.avatica.AvaticaParameter) CloseConnectionResponse(org.apache.calcite.avatica.remote.Service.CloseConnectionResponse) CloseStatementResponse(org.apache.calcite.avatica.remote.Service.CloseStatementResponse) StringWriter(java.io.StringWriter) ExecuteBatchResponse(org.apache.calcite.avatica.remote.Service.ExecuteBatchResponse) ResultSetResponse(org.apache.calcite.avatica.remote.Service.ResultSetResponse) OpenConnectionResponse(org.apache.calcite.avatica.remote.Service.OpenConnectionResponse) List(java.util.List) ArrayList(java.util.ArrayList) LinkedList(java.util.LinkedList) ColumnMetaData(org.apache.calcite.avatica.ColumnMetaData) PrintWriter(java.io.PrintWriter) CreateStatementResponse(org.apache.calcite.avatica.remote.Service.CreateStatementResponse) SyncResultsResponse(org.apache.calcite.avatica.remote.Service.SyncResultsResponse) PrepareResponse(org.apache.calcite.avatica.remote.Service.PrepareResponse) ExecuteResponse(org.apache.calcite.avatica.remote.Service.ExecuteResponse) CommitResponse(org.apache.calcite.avatica.remote.Service.CommitResponse) FetchResponse(org.apache.calcite.avatica.remote.Service.FetchResponse) LinkedList(java.util.LinkedList) IOException(java.io.IOException) ErrorResponse(org.apache.calcite.avatica.remote.Service.ErrorResponse) CloseConnectionResponse(org.apache.calcite.avatica.remote.Service.CloseConnectionResponse) PrepareResponse(org.apache.calcite.avatica.remote.Service.PrepareResponse) FetchResponse(org.apache.calcite.avatica.remote.Service.FetchResponse) RpcMetadataResponse(org.apache.calcite.avatica.remote.Service.RpcMetadataResponse) ExecuteBatchResponse(org.apache.calcite.avatica.remote.Service.ExecuteBatchResponse) DatabasePropertyResponse(org.apache.calcite.avatica.remote.Service.DatabasePropertyResponse) OpenConnectionResponse(org.apache.calcite.avatica.remote.Service.OpenConnectionResponse) RollbackResponse(org.apache.calcite.avatica.remote.Service.RollbackResponse) CloseStatementResponse(org.apache.calcite.avatica.remote.Service.CloseStatementResponse) Response(org.apache.calcite.avatica.remote.Service.Response) CreateStatementResponse(org.apache.calcite.avatica.remote.Service.CreateStatementResponse) ErrorResponse(org.apache.calcite.avatica.remote.Service.ErrorResponse) ConnectionSyncResponse(org.apache.calcite.avatica.remote.Service.ConnectionSyncResponse) ResultSetResponse(org.apache.calcite.avatica.remote.Service.ResultSetResponse) ExecuteResponse(org.apache.calcite.avatica.remote.Service.ExecuteResponse) SyncResultsResponse(org.apache.calcite.avatica.remote.Service.SyncResultsResponse) CommitResponse(org.apache.calcite.avatica.remote.Service.CommitResponse) Signature(org.apache.calcite.avatica.Meta.Signature) ConnectionSyncResponse(org.apache.calcite.avatica.remote.Service.ConnectionSyncResponse)

Example 2 with Frame

use of org.apache.calcite.avatica.Meta.Frame in project calcite-avatica by apache.

the class FrameTest method testDeprecatedValueAttributeForScalars.

@Test
public void testDeprecatedValueAttributeForScalars() {
    // Create a row with schema: [VARCHAR, INTEGER, DATE]
    List<Object> rows = Collections.<Object>singletonList(new Object[] { "string", Integer.MAX_VALUE, new Date().getTime() });
    Meta.Frame frame = Meta.Frame.create(0, true, rows);
    // Convert it to a protobuf
    Common.Frame protoFrame = frame.toProto();
    assertEquals(1, protoFrame.getRowsCount());
    // Get that row we created
    Common.Row protoRow = protoFrame.getRows(0);
    // One row has many columns
    List<Common.ColumnValue> protoColumns = protoRow.getValueList();
    assertEquals(3, protoColumns.size());
    // Verify that the scalar value is also present in the deprecated values attributes.
    List<Common.TypedValue> deprecatedValues = protoColumns.get(0).getValueList();
    assertEquals(1, deprecatedValues.size());
    Common.TypedValue scalarValue = protoColumns.get(0).getScalarValue();
    assertEquals(deprecatedValues.get(0), scalarValue);
}
Also used : Date(java.util.Date) Frame(org.apache.calcite.avatica.Meta.Frame) Common(org.apache.calcite.avatica.proto.Common) TypedValue(org.apache.calcite.avatica.proto.Common.TypedValue) ColumnValue(org.apache.calcite.avatica.proto.Common.ColumnValue) TypedValue(org.apache.calcite.avatica.proto.Common.TypedValue) Test(org.junit.Test)

Example 3 with Frame

use of org.apache.calcite.avatica.Meta.Frame in project calcite-avatica by apache.

the class FrameTest method serializeAndTestEquality.

private void serializeAndTestEquality(Frame frame) {
    Frame frameCopy = Frame.fromProto(frame.toProto());
    assertEquals(frame.done, frameCopy.done);
    assertEquals(frame.offset, frameCopy.offset);
    Iterable<Object> origRows = frame.rows;
    Iterable<Object> copiedRows = frameCopy.rows;
    assertEquals("Expected rows to both be null, or both be non-null", origRows == null, copiedRows == null);
    Iterator<Object> origIter = origRows.iterator();
    Iterator<Object> copiedIter = copiedRows.iterator();
    while (origIter.hasNext() && copiedIter.hasNext()) {
        Object orig = origIter.next();
        Object copy = copiedIter.next();
        assertEquals(orig == null, copy == null);
        // This is goofy, but it seems like an Array comes from the JDBC implementation but then
        // the resulting Frame has a List to support the Avatica typed Accessors
        assertEquals(Object[].class, orig.getClass());
        assertTrue("Expected List but got " + copy.getClass(), copy instanceof List);
        @SuppressWarnings("unchecked") List<Object> copyList = (List<Object>) copy;
        assertArrayEquals((Object[]) orig, copyList.toArray(new Object[0]));
    }
    assertEquals(origIter.hasNext(), copiedIter.hasNext());
}
Also used : Frame(org.apache.calcite.avatica.Meta.Frame) ArrayList(java.util.ArrayList) List(java.util.List)

Example 4 with Frame

use of org.apache.calcite.avatica.Meta.Frame in project calcite-avatica by apache.

the class FrameTest method testNestedArraySerialization.

@Test
public void testNestedArraySerialization() {
    List<Object> rows = new ArrayList<>();
    // [ "pk", [[1,2], [3,4]] ]
    rows.add(Arrays.asList("pk", Arrays.asList(Arrays.asList(1, 2), Arrays.asList(3, 4))));
    Frame frame = new Frame(0, true, rows);
    // Parse back the list in serialized form
    Common.Frame protoFrame = frame.toProto();
    Common.Row protoRow = protoFrame.getRows(0);
    Common.ColumnValue protoColumn = protoRow.getValue(1);
    assertTrue(protoColumn.getHasArrayValue());
    int value = 1;
    for (Common.TypedValue arrayElement : protoColumn.getArrayValueList()) {
        assertEquals(Common.Rep.ARRAY, arrayElement.getType());
        for (Common.TypedValue nestedArrayElement : arrayElement.getArrayValueList()) {
            assertEquals(Common.Rep.INTEGER, nestedArrayElement.getType());
            assertEquals(value++, nestedArrayElement.getNumberValue());
        }
    }
    Frame newFrame = Frame.fromProto(protoFrame);
    @SuppressWarnings("unchecked") List<Object> newRow = (List<Object>) newFrame.rows.iterator().next();
    @SuppressWarnings("unchecked") List<Object> expectedRow = (List<Object>) rows.get(0);
    assertEquals(expectedRow.get(0), newRow.get(0));
    assertEquals(expectedRow.get(1), newRow.get(1));
}
Also used : Frame(org.apache.calcite.avatica.Meta.Frame) ArrayList(java.util.ArrayList) ColumnValue(org.apache.calcite.avatica.proto.Common.ColumnValue) ArrayList(java.util.ArrayList) List(java.util.List) Common(org.apache.calcite.avatica.proto.Common) TypedValue(org.apache.calcite.avatica.proto.Common.TypedValue) Test(org.junit.Test)

Example 5 with Frame

use of org.apache.calcite.avatica.Meta.Frame in project calcite-avatica by apache.

the class FrameTest method testSingleRow.

@Test
public void testSingleRow() {
    ArrayList<Object> rows = new ArrayList<>();
    rows.add(new Object[] { "string", Integer.MAX_VALUE, new Date().getTime() });
    Frame singleRow = new Frame(0, true, rows);
    serializeAndTestEquality(singleRow);
}
Also used : Frame(org.apache.calcite.avatica.Meta.Frame) ArrayList(java.util.ArrayList) Date(java.util.Date) Test(org.junit.Test)

Aggregations

Frame (org.apache.calcite.avatica.Meta.Frame)9 ArrayList (java.util.ArrayList)6 Test (org.junit.Test)6 Common (org.apache.calcite.avatica.proto.Common)4 ColumnValue (org.apache.calcite.avatica.proto.Common.ColumnValue)4 Date (java.util.Date)3 List (java.util.List)3 TypedValue (org.apache.calcite.avatica.proto.Common.TypedValue)3 Meta (org.apache.calcite.avatica.Meta)2 FetchResponse (org.apache.calcite.avatica.remote.Service.FetchResponse)2 RpcMetadataResponse (org.apache.calcite.avatica.remote.Service.RpcMetadataResponse)2 IOException (java.io.IOException)1 PrintWriter (java.io.PrintWriter)1 StringWriter (java.io.StringWriter)1 HashMap (java.util.HashMap)1 LinkedList (java.util.LinkedList)1 AvaticaParameter (org.apache.calcite.avatica.AvaticaParameter)1 ColumnMetaData (org.apache.calcite.avatica.ColumnMetaData)1 ScalarType (org.apache.calcite.avatica.ColumnMetaData.ScalarType)1 ConnectionPropertiesImpl (org.apache.calcite.avatica.ConnectionPropertiesImpl)1