MCPcopy
hub / github.com/sqldef/sqldef / parseResTarget

Method parseResTarget

database/postgres/parser.go:489–533  ·  view source on GitHub ↗
(stmt *pgquery.ResTarget)

Source from the content-addressed store, hash-verified

487}
488
489func (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
535func (p PostgresParser) parseExpr(stmt *pgquery.Node) (parser.Expr, error) {
536 switch node := stmt.Node.(type) {

Callers 1

parseSelectStmtMethod · 0.95

Calls 3

parseExprMethod · 0.95
NewIdentFunction · 0.92
ErrorfMethod · 0.65

Tested by

no test coverage detected