5757 SearchAttributeFieldKeywordList01 = newSearchAttributeFieldKeywordList (1 )
5858 SearchAttributeFieldKeywordList02 = newSearchAttributeFieldKeywordList (2 )
5959
60+ // CHASM search attribute of type Text is not supported at this moment.
61+ // SearchAttributeFieldText01 = newSearchAttributeFieldText(1)
62+
63+ // Predefined search attributes don't have alias.
64+ // TaskQueue is a system search attribute outside CHASM, but treated as predefined inside CHASM.
6065 SearchAttributeTaskQueue = newSearchAttributeKeywordByField (sadefs .TaskQueue )
6166 SearchAttributeTemporalChangeVersion = newSearchAttributeKeywordListByField (sadefs .TemporalChangeVersion )
6267 SearchAttributeBinaryChecksums = newSearchAttributeKeywordListByField (sadefs .BinaryChecksums )
@@ -76,21 +81,21 @@ var (
7681)
7782
7883var (
79- // CHASM search attribute of type Text is not supported at this moment.
80- // Note that it's currently assumed that string type values are Keyword search attributes.
8184 _ SearchAttribute = (* SearchAttributeBool )(nil )
8285 _ SearchAttribute = (* SearchAttributeDateTime )(nil )
8386 _ SearchAttribute = (* SearchAttributeInt )(nil )
8487 _ SearchAttribute = (* SearchAttributeDouble )(nil )
8588 _ SearchAttribute = (* SearchAttributeKeyword )(nil )
8689 _ SearchAttribute = (* SearchAttributeKeywordList )(nil )
90+ _ SearchAttribute = (* SearchAttributeText )(nil )
8791
8892 _ typedSearchAttribute [bool ] = (* SearchAttributeBool )(nil )
8993 _ typedSearchAttribute [time.Time ] = (* SearchAttributeDateTime )(nil )
9094 _ typedSearchAttribute [int64 ] = (* SearchAttributeInt )(nil )
9195 _ typedSearchAttribute [float64 ] = (* SearchAttributeDouble )(nil )
9296 _ typedSearchAttribute [string ] = (* SearchAttributeKeyword )(nil )
9397 _ typedSearchAttribute [[]string ] = (* SearchAttributeKeywordList )(nil )
98+ _ typedSearchAttribute [string ] = (* SearchAttributeText )(nil )
9499)
95100
96101type (
@@ -194,6 +199,17 @@ func newSearchAttributeFieldKeywordList(index int) SearchAttributeFieldKeywordLi
194199 }
195200}
196201
202+ // SearchAttributeFieldText is a search attribute field for a text value.
203+ type SearchAttributeFieldText struct {
204+ field string
205+ }
206+
207+ func newSearchAttributeFieldText (index int ) SearchAttributeFieldText {
208+ return SearchAttributeFieldText {
209+ field : resolveFieldName (enumspb .INDEXED_VALUE_TYPE_TEXT , index ),
210+ }
211+ }
212+
197213func resolveFieldName (valueType enumspb.IndexedValueType , index int ) string {
198214 // Columns are named like TemporalBool01, TemporalDatetime01, TemporalDouble01, TemporalInt01.
199215 return fmt .Sprintf ("%s%s%02d" , sadefs .ReservedPrefix , valueType .String (), index )
@@ -415,6 +431,43 @@ func (s SearchAttributeKeywordList) Value(value []string) SearchAttributeKeyValu
415431
416432func (s SearchAttributeKeywordList ) typeMarker (_ []string ) {}
417433
434+ // SearchAttributeText is a search attribute for a text value.
435+ type SearchAttributeText struct {
436+ searchAttributeDefinition
437+ }
438+
439+ // NewSearchAttributeText creates a new text search attribute given a predefined chasm field
440+ func NewSearchAttributeText (alias string , textField SearchAttributeFieldText ) SearchAttributeText {
441+ return SearchAttributeText {
442+ searchAttributeDefinition : searchAttributeDefinition {
443+ alias : alias ,
444+ field : textField .field ,
445+ valueType : enumspb .INDEXED_VALUE_TYPE_TEXT ,
446+ },
447+ }
448+ }
449+
450+ func newSearchAttributeTextByField (field string ) SearchAttributeText {
451+ return SearchAttributeText {
452+ searchAttributeDefinition : searchAttributeDefinition {
453+ alias : field ,
454+ field : field ,
455+ valueType : enumspb .INDEXED_VALUE_TYPE_TEXT ,
456+ },
457+ }
458+ }
459+
460+ // Value sets the string value of the search attribute.
461+ func (s SearchAttributeText ) Value (value string ) SearchAttributeKeyValue {
462+ return SearchAttributeKeyValue {
463+ Alias : s .alias ,
464+ Field : s .field ,
465+ Value : VisibilityValueText (value ),
466+ }
467+ }
468+
469+ func (s SearchAttributeText ) typeMarker (_ string ) {}
470+
418471// SearchAttributesMap wraps search attribute values with type-safe access.
419472type SearchAttributesMap struct {
420473 values map [string ]VisibilityValue
@@ -438,7 +491,7 @@ func newSearchAttributesMapFromProto(
438491 for saName , saPayload := range searchAttributes .IndexedFields {
439492 value , err := visibilityValueFromPayload (saPayload )
440493 if err != nil {
441- return SearchAttributesMap {}, nil
494+ return SearchAttributesMap {}, err
442495 }
443496 result .values [saName ] = value
444497 }
0 commit comments