Skip to content

Commit 9186ca7

Browse files
authored
Fix visibility full text search query in MySQL (#3913)
1 parent 793dd7e commit 9186ca7

File tree

1 file changed

+28
-5
lines changed

1 file changed

+28
-5
lines changed

common/persistence/visibility/store/sql/query_converter_mysql.go

+28-5
Original file line numberDiff line numberDiff line change
@@ -56,7 +56,9 @@ type (
5656
JSONDoc2 sqlparser.Expr
5757
}
5858

59-
mysqlQueryConverter struct{}
59+
mysqlQueryConverter struct {
60+
namespaceID namespace.ID
61+
}
6062
)
6163

6264
var convertTypeJSON = &sqlparser.ConvertType{Type: "json"}
@@ -67,6 +69,10 @@ var _ sqlparser.Expr = (*jsonOverlapsExpr)(nil)
6769

6870
var _ pluginQueryConverter = (*mysqlQueryConverter)(nil)
6971

72+
const (
73+
mysqlCustomSearchAttributesTableName = "custom_search_attributes"
74+
)
75+
7076
func (node *castExpr) Format(buf *sqlparser.TrackedBuffer) {
7177
buf.Myprintf("cast(%v as %v)", node.Value, node.Type)
7278
}
@@ -85,7 +91,7 @@ func newMySQLQueryConverter(
8591
saMapper searchattribute.Mapper,
8692
) *QueryConverter {
8793
return newQueryConverterInternal(
88-
&mysqlQueryConverter{},
94+
&mysqlQueryConverter{namespaceID: request.NamespaceID},
8995
request,
9096
saTypeMap,
9197
saMapper,
@@ -164,10 +170,27 @@ func (c *mysqlQueryConverter) convertTextComparisonExpr(
164170
if !isSupportedTextOperator(expr.Operator) {
165171
return nil, query.NewConverterError("invalid query")
166172
}
173+
valueExpr, ok := expr.Right.(*unsafeSQLString)
174+
if !ok {
175+
return nil, query.NewConverterError("invalid query")
176+
}
177+
valueExpr.Val = fmt.Sprintf("%s %s", c.namespaceID, valueExpr.Val)
178+
// build the following expression:
179+
// `match (custom_search_attributes.namespace_id, {expr.Left}) against ({expr.Right} in natural language mode)`
167180
var newExpr sqlparser.Expr = &sqlparser.MatchExpr{
168-
Columns: []sqlparser.SelectExpr{&sqlparser.AliasedExpr{Expr: expr.Left}},
169-
Expr: expr.Right,
170-
Option: sqlparser.NaturalLanguageModeStr,
181+
Columns: []sqlparser.SelectExpr{
182+
&sqlparser.AliasedExpr{
183+
Expr: &sqlparser.ColName{
184+
Name: sqlparser.NewColIdent(searchattribute.GetSqlDbColName(searchattribute.NamespaceID)),
185+
Qualifier: sqlparser.TableName{
186+
Name: sqlparser.NewTableIdent(mysqlCustomSearchAttributesTableName),
187+
},
188+
},
189+
},
190+
&sqlparser.AliasedExpr{Expr: expr.Left},
191+
},
192+
Expr: expr.Right,
193+
Option: sqlparser.NaturalLanguageModeStr,
171194
}
172195
if expr.Operator == sqlparser.NotEqualStr {
173196
newExpr = &sqlparser.NotExpr{Expr: newExpr}

0 commit comments

Comments
 (0)