(pos Pos)
| 171 | } |
| 172 | |
| 173 | func (p *Parser) tryParseRefreshExpr(pos Pos) (*RefreshExpr, error) { |
| 174 | if !p.tryConsumeKeywords(KeywordRefresh) { |
| 175 | return nil, nil // nolint |
| 176 | } |
| 177 | |
| 178 | // REFRESH EVERY|AFTER interval |
| 179 | refreshExpr := &RefreshExpr{RefreshPos: pos} |
| 180 | if !p.matchOneOfKeywords(KeywordEvery, KeywordAfter) { |
| 181 | return nil, fmt.Errorf("expected EVERY or AFTER, but got %q", p.lastTokenKind()) |
| 182 | } |
| 183 | refreshExpr.Frequency = p.last().String |
| 184 | _ = p.lexer.consumeToken() |
| 185 | |
| 186 | interval, err := p.parseInterval(false) |
| 187 | if err != nil { |
| 188 | return nil, err |
| 189 | } |
| 190 | refreshExpr.Interval = interval |
| 191 | |
| 192 | // [OFFSET interval] |
| 193 | if p.tryConsumeKeywords(KeywordOffset) { |
| 194 | offset, err := p.parseInterval(false) |
| 195 | if err != nil { |
| 196 | return nil, err |
| 197 | } |
| 198 | refreshExpr.Offset = offset |
| 199 | } |
| 200 | |
| 201 | return refreshExpr, nil |
| 202 | } |
| 203 | |
| 204 | // (ATTACH | CREATE) (OR REPLACE)? VIEW (IF NOT EXISTS)? tableIdentifier uuidClause? clusterClause? tableSchemaClause? subqueryClause |
| 205 | func (p *Parser) parseCreateView(pos Pos, orReplace bool) (*CreateView, error) { |
no test coverage detected