@@ -72,6 +72,7 @@ object SchemaConverter {
72
72
): (String , Option [DataEnum ]) = {
73
73
val tpe = column.getColumnDataType
74
74
75
+ val structAttributes = tpe.getAttributes.asScala
75
76
val (enumValues, arrayElementType) = (tpe.getJavaSqlType.getVendorTypeNumber.intValue(), tpe.getName) match {
76
77
// TODO: specific to Postgres
77
78
// we want to get type information for enums that are used in arrays.
@@ -86,24 +87,28 @@ object SchemaConverter {
86
87
val schemaRetrievalOptions = SchemaCrawlerUtility .matchSchemaRetrievalOptions(connection)
87
88
val enumType = schemaRetrievalOptions.getEnumDataTypeHelper.getEnumDataTypeInfo(column, columnDataType, conn)
88
89
connection.releaseConnection(conn)
89
- (enumType.getEnumValues, Some (elementType))
90
+ (enumType.getEnumValues.asScala , Some (elementType))
90
91
case (_, _) =>
91
- (tpe.getEnumValues, None )
92
+ (tpe.getEnumValues.asScala , None )
92
93
}
93
94
94
- val (baseScalaType, dataEnum) = enumValues match {
95
- case enumValues if enumValues.isEmpty =>
95
+ val (baseScalaType, dataEnum, dataStruct) = {
96
+ if (structAttributes.nonEmpty) {
97
+ (" " , None , None )
98
+ } else if (enumValues.nonEmpty) {
99
+ val targetTypeName = arrayElementType.getOrElse(tpe.getName)
100
+ val dataEnum = DataEnum (targetTypeName, enumValues.map(DataEnumValue (_)).toSeq)
101
+ (dataEnum.scalaName, Some (dataEnum), None )
102
+ } else {
96
103
val targetType =
97
104
arrayElementType.flatMap(localTypeNameToSqlType).orElse(localTypeNameToSqlType(tpe.getName)).getOrElse(tpe.getJavaSqlType)
105
+
98
106
val scalaTypeClassGuess = sqlToScalaType(targetType)
99
107
val scalaTypeStringGuess = scalaTypeClassGuess.map(_.toString.replaceFirst(" java\\ .lang\\ ." , " " ))
100
108
val scalaTypeStringMapped = config.typeMapping(targetType, scalaTypeStringGuess)
101
109
val scalaTypeString = scalaTypeStringMapped.getOrElse(throw new Exception (s " Cannot map sql type ' ${targetType}' " ))
102
- (scalaTypeString, None )
103
- case enumValues =>
104
- val targetTypeName = arrayElementType.getOrElse(tpe.getName)
105
- val dataEnum = DataEnum (targetTypeName, enumValues.asScala.map(DataEnumValue (_)).toSeq)
106
- (dataEnum.scalaName, Some (dataEnum))
110
+ (scalaTypeString, None , None )
111
+ }
107
112
}
108
113
109
114
val scalaTypeWithArray = if (arrayElementType.isDefined) s " Vector[ ${baseScalaType}] " else baseScalaType
0 commit comments