@@ -43,16 +43,29 @@ type (
43
43
44
44
noopMapper struct {}
45
45
46
+ // This mapper is to be backwards compatible with versions before v1.20.
47
+ // Users using standard visibility might have registered custom search attributes.
48
+ // Those search attributes won't be searchable, as they weren't before version v1.20.
49
+ // Thus, this mapper will allow those search attributes to be used without being alised.
50
+ backCompMapper_v1_20 struct {
51
+ mapper Mapper
52
+ emptyStringNameTypeMap NameTypeMap
53
+ }
54
+
46
55
MapperProvider interface {
47
56
GetMapper (nsName namespace.Name ) (Mapper , error )
48
57
}
49
58
50
59
mapperProviderImpl struct {
51
- customMapper Mapper
60
+ customMapper Mapper
61
+ namespaceRegistry namespace.Registry
62
+ searchAttributesProvider Provider
63
+ enableMapperFromNamespace bool
52
64
}
53
65
)
54
66
55
67
var _ Mapper = (* noopMapper )(nil )
68
+ var _ Mapper = (* backCompMapper_v1_20 )(nil )
56
69
var _ Mapper = (* namespace .CustomSearchAttributesMapper )(nil )
57
70
var _ MapperProvider = (* mapperProviderImpl )(nil )
58
71
@@ -64,16 +77,64 @@ func (m *noopMapper) GetFieldName(alias string, _ string) (string, error) {
64
77
return alias , nil
65
78
}
66
79
80
+ func (m * backCompMapper_v1_20 ) GetAlias (fieldName string , namespaceName string ) (string , error ) {
81
+ alias , firstErr := m .mapper .GetAlias (fieldName , namespaceName )
82
+ if firstErr != nil {
83
+ _ , err := m .emptyStringNameTypeMap .getType (fieldName , customCategory )
84
+ if err != nil {
85
+ return "" , firstErr
86
+ }
87
+ // this is custom search attribute registered in pre-v1.20
88
+ return fieldName , nil
89
+ }
90
+ return alias , nil
91
+ }
92
+
93
+ func (m * backCompMapper_v1_20 ) GetFieldName (alias string , namespaceName string ) (string , error ) {
94
+ fieldName , firstErr := m .mapper .GetFieldName (alias , namespaceName )
95
+ if firstErr != nil {
96
+ _ , err := m .emptyStringNameTypeMap .getType (alias , customCategory )
97
+ if err != nil {
98
+ return "" , firstErr
99
+ }
100
+ // this is custom search attribute registered in pre-v1.20
101
+ return alias , nil
102
+ }
103
+ return fieldName , nil
104
+ }
105
+
67
106
func NewMapperProvider (
68
107
customMapper Mapper ,
108
+ namespaceRegistry namespace.Registry ,
109
+ searchAttributesProvider Provider ,
110
+ enableMapperFromNamespace bool ,
69
111
) MapperProvider {
70
112
return & mapperProviderImpl {
71
- customMapper : customMapper ,
113
+ customMapper : customMapper ,
114
+ namespaceRegistry : namespaceRegistry ,
115
+ searchAttributesProvider : searchAttributesProvider ,
116
+ enableMapperFromNamespace : enableMapperFromNamespace ,
72
117
}
73
118
}
74
119
75
- func (m * mapperProviderImpl ) GetMapper (_ namespace.Name ) (Mapper , error ) {
76
- return m .customMapper , nil
120
+ func (m * mapperProviderImpl ) GetMapper (nsName namespace.Name ) (Mapper , error ) {
121
+ if m .customMapper != nil {
122
+ return m .customMapper , nil
123
+ }
124
+ if ! m .enableMapperFromNamespace {
125
+ return & noopMapper {}, nil
126
+ }
127
+ ns , err := m .namespaceRegistry .GetNamespace (nsName )
128
+ if err != nil {
129
+ return nil , err
130
+ }
131
+ saMapper := ns .CustomSearchAttributesMapper ()
132
+ // if there's an error, it returns an empty object, which is expected here
133
+ emptyStringNameTypeMap , _ := m .searchAttributesProvider .GetSearchAttributes ("" , false )
134
+ return & backCompMapper_v1_20 {
135
+ mapper : & saMapper ,
136
+ emptyStringNameTypeMap : emptyStringNameTypeMap ,
137
+ }, nil
77
138
}
78
139
79
140
// AliasFields returns SearchAttributes struct where each search attribute name is replaced with alias.
0 commit comments