spark/sql/types/builtin.go (300 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 (
"context"
proto "github.com/apache/spark-connect-go/v35/internal/generated"
)
type LiteralType interface {
ToProto(ctx context.Context) (*proto.Expression, error)
}
type NumericLiteral interface {
LiteralType
// marker method for compile time safety.
isNumericLiteral()
}
type PrimitiveTypeLiteral interface {
LiteralType
isPrimitiveTypeLiteral()
}
type Int8 int8
func (t Int8) ToProto(ctx context.Context) (*proto.Expression, error) {
return &proto.Expression{
ExprType: &proto.Expression_Literal_{
Literal: &proto.Expression_Literal{
LiteralType: &proto.Expression_Literal_Byte{Byte: int32(t)},
},
},
}, nil
}
func (t Int8) isNumericLiteral() {}
func (t Int8) isPrimitiveTypeLiteral() {}
type Int16 int16
func (t Int16) ToProto(ctx context.Context) (*proto.Expression, error) {
return &proto.Expression{
ExprType: &proto.Expression_Literal_{
Literal: &proto.Expression_Literal{
LiteralType: &proto.Expression_Literal_Short{Short: int32(t)},
},
},
}, nil
}
func (t Int16) isNumericLiteral() {}
func (t Int16) isPrimitiveTypeLiteral() {}
type Int32 int32
func (t Int32) ToProto(ctx context.Context) (*proto.Expression, error) {
return &proto.Expression{
ExprType: &proto.Expression_Literal_{
Literal: &proto.Expression_Literal{
LiteralType: &proto.Expression_Literal_Integer{Integer: int32(t)},
},
},
}, nil
}
func (t Int32) isNumericLiteral() {}
func (t Int32) isPrimitiveTypeLiteral() {}
type Int64 int64
func (t Int64) ToProto(ctx context.Context) (*proto.Expression, error) {
return &proto.Expression{
ExprType: &proto.Expression_Literal_{
Literal: &proto.Expression_Literal{
LiteralType: &proto.Expression_Literal_Long{Long: int64(t)},
},
},
}, nil
}
func (t Int64) isNumericLiteral() {}
func (t Int64) isPrimitiveTypeLiteral() {}
type Int int
func (t Int) ToProto(ctx context.Context) (*proto.Expression, error) {
return Int64(t).ToProto(ctx)
}
func (t Int) isNumericLiteral() {}
func (t Int) isPrimitiveTypeLiteral() {}
type Float32 float32
func (t Float32) ToProto(ctx context.Context) (*proto.Expression, error) {
return &proto.Expression{
ExprType: &proto.Expression_Literal_{
Literal: &proto.Expression_Literal{
LiteralType: &proto.Expression_Literal_Float{Float: float32(t)},
},
},
}, nil
}
func (t Float32) isNumericLiteral() {}
func (t Float32) isPrimitiveTypeLiteral() {}
type Float64 float64
func (t Float64) ToProto(ctx context.Context) (*proto.Expression, error) {
return &proto.Expression{
ExprType: &proto.Expression_Literal_{
Literal: &proto.Expression_Literal{
LiteralType: &proto.Expression_Literal_Double{Double: float64(t)},
},
},
}, nil
}
func (t Float64) isNumericLiteral() {}
func (t Float64) isPrimitiveTypeLiteral() {}
type String string
func (t String) ToProto(ctx context.Context) (*proto.Expression, error) {
return &proto.Expression{
ExprType: &proto.Expression_Literal_{
Literal: &proto.Expression_Literal{
LiteralType: &proto.Expression_Literal_String_{String_: string(t)},
},
},
}, nil
}
func (t String) isPrimitiveTypeLiteral() {}
type Boolean bool
func (t Boolean) ToProto(ctx context.Context) (*proto.Expression, error) {
return &proto.Expression{
ExprType: &proto.Expression_Literal_{
Literal: &proto.Expression_Literal{
LiteralType: &proto.Expression_Literal_Boolean{Boolean: bool(t)},
},
},
}, nil
}
func (t Boolean) isPrimitiveTypeLiteral() {}
type Binary []byte
func (t Binary) ToProto(ctx context.Context) (*proto.Expression, error) {
return &proto.Expression{
ExprType: &proto.Expression_Literal_{
Literal: &proto.Expression_Literal{
LiteralType: &proto.Expression_Literal_Binary{Binary: t},
},
},
}, nil
}
type Int8NilType struct{}
var Int8Nil = Int8NilType{}
func (t Int8NilType) isNumericLiteral() {}
func (t Int8NilType) isPrimitiveTypeLiteral() {}
func (t Int8NilType) ToProto(ctx context.Context) (*proto.Expression, error) {
return &proto.Expression{
ExprType: &proto.Expression_Literal_{
Literal: &proto.Expression_Literal{
LiteralType: &proto.Expression_Literal_Null{
Null: &proto.DataType{
Kind: &proto.DataType_Byte_{
Byte: &proto.DataType_Byte{},
},
},
},
},
},
}, nil
}
type Int16NilType struct{}
var Int16Nil = Int16NilType{}
func (t Int16NilType) isNumericLiteral() {}
func (t Int16NilType) isPrimitiveTypeLiteral() {}
func (t Int16NilType) ToProto(ctx context.Context) (*proto.Expression, error) {
return &proto.Expression{
ExprType: &proto.Expression_Literal_{
Literal: &proto.Expression_Literal{
LiteralType: &proto.Expression_Literal_Null{
Null: &proto.DataType{
Kind: &proto.DataType_Short_{
Short: &proto.DataType_Short{},
},
},
},
},
},
}, nil
}
type Int32NilType struct{}
var Int32Nil = Int32NilType{}
func (t Int32NilType) isNumericLiteral() {}
func (t Int32NilType) isPrimitiveTypeLiteral() {}
func (t Int32NilType) ToProto(ctx context.Context) (*proto.Expression, error) {
return &proto.Expression{
ExprType: &proto.Expression_Literal_{
Literal: &proto.Expression_Literal{
LiteralType: &proto.Expression_Literal_Null{
Null: &proto.DataType{
Kind: &proto.DataType_Integer_{
Integer: &proto.DataType_Integer{},
},
},
},
},
},
}, nil
}
type Int64NilType struct{}
var Int64Nil = Int64NilType{}
func (t Int64NilType) isNumericLiteral() {}
func (t Int64NilType) isPrimitiveTypeLiteral() {}
func (t Int64NilType) ToProto(ctx context.Context) (*proto.Expression, error) {
return &proto.Expression{
ExprType: &proto.Expression_Literal_{
Literal: &proto.Expression_Literal{
LiteralType: &proto.Expression_Literal_Null{
Null: &proto.DataType{
Kind: &proto.DataType_Long_{
Long: &proto.DataType_Long{},
},
},
},
},
},
}, nil
}
type IntNilType struct{}
var IntNil = IntNilType{}
func (t IntNilType) isNumericLiteral() {}
func (t IntNilType) isPrimitiveTypeLiteral() {}
func (t IntNilType) ToProto(ctx context.Context) (*proto.Expression, error) {
return Int64NilType{}.ToProto(ctx)
}
type Float32NilType struct{}
var Float32Nil = Float32NilType{}
func (t Float32NilType) isNumericLiteral() {}
func (t Float32NilType) isPrimitiveTypeLiteral() {}
func (t Float32NilType) ToProto(ctx context.Context) (*proto.Expression, error) {
return &proto.Expression{
ExprType: &proto.Expression_Literal_{
Literal: &proto.Expression_Literal{
LiteralType: &proto.Expression_Literal_Null{
Null: &proto.DataType{
Kind: &proto.DataType_Float_{
Float: &proto.DataType_Float{},
},
},
},
},
},
}, nil
}
type Float64NilType struct{}
var Float64Nil = Float64NilType{}
func (t Float64NilType) isNumericLiteral() {}
func (t Float64NilType) isPrimitiveTypeLiteral() {}
func (t Float64NilType) ToProto(ctx context.Context) (*proto.Expression, error) {
return &proto.Expression{
ExprType: &proto.Expression_Literal_{
Literal: &proto.Expression_Literal{
LiteralType: &proto.Expression_Literal_Null{
Null: &proto.DataType{
Kind: &proto.DataType_Double_{
Double: &proto.DataType_Double{},
},
},
},
},
},
}, nil
}
type StringNilType struct{}
var StringNil = StringNilType{}
func (t StringNilType) isPrimitiveTypeLiteral() {}
func (t StringNilType) ToProto(ctx context.Context) (*proto.Expression, error) {
return &proto.Expression{
ExprType: &proto.Expression_Literal_{
Literal: &proto.Expression_Literal{
LiteralType: &proto.Expression_Literal_Null{
Null: &proto.DataType{
Kind: &proto.DataType_String_{
String_: &proto.DataType_String{},
},
},
},
},
},
}, nil
}
type BooleanNilType struct{}
var BooleanNil = BooleanNilType{}
func (t BooleanNilType) isPrimitiveTypeLiteral() {}
func (t BooleanNilType) ToProto(ctx context.Context) (*proto.Expression, error) {
return &proto.Expression{
ExprType: &proto.Expression_Literal_{
Literal: &proto.Expression_Literal{
LiteralType: &proto.Expression_Literal_Null{
Null: &proto.DataType{
Kind: &proto.DataType_Boolean_{
Boolean: &proto.DataType_Boolean{},
},
},
},
},
},
}, nil
}
type BinaryNilType struct{}
var BinaryNil = BinaryNilType{}
func (t BinaryNilType) ToProto(ctx context.Context) (*proto.Expression, error) {
return &proto.Expression{
ExprType: &proto.Expression_Literal_{
Literal: &proto.Expression_Literal{
LiteralType: &proto.Expression_Literal_Null{
Null: &proto.DataType{
Kind: &proto.DataType_Binary_{
Binary: &proto.DataType_Binary{},
},
},
},
},
},
}, nil
}