mirror of
https://github.com/hanzoai/tasks.git
synced 2026-10-30 14:56:19 +00:00
## What changed?
Unify Visibility query converters.
The new query converter is the struct `query.QueryConverter[ExprT]`. The
generic parameter specify the output type of the converter (in ES is
`elastic.Query`, in SQL is `sqlparser.Expr`).
The query converter has a `query.StoreQueryConverter[ExprT]`. This is
the Visibility store specific implementation for building the output
query.
For example, the store needs to implement `BuildAndExpr(exprs)` to tell
the query converter how to build the `AND` expression. In SQL, it's
`*sqlparser.AndExpr{exprs}`. In Elasticsearch, it's
`elastic.NewBoolQuery().Filter(exprs)`.
The store query converter for SQL needs a plugin query converter called
`sqlplugin.VisibilityQueryConverter` which is implemented by each plugin
(MySQL, PostgreSQL, SQLite). This interface is needed to build DB
specific syntax for `KeywordList` and `Text` searches as well as to
build the final `SELECT` statements.
Added dynamic config `system.VisibilityEnableUnifiedQueryConverter` that
acts as switch between the legacy and the unified query converters.
## Why?
There are two query converters: one for Elasticsearch, and another for
SQL.
They are somewhat similar, and have quite a few code duplications for
validation, modifying the query, etc.
Unifying the query converter ensures that we provide the exact same
behavior across different Visibility stores.
## How did you test it?
- [x] built
- [x] run locally and tested manually
- [x] covered by existing tests
- [x] added new unit test(s)
- [ ] added new functional test(s)
I've added a lot of unit tests for the new code with coverage close to
100%.
Note that there has been basically no changes to functional tests, which
suggests that the change works well.
## Potential risks
There might be some edge cases that either query converters that this
unified query converter might deal differently.
213 lines
8.6 KiB
Go
213 lines
8.6 KiB
Go
// Code generated by MockGen. DO NOT EDIT.
|
|
// Source: converter.go
|
|
//
|
|
// Generated by this command:
|
|
//
|
|
// mockgen -package query -source converter.go -destination converter_mock.go
|
|
//
|
|
|
|
// Package query is a generated GoMock package.
|
|
package query
|
|
|
|
import (
|
|
reflect "reflect"
|
|
|
|
gomock "go.uber.org/mock/gomock"
|
|
)
|
|
|
|
// MockStoreQueryConverter is a mock of StoreQueryConverter interface.
|
|
type MockStoreQueryConverter[ExprT any] struct {
|
|
ctrl *gomock.Controller
|
|
recorder *MockStoreQueryConverterMockRecorder[ExprT]
|
|
isgomock struct{}
|
|
}
|
|
|
|
// MockStoreQueryConverterMockRecorder is the mock recorder for MockStoreQueryConverter.
|
|
type MockStoreQueryConverterMockRecorder[ExprT any] struct {
|
|
mock *MockStoreQueryConverter[ExprT]
|
|
}
|
|
|
|
// NewMockStoreQueryConverter creates a new mock instance.
|
|
func NewMockStoreQueryConverter[ExprT any](ctrl *gomock.Controller) *MockStoreQueryConverter[ExprT] {
|
|
mock := &MockStoreQueryConverter[ExprT]{ctrl: ctrl}
|
|
mock.recorder = &MockStoreQueryConverterMockRecorder[ExprT]{mock}
|
|
return mock
|
|
}
|
|
|
|
// EXPECT returns an object that allows the caller to indicate expected use.
|
|
func (m *MockStoreQueryConverter[ExprT]) EXPECT() *MockStoreQueryConverterMockRecorder[ExprT] {
|
|
return m.recorder
|
|
}
|
|
|
|
// BuildAndExpr mocks base method.
|
|
func (m *MockStoreQueryConverter[ExprT]) BuildAndExpr(exprs ...ExprT) (ExprT, error) {
|
|
m.ctrl.T.Helper()
|
|
varargs := []any{}
|
|
for _, a := range exprs {
|
|
varargs = append(varargs, a)
|
|
}
|
|
ret := m.ctrl.Call(m, "BuildAndExpr", varargs...)
|
|
ret0, _ := ret[0].(ExprT)
|
|
ret1, _ := ret[1].(error)
|
|
return ret0, ret1
|
|
}
|
|
|
|
// BuildAndExpr indicates an expected call of BuildAndExpr.
|
|
func (mr *MockStoreQueryConverterMockRecorder[ExprT]) BuildAndExpr(exprs ...any) *gomock.Call {
|
|
mr.mock.ctrl.T.Helper()
|
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BuildAndExpr", reflect.TypeOf((*MockStoreQueryConverter[ExprT])(nil).BuildAndExpr), exprs...)
|
|
}
|
|
|
|
// BuildNotExpr mocks base method.
|
|
func (m *MockStoreQueryConverter[ExprT]) BuildNotExpr(expr ExprT) (ExprT, error) {
|
|
m.ctrl.T.Helper()
|
|
ret := m.ctrl.Call(m, "BuildNotExpr", expr)
|
|
ret0, _ := ret[0].(ExprT)
|
|
ret1, _ := ret[1].(error)
|
|
return ret0, ret1
|
|
}
|
|
|
|
// BuildNotExpr indicates an expected call of BuildNotExpr.
|
|
func (mr *MockStoreQueryConverterMockRecorder[ExprT]) BuildNotExpr(expr any) *gomock.Call {
|
|
mr.mock.ctrl.T.Helper()
|
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BuildNotExpr", reflect.TypeOf((*MockStoreQueryConverter[ExprT])(nil).BuildNotExpr), expr)
|
|
}
|
|
|
|
// BuildOrExpr mocks base method.
|
|
func (m *MockStoreQueryConverter[ExprT]) BuildOrExpr(exprs ...ExprT) (ExprT, error) {
|
|
m.ctrl.T.Helper()
|
|
varargs := []any{}
|
|
for _, a := range exprs {
|
|
varargs = append(varargs, a)
|
|
}
|
|
ret := m.ctrl.Call(m, "BuildOrExpr", varargs...)
|
|
ret0, _ := ret[0].(ExprT)
|
|
ret1, _ := ret[1].(error)
|
|
return ret0, ret1
|
|
}
|
|
|
|
// BuildOrExpr indicates an expected call of BuildOrExpr.
|
|
func (mr *MockStoreQueryConverterMockRecorder[ExprT]) BuildOrExpr(exprs ...any) *gomock.Call {
|
|
mr.mock.ctrl.T.Helper()
|
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BuildOrExpr", reflect.TypeOf((*MockStoreQueryConverter[ExprT])(nil).BuildOrExpr), exprs...)
|
|
}
|
|
|
|
// BuildParenExpr mocks base method.
|
|
func (m *MockStoreQueryConverter[ExprT]) BuildParenExpr(expr ExprT) (ExprT, error) {
|
|
m.ctrl.T.Helper()
|
|
ret := m.ctrl.Call(m, "BuildParenExpr", expr)
|
|
ret0, _ := ret[0].(ExprT)
|
|
ret1, _ := ret[1].(error)
|
|
return ret0, ret1
|
|
}
|
|
|
|
// BuildParenExpr indicates an expected call of BuildParenExpr.
|
|
func (mr *MockStoreQueryConverterMockRecorder[ExprT]) BuildParenExpr(expr any) *gomock.Call {
|
|
mr.mock.ctrl.T.Helper()
|
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "BuildParenExpr", reflect.TypeOf((*MockStoreQueryConverter[ExprT])(nil).BuildParenExpr), expr)
|
|
}
|
|
|
|
// ConvertComparisonExpr mocks base method.
|
|
func (m *MockStoreQueryConverter[ExprT]) ConvertComparisonExpr(operator string, col *SAColumn, value any) (ExprT, error) {
|
|
m.ctrl.T.Helper()
|
|
ret := m.ctrl.Call(m, "ConvertComparisonExpr", operator, col, value)
|
|
ret0, _ := ret[0].(ExprT)
|
|
ret1, _ := ret[1].(error)
|
|
return ret0, ret1
|
|
}
|
|
|
|
// ConvertComparisonExpr indicates an expected call of ConvertComparisonExpr.
|
|
func (mr *MockStoreQueryConverterMockRecorder[ExprT]) ConvertComparisonExpr(operator, col, value any) *gomock.Call {
|
|
mr.mock.ctrl.T.Helper()
|
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ConvertComparisonExpr", reflect.TypeOf((*MockStoreQueryConverter[ExprT])(nil).ConvertComparisonExpr), operator, col, value)
|
|
}
|
|
|
|
// ConvertIsExpr mocks base method.
|
|
func (m *MockStoreQueryConverter[ExprT]) ConvertIsExpr(operator string, col *SAColumn) (ExprT, error) {
|
|
m.ctrl.T.Helper()
|
|
ret := m.ctrl.Call(m, "ConvertIsExpr", operator, col)
|
|
ret0, _ := ret[0].(ExprT)
|
|
ret1, _ := ret[1].(error)
|
|
return ret0, ret1
|
|
}
|
|
|
|
// ConvertIsExpr indicates an expected call of ConvertIsExpr.
|
|
func (mr *MockStoreQueryConverterMockRecorder[ExprT]) ConvertIsExpr(operator, col any) *gomock.Call {
|
|
mr.mock.ctrl.T.Helper()
|
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ConvertIsExpr", reflect.TypeOf((*MockStoreQueryConverter[ExprT])(nil).ConvertIsExpr), operator, col)
|
|
}
|
|
|
|
// ConvertKeywordComparisonExpr mocks base method.
|
|
func (m *MockStoreQueryConverter[ExprT]) ConvertKeywordComparisonExpr(operator string, col *SAColumn, value any) (ExprT, error) {
|
|
m.ctrl.T.Helper()
|
|
ret := m.ctrl.Call(m, "ConvertKeywordComparisonExpr", operator, col, value)
|
|
ret0, _ := ret[0].(ExprT)
|
|
ret1, _ := ret[1].(error)
|
|
return ret0, ret1
|
|
}
|
|
|
|
// ConvertKeywordComparisonExpr indicates an expected call of ConvertKeywordComparisonExpr.
|
|
func (mr *MockStoreQueryConverterMockRecorder[ExprT]) ConvertKeywordComparisonExpr(operator, col, value any) *gomock.Call {
|
|
mr.mock.ctrl.T.Helper()
|
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ConvertKeywordComparisonExpr", reflect.TypeOf((*MockStoreQueryConverter[ExprT])(nil).ConvertKeywordComparisonExpr), operator, col, value)
|
|
}
|
|
|
|
// ConvertKeywordListComparisonExpr mocks base method.
|
|
func (m *MockStoreQueryConverter[ExprT]) ConvertKeywordListComparisonExpr(operator string, col *SAColumn, value any) (ExprT, error) {
|
|
m.ctrl.T.Helper()
|
|
ret := m.ctrl.Call(m, "ConvertKeywordListComparisonExpr", operator, col, value)
|
|
ret0, _ := ret[0].(ExprT)
|
|
ret1, _ := ret[1].(error)
|
|
return ret0, ret1
|
|
}
|
|
|
|
// ConvertKeywordListComparisonExpr indicates an expected call of ConvertKeywordListComparisonExpr.
|
|
func (mr *MockStoreQueryConverterMockRecorder[ExprT]) ConvertKeywordListComparisonExpr(operator, col, value any) *gomock.Call {
|
|
mr.mock.ctrl.T.Helper()
|
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ConvertKeywordListComparisonExpr", reflect.TypeOf((*MockStoreQueryConverter[ExprT])(nil).ConvertKeywordListComparisonExpr), operator, col, value)
|
|
}
|
|
|
|
// ConvertRangeExpr mocks base method.
|
|
func (m *MockStoreQueryConverter[ExprT]) ConvertRangeExpr(operator string, col *SAColumn, from, to any) (ExprT, error) {
|
|
m.ctrl.T.Helper()
|
|
ret := m.ctrl.Call(m, "ConvertRangeExpr", operator, col, from, to)
|
|
ret0, _ := ret[0].(ExprT)
|
|
ret1, _ := ret[1].(error)
|
|
return ret0, ret1
|
|
}
|
|
|
|
// ConvertRangeExpr indicates an expected call of ConvertRangeExpr.
|
|
func (mr *MockStoreQueryConverterMockRecorder[ExprT]) ConvertRangeExpr(operator, col, from, to any) *gomock.Call {
|
|
mr.mock.ctrl.T.Helper()
|
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ConvertRangeExpr", reflect.TypeOf((*MockStoreQueryConverter[ExprT])(nil).ConvertRangeExpr), operator, col, from, to)
|
|
}
|
|
|
|
// ConvertTextComparisonExpr mocks base method.
|
|
func (m *MockStoreQueryConverter[ExprT]) ConvertTextComparisonExpr(operator string, col *SAColumn, value any) (ExprT, error) {
|
|
m.ctrl.T.Helper()
|
|
ret := m.ctrl.Call(m, "ConvertTextComparisonExpr", operator, col, value)
|
|
ret0, _ := ret[0].(ExprT)
|
|
ret1, _ := ret[1].(error)
|
|
return ret0, ret1
|
|
}
|
|
|
|
// ConvertTextComparisonExpr indicates an expected call of ConvertTextComparisonExpr.
|
|
func (mr *MockStoreQueryConverterMockRecorder[ExprT]) ConvertTextComparisonExpr(operator, col, value any) *gomock.Call {
|
|
mr.mock.ctrl.T.Helper()
|
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "ConvertTextComparisonExpr", reflect.TypeOf((*MockStoreQueryConverter[ExprT])(nil).ConvertTextComparisonExpr), operator, col, value)
|
|
}
|
|
|
|
// GetDatetimeFormat mocks base method.
|
|
func (m *MockStoreQueryConverter[ExprT]) GetDatetimeFormat() string {
|
|
m.ctrl.T.Helper()
|
|
ret := m.ctrl.Call(m, "GetDatetimeFormat")
|
|
ret0, _ := ret[0].(string)
|
|
return ret0
|
|
}
|
|
|
|
// GetDatetimeFormat indicates an expected call of GetDatetimeFormat.
|
|
func (mr *MockStoreQueryConverterMockRecorder[ExprT]) GetDatetimeFormat() *gomock.Call {
|
|
mr.mock.ctrl.T.Helper()
|
|
return mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetDatetimeFormat", reflect.TypeOf((*MockStoreQueryConverter[ExprT])(nil).GetDatetimeFormat))
|
|
}
|