diff --git a/common/persistence/visibility/store/sql/query_converter.go b/common/persistence/visibility/store/sql/query_converter.go index 0340dbed921..0d0da8be72e 100644 --- a/common/persistence/visibility/store/sql/query_converter.go +++ b/common/persistence/visibility/store/sql/query_converter.go @@ -218,6 +218,17 @@ func (c *QueryConverter) convertSelectStmt(sel *sqlparser.Select) error { if err != nil { return err } + + // Wrap user's query in parenthesis. This is to ensure that further changes + // to the query won't affect the user's query. + switch sel.Where.Expr.(type) { + case *sqlparser.ParenExpr: + // no-op: top-level expression is already a parenthesis + default: + sel.Where.Expr = &sqlparser.ParenExpr{ + Expr: sel.Where.Expr, + } + } } // This logic comes from elasticsearch/visibility_store.go#convertQuery function. diff --git a/common/persistence/visibility/store/sql/query_converter_mysql.go b/common/persistence/visibility/store/sql/query_converter_mysql.go index 41028d28ccb..e8d4b78a021 100644 --- a/common/persistence/visibility/store/sql/query_converter_mysql.go +++ b/common/persistence/visibility/store/sql/query_converter_mysql.go @@ -222,7 +222,7 @@ func (c *mysqlQueryConverter) buildSelectStmt( queryArgs = append(queryArgs, namespaceID.String()) if len(queryString) > 0 { - whereClauses = append(whereClauses, fmt.Sprintf("(%s)", queryString)) + whereClauses = append(whereClauses, queryString) } if token != nil { @@ -283,7 +283,7 @@ func (c *mysqlQueryConverter) buildCountStmt( queryArgs = append(queryArgs, namespaceID.String()) if len(queryString) > 0 { - whereClauses = append(whereClauses, fmt.Sprintf("(%s)", queryString)) + whereClauses = append(whereClauses, queryString) } return fmt.Sprintf( diff --git a/common/persistence/visibility/store/sql/query_converter_postgresql.go b/common/persistence/visibility/store/sql/query_converter_postgresql.go index b4d100effec..4452f55e516 100644 --- a/common/persistence/visibility/store/sql/query_converter_postgresql.go +++ b/common/persistence/visibility/store/sql/query_converter_postgresql.go @@ -229,7 +229,7 @@ func (c *pgQueryConverter) buildSelectStmt( queryArgs = append(queryArgs, namespaceID.String()) if len(queryString) > 0 { - whereClauses = append(whereClauses, fmt.Sprintf("(%s)", queryString)) + whereClauses = append(whereClauses, queryString) } if token != nil { @@ -286,7 +286,7 @@ func (c *pgQueryConverter) buildCountStmt( queryArgs = append(queryArgs, namespaceID.String()) if len(queryString) > 0 { - whereClauses = append(whereClauses, fmt.Sprintf("(%s)", queryString)) + whereClauses = append(whereClauses, queryString) } return fmt.Sprintf( diff --git a/common/persistence/visibility/store/sql/query_converter_sqlite.go b/common/persistence/visibility/store/sql/query_converter_sqlite.go index 187c301cb4f..5ae0ff0c578 100644 --- a/common/persistence/visibility/store/sql/query_converter_sqlite.go +++ b/common/persistence/visibility/store/sql/query_converter_sqlite.go @@ -240,7 +240,7 @@ func (c *sqliteQueryConverter) buildSelectStmt( queryArgs = append(queryArgs, namespaceID.String()) if len(queryString) > 0 { - whereClauses = append(whereClauses, fmt.Sprintf("(%s)", queryString)) + whereClauses = append(whereClauses, queryString) } if token != nil { @@ -328,7 +328,7 @@ func (c *sqliteQueryConverter) buildCountStmt( queryArgs = append(queryArgs, namespaceID.String()) if len(queryString) > 0 { - whereClauses = append(whereClauses, fmt.Sprintf("(%s)", queryString)) + whereClauses = append(whereClauses, queryString) } return fmt.Sprintf(