Files
2026-07-13 12:32:25 +08:00

75 lines
2.3 KiB
Go

// Copyright 2025 Dolthub, Inc.
//
// Licensed 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 framework
import (
"github.com/dolthub/doltgresql/core/extensions/pg_extension"
"github.com/dolthub/doltgresql/core/id"
"github.com/dolthub/doltgresql/postgres/parser/uuid"
pgtypes "github.com/dolthub/doltgresql/server/types"
)
var cConversionToDatumMap = map[id.Type]func(val any) (pg_extension.NullableDatum, error){
pgtypes.Text.ID: textToDatum,
pgtypes.Uuid.ID: uuidToDatum,
}
var cConversionFromDatumMap = map[id.Type]func(datum pg_extension.Datum) (any, error){
pgtypes.Text.ID: textFromDatum,
pgtypes.Uuid.ID: uuidFromDatum,
}
// textFromDatum converts from a Datum to a TEXT value.
func textFromDatum(datum pg_extension.Datum) (any, error) {
convertedVal := pg_extension.FromDatumGoString(datum)
pg_extension.FreeDatum(datum)
return convertedVal, nil
}
// textToDatum converts from a TEXT value to a NullableDatum.
func textToDatum(val any) (pg_extension.NullableDatum, error) {
if val == nil {
return pg_extension.NullableDatum{
Value: 0,
IsNull: true,
}, nil
}
return pg_extension.NullableDatum{
Value: pg_extension.ToDatumGoString(val.(string)),
IsNull: false,
}, nil
}
// uuidFromDatum converts from a Datum to a UUID value.
func uuidFromDatum(datum pg_extension.Datum) (any, error) {
convertedVal := pg_extension.FromDatumGoBytes(datum, 16)
pg_extension.FreeDatum(datum)
return uuid.FromBytes(convertedVal)
}
// uuidToDatum converts from a UUID value to a NullableDatum.
func uuidToDatum(val any) (pg_extension.NullableDatum, error) {
if val == nil {
return pg_extension.NullableDatum{
Value: 0,
IsNull: true,
}, nil
}
return pg_extension.NullableDatum{
Value: pg_extension.ToDatumGoBytes(val.(uuid.UUID).GetBytes()),
IsNull: false,
}, nil
}