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);
+ }
}