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)); } }
@Test public void testDeprecatedValueAttributeForArrays() { // Create a row with schema: [VARCHAR, ARRAY] List<Object> rows = Collections.<Object>singletonList(new Object[] {"string", Arrays.asList(1, 2, 3)}); 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(); // We should have two columns assertEquals(2, protoColumns.size()); // Fetch the ARRAY column Common.ColumnValue protoColumn = protoColumns.get(1); // We should have the 3 ARRAY elements in the array_values attribute as well as the deprecated // values attribute. List<Common.TypedValue> deprecatedValues = protoColumn.getValueList(); assertEquals(3, deprecatedValues.size()); assertTrue("Column 2 should have an array_value", protoColumns.get(1).getHasArrayValue()); List<Common.TypedValue> arrayValues = protoColumns.get(1).getArrayValueList(); assertEquals(arrayValues, deprecatedValues); }
@Test public void testDeprecatedValueAttributeForArrays() { // Create a row with schema: [VARCHAR, ARRAY] List<Object> rows = Collections.<Object>singletonList(new Object[] {"string", Arrays.asList(1, 2, 3)}); 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(); // We should have two columns assertEquals(2, protoColumns.size()); // Fetch the ARRAY column Common.ColumnValue protoColumn = protoColumns.get(1); // We should have the 3 ARRAY elements in the array_values attribute as well as the deprecated // values attribute. List<Common.TypedValue> deprecatedValues = protoColumn.getValueList(); assertEquals(3, deprecatedValues.size()); assertTrue("Column 2 should have an array_value", protoColumns.get(1).getHasArrayValue()); List<Common.TypedValue> arrayValues = protoColumns.get(1).getArrayValueList(); assertEquals(arrayValues, deprecatedValues); }
@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); }
@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); }
@Override Responses.ResultSetResponse serialize() { Responses.ResultSetResponse.Builder builder = Responses.ResultSetResponse.newBuilder(); builder.setStatementId(statementId).setOwnStatement(ownStatement).setUpdateCount(updateCount); if (null != connectionId) { builder.setConnectionId(connectionId); } if (null != signature) { builder.setSignature(signature.toProto()); } if (null != firstFrame) { builder.setFirstFrame(firstFrame.toProto()); } if (null != rpcMetadata) { builder.setMetadata(rpcMetadata.serialize()); } return builder.build(); }
@Override Responses.ResultSetResponse serialize() { Responses.ResultSetResponse.Builder builder = Responses.ResultSetResponse.newBuilder(); builder.setStatementId(statementId).setOwnStatement(ownStatement).setUpdateCount(updateCount); if (null != connectionId) { builder.setConnectionId(connectionId); } if (null != signature) { builder.setSignature(signature.toProto()); } if (null != firstFrame) { builder.setFirstFrame(firstFrame.toProto()); } if (null != rpcMetadata) { builder.setMetadata(rpcMetadata.serialize()); } return builder.build(); }
@Override Responses.ResultSetResponse serialize() { Responses.ResultSetResponse.Builder builder = Responses.ResultSetResponse.newBuilder(); builder.setStatementId(statementId).setOwnStatement(ownStatement).setUpdateCount(updateCount); if (null != connectionId) { builder.setConnectionId(connectionId); } if (null != signature) { builder.setSignature(signature.toProto()); } if (null != firstFrame) { builder.setFirstFrame(firstFrame.toProto()); } if (null != rpcMetadata) { builder.setMetadata(rpcMetadata.serialize()); } return builder.build(); }
@Override Responses.FetchResponse serialize() { Responses.FetchResponse.Builder builder = Responses.FetchResponse.newBuilder(); if (null != frame) { builder.setFrame(frame.toProto()); } if (null != rpcMetadata) { builder.setMetadata(rpcMetadata.serialize()); } return builder.setMissingStatement(missingStatement) .setMissingResults(missingResults).build(); }
@Override Responses.FetchResponse serialize() { Responses.FetchResponse.Builder builder = Responses.FetchResponse.newBuilder(); if (null != frame) { builder.setFrame(frame.toProto()); } if (null != rpcMetadata) { builder.setMetadata(rpcMetadata.serialize()); } return builder.setMissingStatement(missingStatement) .setMissingResults(missingResults).build(); }
@Override Responses.FetchResponse serialize() { Responses.FetchResponse.Builder builder = Responses.FetchResponse.newBuilder(); if (null != frame) { builder.setFrame(frame.toProto()); } if (null != rpcMetadata) { builder.setMetadata(rpcMetadata.serialize()); } return builder.setMissingStatement(missingStatement) .setMissingResults(missingResults).build(); }