(pos Pos)
| 187 | } |
| 188 | |
| 189 | func (p *Parser) parseCreateNamedCollection(pos Pos) (*CreateNamedCollection, error) { |
| 190 | if err := p.expectKeyword(KeywordNamed); err != nil { |
| 191 | return nil, err |
| 192 | } |
| 193 | |
| 194 | if err := p.expectKeyword(KeywordCollection); err != nil { |
| 195 | return nil, err |
| 196 | } |
| 197 | |
| 198 | createCollection := &CreateNamedCollection{ |
| 199 | CreatePos: pos, |
| 200 | } |
| 201 | |
| 202 | // parse IF NOT EXISTS clause if exists |
| 203 | var err error |
| 204 | createCollection.IfNotExists, err = p.tryParseIfNotExists() |
| 205 | if err != nil { |
| 206 | return nil, err |
| 207 | } |
| 208 | |
| 209 | // parse collection name |
| 210 | name, err := p.parseIdent() |
| 211 | if err != nil { |
| 212 | return nil, err |
| 213 | } |
| 214 | createCollection.Name = name |
| 215 | |
| 216 | // parse ON CLUSTER clause if exists |
| 217 | onCluster, err := p.tryParseClusterClause(p.Pos()) |
| 218 | if err != nil { |
| 219 | return nil, err |
| 220 | } |
| 221 | createCollection.OnCluster = onCluster |
| 222 | |
| 223 | // parse AS keyword |
| 224 | if err := p.expectKeyword(KeywordAs); err != nil { |
| 225 | return nil, err |
| 226 | } |
| 227 | |
| 228 | // parse parameters |
| 229 | params := make([]*NamedCollectionParam, 0) |
| 230 | for !p.lexer.isEOF() { |
| 231 | param, err := p.parseNamedCollectionParam(p.Pos()) |
| 232 | if err != nil { |
| 233 | return nil, err |
| 234 | } |
| 235 | params = append(params, param) |
| 236 | |
| 237 | // Check if there's another parameter |
| 238 | if p.tryConsumeTokenKind(TokenKindComma) == nil { |
| 239 | break |
| 240 | } |
| 241 | } |
| 242 | createCollection.Params = params |
| 243 | |
| 244 | if len(params) > 0 { |
| 245 | createCollection.StatementEnd = params[len(params)-1].End() |
| 246 | } else if onCluster != nil { |
no test coverage detected