From 3f15fa2a8232f45a3eddb4dede2398cca1180ce8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Toma=C5=BE=20Jerman?= Date: Tue, 30 Aug 2022 11:38:34 +0200 Subject: [PATCH] Fix pkg/dal tests --- pkg/dal/def_aggregate.go | 8 ++-- pkg/dal/def_datasource.go | 8 ++-- pkg/dal/def_join.go | 7 +++ pkg/dal/def_link.go | 18 +++++-- pkg/dal/exec_aggregate_bench_test.go | 4 +- pkg/dal/exec_aggregate_test.go | 16 ++++--- pkg/dal/exec_join_left_bench_test.go | 5 +- pkg/dal/exec_join_left_test.go | 16 ++++--- pkg/dal/exec_link_left_bench_test.go | 5 +- pkg/dal/exec_link_left_test.go | 72 ++++++++++++++++------------ 10 files changed, 102 insertions(+), 57 deletions(-) diff --git a/pkg/dal/def_aggregate.go b/pkg/dal/def_aggregate.go index f1d3ca19c..da7b98438 100644 --- a/pkg/dal/def_aggregate.go +++ b/pkg/dal/def_aggregate.go @@ -80,9 +80,11 @@ func (def *Aggregate) init(ctx context.Context) (err error) { return } - def.filter, err = toInternalFilter(def.Filter) - if err != nil { - return + if def.Filter != nil { + def.filter, err = toInternalFilter(def.Filter) + if err != nil { + return + } } if len(def.SourceAttributes) == 0 { diff --git a/pkg/dal/def_datasource.go b/pkg/dal/def_datasource.go index 177da3192..334fa8efd 100644 --- a/pkg/dal/def_datasource.go +++ b/pkg/dal/def_datasource.go @@ -65,9 +65,11 @@ func (def *Datasource) init(ctx context.Context, s iterProvider) (err error) { return } - def.filter, err = toInternalFilter(def.Filter) - if err != nil { - return + if def.Filter != nil { + def.filter, err = toInternalFilter(def.Filter) + if err != nil { + return + } } iter, model, err := s(ctx, def.ModelRef, def.filter) diff --git a/pkg/dal/def_join.go b/pkg/dal/def_join.go index b385dc760..5b1dcd319 100644 --- a/pkg/dal/def_join.go +++ b/pkg/dal/def_join.go @@ -100,6 +100,13 @@ func (def *Join) init(ctx context.Context) (err error) { def.OutAttributes = append(def.LeftAttributes, def.RightAttributes...) } + if def.Filter != nil { + def.filter, err = toInternalFilter(def.Filter) + if err != nil { + return + } + } + return nil } diff --git a/pkg/dal/def_link.go b/pkg/dal/def_link.go index 00baa2a92..5e505cd87 100644 --- a/pkg/dal/def_link.go +++ b/pkg/dal/def_link.go @@ -3,6 +3,8 @@ package dal import ( "context" "fmt" + + "github.com/cortezaproject/corteza-server/pkg/filter" ) type ( @@ -17,8 +19,10 @@ type ( RelRight string // @todo allow multiple link predicates; for now (for easier indexing) // only allow one (this is the same as we had before) - On LinkPredicate - Filter internalFilter + On LinkPredicate + // @todo consider splitting filter into left and right filter + filter internalFilter + Filter filter.Filter OutLeftAttributes []AttributeMapping OutRightAttributes []AttributeMapping @@ -104,6 +108,14 @@ func (def *Link) init(ctx context.Context) (err error) { if len(def.OutRightAttributes) == 0 { def.OutRightAttributes = def.RightAttributes } + + if def.Filter != nil { + def.filter, err = toInternalFilter(def.Filter) + if err != nil { + return + } + } + err = def.validate() if err != nil { return @@ -116,7 +128,7 @@ func (def *Link) exec(ctx context.Context, left, right Iterator) (_ Iterator, er // @todo adjust the used exec based on other strategies when added exec := &linkLeft{ def: *def, - filter: def.Filter, + filter: def.filter, leftSource: left, rightSource: right, } diff --git a/pkg/dal/exec_aggregate_bench_test.go b/pkg/dal/exec_aggregate_bench_test.go index 12edd469d..14acea215 100644 --- a/pkg/dal/exec_aggregate_bench_test.go +++ b/pkg/dal/exec_aggregate_bench_test.go @@ -38,7 +38,9 @@ func benchmarkExecAggregate(b *testing.B, n int) { } b.StartTimer() - _, err := def.Initialize(ctx, buff) + err := def.init(ctx) + require.NoError(b, err) + _, err = def.exec(ctx, buff) require.NoError(b, err) b.StopTimer() diff --git a/pkg/dal/exec_aggregate_test.go b/pkg/dal/exec_aggregate_test.go index 309b8cb23..1951fced8 100644 --- a/pkg/dal/exec_aggregate_test.go +++ b/pkg/dal/exec_aggregate_test.go @@ -458,9 +458,11 @@ func TestStepAggregate(t *testing.T) { sa.SourceAttributes = saToMapping(tc.sourceAttributes...) sa.Group = saToMapping(tc.group...) sa.OutAttributes = saToMapping(tc.outAttributes...) - sa.Filter = tc.f + sa.filter = tc.f - aa, err := sa.Initialize(ctx, b) + err := sa.init(ctx) + require.NoError(t, err) + aa, err := sa.exec(ctx, b) require.NoError(t, err) i := 0 @@ -509,7 +511,7 @@ func TestStepAggregate_cursorCollect_forward(t *testing.T) { t.Run(c.name, func(t *testing.T) { def := Aggregate{ - Filter: internalFilter{ + filter: internalFilter{ orderBy: c.ss, }, Group: saToMapping(c.group...), @@ -557,7 +559,7 @@ func TestStepAggregate_cursorCollect_back(t *testing.T) { t.Run(c.name, func(t *testing.T) { def := Aggregate{ - Filter: internalFilter{ + filter: internalFilter{ orderBy: c.ss, }, Group: saToMapping(c.group...), @@ -643,10 +645,12 @@ func TestStepAggregate_more(t *testing.T) { d.OutAttributes = saToMapping(tc.outAttributes...) d.SourceAttributes = saToMapping(tc.sourceAttributes...) for _, k := range tc.group { - d.Filter.orderBy = append(d.Filter.orderBy, &filter.SortExpr{Column: k.ident}) + d.filter.orderBy = append(d.filter.orderBy, &filter.SortExpr{Column: k.ident}) } - aa, err := d.Initialize(ctx, buff) + err := d.init(ctx) + require.NoError(t, err) + aa, err := d.exec(ctx, buff) require.NoError(t, err) require.True(t, aa.Next(ctx)) diff --git a/pkg/dal/exec_join_left_bench_test.go b/pkg/dal/exec_join_left_bench_test.go index 0f45d8a15..7c54a0f51 100644 --- a/pkg/dal/exec_join_left_bench_test.go +++ b/pkg/dal/exec_join_left_bench_test.go @@ -49,11 +49,12 @@ func benchmarkExecJoin_local(b *testing.B, n int) { OutAttributes: saToMapping(attrs...), LeftAttributes: saToMapping(la...), RightAttributes: saToMapping(fa...), - Filter: internalFilter{orderBy: filter.SortExprSet{{Column: "f_k"}}}, + filter: internalFilter{orderBy: filter.SortExprSet{{Column: "f_k"}}}, On: JoinPredicate{Left: "l_k", Right: "f_ref"}, } - def.Initialize(ctx, l, f) + def.init(ctx) + def.exec(ctx, l, f) l.Seek(ctx, 0) f.Seek(ctx, 0) diff --git a/pkg/dal/exec_join_left_test.go b/pkg/dal/exec_join_left_test.go index f4c6ed09a..200e81493 100644 --- a/pkg/dal/exec_join_left_test.go +++ b/pkg/dal/exec_join_left_test.go @@ -427,12 +427,14 @@ func TestStepJoinLocal(t *testing.T) { OutAttributes: saToMapping(tc.outAttributes...), LeftAttributes: saToMapping(tc.leftAttributes...), RightAttributes: saToMapping(tc.rightAttributes...), - Filter: tc.f, + filter: tc.f, plan: joinPlan{}, } - xs, err := def.Initialize(ctx, l, f) + err := def.init(ctx) + require.NoError(t, err) + xs, err := def.exec(ctx, l, f) require.NoError(t, err) i := 0 @@ -480,7 +482,7 @@ func TestStepJoinLocal_cursorCollect_forward(t *testing.T) { jj := &joinLeft{ def: Join{ - Filter: internalFilter{ + filter: internalFilter{ orderBy: c.ss, }, OutAttributes: saToMapping(c.attrs...), @@ -525,7 +527,7 @@ func TestStepJoinLocal_cursorCollect_back(t *testing.T) { jj := &joinLeft{ def: Join{ - Filter: internalFilter{ + filter: internalFilter{ orderBy: c.ss, }, OutAttributes: saToMapping(c.attrs...), @@ -622,10 +624,12 @@ func TestStepJoinLocal_more(t *testing.T) { OutAttributes: saToMapping(tc.attributes...), LeftAttributes: saToMapping(tc.localAttributes...), RightAttributes: saToMapping(tc.foreignAttributes...), - Filter: tc.f, + filter: tc.f, } - xs, err := def.Initialize(ctx, l, f) + err := def.init(ctx) + require.NoError(t, err) + xs, err := def.exec(ctx, l, f) require.NoError(t, err) require.True(t, xs.Next(ctx)) diff --git a/pkg/dal/exec_link_left_bench_test.go b/pkg/dal/exec_link_left_bench_test.go index bb3de15cf..9e9db44ca 100644 --- a/pkg/dal/exec_link_left_bench_test.go +++ b/pkg/dal/exec_link_left_bench_test.go @@ -52,11 +52,12 @@ func benchmarkExecLink_left(b *testing.B, n int) { OutRightAttributes: saToMapping(fattrs...), LeftAttributes: saToMapping(la...), RightAttributes: saToMapping(fa...), - Filter: internalFilter{orderBy: filter.SortExprSet{{Column: "f_k"}}}, + filter: internalFilter{orderBy: filter.SortExprSet{{Column: "f_k"}}}, On: LinkPredicate{Left: "l_k", Right: "f_ref"}, } - def.Initialize(ctx, l, f) + def.init(ctx) + def.exec(ctx, l, f) l.Seek(ctx, 0) f.Seek(ctx, 0) diff --git a/pkg/dal/exec_link_left_test.go b/pkg/dal/exec_link_left_test.go index 3c261491b..e550d1da2 100644 --- a/pkg/dal/exec_link_left_test.go +++ b/pkg/dal/exec_link_left_test.go @@ -69,9 +69,9 @@ func TestStepLinkleft(t *testing.T) { }, out: []simpleRow{ {"l_pk": 1, "l_val": "l1 v1"}, - {"f_pk": 1, "f_fk": 1, "f_val": "f1 v1"}, + {"$sys.ref": "right", "f_pk": 1, "f_fk": 1, "f_val": "f1 v1"}, {"l_pk": 2, "l_val": "l2 v1"}, - {"f_pk": 2, "f_fk": 2, "f_val": "f2 v1"}, + {"$sys.ref": "right", "f_pk": 2, "f_fk": 2, "f_val": "f2 v1"}, }, }, { @@ -94,12 +94,12 @@ func TestStepLinkleft(t *testing.T) { }, out: []simpleRow{ {"l_pk": 1, "l_val": "l1 v1"}, - {"f_pk": 1, "f_fk": 1, "f_val": "f1 v1"}, - {"f_pk": 2, "f_fk": 1, "f_val": "f2 v1"}, - {"f_pk": 3, "f_fk": 1, "f_val": "f3 v1"}, + {"$sys.ref": "right", "f_pk": 1, "f_fk": 1, "f_val": "f1 v1"}, + {"$sys.ref": "right", "f_pk": 2, "f_fk": 1, "f_val": "f2 v1"}, + {"$sys.ref": "right", "f_pk": 3, "f_fk": 1, "f_val": "f3 v1"}, {"l_pk": 2, "l_val": "l2 v1"}, - {"f_pk": 4, "f_fk": 2, "f_val": "f4 v1"}, + {"$sys.ref": "right", "f_pk": 4, "f_fk": 2, "f_val": "f4 v1"}, }, }, { @@ -121,7 +121,7 @@ func TestStepLinkleft(t *testing.T) { out: []simpleRow{ {"l_pk": 1, "l_val": "l1 v1"}, - {"f_pk": 1, "f_fk": 1, "f_val": "f1 v1"}, + {"$sys.ref": "right", "f_pk": 1, "f_fk": 1, "f_val": "f1 v1"}, }, }, { @@ -201,7 +201,7 @@ func TestStepLinkleft(t *testing.T) { out: []simpleRow{ {"l_pk": 1, "l_const": "c1", "l_val": "l1 v1"}, - {"f_pk": 1, "f_fk": 1, "f_val": "f1 v1"}, + {"$sys.ref": "right", "f_pk": 1, "f_fk": 1, "f_val": "f1 v1"}, }, f: internalFilter{ @@ -229,7 +229,7 @@ func TestStepLinkleft(t *testing.T) { out: []simpleRow{ {"l_pk": 1, "l_const": "c1", "l_val": "l1 v1"}, - {"f_pk": 1, "f_fk": 1, "f_val": "f1 v1"}, + {"$sys.ref": "right", "f_pk": 1, "f_fk": 1, "f_val": "f1 v1"}, }, f: internalFilter{ @@ -252,7 +252,7 @@ func TestStepLinkleft(t *testing.T) { }, fIn: []simpleRow{ {"f_pk": 1, "f_fk": 1, "f_val": "f1 v1"}, - {"f_pk": 2, "f_fk": 2, "f_val": "f2 v1"}, + {"$sys.ref": "right", "f_pk": 2, "f_fk": 2, "f_val": "f2 v1"}, }, out: []simpleRow{}, @@ -284,7 +284,7 @@ func TestStepLinkleft(t *testing.T) { out: []simpleRow{ {"l_pk": 1, "l_const_a": "cac1", "l_const_b": "cbc1", "l_val": "l1 v1"}, - {"f_pk": 1, "f_fk": 1, "f_val": "f1 v1"}, + {"$sys.ref": "right", "f_pk": 1, "f_fk": 1, "f_val": "f1 v1"}, }, f: internalFilter{ @@ -312,9 +312,9 @@ func TestStepLinkleft(t *testing.T) { out: []simpleRow{ {"l_pk": 1, "l_const_a": "cac1", "l_const_b": "cbc1", "l_val": "l1 v1"}, - {"f_pk": 1, "f_fk": 1, "f_val": "f1 v1"}, + {"$sys.ref": "right", "f_pk": 1, "f_fk": 1, "f_val": "f1 v1"}, {"l_pk": 2, "l_const_a": "cac1", "l_const_b": "cbc2", "l_val": "l2 v1"}, - {"f_pk": 2, "f_fk": 2, "f_val": "f2 v1"}, + {"$sys.ref": "right", "f_pk": 2, "f_fk": 2, "f_val": "f2 v1"}, }, f: internalFilter{ @@ -341,9 +341,9 @@ func TestStepLinkleft(t *testing.T) { out: []simpleRow{ {"l_pk": 1, "l_val": "l1 v1"}, - {"f_pk": 1, "f_fk": 1, "f_val": "f1 v1"}, + {"$sys.ref": "right", "f_pk": 1, "f_fk": 1, "f_val": "f1 v1"}, {"l_pk": 2, "l_val": "l2 v1"}, - {"f_pk": 2, "f_fk": 2, "f_val": "f2 v1"}, + {"$sys.ref": "right", "f_pk": 2, "f_fk": 2, "f_val": "f2 v1"}, }, f: internalFilter{ @@ -394,7 +394,7 @@ func TestStepLinkleft(t *testing.T) { out: []simpleRow{ {"l_pk": 2, "l_val": "l2 v1"}, - {"f_pk": 2, "f_fk": 2, "f_val": "f2 v1"}, + {"$sys.ref": "right", "f_pk": 2, "f_fk": 2, "f_val": "f2 v1"}, }, f: internalFilter{ @@ -421,7 +421,7 @@ func TestStepLinkleft(t *testing.T) { out: []simpleRow{ {"l_pk": 1, "l_val": "l1 v1"}, - {"f_pk": 1, "f_fk": 1, "f_val": "f1 v1"}, + {"$sys.ref": "right", "f_pk": 1, "f_fk": 1, "f_val": "f1 v1"}, }, f: internalFilter{ @@ -454,7 +454,7 @@ func TestStepLinkleft(t *testing.T) { }, out: []simpleRow{ {"l_pk": 2, "l_val": "l2 v1"}, - {"f_pk": 4, "f_fk": 2, "f_val": "f4 v1"}, + {"$sys.ref": "right", "f_pk": 4, "f_fk": 2, "f_val": "f4 v1"}, }, }, { @@ -482,7 +482,7 @@ func TestStepLinkleft(t *testing.T) { }, out: []simpleRow{ {"l_pk": 2, "l_val": "l2 v1"}, - {"f_pk": 4, "f_fk": 2, "f_val": "f4 v1"}, + {"$sys.ref": "right", "f_pk": 4, "f_fk": 2, "f_val": "f4 v1"}, }, }, { @@ -525,16 +525,21 @@ func TestStepLinkleft(t *testing.T) { } def := Link{ - Ident: "foo", + Ident: "foo", + RelLeft: "left", + RelRight: "right", + On: tc.linkPred, LeftAttributes: saToMapping(tc.leftAttributes...), RightAttributes: saToMapping(tc.rightAttributes...), OutLeftAttributes: saToMapping(tc.leftOutAttributes...), OutRightAttributes: saToMapping(tc.rightOutAttributes...), - Filter: tc.f, + filter: tc.f, } - xs, err := def.Initialize(ctx, l, f) + err := def.init(ctx) + require.NoError(t, err) + xs, err := def.exec(ctx, l, f) require.NoError(t, err) i := 0 @@ -599,7 +604,7 @@ func TestStepLinkleft_cursorCollect_forward(t *testing.T) { t.Run(c.name, func(t *testing.T) { xs := &linkLeft{ def: Link{ - Filter: internalFilter{ + filter: internalFilter{ orderBy: c.ss, }, LeftAttributes: saToMapping(c.leftAttrs...), @@ -665,7 +670,7 @@ func TestStepLinkleft_cursorCollect_back(t *testing.T) { t.Run(c.name, func(t *testing.T) { jj := &linkLeft{ def: Link{ - Filter: internalFilter{ + filter: internalFilter{ orderBy: c.ss, }, LeftAttributes: saToMapping(c.leftAttrs...), @@ -744,11 +749,11 @@ func TestStepLinkleft_more(t *testing.T) { out1: []simpleRow{ {"l_pk": 1, "l_val": "l1 v1"}, - {"f_pk": 1, "f_fk": 1, "f_val": "f1 v1"}, + {"$sys.ref": "right", "f_pk": 1, "f_fk": 1, "f_val": "f1 v1"}, }, out2: []simpleRow{ {"l_pk": 2, "l_val": "l2 v1"}, - {"f_pk": 4, "f_fk": 2, "f_val": "f4 v1"}, + {"$sys.ref": "right", "f_pk": 4, "f_fk": 2, "f_val": "f4 v1"}, }, }, } @@ -767,16 +772,21 @@ func TestStepLinkleft_more(t *testing.T) { } def := Link{ - Ident: "foo", + Ident: "foo", + RelLeft: "left", + RelRight: "right", + On: tc.linkPred, LeftAttributes: saToMapping(tc.leftAttrs...), RightAttributes: saToMapping(tc.rightAttrs...), OutLeftAttributes: saToMapping(tc.outleftAttrs...), OutRightAttributes: saToMapping(tc.outrightAttrs...), - Filter: tc.f, + filter: tc.f, } - xs, err := def.Initialize(ctx, l, f) + err := def.init(ctx) + require.NoError(t, err) + xs, err := def.exec(ctx, l, f) require.NoError(t, err) require.True(t, xs.Next(ctx)) @@ -810,8 +820,8 @@ func TestStepLinkleft_more(t *testing.T) { } } -func simpleToRow(in simpleRow) (out *row) { - out = &row{} +func simpleToRow(in simpleRow) (out *Row) { + out = &Row{} for k, v := range in { out.SetValue(k, 0, v) }