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:
committed by
Sylwia Szunejko
parent
2eee0b00f1
commit
a222c1f067
12
udt.go
12
udt.go
@@ -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) {
|
||||
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 {
|
||||
|
||||
Reference in New Issue
Block a user