Marshal missing UDT fields as null instead of failing

We can't return an error in case a field is added to the UDT,
otherwise existing code would break by simply altering the UDT in the
database. For extra fields at the end of the UDT put nulls to be in
line with gocql, but also python-driver and java-driver.

In gocql it was fixed in d2ed1bb74f
This commit is contained in:
sylwiaszunejko
2024-06-05 13:57:55 +02:00
committed by Sylwia Szunejko
parent 2eee0b00f1
commit a222c1f067

12
udt.go
View File

@@ -39,11 +39,17 @@ func makeUDT(value reflect.Value, mapper *reflectx.Mapper, unsafe bool) udt {
func (u udt) MarshalUDT(name string, info gocql.TypeInfo) ([]byte, error) { func (u udt) MarshalUDT(name string, info gocql.TypeInfo) ([]byte, error) {
value, ok := u.field[name] value, ok := u.field[name]
if !ok {
return nil, fmt.Errorf("missing name %q in %s", name, u.value.Type()) var data []byte
var err error
if ok {
data, err = gocql.Marshal(info, value.Interface())
if err != nil {
return nil, err
}
} }
return gocql.Marshal(info, value.Interface()) return data, err
} }
func (u udt) UnmarshalUDT(name string, info gocql.TypeInfo, data []byte) error { func (u udt) UnmarshalUDT(name string, info gocql.TypeInfo, data []byte) error {