(stmt *pgquery.ResTarget)
| 487 | } |
| 488 | |
| 489 | func (p PostgresParser) parseResTarget(stmt *pgquery.ResTarget) (parser.SelectExpr, error) { |
| 490 | if node, ok := stmt.Val.Node.(*pgquery.Node_ColumnRef); ok { |
| 491 | fields := node.ColumnRef.Fields |
| 492 | fieldsLen := len(fields) |
| 493 | column := fields[fieldsLen-1] |
| 494 | if _, ok := column.Node.(*pgquery.Node_AStar); ok { |
| 495 | var tableName string |
| 496 | var schemaName string |
| 497 | if fieldsLen >= 2 { |
| 498 | tableField := fields[fieldsLen-2] |
| 499 | tableNode, ok := tableField.Node.(*pgquery.Node_String_) |
| 500 | if !ok { |
| 501 | return nil, fmt.Errorf("Invalid table field node type: %#v", tableField) |
| 502 | } |
| 503 | tableName = tableNode.String_.Sval |
| 504 | |
| 505 | if fieldsLen >= 3 { |
| 506 | schemaField := fields[fieldsLen-3] |
| 507 | schemaNode, ok := schemaField.Node.(*pgquery.Node_String_) |
| 508 | if !ok { |
| 509 | return nil, fmt.Errorf("Invalid schema field node type: %#v", schemaField) |
| 510 | } |
| 511 | schemaName = schemaNode.String_.Sval |
| 512 | } |
| 513 | } |
| 514 | |
| 515 | return &parser.StarExpr{ |
| 516 | TableName: parser.TableName{ |
| 517 | Name: parser.NewIdent(tableName, false), |
| 518 | Schema: parser.NewIdent(schemaName, false), |
| 519 | }, |
| 520 | }, nil |
| 521 | } |
| 522 | } |
| 523 | |
| 524 | expr, err := p.parseExpr(stmt.Val) |
| 525 | if err != nil { |
| 526 | return nil, err |
| 527 | } |
| 528 | |
| 529 | return &parser.AliasedExpr{ |
| 530 | Expr: expr, |
| 531 | As: parser.NewIdent(stmt.Name, false), |
| 532 | }, nil |
| 533 | } |
| 534 | |
| 535 | func (p PostgresParser) parseExpr(stmt *pgquery.Node) (parser.Expr, error) { |
| 536 | switch node := stmt.Node.(type) { |
no test coverage detected