(stmt *pgquery.Node)
| 533 | } |
| 534 | |
| 535 | func (p PostgresParser) parseExpr(stmt *pgquery.Node) (parser.Expr, error) { |
| 536 | switch node := stmt.Node.(type) { |
| 537 | case *pgquery.Node_AArrayExpr: |
| 538 | var elements parser.Exprs |
| 539 | for _, element := range node.AArrayExpr.Elements { |
| 540 | node, err := p.parseExpr(element) |
| 541 | if err != nil { |
| 542 | return nil, err |
| 543 | } |
| 544 | |
| 545 | elem, err := p.parseArrayElement(node) |
| 546 | if err != nil { |
| 547 | return nil, err |
| 548 | } |
| 549 | elements = append(elements, elem) |
| 550 | } |
| 551 | return &parser.ArrayConstructor{ |
| 552 | Elements: elements, |
| 553 | }, nil |
| 554 | case *pgquery.Node_AConst: |
| 555 | switch cNode := node.AConst.Val.(type) { |
| 556 | case *pgquery.A_Const_Ival: |
| 557 | return parser.NewIntVal(fmt.Sprint(cNode.Ival.Ival)), nil |
| 558 | case *pgquery.A_Const_Fval: |
| 559 | return parser.NewFloatVal(fmt.Sprint(cNode.Fval.Fval)), nil |
| 560 | case *pgquery.A_Const_Boolval: |
| 561 | return parser.NewBoolVal(cNode.Boolval.Boolval), nil |
| 562 | case *pgquery.A_Const_Sval: |
| 563 | return parser.NewStrVal(cNode.Sval.Sval), nil |
| 564 | case *pgquery.A_Const_Bsval: |
| 565 | return parser.NewBitVal(cNode.Bsval.Bsval), nil |
| 566 | case nil: |
| 567 | return &parser.NullVal{}, nil |
| 568 | default: |
| 569 | return nil, fmt.Errorf("unknown AConst val type in parseExpr: %#v", cNode) |
| 570 | } |
| 571 | case *pgquery.Node_BoolExpr: |
| 572 | expr, err := p.parseExpr(node.BoolExpr.Args[0]) |
| 573 | if err != nil { |
| 574 | return nil, err |
| 575 | } |
| 576 | |
| 577 | if node.BoolExpr.Boolop == pgquery.BoolExprType_NOT_EXPR { |
| 578 | return &parser.NotExpr{ |
| 579 | Expr: expr, |
| 580 | }, nil |
| 581 | } |
| 582 | |
| 583 | for _, arg := range node.BoolExpr.Args[1:] { |
| 584 | right, err := p.parseExpr(arg) |
| 585 | if err != nil { |
| 586 | return nil, err |
| 587 | } |
| 588 | |
| 589 | switch node.BoolExpr.Boolop { |
| 590 | case pgquery.BoolExprType_AND_EXPR: |
| 591 | expr = &parser.AndExpr{ |
| 592 | Left: expr, |
no test coverage detected