diff --git a/clients/cli/src/main/java/org/apache/gravitino/cli/SchemaCommandHandler.java b/clients/cli/src/main/java/org/apache/gravitino/cli/SchemaCommandHandler.java index 4a0cf919fb8..84e9070fb63 100644 --- a/clients/cli/src/main/java/org/apache/gravitino/cli/SchemaCommandHandler.java +++ b/clients/cli/src/main/java/org/apache/gravitino/cli/SchemaCommandHandler.java @@ -35,6 +35,7 @@ public class SchemaCommandHandler extends CommandHandler { private final String metalake; private final String catalog; private String schema; + private final String outputFormat; /** * Constructs a {@link SchemaCommandHandler} instance. @@ -55,6 +56,7 @@ public SchemaCommandHandler( this.name = new FullName(line); this.metalake = name.getMetalakeName(); this.catalog = name.getCatalogName(); + this.outputFormat = line.getOptionValue(GravitinoOptions.OUTPUT); } @Override @@ -132,7 +134,7 @@ private void handleDetailsCommand() { .handle(); } else { gravitinoCommandLine - .newSchemaDetails(url, ignore, metalake, catalog, schema) + .newSchemaDetails(url, ignore, outputFormat, metalake, catalog, schema) .validate() .handle(); } diff --git a/clients/cli/src/main/java/org/apache/gravitino/cli/TestableCommandLine.java b/clients/cli/src/main/java/org/apache/gravitino/cli/TestableCommandLine.java index b229ef16aa3..8af6112413c 100644 --- a/clients/cli/src/main/java/org/apache/gravitino/cli/TestableCommandLine.java +++ b/clients/cli/src/main/java/org/apache/gravitino/cli/TestableCommandLine.java @@ -267,8 +267,13 @@ protected SchemaAudit newSchemaAudit( } protected SchemaDetails newSchemaDetails( - String url, boolean ignore, String metalake, String catalog, String schema) { - return new SchemaDetails(url, ignore, metalake, catalog, schema); + String url, + boolean ignore, + String outputFormat, + String metalake, + String catalog, + String schema) { + return new SchemaDetails(url, ignore, outputFormat, metalake, catalog, schema); } protected ListSchema newListSchema(String url, boolean ignore, String metalake, String catalog) { diff --git a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/SchemaDetails.java b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/SchemaDetails.java index 7369c0d1b41..1f808df26d2 100644 --- a/clients/cli/src/main/java/org/apache/gravitino/cli/commands/SchemaDetails.java +++ b/clients/cli/src/main/java/org/apache/gravitino/cli/commands/SchemaDetails.java @@ -38,13 +38,19 @@ public class SchemaDetails extends Command { * * @param url The URL of the Gravitino server. * @param ignoreVersions If true don't check the client/server versions match. + * @param outputFormat The output format. * @param metalake The name of the metalake. * @param catalog The name of the catalog. * @param schema The name of the schenma. */ public SchemaDetails( - String url, boolean ignoreVersions, String metalake, String catalog, String schema) { - super(url, ignoreVersions); + String url, + boolean ignoreVersions, + String outputFormat, + String metalake, + String catalog, + String schema) { + super(url, ignoreVersions, outputFormat); this.metalake = metalake; this.catalog = catalog; this.schema = schema; @@ -58,6 +64,7 @@ public void handle() { try { GravitinoClient client = buildClient(metalake); result = client.loadCatalog(catalog).asSchemas().loadSchema(schema); + output(result); } catch (NoSuchMetalakeException err) { exitWithError(ErrorMessages.UNKNOWN_METALAKE); } catch (NoSuchCatalogException err) { @@ -67,9 +74,5 @@ public void handle() { } catch (Exception exp) { exitWithError(exp.getMessage()); } - - if (result != null) { - System.out.println(result.name() + "," + result.comment()); - } } } 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 66e616c4f78..0b91315cfb7 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 @@ -23,6 +23,7 @@ import java.util.stream.Collectors; import org.apache.gravitino.Catalog; import org.apache.gravitino.Metalake; +import org.apache.gravitino.Schema; /** Plain format to print a pretty string to standard out. */ public class PlainFormat { @@ -35,6 +36,8 @@ public static void output(Object object) { new CatalogPlainFormat().output((Catalog) object); } else if (object instanceof Catalog[]) { new CatalogsPlainFormat().output((Catalog[]) object); + } else if (object instanceof Schema) { + new SchemaPlainFormat().output((Schema) object); } else { throw new IllegalArgumentException("Unsupported object type"); } @@ -88,4 +91,15 @@ public void output(Catalog[] catalogs) { } } } + + static final class SchemaPlainFormat implements OutputFormat { + @Override + public void output(Schema schema) { + if (schema == null) { + System.out.println("No schemas exist."); + } else { + System.out.println(schema.name() + "," + schema.comment()); + } + } + } } diff --git a/clients/cli/src/main/java/org/apache/gravitino/cli/outputs/TableFormat.java b/clients/cli/src/main/java/org/apache/gravitino/cli/outputs/TableFormat.java index a3c99756524..ef87e79b531 100644 --- a/clients/cli/src/main/java/org/apache/gravitino/cli/outputs/TableFormat.java +++ b/clients/cli/src/main/java/org/apache/gravitino/cli/outputs/TableFormat.java @@ -25,6 +25,7 @@ import java.util.regex.Pattern; import org.apache.gravitino.Catalog; import org.apache.gravitino.Metalake; +import org.apache.gravitino.Schema; /** Table format to print a pretty table to standard out. */ public class TableFormat { @@ -37,6 +38,8 @@ public static void output(Object object) { new CatalogTableFormat().output((Catalog) object); } else if (object instanceof Catalog[]) { new CatalogsTableFormat().output((Catalog[]) object); + } else if (object instanceof Schema) { + new SchemaTableFormat().output((Schema) object); } else { throw new IllegalArgumentException("Unsupported object type"); } @@ -103,6 +106,21 @@ public void output(Catalog[] catalogs) { } } + static final class SchemaTableFormat implements OutputFormat { + @Override + public void output(Schema schema) { + if (schema == null) { + System.out.println("No schemas exist."); + } else { + List headers = Arrays.asList("schema", "comment"); + List> rows = new ArrayList<>(); + rows.add(Arrays.asList(schema.name(), schema.comment() + "")); + TableFormatImpl tableFormat = new TableFormatImpl(); + tableFormat.print(headers, rows); + } + } + } + static final class TableFormatImpl { private int[] maxElementLengths; // This expression is primarily used to match characters that have a display width of diff --git a/clients/cli/src/test/java/org/apache/gravitino/cli/TestSchemaCommands.java b/clients/cli/src/test/java/org/apache/gravitino/cli/TestSchemaCommands.java index 6b8770d8edf..2219f4f0f33 100644 --- a/clients/cli/src/test/java/org/apache/gravitino/cli/TestSchemaCommands.java +++ b/clients/cli/src/test/java/org/apache/gravitino/cli/TestSchemaCommands.java @@ -108,7 +108,7 @@ void testSchemaDetailsCommand() { doReturn(mockDetails) .when(commandLine) .newSchemaDetails( - GravitinoCommandLine.DEFAULT_URL, false, "metalake_demo", "catalog", "schema"); + GravitinoCommandLine.DEFAULT_URL, false, null, "metalake_demo", "catalog", "schema"); doReturn(mockDetails).when(mockDetails).validate(); commandLine.handleCommandLine(); verify(mockDetails).handle();