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

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


The following commit(s) were added to refs/heads/master by this push:
     new 414c567baea Fix SqlFederation data type converter NullPointerException 
(#30670)
414c567baea is described below

commit 414c567baeaf6ca14e0063c424f8c86169774c17
Author: niu niu <[email protected]>
AuthorDate: Thu Mar 28 13:39:09 2024 +0800

    Fix SqlFederation data type converter NullPointerException (#30670)
    
    * Fix SqlFederation data type converter NullPointerException
    
    * Fix doc
---
 .../converter/segment/projection/impl/DataTypeConverter.java  |  9 +++++++--
 .../sql/common/segment/generic/DataTypeLengthSegment.java     |  5 +++--
 .../parser/sql/common/segment/generic/DataTypeSegment.java    | 11 +++++++++++
 3 files changed, 21 insertions(+), 4 deletions(-)

diff --git 
a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/segment/projection/impl/DataTypeConverter.java
 
b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/segment/projection/impl/DataTypeConverter.java
index 9f4e9252a0d..58a5c78c584 100644
--- 
a/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/segment/projection/impl/DataTypeConverter.java
+++ 
b/kernel/sql-federation/optimizer/src/main/java/org/apache/shardingsphere/sqlfederation/optimizer/converter/segment/projection/impl/DataTypeConverter.java
@@ -45,7 +45,12 @@ public final class DataTypeConverter {
         if (null == segment) {
             return Optional.empty();
         }
-        return Optional.of(new SqlDataTypeSpec(new 
SqlBasicTypeNameSpec(Objects.requireNonNull(SqlTypeName.get(segment.getDataTypeName())),
 segment.getDataLength().getPrecision(), SqlParserPos.ZERO),
-                SqlParserPos.ZERO));
+        return Optional.of(new 
SqlDataTypeSpec(getSqlBasicTypeNameSpec(segment), SqlParserPos.ZERO));
+    }
+    
+    private static SqlBasicTypeNameSpec getSqlBasicTypeNameSpec(final 
DataTypeSegment segment) {
+        SqlTypeName sqlTypeName = 
Objects.requireNonNull(SqlTypeName.get(segment.getDataTypeName().toUpperCase()));
+        return segment.getDataTypeLength().isPresent() ? new 
SqlBasicTypeNameSpec(sqlTypeName, segment.getDataLength().getPrecision(), 
SqlParserPos.ZERO)
+                : new SqlBasicTypeNameSpec(sqlTypeName, SqlParserPos.ZERO);
     }
 }
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/DataTypeLengthSegment.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/DataTypeLengthSegment.java
index 3be2a40d548..f2fe618e21d 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/DataTypeLengthSegment.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/DataTypeLengthSegment.java
@@ -36,8 +36,9 @@ public final class DataTypeLengthSegment implements 
SQLSegment {
     private int scale;
     
     /**
-     * get secondNumber.
-     * @return Optional.
+     * Get scale.
+     * 
+     * @return scale
      */
     public Optional<Integer> getScale() {
         return Optional.of(scale);
diff --git 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/DataTypeSegment.java
 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/DataTypeSegment.java
index b106cb14466..628f7ae9c4e 100644
--- 
a/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/DataTypeSegment.java
+++ 
b/parser/sql/statement/src/main/java/org/apache/shardingsphere/sql/parser/sql/common/segment/generic/DataTypeSegment.java
@@ -21,6 +21,8 @@ import lombok.Getter;
 import lombok.Setter;
 import 
org.apache.shardingsphere.sql.parser.sql.common.segment.dml.expr.ExpressionSegment;
 
+import java.util.Optional;
+
 @Getter
 @Setter
 public final class DataTypeSegment implements ExpressionSegment {
@@ -37,4 +39,13 @@ public final class DataTypeSegment implements 
ExpressionSegment {
     public String getText() {
         return dataTypeName;
     }
+    
+    /**
+     * Get data type length.
+     * 
+     * @return data type length segment
+     */
+    public Optional<DataTypeLengthSegment> getDataTypeLength() {
+        return Optional.ofNullable(dataLength);
+    }
 }

Reply via email to