mirror of
https://github.com/mikefarah/yq.git
synced 2024-12-19 20:19:04 +00:00
Speed up multiply
This commit is contained in:
parent
79bc1f95cb
commit
ed4d888bfa
@ -357,7 +357,7 @@ yq eval '.foobar * .foobarList' sample.yml
|
|||||||
will output
|
will output
|
||||||
```yaml
|
```yaml
|
||||||
c: foobarList_c
|
c: foobarList_c
|
||||||
<<:
|
!!merge <<:
|
||||||
- *foo
|
- *foo
|
||||||
- *bar
|
- *bar
|
||||||
thing: foobar_thing
|
thing: foobar_thing
|
||||||
|
@ -111,6 +111,7 @@ func multiplyWithPrefs() lex.Action {
|
|||||||
if strings.Contains(options, "d") {
|
if strings.Contains(options, "d") {
|
||||||
prefs.DeepMergeArrays = true
|
prefs.DeepMergeArrays = true
|
||||||
}
|
}
|
||||||
|
prefs.TraversePrefs.DontFollowAlias = true
|
||||||
op := &Operation{OperationType: multiplyOpType, Value: multiplyOpType.Type, StringValue: options, Preferences: prefs}
|
op := &Operation{OperationType: multiplyOpType, Value: multiplyOpType.Type, StringValue: options, Preferences: prefs}
|
||||||
return &token{TokenType: operationToken, Operation: op}, nil
|
return &token{TokenType: operationToken, Operation: op}, nil
|
||||||
}
|
}
|
||||||
|
@ -6,6 +6,7 @@ import (
|
|||||||
|
|
||||||
"container/list"
|
"container/list"
|
||||||
|
|
||||||
|
"github.com/jinzhu/copier"
|
||||||
yaml "gopkg.in/yaml.v3"
|
yaml "gopkg.in/yaml.v3"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -50,14 +51,21 @@ func multiply(preferences multiplyPreferences) func(d *dataTreeNavigator, contex
|
|||||||
|
|
||||||
if lhs.Node.Kind == yaml.MappingNode && rhs.Node.Kind == yaml.MappingNode ||
|
if lhs.Node.Kind == yaml.MappingNode && rhs.Node.Kind == yaml.MappingNode ||
|
||||||
(lhs.Node.Kind == yaml.SequenceNode && rhs.Node.Kind == yaml.SequenceNode) {
|
(lhs.Node.Kind == yaml.SequenceNode && rhs.Node.Kind == yaml.SequenceNode) {
|
||||||
|
var newBlank = CandidateNode{}
|
||||||
var newBlank = lhs.CreateChild(nil, newBlankNode)
|
err := copier.CopyWithOption(&newBlank, lhs, copier.Option{IgnoreEmpty: true, DeepCopy: true})
|
||||||
log.Debugf("merge - merge lhs into blank")
|
|
||||||
var newThing, err = mergeObjects(d, context.WritableClone(), newBlank, lhs, multiplyPreferences{})
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
return mergeObjects(d, context.WritableClone(), newThing, rhs, preferences)
|
newBlank.Node.HeadComment = newBlankNode.HeadComment
|
||||||
|
newBlank.Node.FootComment = newBlankNode.FootComment
|
||||||
|
|
||||||
|
// var newBlank = lhs.CreateChild(nil, newBlankNode)
|
||||||
|
// log.Debugf("merge - merge lhs into blank")
|
||||||
|
// var newThing, err = mergeObjects(d, context.WritableClone(), newBlank, lhs, multiplyPreferences{})
|
||||||
|
// if err != nil {
|
||||||
|
// return nil, err
|
||||||
|
// }
|
||||||
|
return mergeObjects(d, context.WritableClone(), &newBlank, rhs, preferences)
|
||||||
} else if lhs.Node.Tag == "!!int" && rhs.Node.Tag == "!!int" {
|
} else if lhs.Node.Tag == "!!int" && rhs.Node.Tag == "!!int" {
|
||||||
return multiplyIntegers(lhs, rhs)
|
return multiplyIntegers(lhs, rhs)
|
||||||
} else if (lhs.Node.Tag == "!!int" || lhs.Node.Tag == "!!float") && (rhs.Node.Tag == "!!int" || rhs.Node.Tag == "!!float") {
|
} else if (lhs.Node.Tag == "!!int" || lhs.Node.Tag == "!!float") && (rhs.Node.Tag == "!!int" || rhs.Node.Tag == "!!float") {
|
||||||
|
@ -60,6 +60,13 @@ var nodeWithFooter = `
|
|||||||
a: apple
|
a: apple
|
||||||
# footer`
|
# footer`
|
||||||
|
|
||||||
|
var document = `
|
||||||
|
a: &cat {name: cat}
|
||||||
|
b: {name: dog}
|
||||||
|
c:
|
||||||
|
<<: *cat
|
||||||
|
`
|
||||||
|
|
||||||
var multiplyOperatorScenarios = []expressionScenario{
|
var multiplyOperatorScenarios = []expressionScenario{
|
||||||
{
|
{
|
||||||
skipDoc: true,
|
skipDoc: true,
|
||||||
@ -405,7 +412,15 @@ var multiplyOperatorScenarios = []expressionScenario{
|
|||||||
document: mergeDocSample,
|
document: mergeDocSample,
|
||||||
expression: `.foobar * .foobarList`,
|
expression: `.foobar * .foobarList`,
|
||||||
expected: []string{
|
expected: []string{
|
||||||
"D0, P[foobar], (!!map)::c: foobarList_c\n<<: [*foo, *bar]\nthing: foobar_thing\nb: foobarList_b\n",
|
"D0, P[foobar], (!!map)::c: foobarList_c\n!!merge <<: [*foo, *bar]\nthing: foobar_thing\nb: foobarList_b\n",
|
||||||
|
},
|
||||||
|
},
|
||||||
|
{
|
||||||
|
skipDoc: true,
|
||||||
|
document: document,
|
||||||
|
expression: `.b * .c`,
|
||||||
|
expected: []string{
|
||||||
|
"D0, P[b], (!!map)::{name: dog, <<: *cat}\n",
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user