MCPcopy Create free account
hub / github.com/AfterShip/clickhouse-sql-parser / parseWindowClause

Method parseWindowClause

parser/parser_query.go:889–932  ·  view source on GitHub ↗
(pos Pos)

Source from the content-addressed store, hash-verified

887}
888
889func (p *Parser) parseWindowClause(pos Pos) (*WindowClause, error) {
890 if err := p.expectKeyword(KeywordWindow); err != nil {
891 return nil, err
892 }
893
894 windows := make([]*WindowDefinition, 0, 1)
895 for {
896 windowName, err := p.parseIdent()
897 if err != nil {
898 return nil, err
899 }
900
901 asPos := p.Pos()
902 if err := p.expectKeyword(KeywordAs); err != nil {
903 return nil, err
904 }
905
906 condition, err := p.parseWindowCondition(p.Pos())
907 if err != nil {
908 return nil, err
909 }
910
911 windows = append(windows, &WindowDefinition{
912 Name: windowName,
913 AsPos: asPos,
914 Expr: condition,
915 })
916
917 if p.tryConsumeTokenKind(TokenKindComma) == nil {
918 break
919 }
920 }
921
922 var endPos Pos
923 if len(windows) > 0 {
924 endPos = windows[len(windows)-1].End()
925 }
926
927 return &WindowClause{
928 WindowPos: pos,
929 EndPos: endPos,
930 Windows: windows,
931 }, nil
932}
933
934func (p *Parser) tryParseHavingClause(pos Pos) (*HavingClause, error) {
935 if !p.matchKeyword(KeywordHaving) {

Callers 1

tryParseWindowClauseMethod · 0.95

Calls 6

expectKeywordMethod · 0.95
parseIdentMethod · 0.95
PosMethod · 0.95
parseWindowConditionMethod · 0.95
tryConsumeTokenKindMethod · 0.95
EndMethod · 0.65

Tested by

no test coverage detected