diff --git a/clients/cli/src/main/java/org/apache/gravitino/cli/outputs/PlainFormat.java b/clients/cli/src/main/java/org/apache/gravitino/cli/outputs/PlainFormat.java index 8520ba7f366..ed35c9fe46f 100644 --- a/clients/cli/src/main/java/org/apache/gravitino/cli/outputs/PlainFormat.java +++ b/clients/cli/src/main/java/org/apache/gravitino/cli/outputs/PlainFormat.java @@ -21,6 +21,7 @@ import java.util.Arrays; import java.util.List; import java.util.stream.Collectors; +import org.apache.gravitino.Audit; import org.apache.gravitino.Catalog; import org.apache.gravitino.Metalake; import org.apache.gravitino.Schema; @@ -55,6 +56,8 @@ public static void output(Object entity, CommandContext context) { new TablePlainFormat(context).output((Table) entity); } else if (entity instanceof Table[]) { new TableListPlainFormat(context).output((Table[]) entity); + } else if (entity instanceof Audit) { + new AuditPlainFormat(context).output((Audit) entity); } else { throw new IllegalArgumentException("Unsupported object type"); } @@ -176,8 +179,7 @@ public String getOutput(Schema[] schemas) { } /** - * Formats a single Table instance with detailed column information. Output format: table_name - * column1_name, column1_type, column1_comment column2_name, column2_type, column2_comment ... + * Formats a single Table instance with detailed column information. Output format: table_name, * table_comment */ static final class TablePlainFormat extends PlainFormat { @@ -188,21 +190,8 @@ public TablePlainFormat(CommandContext context) { /** {@inheritDoc} */ @Override public String getOutput(Table table) { - StringBuilder output = new StringBuilder(); - List columnOutput = - Arrays.stream(table.columns()) - .map( - column -> - COMMA_JOINER.join( - column.name(), - column.dataType().simpleString(), - column.autoIncrement(), - column.nullable(), - column.comment() == null ? "N/A" : column.comment())) - .collect(Collectors.toList()); - output.append(NEWLINE_JOINER.join(columnOutput)); - output.append(System.lineSeparator()); - return output.toString(); + String comment = table.comment() == null ? "N/A" : table.comment(); + return COMMA_JOINER.join(new String[] {table.name(), comment}); } } @@ -222,4 +211,24 @@ public String getOutput(Table[] tables) { return NEWLINE_JOINER.join(tableNames); } } + + /** + * Formats an instance of {@link Audit} , outputting the audit information. Output format: + * creator, create_time, modified, modified_time + */ + static final class AuditPlainFormat extends PlainFormat { + public AuditPlainFormat(CommandContext context) { + super(context); + } + + /** {@inheritDoc} */ + @Override + public String getOutput(Audit audit) { + return COMMA_JOINER.join( + audit.creator(), + audit.createTime() == null ? "N/A" : audit.createTime(), + audit.lastModifier() == null ? "N/A" : audit.lastModifier(), + audit.lastModifiedTime() == null ? "N/A" : audit.lastModifiedTime()); + } + } } diff --git a/clients/cli/src/test/java/org/apache/gravitino/cli/output/TestPlainFormat.java b/clients/cli/src/test/java/org/apache/gravitino/cli/output/TestPlainFormat.java index 093b8535e0f..32e9e7dbc86 100644 --- a/clients/cli/src/test/java/org/apache/gravitino/cli/output/TestPlainFormat.java +++ b/clients/cli/src/test/java/org/apache/gravitino/cli/output/TestPlainFormat.java @@ -131,10 +131,36 @@ void testTableDetailsWithPlainFormat() { Table mockTable = getMockTable(); PlainFormat.output(mockTable, mockContext); String output = new String(outContent.toByteArray(), StandardCharsets.UTF_8).trim(); + Assertions.assertEquals("demo_table, This is a demo table", output); + } + + @Test + void testAuditWithTableFormat() { + CommandContext mockContext = getMockContext(); + Audit mockAudit = mock(Audit.class); + when(mockAudit.creator()).thenReturn("demo_user"); + when(mockAudit.createTime()).thenReturn(Instant.ofEpochMilli(1611111111111L)); + when(mockAudit.lastModifier()).thenReturn("demo_user"); + when(mockAudit.lastModifiedTime()).thenReturn(Instant.ofEpochMilli(1611111111111L)); + + PlainFormat.output(mockAudit, mockContext); + String output = new String(outContent.toByteArray(), StandardCharsets.UTF_8).trim(); Assertions.assertEquals( - "id, integer, true, false, This is a int column\n" - + "name, string, false, true, This is a string column", - output); + "demo_user, 2021-01-20T02:51:51.111Z, demo_user, 2021-01-20T02:51:51.111Z", output); + } + + @Test + void testAuditWithTableFormatWithNullValues() { + CommandContext mockContext = getMockContext(); + Audit mockAudit = mock(Audit.class); + when(mockAudit.creator()).thenReturn("demo_user"); + when(mockAudit.createTime()).thenReturn(null); + when(mockAudit.lastModifier()).thenReturn(null); + when(mockAudit.lastModifiedTime()).thenReturn(null); + + PlainFormat.output(mockAudit, mockContext); + String output = new String(outContent.toByteArray(), StandardCharsets.UTF_8).trim(); + Assertions.assertEquals("demo_user, N/A, N/A, N/A", output); } @Test @@ -236,14 +262,4 @@ private org.apache.gravitino.rel.Column getMockColumn( return mockColumn; } - - private Audit getMockAudit() { - Audit mockAudit = mock(Audit.class); - when(mockAudit.creator()).thenReturn("demo_user"); - when(mockAudit.createTime()).thenReturn(Instant.ofEpochMilli(1611111111111L)); - when(mockAudit.lastModifier()).thenReturn("demo_user"); - when(mockAudit.lastModifiedTime()).thenReturn(Instant.ofEpochMilli(1611111111111L)); - - return mockAudit; - } }