MCPcopy Create free account
hub / github.com/ajitpratap0/GoSQLX / parseWindowFrame

Method parseWindowFrame

pkg/sql/parser/window.go:471–510  ·  view source on GitHub ↗

parseWindowFrame parses a window frame clause

(frameType string)

Source from the content-addressed store, hash-verified

469
470// parseWindowFrame parses a window frame clause
471func (p *Parser) parseWindowFrame(frameType string) (*ast.WindowFrame, error) {
472 frame := &ast.WindowFrame{
473 Type: frameType,
474 }
475
476 // Parse frame bounds
477 if p.isType(models.TokenTypeBetween) {
478 p.advance() // Consume BETWEEN
479
480 // Parse start bound
481 startBound, err := p.parseFrameBound()
482 if err != nil {
483 return nil, err
484 }
485 frame.Start = *startBound
486
487 // Expect AND
488 if !p.isType(models.TokenTypeAnd) {
489 return nil, p.expectedError("AND")
490 }
491 p.advance() // Consume AND
492
493 // Parse end bound
494 endBound, err := p.parseFrameBound()
495 if err != nil {
496 return nil, err
497 }
498 frame.End = endBound
499 } else {
500 // Single bound (implies CURRENT ROW as end)
501 startBound, err := p.parseFrameBound()
502 if err != nil {
503 return nil, err
504 }
505 frame.Start = *startBound
506 // End is nil for single bound
507 }
508
509 return frame, nil
510}
511
512// parseFrameBound parses a window frame bound
513func (p *Parser) parseFrameBound() (*ast.WindowFrameBound, error) {

Callers 1

parseWindowSpecMethod · 0.95

Calls 4

isTypeMethod · 0.95
advanceMethod · 0.95
parseFrameBoundMethod · 0.95
expectedErrorMethod · 0.95

Tested by

no test coverage detected