Simplify record value set assignment in expressions
Allow expressions like: rec.values = rec2 rec.values = rec2.values
This commit is contained in:
parent
7e81c6bd17
commit
fcd0a5b052
@ -210,6 +210,15 @@ func composeRecordValuesTypedValueSelector(res types.RecordValueSet, k string) (
|
||||
// assignToRecordValuesSet is field value setter for *types.Record
|
||||
func assignToComposeRecordValues(res *types.RecordValueSet, pp []string, val interface{}) (err error) {
|
||||
if len(pp) < 1 {
|
||||
switch val := expr.UntypedValue(val).(type) {
|
||||
case types.RecordValueSet:
|
||||
*res = val
|
||||
return
|
||||
case *types.Record:
|
||||
*res = val.Values
|
||||
return
|
||||
}
|
||||
|
||||
return fmt.Errorf("empty path used for assigning record values")
|
||||
}
|
||||
k := pp[0]
|
||||
|
||||
@ -129,7 +129,54 @@ func TestRecordFieldValuesAccess(t *testing.T) {
|
||||
eval, err = parser.Parse(`rec.values.m2[0] == "mVal2.0"`)
|
||||
req.NoError(err)
|
||||
req.True(eval.Test(context.Background(), scope))
|
||||
})
|
||||
}
|
||||
|
||||
func TestAssignToComposeRecordValues(t *testing.T) {
|
||||
t.Run("assign simple", func(t *testing.T) {
|
||||
var (
|
||||
req = require.New(t)
|
||||
target = types.RecordValueSet{}
|
||||
)
|
||||
|
||||
req.NoError(assignToComposeRecordValues(&target, []string{"a"}, "b"))
|
||||
req.Len(target, 1)
|
||||
req.True(target.Has("a", 0))
|
||||
req.NoError(assignToComposeRecordValues(&target, []string{"a", "1"}, "b"))
|
||||
req.Len(target, 2)
|
||||
req.True(target.Has("a", 0))
|
||||
req.True(target.Has("a", 1))
|
||||
})
|
||||
|
||||
t.Run("assign rvs", func(t *testing.T) {
|
||||
var (
|
||||
req = require.New(t)
|
||||
target = types.RecordValueSet{}
|
||||
)
|
||||
|
||||
req.NoError(assignToComposeRecordValues(&target, nil, types.RecordValueSet{{}}))
|
||||
req.Len(target, 1)
|
||||
})
|
||||
|
||||
t.Run("assign record", func(t *testing.T) {
|
||||
var (
|
||||
req = require.New(t)
|
||||
target = types.RecordValueSet{}
|
||||
)
|
||||
|
||||
req.NoError(assignToComposeRecordValues(&target, nil, &types.Record{Values: types.RecordValueSet{{}}}))
|
||||
req.Len(target, 1)
|
||||
})
|
||||
|
||||
t.Run("overwrite rvs", func(t *testing.T) {
|
||||
var (
|
||||
req = require.New(t)
|
||||
target = types.RecordValueSet{{Name: "a"}}
|
||||
)
|
||||
|
||||
req.NoError(assignToComposeRecordValues(&target, nil, types.RecordValueSet{{Name: "b"}}))
|
||||
req.Len(target, 1)
|
||||
req.False(target.Has("a", 0))
|
||||
req.True(target.Has("b", 0))
|
||||
})
|
||||
}
|
||||
|
||||
@ -4,7 +4,6 @@ import (
|
||||
"context"
|
||||
"errors"
|
||||
"fmt"
|
||||
|
||||
"github.com/cortezaproject/corteza-server/compose/types"
|
||||
. "github.com/cortezaproject/corteza-server/pkg/expr"
|
||||
"github.com/cortezaproject/corteza-server/pkg/filter"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user