spark/sql/types/conversion.go (64 lines of code) (raw):
//
// Licensed to the Apache Software Foundation (ASF) under one or more
// contributor license agreements. See the NOTICE file distributed with
// this work for additional information regarding copyright ownership.
// The ASF licenses this file to You under the Apache License, Version 2.0
// (the "License"); you may not use this file except in compliance with
// the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
package types
import (
"errors"
"github.com/apache/spark-connect-go/v35/internal/generated"
"github.com/apache/spark-connect-go/v35/spark/sparkerrors"
)
func ConvertProtoDataTypeToStructType(input *generated.DataType) (*StructType, error) {
dataTypeStruct := input.GetStruct()
if dataTypeStruct == nil {
return nil, sparkerrors.WithType(errors.New("dataType.GetStruct() is nil"), sparkerrors.InvalidInputError)
}
return &StructType{
Fields: ConvertProtoStructFields(dataTypeStruct.Fields),
}, nil
}
func ConvertProtoStructFields(input []*generated.DataType_StructField) []StructField {
result := make([]StructField, len(input))
for i, f := range input {
result[i] = ConvertProtoStructField(f)
}
return result
}
func ConvertProtoStructField(field *generated.DataType_StructField) StructField {
return StructField{
Name: field.Name,
DataType: ConvertProtoDataTypeToDataType(field.DataType),
Nullable: field.Nullable,
Metadata: field.Metadata,
}
}
// ConvertProtoDataTypeToDataType converts protobuf data type to Spark connect sql data type
func ConvertProtoDataTypeToDataType(input *generated.DataType) DataType {
switch v := input.GetKind().(type) {
case *generated.DataType_Boolean_:
return BooleanType{}
case *generated.DataType_Byte_:
return ByteType{}
case *generated.DataType_Short_:
return ShortType{}
case *generated.DataType_Integer_:
return IntegerType{}
case *generated.DataType_Long_:
return LongType{}
case *generated.DataType_Float_:
return FloatType{}
case *generated.DataType_Double_:
return DoubleType{}
case *generated.DataType_Decimal_:
return DecimalType{}
case *generated.DataType_String_:
return StringType{}
case *generated.DataType_Binary_:
return BinaryType{}
case *generated.DataType_Timestamp_:
return TimestampType{}
case *generated.DataType_TimestampNtz:
return TimestampNtzType{}
case *generated.DataType_Date_:
return DateType{}
default:
return UnsupportedType{
TypeInfo: v,
}
}
}