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

Method parseInterpolateClause

parser/parser_table.go:1057–1101  ·  view source on GitHub ↗
(interpolatePos Pos)

Source from the content-addressed store, hash-verified

1055}
1056
1057func (p *Parser) parseInterpolateClause(interpolatePos Pos) (*InterpolateClause, error) {
1058 interpolate := &InterpolateClause{
1059 InterpolatePos: interpolatePos,
1060 ListEnd: interpolatePos + Pos(len("INTERPOLATE")),
1061 }
1062
1063 if p.tryConsumeTokenKind(TokenKindLParen) == nil {
1064 // INTERPOLATE without columns is valid
1065 return interpolate, nil
1066 }
1067
1068 items := make([]*InterpolateItem, 0)
1069 for {
1070 column, err := p.parseIdent()
1071 if err != nil {
1072 return nil, err
1073 }
1074
1075 item := &InterpolateItem{Column: column}
1076
1077 if p.tryConsumeKeywords(KeywordAs) {
1078 expr, err := p.parseExpr(interpolatePos)
1079 if err != nil {
1080 return nil, err
1081 }
1082 item.Expr = expr
1083 }
1084
1085 items = append(items, item)
1086
1087 if p.tryConsumeTokenKind(TokenKindComma) == nil {
1088 break
1089 }
1090 }
1091
1092 rparen := p.tryConsumeTokenKind(TokenKindRParen)
1093 if rparen == nil {
1094 return nil, fmt.Errorf("expected ')' after INTERPOLATE column list")
1095 }
1096
1097 interpolate.Items = items
1098 interpolate.ListEnd = rparen.End
1099
1100 return interpolate, nil
1101}
1102
1103func (p *Parser) tryParseTTLClause(pos Pos, allowMultiValues bool) (*TTLClause, error) {
1104 if !p.tryConsumeKeywords(KeywordTtl) {

Callers 1

parseOrderByClauseMethod · 0.95

Calls 5

tryConsumeTokenKindMethod · 0.95
parseIdentMethod · 0.95
tryConsumeKeywordsMethod · 0.95
parseExprMethod · 0.95
PosTypeAlias · 0.85

Tested by

no test coverage detected