(ATTACH | CREATE) (OR REPLACE)? VIEW (IF NOT EXISTS)? tableIdentifier uuidClause? clusterClause? tableSchemaClause? subqueryClause
(pos Pos, orReplace bool)
| 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) { |
| 206 | createView := &CreateView{CreatePos: pos, OrReplace: orReplace} |
| 207 | if err := p.expectKeyword(KeywordView); err != nil { |
| 208 | return nil, err |
| 209 | } |
| 210 | |
| 211 | var err error |
| 212 | createView.IfNotExists, err = p.tryParseIfNotExists() |
| 213 | if err != nil { |
| 214 | return nil, err |
| 215 | } |
| 216 | |
| 217 | tableIdentifier, err := p.parseTableIdentifier(p.Pos()) |
| 218 | if err != nil { |
| 219 | return nil, err |
| 220 | } |
| 221 | createView.Name = tableIdentifier |
| 222 | |
| 223 | uuid, err := p.tryParseUUID() |
| 224 | if err != nil { |
| 225 | return nil, err |
| 226 | } |
| 227 | createView.UUID = uuid |
| 228 | |
| 229 | onCluster, err := p.tryParseClusterClause(p.Pos()) |
| 230 | if err != nil { |
| 231 | return nil, err |
| 232 | } |
| 233 | createView.OnCluster = onCluster |
| 234 | |
| 235 | if p.matchTokenKind(TokenKindLParen) { |
| 236 | tableSchema, err := p.parseTableSchemaClause(p.Pos()) |
| 237 | if err != nil { |
| 238 | return nil, err |
| 239 | } |
| 240 | createView.TableSchema = tableSchema |
| 241 | } |
| 242 | |
| 243 | // parse COMMENT clause if exists (before AS SELECT) |
| 244 | comment, err := p.tryParseComment() |
| 245 | if err != nil { |
| 246 | return nil, err |
| 247 | } |
| 248 | createView.Comment = comment |
| 249 | |
| 250 | if p.tryConsumeKeywords(KeywordAs) { |
| 251 | subQuery, err := p.parseSubQuery(p.Pos()) |
| 252 | if err != nil { |
| 253 | return nil, err |
| 254 | } |
| 255 | createView.SubQuery = subQuery |
| 256 | createView.StatementEnd = subQuery.End() |
| 257 | } |
| 258 | |
| 259 | return createView, nil |
| 260 | } |
| 261 | |
| 262 | // # CreateLiveViewStmt |
no test coverage detected