Merge pull request #7990 from influxdata/js-modulo-operator-fix
Fixed String() output for MOD operator and added MOD op precedencepull/7926/head^2
commit
9636960ce6
|
@ -2817,6 +2817,62 @@ func TestParser_ParseExpr(t *testing.T) {
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
|
||||||
|
// Binary expression with LHS precedence
|
||||||
|
{
|
||||||
|
s: `1 / 2 + 3`,
|
||||||
|
expr: &influxql.BinaryExpr{
|
||||||
|
Op: influxql.ADD,
|
||||||
|
LHS: &influxql.BinaryExpr{
|
||||||
|
Op: influxql.DIV,
|
||||||
|
LHS: &influxql.IntegerLiteral{Val: 1},
|
||||||
|
RHS: &influxql.IntegerLiteral{Val: 2},
|
||||||
|
},
|
||||||
|
RHS: &influxql.IntegerLiteral{Val: 3},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
// Binary expression with RHS precedence
|
||||||
|
{
|
||||||
|
s: `1 + 2 / 3`,
|
||||||
|
expr: &influxql.BinaryExpr{
|
||||||
|
Op: influxql.ADD,
|
||||||
|
LHS: &influxql.IntegerLiteral{Val: 1},
|
||||||
|
RHS: &influxql.BinaryExpr{
|
||||||
|
Op: influxql.DIV,
|
||||||
|
LHS: &influxql.IntegerLiteral{Val: 2},
|
||||||
|
RHS: &influxql.IntegerLiteral{Val: 3},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
// Binary expression with LHS precedence
|
||||||
|
{
|
||||||
|
s: `1 % 2 + 3`,
|
||||||
|
expr: &influxql.BinaryExpr{
|
||||||
|
Op: influxql.ADD,
|
||||||
|
LHS: &influxql.BinaryExpr{
|
||||||
|
Op: influxql.MOD,
|
||||||
|
LHS: &influxql.IntegerLiteral{Val: 1},
|
||||||
|
RHS: &influxql.IntegerLiteral{Val: 2},
|
||||||
|
},
|
||||||
|
RHS: &influxql.IntegerLiteral{Val: 3},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
|
// Binary expression with RHS precedence
|
||||||
|
{
|
||||||
|
s: `1 + 2 % 3`,
|
||||||
|
expr: &influxql.BinaryExpr{
|
||||||
|
Op: influxql.ADD,
|
||||||
|
LHS: &influxql.IntegerLiteral{Val: 1},
|
||||||
|
RHS: &influxql.BinaryExpr{
|
||||||
|
Op: influxql.MOD,
|
||||||
|
LHS: &influxql.IntegerLiteral{Val: 2},
|
||||||
|
RHS: &influxql.IntegerLiteral{Val: 3},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
},
|
||||||
|
|
||||||
// Binary expression with LHS paren group.
|
// Binary expression with LHS paren group.
|
||||||
{
|
{
|
||||||
s: `(1 + 2) * 3`,
|
s: `(1 + 2) * 3`,
|
||||||
|
@ -2950,6 +3006,16 @@ func TestParser_ParseExpr(t *testing.T) {
|
||||||
t.Errorf("%d. %q: error mismatch:\n exp=%s\n got=%s\n\n", i, tt.s, tt.err, err)
|
t.Errorf("%d. %q: error mismatch:\n exp=%s\n got=%s\n\n", i, tt.s, tt.err, err)
|
||||||
} else if tt.err == "" && !reflect.DeepEqual(tt.expr, expr) {
|
} else if tt.err == "" && !reflect.DeepEqual(tt.expr, expr) {
|
||||||
t.Errorf("%d. %q\n\nexpr mismatch:\n\nexp=%#v\n\ngot=%#v\n\n", i, tt.s, tt.expr, expr)
|
t.Errorf("%d. %q\n\nexpr mismatch:\n\nexp=%#v\n\ngot=%#v\n\n", i, tt.s, tt.expr, expr)
|
||||||
|
} else if err == nil {
|
||||||
|
// Attempt to reparse the expr as a string and confirm it parses the same.
|
||||||
|
expr2, err := influxql.ParseExpr(expr.String())
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("%d. %q: unable to parse expr string: %s", i, expr.String(), err)
|
||||||
|
} else if !reflect.DeepEqual(tt.expr, expr2) {
|
||||||
|
t.Logf("\n# %s\nexp=%s\ngot=%s\n", tt.s, mustMarshalJSON(tt.expr), mustMarshalJSON(expr2))
|
||||||
|
t.Logf("\nSQL exp=%s\nSQL got=%s\n", tt.expr.String(), expr2.String())
|
||||||
|
t.Errorf("%d. %q\n\nexpr reparse mismatch:\n\nexp=%#v\n\ngot=%#v\n\n", i, tt.s, tt.expr, expr2)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -156,6 +156,7 @@ var tokens = [...]string{
|
||||||
SUB: "-",
|
SUB: "-",
|
||||||
MUL: "*",
|
MUL: "*",
|
||||||
DIV: "/",
|
DIV: "/",
|
||||||
|
MOD: "%",
|
||||||
|
|
||||||
AND: "AND",
|
AND: "AND",
|
||||||
OR: "OR",
|
OR: "OR",
|
||||||
|
@ -285,7 +286,7 @@ func (tok Token) Precedence() int {
|
||||||
return 3
|
return 3
|
||||||
case ADD, SUB:
|
case ADD, SUB:
|
||||||
return 4
|
return 4
|
||||||
case MUL, DIV:
|
case MUL, DIV, MOD:
|
||||||
return 5
|
return 5
|
||||||
}
|
}
|
||||||
return 0
|
return 0
|
||||||
|
|
Loading…
Reference in New Issue