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

Method parseColumnCaseExpr

parser/parser_column.go:842–902  ·  view source on GitHub ↗
(pos Pos)

Source from the content-addressed store, hash-verified

840}
841
842func (p *Parser) parseColumnCaseExpr(pos Pos) (*CaseExpr, error) {
843 // CASE expr
844 caseExpr := &CaseExpr{CasePos: pos}
845 if err := p.expectKeyword(KeywordCase); err != nil {
846 return nil, err
847 }
848
849 // case expr is optional
850 if !p.matchKeyword(KeywordWhen) {
851 expr, err := p.parseExpr(p.Pos())
852 if err != nil {
853 return nil, err
854 }
855 caseExpr.Expr = expr
856 }
857
858 // WHEN expr THEN expr
859 whenClauses := make([]*WhenClause, 0)
860 for p.matchKeyword(KeywordWhen) {
861 whenPos := p.Pos()
862 _ = p.lexer.consumeToken()
863 whenCondition, err := p.parseExpr(p.Pos())
864 if err != nil {
865 return nil, err
866 }
867
868 thenPos := p.Pos()
869 if err := p.expectKeyword(KeywordThen); err != nil {
870 return nil, err
871 }
872 thenCondition, err := p.parseExpr(p.Pos())
873 if err != nil {
874 return nil, err
875 }
876
877 whenClauses = append(whenClauses, &WhenClause{
878 WhenPos: whenPos,
879 ThenPos: thenPos,
880 When: whenCondition,
881 Then: thenCondition,
882 })
883 }
884 caseExpr.Whens = whenClauses
885
886 // ELSE expr
887 elsePos := p.Pos()
888 if p.tryConsumeKeywords(KeywordElse) {
889 elseExpr, err := p.parseExpr(p.Pos())
890 if err != nil {
891 return nil, err
892 }
893 caseExpr.ElsePos = elsePos
894 caseExpr.Else = elseExpr
895 }
896
897 if err := p.expectKeyword(KeywordEnd); err != nil {
898 return nil, err
899 }

Callers 1

parseColumnExprMethod · 0.95

Calls 6

expectKeywordMethod · 0.95
matchKeywordMethod · 0.95
parseExprMethod · 0.95
PosMethod · 0.95
tryConsumeKeywordsMethod · 0.95
consumeTokenMethod · 0.80

Tested by

no test coverage detected