This is an automated email from the ASF dual-hosted git repository.
jmclean pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/gravitino.git
The following commit(s) were added to refs/heads/main by this push:
new 085745526 [#5927] improvement(CLI): fix cli get multiple "Malformed
entity name." (#5943)
085745526 is described below
commit 085745526564894c5d3c4a44901fa2337d7be7fa
Author: Lord of Abyss <[email protected]>
AuthorDate: Tue Dec 24 05:36:24 2024 +0800
[#5927] improvement(CLI): fix cli get multiple "Malformed entity name."
(#5943)
### What changes were proposed in this pull request?
If an entity name is malformed, the CLI should output 'Malformed entity
name.' only once, instead of multiple times.
### Why are the changes needed?
Fix: #5927
### Does this PR introduce _any_ user-facing change?
NO
### How was this patch tested?
```bash
bin/gcli.sh column list -m demo_metalake --name Hive_catalog -i
# output: Malformed entity name.
```
---
.../java/org/apache/gravitino/cli/FullName.java | 20 +++++++++-
.../org/apache/gravitino/cli/TestFulllName.java | 45 ++++++++++++++++++++++
2 files changed, 63 insertions(+), 2 deletions(-)
diff --git a/clients/cli/src/main/java/org/apache/gravitino/cli/FullName.java
b/clients/cli/src/main/java/org/apache/gravitino/cli/FullName.java
index 46a3bb92d..a2be2e52c 100644
--- a/clients/cli/src/main/java/org/apache/gravitino/cli/FullName.java
+++ b/clients/cli/src/main/java/org/apache/gravitino/cli/FullName.java
@@ -29,6 +29,8 @@ public class FullName {
private final CommandLine line;
private String metalakeEnv;
private boolean matalakeSet = false;
+ private boolean hasDisplayedMissingNameInfo = true;
+ private boolean hasDisplayedMalformedInfo = true;
/**
* Constructor for the {@code FullName} class.
@@ -159,14 +161,14 @@ public class FullName {
String[] names = line.getOptionValue(GravitinoOptions.NAME).split("\\.");
if (names.length <= position) {
- System.err.println(ErrorMessages.MALFORMED_NAME);
+ showMalformedInfo();
return null;
}
return names[position];
}
- System.err.println(ErrorMessages.MISSING_NAME);
+ showMissingNameInfo();
return null;
}
@@ -224,4 +226,18 @@ public class FullName {
public boolean hasColumnName() {
return hasNamePart(4);
}
+
+ private void showMissingNameInfo() {
+ if (hasDisplayedMissingNameInfo) {
+ System.err.println(ErrorMessages.MISSING_NAME);
+ hasDisplayedMissingNameInfo = false;
+ }
+ }
+
+ private void showMalformedInfo() {
+ if (hasDisplayedMalformedInfo) {
+ System.err.println(ErrorMessages.MALFORMED_NAME);
+ hasDisplayedMalformedInfo = false;
+ }
+ }
}
diff --git
a/clients/cli/src/test/java/org/apache/gravitino/cli/TestFulllName.java
b/clients/cli/src/test/java/org/apache/gravitino/cli/TestFulllName.java
index ecde923a3..4b5e1fed7 100644
--- a/clients/cli/src/test/java/org/apache/gravitino/cli/TestFulllName.java
+++ b/clients/cli/src/test/java/org/apache/gravitino/cli/TestFulllName.java
@@ -25,20 +25,37 @@ import static org.junit.jupiter.api.Assertions.assertNull;
import static org.junit.jupiter.api.Assertions.assertThrows;
import static org.junit.jupiter.api.Assertions.assertTrue;
+import java.io.ByteArrayOutputStream;
+import java.io.PrintStream;
+import java.nio.charset.StandardCharsets;
import org.apache.commons.cli.CommandLine;
import org.apache.commons.cli.DefaultParser;
import org.apache.commons.cli.MissingArgumentException;
import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
+import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
public class TestFulllName {
private Options options;
+ private final ByteArrayOutputStream outContent = new ByteArrayOutputStream();
+ private final ByteArrayOutputStream errContent = new ByteArrayOutputStream();
+ private final PrintStream originalOut = System.out;
+ private final PrintStream originalErr = System.err;
@BeforeEach
public void setUp() {
options = new GravitinoOptions().options();
+ System.setOut(new PrintStream(outContent));
+ System.setErr(new PrintStream(errContent));
+ }
+
+ @AfterEach
+ public void restoreStreams() {
+ System.setOut(originalOut);
+ System.setErr(originalErr);
}
@Test
@@ -152,4 +169,32 @@ public class TestFulllName {
assertTrue(fullName.hasTableName());
assertTrue(fullName.hasColumnName());
}
+
+ @Test
+ @SuppressWarnings("DefaultCharset")
+ public void testMissingName() throws ParseException {
+ String[] args = {"column", "list", "-m", "demo_metalake", "-i"};
+ CommandLine commandLine = new DefaultParser().parse(options, args);
+ FullName fullName = new FullName(commandLine);
+ fullName.getCatalogName();
+ fullName.getSchemaName();
+ fullName.getTableName();
+ fullName.getColumnName();
+ String output = new String(errContent.toByteArray(),
StandardCharsets.UTF_8).trim();
+ assertEquals(output, ErrorMessages.MISSING_NAME);
+ }
+
+ @Test
+ @SuppressWarnings("DefaultCharset")
+ public void testMalformedName() throws ParseException {
+ String[] args = {"column", "list", "-m", "demo_metalake", "-i", "--name",
"Hive_catalog"};
+ CommandLine commandLine = new DefaultParser().parse(options, args);
+ FullName fullName = new FullName(commandLine);
+ fullName.getCatalogName();
+ fullName.getSchemaName();
+ fullName.getTableName();
+ fullName.getColumnName();
+ String output = new String(errContent.toByteArray(),
StandardCharsets.UTF_8).trim();
+ assertEquals(output, ErrorMessages.MALFORMED_NAME);
+ }
}