(pos Pos)
| 6 | ) |
| 7 | |
| 8 | func (p *Parser) parseDDL(pos Pos) (DDL, error) { |
| 9 | switch { |
| 10 | case p.matchKeyword(KeywordCreate), |
| 11 | p.matchKeyword(KeywordAttach): |
| 12 | _ = p.lexer.consumeToken() |
| 13 | orReplace := p.tryConsumeKeywords(KeywordOr, KeywordReplace) |
| 14 | if orReplace && !p.matchOneOfKeywords(KeywordTemporary, KeywordTable, KeywordView, KeywordFunction, KeywordDictionary) { |
| 15 | return nil, fmt.Errorf("expected keyword: TEMPORARY|TABLE|VIEW|FUNCTION|DICTIONARY, but got %q", p.last().String) |
| 16 | } |
| 17 | switch { |
| 18 | case p.matchKeyword(KeywordNamed): |
| 19 | return p.parseCreateNamedCollection(pos) |
| 20 | case p.matchKeyword(KeywordDatabase): |
| 21 | return p.parseCreateDatabase(pos) |
| 22 | case p.matchKeyword(KeywordDictionary): |
| 23 | return p.parseCreateDictionary(pos, orReplace) |
| 24 | case p.matchKeyword(KeywordTable), |
| 25 | p.matchKeyword(KeywordTemporary): |
| 26 | return p.parseCreateTable(pos, orReplace) |
| 27 | case p.matchKeyword(KeywordFunction): |
| 28 | return p.parseCreateFunction(pos, orReplace) |
| 29 | case p.matchKeyword(KeywordMaterialized): |
| 30 | return p.parseCreateMaterializedView(pos) |
| 31 | case p.matchKeyword(KeywordLive): |
| 32 | return p.parseCreateLiveView(pos) |
| 33 | case p.matchKeyword(KeywordView): |
| 34 | return p.parseCreateView(pos, orReplace) |
| 35 | case p.matchKeyword(KeywordRole): |
| 36 | return p.parseCreateRole(pos) |
| 37 | case p.matchKeyword(KeywordUser): |
| 38 | return p.parseCreateUser(pos) |
| 39 | default: |
| 40 | return nil, fmt.Errorf("expected keyword: NAMED|DATABASE|DICTIONARY|TABLE|VIEW|ROLE|USER|FUNCTION|MATERIALIZED, but got %q", |
| 41 | p.lastTokenKind()) |
| 42 | } |
| 43 | case p.matchKeyword(KeywordAlter): |
| 44 | _ = p.lexer.consumeToken() |
| 45 | switch { |
| 46 | case p.matchKeyword(KeywordRole): |
| 47 | return p.parseAlterRole(pos) |
| 48 | case p.matchKeyword(KeywordTable): |
| 49 | return p.parseAlterTable(pos) |
| 50 | default: |
| 51 | return nil, fmt.Errorf("expected keyword: TABLE|ROLE, but got %q", p.last().String) |
| 52 | } |
| 53 | case p.matchKeyword(KeywordDrop), |
| 54 | p.matchKeyword(KeywordDetach): |
| 55 | _ = p.lexer.consumeToken() |
| 56 | switch { |
| 57 | case p.matchKeyword(KeywordDatabase): |
| 58 | return p.parseDropDatabase(pos) |
| 59 | case p.matchKeyword(KeywordTemporary), |
| 60 | p.matchKeyword(KeywordView), |
| 61 | p.matchKeyword(KeywordDictionary), |
| 62 | p.matchKeyword(KeywordTable): |
| 63 | return p.parseDropStmt(pos) |
| 64 | case p.matchKeyword(KeywordUser), |
| 65 | p.matchKeyword(KeywordRole): |
no test coverage detected