MCPcopy
hub / github.com/sqldef/sqldef / parseSelectStmt

Method parseSelectStmt

database/postgres/parser.go:370–487  ·  view source on GitHub ↗
(stmt *pgquery.SelectStmt)

Source from the content-addressed store, hash-verified

368}
369
370func (p PostgresParser) parseSelectStmt(stmt *pgquery.SelectStmt) (parser.SelectStatement, error) {
371 unhandled := stmt.IntoClause != nil ||
372 stmt.WindowClause != nil ||
373 stmt.SortClause != nil ||
374 stmt.ValuesLists != nil ||
375 stmt.LimitOffset != nil ||
376 stmt.LimitCount != nil ||
377 stmt.LimitOption != 1 ||
378 stmt.LockingClause != nil ||
379 stmt.WithClause != nil ||
380 stmt.Op != 1 ||
381 stmt.All ||
382 stmt.Larg != nil ||
383 stmt.Rarg != nil
384 if unhandled {
385 return nil, fmt.Errorf("unhandled node in parseSelectStmt: %#v", stmt)
386 }
387
388 var selectExprs parser.SelectExprs
389 for _, target := range stmt.TargetList {
390 switch node := target.Node.(type) {
391 case *pgquery.Node_ResTarget:
392 selectExpr, err := p.parseResTarget(node.ResTarget)
393 if err != nil {
394 return nil, err
395 }
396 selectExprs = append(selectExprs, selectExpr)
397 default:
398 return nil, fmt.Errorf("unknown node in parseSelectStmt: %#v", node)
399 }
400 }
401
402 var fromTable parser.TableName
403 var aliasName string
404 if len(stmt.FromClause) == 0 {
405 fromTable = parser.TableName{
406 Name: parser.NewIdent("", false),
407 Schema: parser.NewIdent("", false),
408 }
409 } else {
410 var err error
411 switch node := stmt.FromClause[0].Node.(type) {
412 case *pgquery.Node_RangeVar:
413 fromTable, err = p.parseTableName(node.RangeVar)
414 if err != nil {
415 return nil, err
416 }
417 if node.RangeVar.Alias != nil {
418 aliasName = node.RangeVar.Alias.Aliasname
419 }
420 default:
421 return nil, fmt.Errorf("unknown node in parseSelectStmt: %#v", node)
422 }
423 }
424
425 var distinct *parser.DistinctClause
426 if stmt.DistinctClause != nil {
427 distinct = &parser.DistinctClause{}

Callers 1

parseViewStmtMethod · 0.95

Calls 5

parseResTargetMethod · 0.95
parseTableNameMethod · 0.95
parseExprMethod · 0.95
NewIdentFunction · 0.92
ErrorfMethod · 0.65

Tested by

no test coverage detected