Skip to content

Commit ab749d3

Browse files
committed
Add MathExpr to plan_node
1 parent 39f9f77 commit ab749d3

File tree

2 files changed

+44
-1
lines changed

2 files changed

+44
-1
lines changed

presto/plan_node/details.go

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ var (
4848
&IdentRef{},
4949
&TypedValue{},
5050
&TypeCastedValue{},
51+
&MathExpr{},
5152
&CatchAllValue{},
5253
),
5354
participle.Union[PlanNodeDetailStmt](
@@ -170,3 +171,14 @@ func (a *Assignment) stmt() {}
170171
type PlanNodeDetails struct {
171172
Stmts []PlanNodeDetailStmt `parser:"(@@ EOL)+"`
172173
}
174+
175+
type MathExpr struct {
176+
LeftOp Value `parser:"'(' @@ ')'"`
177+
Op string `parser:"@('+' | '-' | '*' | '/' | '%')"`
178+
RightOp Value `parser:"'(' @@ ')'"`
179+
}
180+
181+
func (m *MathExpr) value() {}
182+
func (m *MathExpr) String() string {
183+
return fmt.Sprintf("(%s) %s (%s)", m.LeftOp.String(), m.Op, m.RightOp.String())
184+
}

presto/plan_node/details_test.go

Lines changed: 32 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ func TestParseAssignment(t *testing.T) {
178178
"expr_3 := CAST(id AS bigint) (24:12)",
179179
`array_agg_51 := "presto.default.array_agg"((name_35)) ORDER BY OrderingScheme {orderBy='[Ordering {variable='name_35', sortOrder='ASC_NULLS_LAST'}]', orderings='{name_35=ASC_NULLS_LAST}'} (6:21)`,
180180
`branded_car_enrollment.target_id := car_id (22:5)`,
181-
//`expr_5 := ((b) + (INTEGER'1')) - ((INTEGER'2') * (abs(c))) (10:6)`,
181+
`expr_5 := ((b) + (INTEGER'1')) - ((INTEGER'2') * (abs(c))) (10:6)`,
182182
},
183183
[]plan_node.Assignment{
184184
{ // case 0
@@ -260,6 +260,37 @@ func TestParseAssignment(t *testing.T) {
260260
ColumnNumber: 5,
261261
},
262262
},
263+
{ // case 6
264+
Identifier: plan_node.IdentRef{Ident: "expr_5"},
265+
AssignedValue: &plan_node.MathExpr{
266+
LeftOp: &plan_node.MathExpr{
267+
LeftOp: &plan_node.IdentRef{Ident: "b"},
268+
Op: "+",
269+
RightOp: &plan_node.TypedValue{
270+
DataType: "INTEGER",
271+
ValueLiteral: "1",
272+
},
273+
},
274+
Op: "-",
275+
RightOp: &plan_node.MathExpr{
276+
LeftOp: &plan_node.TypedValue{
277+
DataType: "INTEGER",
278+
ValueLiteral: "2",
279+
},
280+
Op: "*",
281+
RightOp: &plan_node.FunctionCall{
282+
FunctionName: "abs",
283+
Parameters: []plan_node.Value{
284+
&plan_node.IdentRef{Ident: "c"},
285+
},
286+
},
287+
},
288+
},
289+
Loc: &plan_node.SourceLocation{
290+
RowNumber: 10,
291+
ColumnNumber: 6,
292+
},
293+
},
263294
})
264295
}
265296

0 commit comments

Comments
 (0)