Skip to content

Commit

Permalink
[#6496] feat(CLI): Support plain format output for Schema and Table c…
Browse files Browse the repository at this point in the history
…ommand

fix some bugs.
  • Loading branch information
Abyss-lord committed Feb 25, 2025
1 parent 8aa40bf commit b587c72
Show file tree
Hide file tree
Showing 2 changed files with 55 additions and 30 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand Down Expand Up @@ -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");
}
Expand Down Expand Up @@ -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<Table> {
Expand All @@ -188,21 +190,8 @@ public TablePlainFormat(CommandContext context) {
/** {@inheritDoc} */
@Override
public String getOutput(Table table) {
StringBuilder output = new StringBuilder();
List<String> 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});
}
}

Expand All @@ -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<Audit> {
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());
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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;
}
}

0 comments on commit b587c72

Please sign in to comment.