Rename current Visibility query converter with 'legacy' suffix (#8333)

## What changed?
Rename current Visibility query converter with 'legacy' suffix

## Why?
Preparation for the unified query converter that will replace the legacy
one.

## How did you test it?
- [x] built
- [ ] run locally and tested manually
- [x] covered by existing tests
- [ ] added new unit test(s)
- [ ] added new functional test(s)

## Potential risks
This commit is contained in:
Rodrigo Zhou
2025-11-10 18:21:09 -06:00
committed by GitHub
parent c7032994c0
commit c95df3389b
23 changed files with 135 additions and 123 deletions
+2 -2
View File
@@ -171,8 +171,8 @@ func NewRefCountedDBConn(
}
}
// Get returns a mysql db connection and increments a reference count
// this method will create a new connection, if an existing connection
// Get returns a db connection and increments a reference count.
// This method will create a new connection, if an existing connection
// does not exist
func (c *DbConn) Get() (sqlplugin.DB, error) {
c.Lock()
@@ -19,11 +19,11 @@ var allowedComparisonOperators = map[string]struct{}{
sqlparser.NotStartsWithStr: {},
}
func NewQueryConverter(
func NewQueryConverterLegacy(
fnInterceptor query.FieldNameInterceptor,
fvInterceptor query.FieldValuesInterceptor,
saNameType searchattribute.NameTypeMap,
) *query.Converter {
) *query.ConverterLegacy {
if fnInterceptor == nil {
fnInterceptor = &query.NopFieldNameInterceptor{}
}
@@ -44,5 +44,5 @@ func NewQueryConverter(
whereConverter.And = query.NewAndConverter(whereConverter)
whereConverter.Or = query.NewOrConverter(whereConverter)
return query.NewConverter(fnInterceptor, whereConverter)
return query.NewConverterLegacy(fnInterceptor, whereConverter)
}
@@ -126,7 +126,7 @@ var testNameTypeMap = searchattribute.NewNameTypeMapStub(
)
func TestSupportedSelectWhere(t *testing.T) {
c := NewQueryConverter(nil, nil, testNameTypeMap)
c := NewQueryConverterLegacy(nil, nil, testNameTypeMap)
for sql, expectedJson := range supportedWhereCases {
queryParams, err := c.ConvertWhereOrderBy(sql)
@@ -140,7 +140,7 @@ func TestSupportedSelectWhere(t *testing.T) {
}
func TestEmptySelectWhere(t *testing.T) {
c := NewQueryConverter(nil, nil, testNameTypeMap)
c := NewQueryConverterLegacy(nil, nil, testNameTypeMap)
queryParams, err := c.ConvertWhereOrderBy("")
assert.NoError(t, err)
@@ -157,7 +157,7 @@ func TestEmptySelectWhere(t *testing.T) {
}
func TestSupportedSelectWhereOrder(t *testing.T) {
c := NewQueryConverter(nil, nil, testNameTypeMap)
c := NewQueryConverterLegacy(nil, nil, testNameTypeMap)
for sql, expectedJson := range supportedWhereOrderCases {
queryParams, err := c.ConvertWhereOrderBy(sql)
@@ -178,7 +178,7 @@ func TestSupportedSelectWhereOrder(t *testing.T) {
}
func TestSupportedSelectWhereGroupBy(t *testing.T) {
c := NewQueryConverter(nil, nil, testNameTypeMap)
c := NewQueryConverterLegacy(nil, nil, testNameTypeMap)
for sql, expectedJson := range supportedWhereGroupByCases {
queryParams, err := c.ConvertWhereOrderBy(sql)
@@ -196,7 +196,7 @@ func TestSupportedSelectWhereGroupBy(t *testing.T) {
}
func TestErrors(t *testing.T) {
c := NewQueryConverter(nil, nil, testNameTypeMap)
c := NewQueryConverterLegacy(nil, nil, testNameTypeMap)
for sql, expectedErrMessage := range errorCases {
_, err := c.ConvertSql(sql)
assert.Contains(t, err.Error(), expectedErrMessage, sql)
@@ -363,7 +363,7 @@ func (s *VisibilityStore) CountWorkflowExecutions(
ctx context.Context,
request *manager.CountWorkflowExecutionsRequest,
) (*manager.CountWorkflowExecutionsResponse, error) {
queryParams, err := s.convertQuery(request.Namespace, request.NamespaceID, request.Query)
queryParams, err := s.convertQueryLegacy(request.Namespace, request.NamespaceID, request.Query)
if err != nil {
return nil, err
}
@@ -383,7 +383,7 @@ func (s *VisibilityStore) CountWorkflowExecutions(
func (s *VisibilityStore) countGroupByWorkflowExecutions(
ctx context.Context,
queryParams *query.QueryParams,
queryParams *query.QueryParamsLegacy,
) (*manager.CountWorkflowExecutionsResponse, error) {
groupByFields := queryParams.GroupBy
@@ -461,7 +461,7 @@ func (s *VisibilityStore) BuildSearchParametersV2(
request *manager.ListWorkflowExecutionsRequestV2,
getFieldSorter func([]elastic.Sorter) ([]elastic.Sorter, error),
) (*client.SearchParameters, error) {
queryParams, err := s.convertQuery(
queryParams, err := s.convertQueryLegacy(
request.Namespace,
request.NamespaceID,
request.Query,
@@ -562,17 +562,17 @@ func (s *VisibilityStore) processPageToken(
return nil
}
func (s *VisibilityStore) convertQuery(
func (s *VisibilityStore) convertQueryLegacy(
namespace namespace.Name,
namespaceID namespace.ID,
requestQueryStr string,
) (*query.QueryParams, error) {
) (*query.QueryParamsLegacy, error) {
saTypeMap, err := s.searchAttributesProvider.GetSearchAttributes(s.index, false)
if err != nil {
return nil, serviceerror.NewUnavailablef("unable to read search attribute types: %v", err)
}
nameInterceptor := NewNameInterceptor(namespace, saTypeMap, s.searchAttributesMapperProvider)
queryConverter := NewQueryConverter(
queryConverter := NewQueryConverterLegacy(
nameInterceptor,
NewValuesInterceptor(namespace, saTypeMap),
saTypeMap,
@@ -279,194 +279,195 @@ func (s *ESVisibilitySuite) sorterToJSON(sorters []elastic.Sorter) string {
return string(b)
}
func (s *ESVisibilitySuite) Test_convertQuery() {
func (s *ESVisibilitySuite) Test_convertQueryLegacy() {
query := `WorkflowId = 'wid'`
queryParams, err := s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
queryParams, err := s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.NoError(err)
s.Equal(`{"bool":{"filter":[{"term":{"NamespaceId":"bfd5c907-f899-4baf-a7b2-2ab85e623ebd"}},{"bool":{"filter":{"term":{"WorkflowId":"wid"}}}}],"must_not":{"exists":{"field":"TemporalNamespaceDivision"}}}}`, s.queryToJSON(queryParams.Query))
s.Nil(queryParams.Sorter)
query = `WorkflowId = 'wid' or WorkflowId = 'another-wid'`
queryParams, err = s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
queryParams, err = s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.NoError(err)
s.Equal(`{"bool":{"filter":[{"term":{"NamespaceId":"bfd5c907-f899-4baf-a7b2-2ab85e623ebd"}},{"bool":{"should":[{"term":{"WorkflowId":"wid"}},{"term":{"WorkflowId":"another-wid"}}]}}],"must_not":{"exists":{"field":"TemporalNamespaceDivision"}}}}`, s.queryToJSON(queryParams.Query))
s.Nil(queryParams.Sorter)
query = `WorkflowId = 'wid' order by StartTime desc`
queryParams, err = s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
queryParams, err = s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.NoError(err)
s.Equal(`{"bool":{"filter":[{"term":{"NamespaceId":"bfd5c907-f899-4baf-a7b2-2ab85e623ebd"}},{"bool":{"filter":{"term":{"WorkflowId":"wid"}}}}],"must_not":{"exists":{"field":"TemporalNamespaceDivision"}}}}`, s.queryToJSON(queryParams.Query))
s.Equal(`[{"StartTime":{"order":"desc"}}]`, s.sorterToJSON(queryParams.Sorter))
query = `WorkflowId = 'wid' and CloseTime is null`
queryParams, err = s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
queryParams, err = s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.NoError(err)
s.Equal(`{"bool":{"filter":[{"term":{"NamespaceId":"bfd5c907-f899-4baf-a7b2-2ab85e623ebd"}},{"bool":{"filter":[{"term":{"WorkflowId":"wid"}},{"bool":{"must_not":{"exists":{"field":"CloseTime"}}}}]}}],"must_not":{"exists":{"field":"TemporalNamespaceDivision"}}}}`, s.queryToJSON(queryParams.Query))
s.Nil(queryParams.Sorter)
query = `WorkflowId = 'wid' or CloseTime is null`
queryParams, err = s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
queryParams, err = s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.NoError(err)
s.Equal(`{"bool":{"filter":[{"term":{"NamespaceId":"bfd5c907-f899-4baf-a7b2-2ab85e623ebd"}},{"bool":{"should":[{"term":{"WorkflowId":"wid"}},{"bool":{"must_not":{"exists":{"field":"CloseTime"}}}}]}}],"must_not":{"exists":{"field":"TemporalNamespaceDivision"}}}}`, s.queryToJSON(queryParams.Query))
s.Nil(queryParams.Sorter)
query = `CloseTime is null order by CloseTime desc`
queryParams, err = s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
queryParams, err = s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.NoError(err)
s.Equal(`{"bool":{"filter":[{"term":{"NamespaceId":"bfd5c907-f899-4baf-a7b2-2ab85e623ebd"}},{"bool":{"must_not":{"exists":{"field":"CloseTime"}}}}],"must_not":{"exists":{"field":"TemporalNamespaceDivision"}}}}`, s.queryToJSON(queryParams.Query))
s.Equal(`[{"CloseTime":{"order":"desc"}}]`, s.sorterToJSON(queryParams.Sorter))
query = `StartTime = "2018-06-07T15:04:05.123456789-08:00"`
queryParams, err = s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
queryParams, err = s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.NoError(err)
s.Equal(`{"bool":{"filter":[{"term":{"NamespaceId":"bfd5c907-f899-4baf-a7b2-2ab85e623ebd"}},{"bool":{"filter":{"match":{"StartTime":{"query":"2018-06-07T15:04:05.123456789-08:00"}}}}}],"must_not":{"exists":{"field":"TemporalNamespaceDivision"}}}}`, s.queryToJSON(queryParams.Query))
s.Nil(queryParams.Sorter)
query = `WorkflowId = 'wid' and StartTime > "2018-06-07T15:04:05+00:00"`
queryParams, err = s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
queryParams, err = s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.NoError(err)
s.Equal(`{"bool":{"filter":[{"term":{"NamespaceId":"bfd5c907-f899-4baf-a7b2-2ab85e623ebd"}},{"bool":{"filter":[{"term":{"WorkflowId":"wid"}},{"range":{"StartTime":{"from":"2018-06-07T15:04:05+00:00","include_lower":false,"include_upper":true,"to":null}}}]}}],"must_not":{"exists":{"field":"TemporalNamespaceDivision"}}}}`, s.queryToJSON(queryParams.Query))
s.Nil(queryParams.Sorter)
query = `ExecutionTime < 1000000`
queryParams, err = s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
queryParams, err = s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.NoError(err)
s.Equal(`{"bool":{"filter":[{"term":{"NamespaceId":"bfd5c907-f899-4baf-a7b2-2ab85e623ebd"}},{"bool":{"filter":{"range":{"ExecutionTime":{"from":null,"include_lower":true,"include_upper":false,"to":"1970-01-01T00:00:00.001Z"}}}}}],"must_not":{"exists":{"field":"TemporalNamespaceDivision"}}}}`, s.queryToJSON(queryParams.Query))
s.Nil(queryParams.Sorter)
query = `ExecutionTime between 1 and 2`
queryParams, err = s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
queryParams, err = s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.NoError(err)
s.Equal(`{"bool":{"filter":[{"term":{"NamespaceId":"bfd5c907-f899-4baf-a7b2-2ab85e623ebd"}},{"bool":{"filter":{"range":{"ExecutionTime":{"from":"1970-01-01T00:00:00.000000001Z","include_lower":true,"include_upper":true,"to":"1970-01-01T00:00:00.000000002Z"}}}}}],"must_not":{"exists":{"field":"TemporalNamespaceDivision"}}}}`, s.queryToJSON(queryParams.Query))
s.Nil(queryParams.Sorter)
query = `ExecutionTime < 1000000 or ExecutionTime > 2000000`
queryParams, err = s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
queryParams, err = s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.NoError(err)
s.Equal(`{"bool":{"filter":[{"term":{"NamespaceId":"bfd5c907-f899-4baf-a7b2-2ab85e623ebd"}},{"bool":{"should":[{"range":{"ExecutionTime":{"from":null,"include_lower":true,"include_upper":false,"to":"1970-01-01T00:00:00.001Z"}}},{"range":{"ExecutionTime":{"from":"1970-01-01T00:00:00.002Z","include_lower":false,"include_upper":true,"to":null}}}]}}],"must_not":{"exists":{"field":"TemporalNamespaceDivision"}}}}`, s.queryToJSON(queryParams.Query))
s.Nil(queryParams.Sorter)
query = `order by ExecutionTime`
queryParams, err = s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
queryParams, err = s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.NoError(err)
s.Equal(`{"bool":{"filter":{"term":{"NamespaceId":"bfd5c907-f899-4baf-a7b2-2ab85e623ebd"}},"must_not":{"exists":{"field":"TemporalNamespaceDivision"}}}}`, s.queryToJSON(queryParams.Query))
s.Equal(`[{"ExecutionTime":{"order":"asc"}}]`, s.sorterToJSON(queryParams.Sorter))
query = `order by StartTime desc, CloseTime asc`
queryParams, err = s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
queryParams, err = s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.NoError(err)
s.Equal(`{"bool":{"filter":{"term":{"NamespaceId":"bfd5c907-f899-4baf-a7b2-2ab85e623ebd"}},"must_not":{"exists":{"field":"TemporalNamespaceDivision"}}}}`, s.queryToJSON(queryParams.Query))
s.Equal(`[{"StartTime":{"order":"desc"}},{"CloseTime":{"order":"asc"}}]`, s.sorterToJSON(queryParams.Sorter))
query = `order by CustomTextField desc`
_, err = s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
_, err = s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.Error(err)
s.IsType(&serviceerror.InvalidArgument{}, err)
s.Equal(err.(*serviceerror.InvalidArgument).Error(), "invalid query: unable to convert 'order by' column name: unable to sort by field of Text type, use field of type Keyword")
query = `order by CustomIntField asc`
queryParams, err = s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
queryParams, err = s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.NoError(err)
s.Equal(`{"bool":{"filter":{"term":{"NamespaceId":"bfd5c907-f899-4baf-a7b2-2ab85e623ebd"}},"must_not":{"exists":{"field":"TemporalNamespaceDivision"}}}}`, s.queryToJSON(queryParams.Query))
s.Equal(`[{"CustomIntField":{"order":"asc"}}]`, s.sorterToJSON(queryParams.Sorter))
query = `ExecutionTime < "unable to parse"`
queryParams, err = s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
queryParams, err = s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.Error(err)
s.IsType(&serviceerror.InvalidArgument{}, err)
s.Equal(err.Error(), "invalid query: unable to convert filter expression: unable to convert values of comparison expression: invalid value for search attribute ExecutionTime of type Datetime: \"unable to parse\"")
s.Nil(queryParams)
// invalid union injection
query = `WorkflowId = 'wid' union select * from dummy`
queryParams, err = s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
queryParams, err = s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.Error(err)
s.Nil(queryParams)
}
func (s *ESVisibilitySuite) Test_convertQuery_Mapper() {
func (s *ESVisibilitySuite) Test_convertQueryLegacy_Mapper() {
s.mockSearchAttributesMapperProvider.EXPECT().GetMapper(testNamespace).
Return(&searchattribute.TestMapper{}, nil).AnyTimes()
s.visibilityStore.searchAttributesMapperProvider = s.mockSearchAttributesMapperProvider
query := `WorkflowId = 'wid'`
queryParams, err := s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
queryParams, err := s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.NoError(err)
s.Equal(`{"bool":{"filter":[{"term":{"NamespaceId":"bfd5c907-f899-4baf-a7b2-2ab85e623ebd"}},{"bool":{"filter":{"term":{"WorkflowId":"wid"}}}}],"must_not":{"exists":{"field":"TemporalNamespaceDivision"}}}}`, s.queryToJSON(queryParams.Query))
s.Nil(queryParams.Sorter)
query = "`AliasForCustomKeywordField` = 'pid'"
queryParams, err = s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
queryParams, err = s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.NoError(err)
s.Equal(`{"bool":{"filter":[{"term":{"NamespaceId":"bfd5c907-f899-4baf-a7b2-2ab85e623ebd"}},{"bool":{"filter":{"term":{"CustomKeywordField":"pid"}}}}],"must_not":{"exists":{"field":"TemporalNamespaceDivision"}}}}`, s.queryToJSON(queryParams.Query))
s.Nil(queryParams.Sorter)
query = "`AliasWithHyphenFor-CustomKeywordField` = 'pid'"
queryParams, err = s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
queryParams, err = s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.NoError(err)
s.Equal(`{"bool":{"filter":[{"term":{"NamespaceId":"bfd5c907-f899-4baf-a7b2-2ab85e623ebd"}},{"bool":{"filter":{"term":{"CustomKeywordField":"pid"}}}}],"must_not":{"exists":{"field":"TemporalNamespaceDivision"}}}}`, s.queryToJSON(queryParams.Query))
s.Nil(queryParams.Sorter)
query = `CustomKeywordField = 'pid'`
queryParams, err = s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
queryParams, err = s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.NoError(err)
s.JSONEq(`{"bool":{"filter":[{"term":{"NamespaceId":"bfd5c907-f899-4baf-a7b2-2ab85e623ebd"}},{"bool":{"filter":{"term":{"CustomKeywordField":"pid"}}}}],"must_not":{"exists":{"field":"TemporalNamespaceDivision"}}}}`, s.queryToJSON(queryParams.Query))
s.Nil(queryParams.Sorter)
query = `AliasForUnknownField = 'pid'`
_, err = s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
_, err = s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.Error(err)
var invalidArgumentErr *serviceerror.InvalidArgument
s.ErrorAs(err, &invalidArgumentErr)
s.EqualError(err, "invalid query: unable to convert filter expression: unable to convert left side of \"AliasForUnknownField = 'pid'\": invalid search attribute: AliasForUnknownField")
query = `order by ExecutionTime`
queryParams, err = s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
queryParams, err = s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.NoError(err)
s.Equal(`{"bool":{"filter":{"term":{"NamespaceId":"bfd5c907-f899-4baf-a7b2-2ab85e623ebd"}},"must_not":{"exists":{"field":"TemporalNamespaceDivision"}}}}`, s.queryToJSON(queryParams.Query))
s.Equal(`[{"ExecutionTime":{"order":"asc"}}]`, s.sorterToJSON(queryParams.Sorter))
query = `order by AliasForCustomKeywordField asc`
queryParams, err = s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
queryParams, err = s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.NoError(err)
s.Equal(`{"bool":{"filter":{"term":{"NamespaceId":"bfd5c907-f899-4baf-a7b2-2ab85e623ebd"}},"must_not":{"exists":{"field":"TemporalNamespaceDivision"}}}}`, s.queryToJSON(queryParams.Query))
s.Equal(`[{"CustomKeywordField":{"order":"asc"}}]`, s.sorterToJSON(queryParams.Sorter))
query = `order by CustomKeywordField asc`
queryParams, err = s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
queryParams, err = s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.NoError(err)
s.JSONEq(`{"bool":{"filter":{"term":{"NamespaceId":"bfd5c907-f899-4baf-a7b2-2ab85e623ebd"}},"must_not":{"exists":{"field":"TemporalNamespaceDivision"}}}}`, s.queryToJSON(queryParams.Query))
s.NotNil(queryParams.Sorter)
query = `order by AliasForUnknownField asc`
_, err = s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
_, err = s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.Error(err)
s.ErrorAs(err, &invalidArgumentErr)
s.EqualError(err, "invalid query: unable to convert 'order by' column name: invalid search attribute: AliasForUnknownField")
s.visibilityStore.searchAttributesMapperProvider = nil
}
func (s *ESVisibilitySuite) Test_convertQuery_Mapper_Error() {
func (s *ESVisibilitySuite) Test_convertQueryLegacy_Mapper_Error() {
s.mockSearchAttributesMapperProvider.EXPECT().GetMapper(testNamespace).
Return(&searchattribute.TestMapper{}, nil).AnyTimes()
s.visibilityStore.searchAttributesMapperProvider = s.mockSearchAttributesMapperProvider
query := `WorkflowId = 'wid'`
queryParams, err := s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
queryParams, err := s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.NoError(err)
s.Equal(`{"bool":{"filter":[{"term":{"NamespaceId":"bfd5c907-f899-4baf-a7b2-2ab85e623ebd"}},{"bool":{"filter":{"term":{"WorkflowId":"wid"}}}}],"must_not":{"exists":{"field":"TemporalNamespaceDivision"}}}}`, s.queryToJSON(queryParams.Query))
s.Nil(queryParams.Sorter)
query = `ProductId = 'pid'`
_, err = s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
_, err = s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.Error(err)
var invalidArgumentErr *serviceerror.InvalidArgument
s.ErrorAs(err, &invalidArgumentErr)
s.EqualError(err, "invalid query: unable to convert filter expression: unable to convert left side of \"ProductId = 'pid'\": invalid search attribute: ProductId")
query = `order by ExecutionTime`
queryParams, err = s.visibilityStore.convertQuery(testNamespace, testNamespaceID, query)
queryParams, err = s.visibilityStore.convertQueryLegacy(testNamespace, testNamespaceID, query)
s.NoError(err)
s.Equal(`{"bool":{"filter":{"term":{"NamespaceId":"bfd5c907-f899-4baf-a7b2-2ab85e623ebd"}},"must_not":{"exists":{"field":"TemporalNamespaceDivision"}}}}`, s.queryToJSON(queryParams.Query))
s.Equal(`[{"ExecutionTime":{"order":"asc"}}]`, s.sorterToJSON(queryParams.Sorter))
@@ -1182,7 +1183,7 @@ func (s *ESVisibilitySuite) TestCountGroupByWorkflowExecutions() {
for _, tc := range testCases {
s.T().Run(tc.name, func(t *testing.T) {
searchParams := &query.QueryParams{
searchParams := &query.QueryParamsLegacy{
Query: elastic.NewBoolQuery().
Filter(elastic.NewTermQuery(searchattribute.NamespaceID, testNamespaceID.String())).
MustNot(namespaceDivisionExists),
@@ -18,7 +18,7 @@ type (
Convert(expr sqlparser.Expr) (elastic.Query, error)
}
Converter struct {
ConverterLegacy struct {
fnInterceptor FieldNameInterceptor
whereConverter ExprConverter
}
@@ -58,18 +58,18 @@ type (
notSupportedExprConverter struct{}
QueryParams struct {
QueryParamsLegacy struct {
Query elastic.Query
Sorter []elastic.Sorter
GroupBy []string
}
)
func NewConverter(fnInterceptor FieldNameInterceptor, whereConverter ExprConverter) *Converter {
func NewConverterLegacy(fnInterceptor FieldNameInterceptor, whereConverter ExprConverter) *ConverterLegacy {
if fnInterceptor == nil {
fnInterceptor = &NopFieldNameInterceptor{}
}
return &Converter{
return &ConverterLegacy{
fnInterceptor: fnInterceptor,
whereConverter: whereConverter,
}
@@ -172,7 +172,7 @@ func NewNotSupportedExprConverter() ExprConverter {
// ConvertWhereOrderBy transforms WHERE SQL statement to Elasticsearch query.
// It also supports ORDER BY clause.
func (c *Converter) ConvertWhereOrderBy(whereOrderBy string) (*QueryParams, error) {
func (c *ConverterLegacy) ConvertWhereOrderBy(whereOrderBy string) (*QueryParamsLegacy, error) {
whereOrderBy = strings.TrimSpace(whereOrderBy)
if whereOrderBy != "" &&
@@ -186,7 +186,9 @@ func (c *Converter) ConvertWhereOrderBy(whereOrderBy string) (*QueryParams, erro
}
// ConvertSql transforms SQL to Elasticsearch query.
func (c *Converter) ConvertSql(sql string) (*QueryParams, error) {
//
//nolint:staticcheck
func (c *ConverterLegacy) ConvertSql(sql string) (*QueryParamsLegacy, error) {
stmt, err := sqlparser.Parse(sql)
if err != nil {
return nil, NewConverterError("%s: %v", MalformedSqlQueryErrMessage, err)
@@ -200,12 +202,12 @@ func (c *Converter) ConvertSql(sql string) (*QueryParams, error) {
return c.convertSelect(selectStmt)
}
func (c *Converter) convertSelect(sel *sqlparser.Select) (*QueryParams, error) {
func (c *ConverterLegacy) convertSelect(sel *sqlparser.Select) (*QueryParamsLegacy, error) {
if sel.Limit != nil {
return nil, NewConverterError("%s: 'limit' clause", NotSupportedErrMessage)
}
queryParams := &QueryParams{}
queryParams := &QueryParamsLegacy{}
if sel.Where != nil {
query, err := c.whereConverter.Convert(sel.Where.Expr)
if err != nil {
@@ -455,6 +457,7 @@ func (c *comparisonExprConverter) Convert(expr sqlparser.Expr) (elastic.Query, e
}
var query elastic.Query
//nolint:revive // missing default case
switch comparisonExpr.Operator {
case sqlparser.GreaterEqualStr:
query = elastic.NewRangeQuery(colName).Gte(colValues[0])
@@ -50,6 +50,7 @@ func TestNameInterceptor(t *testing.T) {
queryParams, err := c.ConvertWhereOrderBy("ExecutionStatus='Running' order by StartTime")
assert.NoError(t, err)
actualQueryMap, _ := queryParams.Query.Source()
//nolint:staticcheck
actualQueryJson, _ := json.Marshal(actualQueryMap)
assert.Equal(t, `{"bool":{"filter":{"term":{"ExecutionStatus1":"Running"}}}}`, string(actualQueryJson))
var actualSorterMaps []interface{}
@@ -57,6 +58,7 @@ func TestNameInterceptor(t *testing.T) {
actualSorterMap, _ := sorter.Source()
actualSorterMaps = append(actualSorterMaps, actualSorterMap)
}
//nolint:staticcheck
actualSorterJson, _ := json.Marshal(actualSorterMaps)
assert.Equal(t, `[{"StartTime1":{"order":"asc"}}]`, string(actualSorterJson))
@@ -70,6 +72,7 @@ func TestValuesInterceptor(t *testing.T) {
queryParams, err := c.ConvertWhereOrderBy("ExecutionStatus=1")
assert.NoError(t, err)
actualQueryMap, _ := queryParams.Query.Source()
//nolint:staticcheck
actualQueryJson, _ := json.Marshal(actualQueryMap)
assert.Equal(t, `{"bool":{"filter":{"term":{"ExecutionStatus":"Status1"}}}}`, string(actualQueryJson))
@@ -90,7 +93,7 @@ func TestValuesInterceptor(t *testing.T) {
assert.Contains(t, err.Error(), "interceptor error")
}
func getTestConverter(fnInterceptor FieldNameInterceptor, fvInterceptor FieldValuesInterceptor) *Converter {
func getTestConverter(fnInterceptor FieldNameInterceptor, fvInterceptor FieldValuesInterceptor) *ConverterLegacy {
testNameTypeMap := searchattribute.NewNameTypeMapStub(
map[string]enumspb.IndexedValueType{
"ExecutionStatus1": enumspb.INDEXED_VALUE_TYPE_KEYWORD,
@@ -103,5 +106,5 @@ func getTestConverter(fnInterceptor FieldNameInterceptor, fvInterceptor FieldVal
NewRangeCondConverter(fnInterceptor, fvInterceptor, false),
NewComparisonExprConverter(fnInterceptor, fvInterceptor, map[string]struct{}{sqlparser.EqualStr: {}, sqlparser.InStr: {}}, testNameTypeMap),
nil)
return NewConverter(fnInterceptor, whereConverter)
return NewConverterLegacy(fnInterceptor, whereConverter)
}
@@ -6,23 +6,23 @@ import (
)
type (
pageToken struct {
pageTokenLegacy struct {
CloseTime time.Time
StartTime time.Time
RunID string
}
)
func deserializePageToken(data []byte) (*pageToken, error) {
func deserializePageTokenLegacy(data []byte) (*pageTokenLegacy, error) {
if len(data) == 0 {
return nil, nil
}
var token *pageToken
var token *pageTokenLegacy
err := json.Unmarshal(data, &token)
return token, err
}
func serializePageToken(token *pageToken) ([]byte, error) {
func serializePageTokenLegacy(token *pageTokenLegacy) ([]byte, error) {
data, err := json.Marshal(token)
return data, err
}
@@ -10,12 +10,12 @@ import (
func TestSerializePageToken(t *testing.T) {
s := assert.New(t)
token := pageToken{
token := pageTokenLegacy{
CloseTime: time.Date(2023, 3, 21, 14, 20, 32, 0, time.UTC),
StartTime: time.Date(2023, 3, 21, 14, 10, 32, 0, time.UTC),
RunID: "test-run-id",
}
data, err := serializePageToken(&token)
data, err := serializePageTokenLegacy(&token)
s.NoError(err)
s.Equal(
[]byte(`{"CloseTime":"2023-03-21T14:20:32Z","StartTime":"2023-03-21T14:10:32Z","RunID":"test-run-id"}`),
@@ -26,21 +26,21 @@ func TestSerializePageToken(t *testing.T) {
func TestDeserializePageToken(t *testing.T) {
s := assert.New(t)
token, err := deserializePageToken(nil)
token, err := deserializePageTokenLegacy(nil)
s.NoError(err)
s.Nil(token)
token, err = deserializePageToken([]byte{})
token, err = deserializePageTokenLegacy([]byte{})
s.NoError(err)
s.Nil(token)
token, err = deserializePageToken(
token, err = deserializePageTokenLegacy(
[]byte(`{"CloseTime":"2023-03-21T14:20:32Z","StartTime":"2023-03-21T14:10:32Z","RunID":"test-run-id"}`),
)
s.NoError(err)
s.NotNil(token)
s.Equal(
pageToken{
pageTokenLegacy{
CloseTime: time.Date(2023, 3, 21, 14, 20, 32, 0, time.UTC),
StartTime: time.Date(2023, 3, 21, 14, 10, 32, 0, time.UTC),
RunID: "test-run-id",
@@ -18,7 +18,7 @@ import (
)
type (
pluginQueryConverter interface {
pluginQueryConverterLegacy interface {
convertKeywordListComparisonExpr(expr *sqlparser.ComparisonExpr) (sqlparser.Expr, error)
convertTextComparisonExpr(expr *sqlparser.ComparisonExpr) (sqlparser.Expr, error)
@@ -27,7 +27,7 @@ type (
namespaceID namespace.ID,
queryString string,
pageSize int,
token *pageToken,
token *pageTokenLegacy,
) (string, []any)
buildCountStmt(namespaceID namespace.ID, queryString string, groupBy []string) (string, []any)
@@ -37,8 +37,8 @@ type (
getCoalesceCloseTimeExpr() sqlparser.Expr
}
QueryConverter struct {
pluginQueryConverter
QueryConverterLegacy struct {
pluginQueryConverterLegacy
namespaceName namespace.Name
namespaceID namespace.ID
saTypeMap searchattribute.NameTypeMap
@@ -48,7 +48,7 @@ type (
seenNamespaceDivision bool
}
queryParams struct {
queryParamsLegacy struct {
queryString string
// List of search attributes to group by (field name, not db name).
groupBy []string
@@ -112,30 +112,30 @@ var (
)
func newQueryConverterInternal(
pqc pluginQueryConverter,
pqc pluginQueryConverterLegacy,
namespaceName namespace.Name,
namespaceID namespace.ID,
saTypeMap searchattribute.NameTypeMap,
saMapper searchattribute.Mapper,
queryString string,
) *QueryConverter {
return &QueryConverter{
pluginQueryConverter: pqc,
namespaceName: namespaceName,
namespaceID: namespaceID,
saTypeMap: saTypeMap,
saMapper: saMapper,
queryString: queryString,
) *QueryConverterLegacy {
return &QueryConverterLegacy{
pluginQueryConverterLegacy: pqc,
namespaceName: namespaceName,
namespaceID: namespaceID,
saTypeMap: saTypeMap,
saMapper: saMapper,
queryString: queryString,
seenNamespaceDivision: false,
}
}
func (c *QueryConverter) BuildSelectStmt(
func (c *QueryConverterLegacy) BuildSelectStmt(
pageSize int,
nextPageToken []byte,
) (*sqlplugin.VisibilitySelectFilter, error) {
token, err := deserializePageToken(nextPageToken)
token, err := deserializePageTokenLegacy(nextPageToken)
if err != nil {
return nil, err
}
@@ -155,11 +155,12 @@ func (c *QueryConverter) BuildSelectStmt(
return &sqlplugin.VisibilitySelectFilter{Query: queryString, QueryArgs: queryArgs}, nil
}
func (c *QueryConverter) BuildCountStmt() (*sqlplugin.VisibilitySelectFilter, error) {
func (c *QueryConverterLegacy) BuildCountStmt() (*sqlplugin.VisibilitySelectFilter, error) {
qp, err := c.convertWhereString(c.queryString)
if err != nil {
return nil, err
}
//nolint:staticcheck
groupByDbNames := make([]string, len(qp.groupBy))
for i, fieldName := range qp.groupBy {
groupByDbNames[i] = searchattribute.GetSqlDbColName(fieldName)
@@ -172,7 +173,7 @@ func (c *QueryConverter) BuildCountStmt() (*sqlplugin.VisibilitySelectFilter, er
}, nil
}
func (c *QueryConverter) convertWhereString(queryString string) (*queryParams, error) {
func (c *QueryConverterLegacy) convertWhereString(queryString string) (*queryParamsLegacy, error) {
where := strings.TrimSpace(queryString)
if where != "" &&
!strings.HasPrefix(strings.ToLower(where), "order by") &&
@@ -186,25 +187,27 @@ func (c *QueryConverter) convertWhereString(queryString string) (*queryParams, e
return nil, query.NewConverterError("%s: %v", query.MalformedSqlQueryErrMessage, err)
}
//nolint:revive
selectStmt, _ := stmt.(*sqlparser.Select)
err = c.convertSelectStmt(selectStmt)
if err != nil {
return nil, err
}
res := &queryParams{}
res := &queryParamsLegacy{}
if selectStmt.Where != nil {
res.queryString = sqlparser.String(selectStmt.Where.Expr)
}
for _, groupByExpr := range selectStmt.GroupBy {
// The parser already ensures the type is saColName.
//nolint:revive
colName := groupByExpr.(*saColName)
res.groupBy = append(res.groupBy, colName.fieldName)
}
return res, nil
}
func (c *QueryConverter) convertSelectStmt(sel *sqlparser.Select) error {
func (c *QueryConverterLegacy) convertSelectStmt(sel *sqlparser.Select) error {
if sel.OrderBy != nil {
return query.NewConverterError("%s: 'order by' clause", query.NotSupportedErrMessage)
}
@@ -281,7 +284,7 @@ func (c *QueryConverter) convertSelectStmt(sel *sqlparser.Select) error {
return nil
}
func (c *QueryConverter) convertWhereExpr(expr *sqlparser.Expr) error {
func (c *QueryConverterLegacy) convertWhereExpr(expr *sqlparser.Expr) error {
if expr == nil || *expr == nil {
return errors.New("cannot be nil")
}
@@ -310,7 +313,7 @@ func (c *QueryConverter) convertWhereExpr(expr *sqlparser.Expr) error {
}
}
func (c *QueryConverter) convertAndExpr(exprRef *sqlparser.Expr) error {
func (c *QueryConverterLegacy) convertAndExpr(exprRef *sqlparser.Expr) error {
expr, ok := (*exprRef).(*sqlparser.AndExpr)
if !ok {
return query.NewConverterError("`%s` is not an 'AND' expression", sqlparser.String(*exprRef))
@@ -322,7 +325,7 @@ func (c *QueryConverter) convertAndExpr(exprRef *sqlparser.Expr) error {
return c.convertWhereExpr(&expr.Right)
}
func (c *QueryConverter) convertOrExpr(exprRef *sqlparser.Expr) error {
func (c *QueryConverterLegacy) convertOrExpr(exprRef *sqlparser.Expr) error {
expr, ok := (*exprRef).(*sqlparser.OrExpr)
if !ok {
return query.NewConverterError("`%s` is not an 'OR' expression", sqlparser.String(*exprRef))
@@ -334,7 +337,7 @@ func (c *QueryConverter) convertOrExpr(exprRef *sqlparser.Expr) error {
return c.convertWhereExpr(&expr.Right)
}
func (c *QueryConverter) convertComparisonExpr(exprRef *sqlparser.Expr) error {
func (c *QueryConverterLegacy) convertComparisonExpr(exprRef *sqlparser.Expr) error {
expr, ok := (*exprRef).(*sqlparser.ComparisonExpr)
if !ok {
return query.NewConverterError(
@@ -362,6 +365,7 @@ func (c *QueryConverter) convertComparisonExpr(exprRef *sqlparser.Expr) error {
return err
}
//nolint:revive,exhaustive // missing default case
switch saColNameExpr.valueType {
case enumspb.INDEXED_VALUE_TYPE_KEYWORD_LIST:
newExpr, err := c.convertKeywordListComparisonExpr(expr)
@@ -377,6 +381,7 @@ func (c *QueryConverter) convertComparisonExpr(exprRef *sqlparser.Expr) error {
*exprRef = newExpr
}
//nolint:revive // missing default case
switch expr.Operator {
case sqlparser.StartsWithStr, sqlparser.NotStartsWithStr:
valueExpr, ok := expr.Right.(*unsafeSQLString)
@@ -400,7 +405,7 @@ func (c *QueryConverter) convertComparisonExpr(exprRef *sqlparser.Expr) error {
return nil
}
func (c *QueryConverter) convertRangeCond(exprRef *sqlparser.Expr) error {
func (c *QueryConverterLegacy) convertRangeCond(exprRef *sqlparser.Expr) error {
expr, ok := (*exprRef).(*sqlparser.RangeCond)
if !ok {
return query.NewConverterError(
@@ -431,7 +436,7 @@ func (c *QueryConverter) convertRangeCond(exprRef *sqlparser.Expr) error {
return nil
}
func (c *QueryConverter) convertColName(exprRef *sqlparser.Expr) (*saColName, error) {
func (c *QueryConverterLegacy) convertColName(exprRef *sqlparser.Expr) (*saColName, error) {
expr, ok := (*exprRef).(*sqlparser.ColName)
if !ok {
return nil, query.NewConverterError(
@@ -466,7 +471,7 @@ func (c *QueryConverter) convertColName(exprRef *sqlparser.Expr) (*saColName, er
return newExpr, nil
}
func (c *QueryConverter) convertValueExpr(
func (c *QueryConverterLegacy) convertValueExpr(
exprRef *sqlparser.Expr,
name string,
saFieldName string,
@@ -539,7 +544,7 @@ func (c *QueryConverter) convertValueExpr(
// For datetime, converts to UTC.
// For execution status, converts string to enum value.
// For execution duration, converts to nanoseconds.
func (c *QueryConverter) parseSQLVal(
func (c *QueryConverterLegacy) parseSQLVal(
expr *sqlparser.SQLVal,
saName string,
saType enumspb.IndexedValueType,
@@ -624,7 +629,7 @@ func (c *QueryConverter) parseSQLVal(
return value, nil
}
func (c *QueryConverter) convertIsExpr(exprRef *sqlparser.Expr) error {
func (c *QueryConverterLegacy) convertIsExpr(exprRef *sqlparser.Expr) error {
expr, ok := (*exprRef).(*sqlparser.IsExpr)
if !ok {
return query.NewConverterError("`%s` is not an 'IS' expression", sqlparser.String(*exprRef))
@@ -8,14 +8,14 @@ import (
"go.temporal.io/server/common/searchattribute"
)
func NewQueryConverter(
func NewQueryConverterLegacy(
pluginName string,
namespaceName namespace.Name,
namespaceID namespace.ID,
saTypeMap searchattribute.NameTypeMap,
saMapper searchattribute.Mapper,
queryString string,
) *QueryConverter {
) *QueryConverterLegacy {
switch pluginName {
case mysql.PluginName:
return newMySQLQueryConverter(namespaceName, namespaceID, saTypeMap, saMapper, queryString)
@@ -43,7 +43,7 @@ var _ sqlparser.Expr = (*castExpr)(nil)
var _ sqlparser.Expr = (*memberOfExpr)(nil)
var _ sqlparser.Expr = (*jsonOverlapsExpr)(nil)
var _ pluginQueryConverter = (*mysqlQueryConverter)(nil)
var _ pluginQueryConverterLegacy = (*mysqlQueryConverter)(nil)
func (node *castExpr) Format(buf *sqlparser.TrackedBuffer) {
buf.Myprintf("cast(%v as %v)", node.Value, node.Type)
@@ -63,7 +63,7 @@ func newMySQLQueryConverter(
saTypeMap searchattribute.NameTypeMap,
saMapper searchattribute.Mapper,
queryString string,
) *QueryConverter {
) *QueryConverterLegacy {
return newQueryConverterInternal(
&mysqlQueryConverter{},
namespaceName,
@@ -189,7 +189,7 @@ func (c *mysqlQueryConverter) buildSelectStmt(
namespaceID namespace.ID,
queryString string,
pageSize int,
token *pageToken,
token *pageTokenLegacy,
) (string, []any) {
var whereClauses []string
var queryArgs []any
@@ -32,7 +32,7 @@ var (
)
var _ sqlparser.Expr = (*pgCastExpr)(nil)
var _ pluginQueryConverter = (*pgQueryConverter)(nil)
var _ pluginQueryConverterLegacy = (*pgQueryConverter)(nil)
func (node *pgCastExpr) Format(buf *sqlparser.TrackedBuffer) {
buf.Myprintf("%v::%v", node.Value, node.Type)
@@ -44,7 +44,7 @@ func newPostgreSQLQueryConverter(
saTypeMap searchattribute.NameTypeMap,
saMapper searchattribute.Mapper,
queryString string,
) *QueryConverter {
) *QueryConverterLegacy {
return newQueryConverterInternal(
&pgQueryConverter{},
namespaceName,
@@ -196,7 +196,7 @@ func (c *pgQueryConverter) buildSelectStmt(
namespaceID namespace.ID,
queryString string,
pageSize int,
token *pageToken,
token *pageTokenLegacy,
) (string, []any) {
var whereClauses []string
var queryArgs []any
@@ -15,7 +15,7 @@ type (
sqliteQueryConverter struct{}
)
var _ pluginQueryConverter = (*sqliteQueryConverter)(nil)
var _ pluginQueryConverterLegacy = (*sqliteQueryConverter)(nil)
const (
keywordListTypeFtsTableName = "executions_visibility_fts_keyword_list"
@@ -28,7 +28,7 @@ func newSqliteQueryConverter(
saTypeMap searchattribute.NameTypeMap,
saMapper searchattribute.Mapper,
queryString string,
) *QueryConverter {
) *QueryConverterLegacy {
return newQueryConverterInternal(
&sqliteQueryConverter{},
namespaceName,
@@ -205,7 +205,7 @@ func (c *sqliteQueryConverter) buildSelectStmt(
namespaceID namespace.ID,
queryString string,
pageSize int,
token *pageToken,
token *pageTokenLegacy,
) (string, []any) {
var whereClauses []string
var queryArgs []any
@@ -22,8 +22,8 @@ type (
suite.Suite
*require.Assertions
pqc pluginQueryConverter
queryConverter *QueryConverter
pqc pluginQueryConverterLegacy
queryConverter *QueryConverterLegacy
}
testCase struct {
@@ -61,43 +61,43 @@ func (s *queryConverterSuite) TestConvertWhereString() {
{
name: "empty string",
input: "",
output: &queryParams{queryString: "TemporalNamespaceDivision is null"},
output: &queryParamsLegacy{queryString: "TemporalNamespaceDivision is null"},
err: nil,
},
{
name: "single condition int",
input: "AliasForInt01 = 1",
output: &queryParams{queryString: "(Int01 = 1) and TemporalNamespaceDivision is null"},
output: &queryParamsLegacy{queryString: "(Int01 = 1) and TemporalNamespaceDivision is null"},
err: nil,
},
{
name: "single condition keyword",
input: "AliasForKeyword01 = 1",
output: &queryParams{queryString: "(Keyword01 = 1) and TemporalNamespaceDivision is null"},
output: &queryParamsLegacy{queryString: "(Keyword01 = 1) and TemporalNamespaceDivision is null"},
err: nil,
},
{
name: "or condition keyword",
input: "AliasForInt01 = 1 OR AliasForKeyword01 = 1",
output: &queryParams{queryString: "(Int01 = 1 or Keyword01 = 1) and TemporalNamespaceDivision is null"},
output: &queryParamsLegacy{queryString: "(Int01 = 1 or Keyword01 = 1) and TemporalNamespaceDivision is null"},
err: nil,
},
{
name: "no double parenthesis",
input: "(AliasForInt01 = 1 OR AliasForKeyword01 = 1)",
output: &queryParams{queryString: "(Int01 = 1 or Keyword01 = 1) and TemporalNamespaceDivision is null"},
output: &queryParamsLegacy{queryString: "(Int01 = 1 or Keyword01 = 1) and TemporalNamespaceDivision is null"},
err: nil,
},
{
name: "has namespace division",
input: "(AliasForInt01 = 1 OR AliasForKeyword01 = 1) AND TemporalNamespaceDivision = 'foo'",
output: &queryParams{queryString: "((Int01 = 1 or Keyword01 = 1) and TemporalNamespaceDivision = 'foo')"},
output: &queryParamsLegacy{queryString: "((Int01 = 1 or Keyword01 = 1) and TemporalNamespaceDivision = 'foo')"},
err: nil,
},
{
name: "group by one field",
input: "GROUP BY ExecutionStatus",
output: &queryParams{
output: &queryParamsLegacy{
queryString: "TemporalNamespaceDivision is null",
groupBy: []string{searchattribute.ExecutionStatus},
},
@@ -853,7 +853,7 @@ func (s *queryConverterSuite) TestParseSQLVal() {
"saName": "AliasForDatetime01",
"saType": enumspb.INDEXED_VALUE_TYPE_DATETIME,
},
retValue: fmt.Sprintf("%s", dt.Format(s.queryConverter.getDatetimeFormat())),
retValue: dt.Format(s.queryConverter.getDatetimeFormat()),
err: nil,
},
{
@@ -171,7 +171,7 @@ func (s *VisibilityStore) ListWorkflowExecutions(
return nil, err
}
converter := NewQueryConverter(
converter := NewQueryConverterLegacy(
s.GetName(),
request.Namespace,
request.NamespaceID,
@@ -213,7 +213,7 @@ func (s *VisibilityStore) ListWorkflowExecutions(
if lastRow.CloseTime != nil {
closeTime = *lastRow.CloseTime
}
nextPageToken, err = serializePageToken(&pageToken{
nextPageToken, err = serializePageTokenLegacy(&pageTokenLegacy{
CloseTime: closeTime,
StartTime: lastRow.StartTime,
RunID: lastRow.RunID,
@@ -242,7 +242,7 @@ func (s *VisibilityStore) CountWorkflowExecutions(
return nil, err
}
converter := NewQueryConverter(
converter := NewQueryConverterLegacy(
s.GetName(),
request.Namespace,
request.NamespaceID,
+1 -1
View File
@@ -64,7 +64,7 @@ func getQueryFields(
queryString string,
) ([]string, error) {
fnInterceptor := newFieldNameAggInterceptor(namespaceName, saNameType, saMapperProvider)
queryConverter := elasticsearch.NewQueryConverter(fnInterceptor, nil, saNameType)
queryConverter := elasticsearch.NewQueryConverterLegacy(fnInterceptor, nil, saNameType)
_, err := queryConverter.ConvertWhereOrderBy(queryString)
if err != nil {
var converterErr *query.ConverterError