This is an automated email from the ASF dual-hosted git repository.

pacinogong pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/inlong.git


The following commit(s) were added to refs/heads/master by this push:
     new 84a9044a1f [INLONG-8514][Manager] Support ClickHouse field type with 
Nullable modifier (#8515)
84a9044a1f is described below

commit 84a9044a1f352ea043fb8504e5c3c01cb1f9c4dc
Author: chestnufang <65438734+chestnu...@users.noreply.github.com>
AuthorDate: Mon Jul 17 16:30:40 2023 +0800

    [INLONG-8514][Manager] Support ClickHouse field type with Nullable modifier 
(#8515)
---
 .../fieldtype/strategy/ClickHouseFieldTypeStrategy.java   | 15 +++++++++++++++
 .../inlong/manager/pojo/sort/util/FieldInfoUtilsTest.java |  2 +-
 2 files changed, 16 insertions(+), 1 deletion(-)

diff --git 
a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/fieldtype/strategy/ClickHouseFieldTypeStrategy.java
 
b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/fieldtype/strategy/ClickHouseFieldTypeStrategy.java
index eb9931f4e0..b464367b04 100644
--- 
a/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/fieldtype/strategy/ClickHouseFieldTypeStrategy.java
+++ 
b/inlong-manager/manager-common/src/main/java/org/apache/inlong/manager/common/fieldtype/strategy/ClickHouseFieldTypeStrategy.java
@@ -22,6 +22,9 @@ import 
org.apache.inlong.manager.common.fieldtype.FieldTypeMappingReader;
 
 import org.apache.commons.lang3.StringUtils;
 
+import java.util.regex.Matcher;
+import java.util.regex.Pattern;
+
 import static 
org.apache.inlong.manager.common.consts.InlongConstants.LEFT_BRACKET;
 
 /**
@@ -31,12 +34,24 @@ public class ClickHouseFieldTypeStrategy implements 
FieldTypeMappingStrategy {
 
     private final FieldTypeMappingReader reader;
 
+    private final static String NULLABLE_PATTERN = "^NULLABLE\\((.*)\\)$";
+
+    private static final Pattern PATTERN = Pattern.compile(NULLABLE_PATTERN);
+
     public ClickHouseFieldTypeStrategy() {
         this.reader = new FieldTypeMappingReader(DataNodeType.CLICKHOUSE);
     }
 
     @Override
     public String getFieldTypeMapping(String sourceType) {
+        // support clickHouse field type special modifier Nullable
+        if (StringUtils.isNotBlank(sourceType)) {
+            Matcher matcher = PATTERN.matcher(sourceType.toUpperCase());
+            if (matcher.matches()) {
+                // obtain the field type modified by Nullable, for example, 
uint8(12) in Nullable(uint8(12))
+                sourceType = matcher.group(1);
+            }
+        }
         String dataType = StringUtils.substringBefore(sourceType, 
LEFT_BRACKET).toUpperCase();
         return reader.getFIELD_TYPE_MAPPING_MAP().getOrDefault(dataType, 
sourceType.toUpperCase());
     }
diff --git 
a/inlong-manager/manager-pojo/src/test/java/org/apache/inlong/manager/pojo/sort/util/FieldInfoUtilsTest.java
 
b/inlong-manager/manager-pojo/src/test/java/org/apache/inlong/manager/pojo/sort/util/FieldInfoUtilsTest.java
index 79d5911713..30dd2bb66d 100644
--- 
a/inlong-manager/manager-pojo/src/test/java/org/apache/inlong/manager/pojo/sort/util/FieldInfoUtilsTest.java
+++ 
b/inlong-manager/manager-pojo/src/test/java/org/apache/inlong/manager/pojo/sort/util/FieldInfoUtilsTest.java
@@ -105,7 +105,7 @@ public class FieldInfoUtilsTest {
         StreamField streamField = new StreamField();
         streamField.setIsMetaField(0);
         streamField.setFieldName("age");
-        streamField.setFieldType("uint8");
+        streamField.setFieldType("Nullable(uint8(12))");
         FieldInfo fieldInfo = FieldInfoUtils.parseStreamFieldInfo(streamField,
                 "nodeId", new ClickHouseFieldTypeStrategy());
         TypeInfo typeInfo = fieldInfo.getFormatInfo().getTypeInfo();

Reply via email to