@VisibleForTesting @Nullable static ColumnAggregationResult computeColumnAggregation( @Nonnull TableAnswerElement table, @Nonnull ColumnAggregation columnAggregation, @Nonnull BatfishLogger logger) { Object value; String column = columnAggregation.getColumn(); Aggregation aggregation = columnAggregation.getAggregation(); switch (aggregation) { case MAX: value = computeColumnMax(table, column, logger); break; default: String message = String.format("Unhandled aggregation type: %s", aggregation); logger.errorf("%s\n", message); throw new IllegalArgumentException(message); } return value == null ? null : new ColumnAggregationResult(aggregation, column, value); }
@Test public void testComputeColumnMaxNoRows() { String columnName = "col"; TableAnswerElement table = new TableAnswerElement( new TableMetadata( ImmutableList.of(new ColumnMetadata(columnName, Schema.INTEGER, "foobar")), new DisplayHints().getTextDesc())); assertThat(AnswerMetadataUtil.computeColumnMax(table, columnName, _logger), nullValue()); }
@Test public void testComputeColumnMaxOneRowInteger() { String columnName = "col"; int value = 5; TableAnswerElement table = new TableAnswerElement( new TableMetadata( ImmutableList.of(new ColumnMetadata(columnName, Schema.INTEGER, "foobar")), new DisplayHints().getTextDesc())) .addRow(Row.of(columnName, value)); assertThat(AnswerMetadataUtil.computeColumnMax(table, columnName, _logger), equalTo(value)); }
@Test public void testComputeColumnMaxNullInteger() { String columnName = "col"; TableAnswerElement table = new TableAnswerElement( new TableMetadata( ImmutableList.of(new ColumnMetadata(columnName, Schema.INTEGER, "foobar")), new DisplayHints().getTextDesc())) .addRow(Row.of(columnName, null)); assertThat(AnswerMetadataUtil.computeColumnMax(table, columnName, _logger), nullValue()); }
@Test public void testComputeColumnMaxInvalidSchema() { String columnName = "col"; String value = "hello"; TableAnswerElement table = new TableAnswerElement( new TableMetadata( ImmutableList.of(new ColumnMetadata(columnName, Schema.STRING, "foobar")), new DisplayHints().getTextDesc())) .addRow(Row.of(columnName, value)); assertThat(AnswerMetadataUtil.computeColumnMax(table, columnName, _logger), nullValue()); }
@Test public void testComputeColumnMaxTwoRows() { String columnName = "col"; int value1 = 5; int value2 = 10; TableAnswerElement table = new TableAnswerElement( new TableMetadata( ImmutableList.of(new ColumnMetadata(columnName, Schema.INTEGER, "foobar")), new DisplayHints().getTextDesc())) .addRow(Row.of(columnName, value1)) .addRow(Row.of(columnName, value2)); assertThat(AnswerMetadataUtil.computeColumnMax(table, columnName, _logger), equalTo(value2)); }
@Test public void testComputeColumnMaxOneRowIssue() { String columnName = "col"; int severity = 5; Issue value = new Issue("blah", severity, new Issue.Type("1", "2")); TableAnswerElement table = new TableAnswerElement( new TableMetadata( ImmutableList.of(new ColumnMetadata(columnName, Schema.ISSUE, "foobar")), new DisplayHints().getTextDesc())) .addRow(Row.of(columnName, value)); assertThat(AnswerMetadataUtil.computeColumnMax(table, columnName, _logger), equalTo(severity)); }
@Test public void testComputeColumnMaxInvalidColumn() { String columnName = "col"; String invalidColumnName = "invalid"; int value = 5; TableAnswerElement table = new TableAnswerElement( new TableMetadata( ImmutableList.of(new ColumnMetadata(columnName, Schema.INTEGER, "foobar")), new DisplayHints().getTextDesc())) .addRow(Row.of(columnName, value)); _thrown.expect(IllegalArgumentException.class); AnswerMetadataUtil.computeColumnMax(table, invalidColumnName, _logger); }
@Test public void testComputeColumnMaxNullAndNonNullInteger() { String columnName = "col"; TableAnswerElement table = new TableAnswerElement( new TableMetadata( ImmutableList.of(new ColumnMetadata(columnName, Schema.INTEGER, "foobar")), new DisplayHints().getTextDesc())) .addRow(Row.of(columnName, 1)) .addRow(Row.of(columnName, null)) .addRow(Row.of(columnName, 3)) .addRow(Row.of(columnName, null)) .addRow(Row.of(columnName, 2)); assertThat(AnswerMetadataUtil.computeColumnMax(table, columnName, _logger), equalTo(3)); }