diff --git a/field.go b/field.go index fe7c02554..f04f39b1f 100644 --- a/field.go +++ b/field.go @@ -596,12 +596,10 @@ func (f *Field) applyOptions(opt FieldOptions) error { if opt.CacheType != "" { f.options.CacheType = opt.CacheType } - if opt.CacheSize != 0 { - if opt.CacheType == CacheTypeNone { - f.options.CacheSize = 0 - } else { - f.options.CacheSize = opt.CacheSize - } + if opt.CacheType == CacheTypeNone { + f.options.CacheSize = 0 + } else if opt.CacheSize != 0 { + f.options.CacheSize = opt.CacheSize } f.options.Min = 0 f.options.Max = 0 diff --git a/field_internal_test.go b/field_internal_test.go index b2f84cb5f..1f7f8303e 100644 --- a/field_internal_test.go +++ b/field_internal_test.go @@ -439,6 +439,40 @@ func TestBSIGroup_BaseDefaultValue(t *testing.T) { } } +func TestField_ApplyOptions(t *testing.T) { + for i, tt := range []struct { + opts FieldOptions + expOpts FieldOptions + }{ + { + FieldOptions{ + Type: FieldTypeSet, + CacheType: CacheTypeNone, + CacheSize: 0, + }, + FieldOptions{ + Type: FieldTypeSet, + CacheType: CacheTypeNone, + CacheSize: 0, + }, + }, + } { + + fld := &Field{} + fld.options = applyDefaultOptions(FieldOptions{}) + + if err := fld.applyOptions(tt.opts); err != nil { + t.Fatal(err) + } + + if fld.options.CacheType != tt.expOpts.CacheType { + t.Fatalf("test %d, unexpected FieldOptions.CacheType value. expected: %s, but got: %s", i, tt.expOpts.CacheType, fld.options.CacheType) + } else if fld.options.CacheSize != tt.expOpts.CacheSize { + t.Fatalf("test %d, unexpected FieldOptions.CacheSize value. expected: %d, but got: %d", i, tt.expOpts.CacheSize, fld.options.CacheSize) + } + } +} + // Ensure that importValue handles requiredDepth correctly. // This test sets the same column value to 1, then 8, then 1. // A previous bug was incorrectly determining bitDepth based