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

Method parseOrderByClause

parser/parser_table.go:920–955  ·  view source on GitHub ↗
(pos Pos)

Source from the content-addressed store, hash-verified

918}
919
920func (p *Parser) parseOrderByClause(pos Pos) (*OrderByClause, error) {
921 orderByListExpr := &OrderByClause{OrderPos: pos, ListEnd: pos}
922 items := make([]Expr, 0)
923 for {
924 expr, err := p.parseOrderExpr(pos)
925 if err != nil {
926 return nil, err
927 }
928 if expr == nil {
929 break
930 }
931 items = append(items, expr)
932
933 if p.lexer.isEOF() || p.tryConsumeTokenKind(TokenKindComma) == nil {
934 break
935 }
936 }
937 if len(items) > 0 {
938 orderByListExpr.ListEnd = items[len(items)-1].End()
939 }
940 orderByListExpr.Items = items
941
942 // Parse optional INTERPOLATE clause
943 if p.matchKeyword(KeywordInterpolate) {
944 interpolatePos := p.Pos()
945 _ = p.lexer.consumeToken()
946 interpolate, err := p.parseInterpolateClause(interpolatePos)
947 if err != nil {
948 return nil, err
949 }
950 orderByListExpr.Interpolate = interpolate
951 orderByListExpr.ListEnd = interpolate.End()
952 }
953
954 return orderByListExpr, nil
955}
956
957func (p *Parser) parseOrderExpr(pos Pos) (*OrderExpr, error) {
958 // parse column expr

Callers 1

tryParseOrderByClauseMethod · 0.95

Calls 8

parseOrderExprMethod · 0.95
tryConsumeTokenKindMethod · 0.95
matchKeywordMethod · 0.95
PosMethod · 0.95
isEOFMethod · 0.80
consumeTokenMethod · 0.80
EndMethod · 0.65

Tested by

no test coverage detected