@@ -95,11 +95,15 @@ func (d *Decoder) castToFloat(v interface{}) interface{} {
95
95
func (d * Decoder ) setToMapValue (node ast.Node , m map [string ]interface {}) {
96
96
switch n := node .(type ) {
97
97
case * ast.MappingValueNode :
98
- if n .Key .Type () == ast .MergeKeyType && n .Value .Type () == ast .AliasType {
99
- aliasNode := n .Value .(* ast.AliasNode )
100
- aliasName := aliasNode .Value .GetToken ().Value
101
- node := d .anchorNodeMap [aliasName ]
102
- d .setToMapValue (node , m )
98
+ if n .Key .Type () == ast .MergeKeyType {
99
+ if n .Value .Type () == ast .AliasType {
100
+ aliasNode := n .Value .(* ast.AliasNode )
101
+ aliasName := aliasNode .Value .GetToken ().Value
102
+ node := d .anchorNodeMap [aliasName ]
103
+ d .setToMapValue (node , m )
104
+ } else {
105
+ d .setToMapValue (n .Value , m )
106
+ }
103
107
} else {
104
108
key := n .Key .GetToken ().Value
105
109
m [key ] = d .nodeToValue (n .Value )
@@ -114,11 +118,15 @@ func (d *Decoder) setToMapValue(node ast.Node, m map[string]interface{}) {
114
118
func (d * Decoder ) setToOrderedMapValue (node ast.Node , m * MapSlice ) {
115
119
switch n := node .(type ) {
116
120
case * ast.MappingValueNode :
117
- if n .Key .Type () == ast .MergeKeyType && n .Value .Type () == ast .AliasType {
118
- aliasNode := n .Value .(* ast.AliasNode )
119
- aliasName := aliasNode .Value .GetToken ().Value
120
- node := d .anchorNodeMap [aliasName ]
121
- d .setToOrderedMapValue (node , m )
121
+ if n .Key .Type () == ast .MergeKeyType {
122
+ if n .Value .Type () == ast .AliasType {
123
+ aliasNode := n .Value .(* ast.AliasNode )
124
+ aliasName := aliasNode .Value .GetToken ().Value
125
+ node := d .anchorNodeMap [aliasName ]
126
+ d .setToOrderedMapValue (node , m )
127
+ } else {
128
+ d .setToOrderedMapValue (n .Value , m )
129
+ }
122
130
} else {
123
131
key := n .Key .GetToken ().Value
124
132
* m = append (* m , MapItem {Key : key , Value : d .nodeToValue (n .Value )})
@@ -221,8 +229,16 @@ func (d *Decoder) resolveAlias(node ast.Node) ast.Node {
221
229
n .Values [idx ] = d .resolveAlias (value ).(* ast.MappingValueNode )
222
230
}
223
231
case * ast.MappingValueNode :
224
- n .Key = d .resolveAlias (n .Key )
225
- n .Value = d .resolveAlias (n .Value )
232
+ if n .Key .Type () == ast .MergeKeyType && n .Value .Type () == ast .AliasType {
233
+ value := d .resolveAlias (n .Value )
234
+ keyColumn := n .Key .GetToken ().Position .Column
235
+ requiredColumn := keyColumn + 2
236
+ value .AddColumn (requiredColumn )
237
+ n .Value = value
238
+ } else {
239
+ n .Key = d .resolveAlias (n .Key )
240
+ n .Value = d .resolveAlias (n .Value )
241
+ }
226
242
case * ast.SequenceNode :
227
243
for idx , value := range n .Values {
228
244
n .Values [idx ] = d .resolveAlias (value )
0 commit comments