From eb899925c8beecb107d23d9913c406ee1fcc43ae Mon Sep 17 00:00:00 2001 From: Shmuel Kamensky Date: Thu, 20 Oct 2022 00:55:35 +0300 Subject: [PATCH] Fix issue #427 (respected required fields) since ModuleField's attribute "Required" was not explicitly passed as a negated value to Attribute.Type.Nullable, Attribute.Type.Nullable's default value always persisted (false). This made all columns required. This change makes it so the ModuleField's attribute "Required" properly maps to Attribute.Type.Nullable --- compose/service/module.go | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/compose/service/module.go b/compose/service/module.go index 6947d5aed..0cbca8c83 100644 --- a/compose/service/module.go +++ b/compose/service/module.go @@ -1479,31 +1479,44 @@ func moduleFieldToAttribute(f *types.ModuleField) (out *dal.Attribute, err error switch strings.ToLower(f.Kind) { case "bool", "boolean": - at := &dal.TypeBoolean{} + at := &dal.TypeBoolean{ + Nullable: !f.Required, + } out = dal.FullAttribute(f.Name, at, codec) case "datetime": switch { case f.IsDateOnly(): - at := &dal.TypeDate{} + at := &dal.TypeDate{ + Nullable: !f.Required, + } out = dal.FullAttribute(f.Name, at, codec) case f.IsTimeOnly(): - at := &dal.TypeTime{} + at := &dal.TypeTime{ + Nullable: !f.Required, + } out = dal.FullAttribute(f.Name, at, codec) default: - at := &dal.TypeTimestamp{} + at := &dal.TypeTimestamp{ + Nullable: !f.Required, + } out = dal.FullAttribute(f.Name, at, codec) } case "email": - at := &dal.TypeText{Length: emailLength} + at := &dal.TypeText{ + Length: emailLength, + Nullable: !f.Required, + } out = dal.FullAttribute(f.Name, at, codec) case "file": at := &dal.TypeRef{ RefModel: &dal.ModelRef{Resource: "corteza::system:attachment"}, + Nullable: !f.Required, } out = dal.FullAttribute(f.Name, at, codec) case "number": at := &dal.TypeNumber{ Precision: int(f.Options.Precision()), + Nullable: !f.Required, } out = dal.FullAttribute(f.Name, at, codec) case "record": @@ -1512,16 +1525,19 @@ func moduleFieldToAttribute(f *types.ModuleField) (out *dal.Attribute, err error ResourceID: f.Options.UInt64("moduleID"), ResourceType: types.ModuleResourceType, }, + Nullable: !f.Required, } out = dal.FullAttribute(f.Name, at, codec) case "select": at := &dal.TypeEnum{ Values: f.SelectOptions(), + Nullable: !f.Required, } out = dal.FullAttribute(f.Name, at, codec) case "url": at := &dal.TypeText{ Length: urlLength, + Nullable: !f.Required, } out = dal.FullAttribute(f.Name, at, codec) case "user": @@ -1529,16 +1545,21 @@ func moduleFieldToAttribute(f *types.ModuleField) (out *dal.Attribute, err error RefModel: &dal.ModelRef{ ResourceType: systemTypes.UserResourceType, }, + Nullable: !f.Required, } out = dal.FullAttribute(f.Name, at, codec) case "geometry": - at := &dal.TypeGeometry{} + at := &dal.TypeGeometry{ + Nullable: !f.Required, + } out = dal.FullAttribute(f.Name, at, codec) out.Filterable = false out.Sortable = false default: - at := &dal.TypeText{} + at := &dal.TypeText{ + Nullable: !f.Required, + } out = dal.FullAttribute(f.Name, at, codec) }