This is an automated email from the ASF dual-hosted git repository.
mchades 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 e5fe677dab [#11963] fix(cli): support parsing the variant column type
(#11964)
e5fe677dab is described below
commit e5fe677dabe0e533d52ea2be870967297fef33fe
Author: Nevin Zheng <[email protected]>
AuthorDate: Wed Jul 15 20:47:41 2026 -0700
[#11963] fix(cli): support parsing the variant column type (#11964)
### What changes were proposed in this pull request?
Adds a `variant` case to the CLI's `TypeConverter.convert(String)` so a
user can specify a `variant` column from the terminal via the type
string (e.g. `--datatype variant`). Previously this threw
`IllegalArgumentException: Unknown or unsupported type: variant`, even
though `Types.VariantType` exists in the type system.
- `TypeConverter.java`: map `"variant"` → `Types.VariantType.get()`.
- Added unit tests in `TestTypeConverter` and `TestParseType` covering
both the direct converter and the full `ParseType.toType("variant")`
entry point.
### Why are the changes needed?
The native `variant` type (#11932) was wired into the type system but
not into the CLI's string→type parsing. As a result the CLI could not
create or alter a column of type `variant`, leaving a gap in the
"specify a column by typing its type string" flow. `variant` is a
parameterless primitive, so parsing is lossless.
Fix: #11963
### Does this PR introduce _any_ user-facing change?
Yes. The CLI now accepts `variant` as a column datatype
(case-insensitive), e.g.:
```
gravitino table create ... --columns col --datatype variant
```
### How was this patch tested?
Added and ran unit tests:
```
./gradlew :clients:cli:test --tests
'org.apache.gravitino.cli.TestTypeConverter' \
--tests
'org.apache.gravitino.cli.TestParseType' -PskipITs
```
Both pass. Tests assert `TypeConverter.convert("variant")` and
`ParseType.toType("variant")` return `Types.VariantType`.
---
.../cli/src/main/java/org/apache/gravitino/cli/TypeConverter.java | 2 ++
.../cli/src/test/java/org/apache/gravitino/cli/TestParseType.java | 6 ++++++
.../src/test/java/org/apache/gravitino/cli/TestTypeConverter.java | 1 +
3 files changed, 9 insertions(+)
diff --git
a/clients/cli/src/main/java/org/apache/gravitino/cli/TypeConverter.java
b/clients/cli/src/main/java/org/apache/gravitino/cli/TypeConverter.java
index f5a75ed9fa..588e5a9385 100644
--- a/clients/cli/src/main/java/org/apache/gravitino/cli/TypeConverter.java
+++ b/clients/cli/src/main/java/org/apache/gravitino/cli/TypeConverter.java
@@ -76,6 +76,8 @@ public class TypeConverter {
return Types.StringType.get();
case "binary":
return Types.BinaryType.get();
+ case "variant":
+ return Types.VariantType.get();
default:
throw new IllegalArgumentException("Unknown or unsupported type: " +
typeName);
}
diff --git
a/clients/cli/src/test/java/org/apache/gravitino/cli/TestParseType.java
b/clients/cli/src/test/java/org/apache/gravitino/cli/TestParseType.java
index 35a372b3d0..3bb9376ff5 100644
--- a/clients/cli/src/test/java/org/apache/gravitino/cli/TestParseType.java
+++ b/clients/cli/src/test/java/org/apache/gravitino/cli/TestParseType.java
@@ -46,6 +46,12 @@ public class TestParseType {
assertEquals(5, ((Types.DecimalType) type).scale());
}
+ @Test
+ public void testParseTypeVariant() {
+ Type type = ParseType.toType("variant");
+ assertThat(type, instanceOf(Types.VariantType.class));
+ }
+
@Test
public void testParseTypeListValidInput() {
Type type = ParseType.toType("list(integer)");
diff --git
a/clients/cli/src/test/java/org/apache/gravitino/cli/TestTypeConverter.java
b/clients/cli/src/test/java/org/apache/gravitino/cli/TestTypeConverter.java
index a4145b2945..21b07d2911 100644
--- a/clients/cli/src/test/java/org/apache/gravitino/cli/TestTypeConverter.java
+++ b/clients/cli/src/test/java/org/apache/gravitino/cli/TestTypeConverter.java
@@ -50,6 +50,7 @@ public class TestTypeConverter {
assertEquals(Types.UUIDType.get(), TypeConverter.convert("uuid"));
assertEquals(Types.StringType.get(), TypeConverter.convert("string"));
assertEquals(Types.BinaryType.get(), TypeConverter.convert("binary"));
+ assertEquals(Types.VariantType.get(), TypeConverter.convert("variant"));
}
@Test