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()); }
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()); }
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()); }
@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)); } }
@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)); } }
static ResultSetResponse fromProto(Responses.ResultSetResponse msg) { final Descriptor desc = msg.getDescriptorForType(); String connectionId = null; if (ProtobufService.hasField(msg, desc, Responses.ResultSetResponse.CONNECTION_ID_FIELD_NUMBER)) { connectionId = msg.getConnectionId(); } Meta.Signature signature = null; if (ProtobufService.hasField(msg, desc, Responses.ResultSetResponse.SIGNATURE_FIELD_NUMBER)) { signature = Meta.Signature.fromProto(msg.getSignature()); } Meta.Frame frame = null; if (ProtobufService.hasField(msg, desc, Responses.ResultSetResponse.FIRST_FRAME_FIELD_NUMBER)) { frame = Meta.Frame.fromProto(msg.getFirstFrame()); } RpcMetadataResponse metadata = null; if (ProtobufService.hasField(msg, desc, Responses.ResultSetResponse.METADATA_FIELD_NUMBER)) { metadata = RpcMetadataResponse.fromProto(msg.getMetadata()); } return new ResultSetResponse(connectionId, msg.getStatementId(), msg.getOwnStatement(), signature, frame, msg.getUpdateCount(), metadata); }
static ResultSetResponse fromProto(Responses.ResultSetResponse msg) { String connectionId = null; if (msg.hasField(CONNECTION_ID_DESCRIPTOR)) { connectionId = msg.getConnectionId(); } Meta.Signature signature = null; if (msg.hasField(SIGNATURE_DESCRIPTOR)) { signature = Meta.Signature.fromProto(msg.getSignature()); } Meta.Frame frame = null; if (msg.hasField(FIRST_FRAME_DESCRIPTOR)) { frame = Meta.Frame.fromProto(msg.getFirstFrame()); } RpcMetadataResponse metadata = null; if (msg.hasField(METADATA_DESCRIPTOR)) { metadata = RpcMetadataResponse.fromProto(msg.getMetadata()); } return new ResultSetResponse(connectionId, msg.getStatementId(), msg.getOwnStatement(), signature, frame, msg.getUpdateCount(), metadata); }
static ResultSetResponse fromProto(Responses.ResultSetResponse msg) { String connectionId = null; if (msg.hasField(CONNECTION_ID_DESCRIPTOR)) { connectionId = msg.getConnectionId(); } Meta.Signature signature = null; if (msg.hasField(SIGNATURE_DESCRIPTOR)) { signature = Meta.Signature.fromProto(msg.getSignature()); } Meta.Frame frame = null; if (msg.hasField(FIRST_FRAME_DESCRIPTOR)) { frame = Meta.Frame.fromProto(msg.getFirstFrame()); } RpcMetadataResponse metadata = null; if (msg.hasField(METADATA_DESCRIPTOR)) { metadata = RpcMetadataResponse.fromProto(msg.getMetadata()); } return new ResultSetResponse(connectionId, msg.getStatementId(), msg.getOwnStatement(), signature, frame, msg.getUpdateCount(), metadata); }
@Override FetchResponse deserialize(Message genericMsg) { final Responses.FetchResponse msg = ProtobufService.castProtobufMessage(genericMsg, Responses.FetchResponse.class); RpcMetadataResponse metadata = null; if (msg.hasField(METADATA_DESCRIPTOR)) { metadata = RpcMetadataResponse.fromProto(msg.getMetadata()); } return new FetchResponse(Meta.Frame.fromProto(msg.getFrame()), msg.getMissingStatement(), msg.getMissingResults(), metadata); }
@Override FetchResponse deserialize(Message genericMsg) { final Responses.FetchResponse msg = ProtobufService.castProtobufMessage(genericMsg, Responses.FetchResponse.class); final Descriptor desc = msg.getDescriptorForType(); RpcMetadataResponse metadata = null; if (ProtobufService.hasField(msg, desc, Responses.FetchResponse.METADATA_FIELD_NUMBER)) { metadata = RpcMetadataResponse.fromProto(msg.getMetadata()); } return new FetchResponse(Meta.Frame.fromProto(msg.getFrame()), msg.getMissingStatement(), msg.getMissingResults(), metadata); }
@Override FetchResponse deserialize(Message genericMsg) { final Responses.FetchResponse msg = ProtobufService.castProtobufMessage(genericMsg, Responses.FetchResponse.class); RpcMetadataResponse metadata = null; if (msg.hasField(METADATA_DESCRIPTOR)) { metadata = RpcMetadataResponse.fromProto(msg.getMetadata()); } return new FetchResponse(Meta.Frame.fromProto(msg.getFrame()), msg.getMissingStatement(), msg.getMissingResults(), metadata); }