[FIX](collectiontype) fix collection type with char which without length (#25703)

fix create complex type like array/map/struct with char which without length
This commit is contained in:
amory
2023-10-24 15:16:37 +08:00
committed by GitHub
parent 3c0fd5029d
commit c0f8c0af39
4 changed files with 30 additions and 23 deletions

View File

@ -312,22 +312,6 @@ public class ColumnDef {
}
FeNameFormat.checkColumnName(name);
// When string type length is not assigned, it needs to be assigned to 1.
if (typeDef.getType().isScalarType()) {
final ScalarType targetType = (ScalarType) typeDef.getType();
if (targetType.getPrimitiveType().isStringType() && !targetType.isLengthSet()) {
if (targetType.getPrimitiveType() == PrimitiveType.VARCHAR) {
// always set varchar length MAX_VARCHAR_LENGTH
targetType.setLength(ScalarType.MAX_VARCHAR_LENGTH);
} else if (targetType.getPrimitiveType() == PrimitiveType.STRING) {
// always set text length MAX_STRING_LENGTH
targetType.setLength(ScalarType.MAX_STRING_LENGTH);
} else {
targetType.setLength(1);
}
}
}
typeDef.analyze(null);
Type type = typeDef.getType();

View File

@ -177,15 +177,24 @@ public class TypeDef implements ParseNode {
parent.getPrimitiveType() + " unsupported sub-type: " + child.toSql());
}
if (child.getPrimitiveType().isStringType() && !child.isLengthSet()) {
child.setLength(1);
}
analyze(child);
}
private void analyzeScalarType(ScalarType scalarType)
throws AnalysisException {
PrimitiveType type = scalarType.getPrimitiveType();
// When string type length is not assigned, it needs to be assigned to 1.
if (scalarType.getPrimitiveType().isStringType() && !scalarType.isLengthSet()) {
if (scalarType.getPrimitiveType() == PrimitiveType.VARCHAR) {
// always set varchar length MAX_VARCHAR_LENGTH
scalarType.setLength(ScalarType.MAX_VARCHAR_LENGTH);
} else if (scalarType.getPrimitiveType() == PrimitiveType.STRING) {
// always set text length MAX_STRING_LENGTH
scalarType.setLength(ScalarType.MAX_STRING_LENGTH);
} else {
scalarType.setLength(1);
}
}
switch (type) {
case CHAR:
case VARCHAR: {