Skip to content

Commit 12ebcf9

Browse files
committed
restrict types more
Signed-off-by: odubajDT <[email protected]>
1 parent 8bc459d commit 12ebcf9

File tree

3 files changed

+30
-30
lines changed

3 files changed

+30
-30
lines changed

pkg/ottl/e2e/e2e_test.go

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ func Test_e2e_converters(t *testing.T) {
334334
{
335335
statement: `set(attributes["array"][0.0], "bar")`,
336336
want: func(_ ottllog.TransformContext) {},
337-
errMsg: "unable to resolve an integer index in slice: invalid key type",
337+
errMsg: "unable to resolve an integer index in slice: could not resolve key for map/slice, expecting 'int64' but got 'float64'",
338338
},
339339
{
340340
statement: `set(attributes["array"][ConvertCase(attributes["A|B|C"], "upper")], "bar")`,

pkg/ottl/functions.go

Lines changed: 22 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -54,16 +54,14 @@ func buildOriginalKeysText(keys []key) string {
5454
builder.WriteString(*k.String)
5555
}
5656
if k.Expression != nil {
57-
if k.Expression.Literal != nil {
58-
if k.Expression.Literal.Path != nil {
59-
builder.WriteString(buildOriginalText(k.Expression.Literal.Path))
60-
}
61-
if k.Expression.Literal.Float != nil {
62-
builder.WriteString(strconv.FormatFloat(*k.Expression.Literal.Float, 'f', 10, 64))
63-
}
64-
if k.Expression.Literal.Int != nil {
65-
builder.WriteString(strconv.FormatInt(*k.Expression.Literal.Int, 10))
66-
}
57+
if k.Expression.Path != nil {
58+
builder.WriteString(buildOriginalText(k.Expression.Path))
59+
}
60+
if k.Expression.Float != nil {
61+
builder.WriteString(strconv.FormatFloat(*k.Expression.Float, 'f', 10, 64))
62+
}
63+
if k.Expression.Int != nil {
64+
builder.WriteString(strconv.FormatInt(*k.Expression.Int, 10))
6765
}
6866
}
6967
builder.WriteString("]")
@@ -228,30 +226,28 @@ func (p *Parser[K]) newKeys(keys []key) ([]Key[K], error) {
228226
for i := range keys {
229227
var getter Getter[K]
230228
if keys[i].Expression != nil {
231-
if keys[i].Expression.Literal != nil {
232-
if keys[i].Expression.Literal.Path != nil {
233-
g, err := p.buildGetSetterFromPath(keys[i].Expression.Literal.Path)
234-
if err != nil {
235-
return nil, err
236-
}
237-
getter = g
238-
}
239-
if keys[i].Expression.Literal.Converter != nil {
240-
g, err := p.newGetterFromConverter(*keys[i].Expression.Literal.Converter)
241-
if err != nil {
242-
return nil, err
243-
}
244-
getter = g
229+
if keys[i].Expression.Path != nil {
230+
g, err := p.buildGetSetterFromPath(keys[i].Expression.Path)
231+
if err != nil {
232+
return nil, err
245233
}
234+
getter = g
246235
}
247-
if keys[i].Expression.MathExpression != nil {
248-
g, err := p.evaluateMathExpression(keys[i].Expression.MathExpression)
236+
if keys[i].Expression.Converter != nil {
237+
g, err := p.newGetterFromConverter(*keys[i].Expression.Converter)
249238
if err != nil {
250239
return nil, err
251240
}
252241
getter = g
253242
}
254243
}
244+
if keys[i].MathExpression != nil {
245+
g, err := p.evaluateMathExpression(keys[i].MathExpression)
246+
if err != nil {
247+
return nil, err
248+
}
249+
getter = g
250+
}
255251
ks[i] = &baseKey[K]{
256252
s: keys[i].String,
257253
i: keys[i].Int,

pkg/ottl/grammar.go

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -296,12 +296,16 @@ func (f *field) accept(v grammarVisitor) {
296296
}
297297

298298
type key struct {
299-
String *string `parser:"'[' (@String "`
300-
Int *int64 `parser:"| @Int"`
301-
Expression *value `parser:"| @@ ) ']'"`
299+
String *string `parser:"'[' (@String "`
300+
Int *int64 `parser:"| @Int"`
301+
MathExpression *mathExpression `parser:"| @@"`
302+
Expression *mathExprLiteral `parser:"| @@ ) ']'"`
302303
}
303304

304305
func (k *key) accept(v grammarVisitor) {
306+
if k.MathExpression != nil {
307+
k.MathExpression.accept(v)
308+
}
305309
if k.Expression != nil {
306310
k.Expression.accept(v)
307311
}

0 commit comments

Comments
 (0)