@@ -72,6 +72,7 @@ object SchemaConverter {
7272 ): (String , Option [DataEnum ]) = {
7373 val tpe = column.getColumnDataType
7474
75+ val structAttributes = tpe.getAttributes.asScala
7576 val (enumValues, arrayElementType) = (tpe.getJavaSqlType.getVendorTypeNumber.intValue(), tpe.getName) match {
7677 // TODO: specific to Postgres
7778 // we want to get type information for enums that are used in arrays.
@@ -86,24 +87,28 @@ object SchemaConverter {
8687 val schemaRetrievalOptions = SchemaCrawlerUtility .matchSchemaRetrievalOptions(connection)
8788 val enumType = schemaRetrievalOptions.getEnumDataTypeHelper.getEnumDataTypeInfo(column, columnDataType, conn)
8889 connection.releaseConnection(conn)
89- (enumType.getEnumValues, Some (elementType))
90+ (enumType.getEnumValues.asScala , Some (elementType))
9091 case (_, _) =>
91- (tpe.getEnumValues, None )
92+ (tpe.getEnumValues.asScala , None )
9293 }
9394
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 {
96103 val targetType =
97104 arrayElementType.flatMap(localTypeNameToSqlType).orElse(localTypeNameToSqlType(tpe.getName)).getOrElse(tpe.getJavaSqlType)
105+
98106 val scalaTypeClassGuess = sqlToScalaType(targetType)
99107 val scalaTypeStringGuess = scalaTypeClassGuess.map(_.toString.replaceFirst(" java\\ .lang\\ ." , " " ))
100108 val scalaTypeStringMapped = config.typeMapping(targetType, scalaTypeStringGuess)
101109 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+ }
107112 }
108113
109114 val scalaTypeWithArray = if (arrayElementType.isDefined) s " Vector[ ${baseScalaType}] " else baseScalaType
0 commit comments