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

Method parseCreateMaterializedView

parser/parser_view.go:19–171  ·  view source on GitHub ↗

parseCreateMaterializedView parses a CREATE MATERIALIZED VIEW statement. The syntax is as follows: CREATE MATERIALIZED VIEW [IF NOT EXISTS] [db.]table_name [ON CLUSTER cluster] REFRESH EVERY|AFTER interval [OFFSET interval] [RANDOMIZE FOR interval] [DEPENDS ON [db.]name [, [db.]name [, ...]]] [SETT

(pos Pos)

Source from the content-addressed store, hash-verified

17// AS SELECT ...
18// [COMMENT 'comment']
19func (p *Parser) parseCreateMaterializedView(pos Pos) (*CreateMaterializedView, error) {
20 if err := p.expectKeyword(KeywordMaterialized); err != nil {
21 return nil, err
22 }
23 if err := p.expectKeyword(KeywordView); err != nil {
24 return nil, err
25 }
26
27 createMaterializedView := &CreateMaterializedView{CreatePos: pos}
28
29 // parse IF NOT EXISTS clause if exists
30 var err error
31 createMaterializedView.IfNotExists, err = p.tryParseIfNotExists()
32 if err != nil {
33 return nil, err
34 }
35
36 tableIdentifier, err := p.parseTableIdentifier(p.Pos())
37 if err != nil {
38 return nil, err
39 }
40 createMaterializedView.Name = tableIdentifier
41
42 onCluster, err := p.tryParseClusterClause(p.Pos())
43 if err != nil {
44 return nil, err
45 }
46 createMaterializedView.OnCluster = onCluster
47
48 refreshExpr, err := p.tryParseRefreshExpr(p.Pos())
49 if err != nil {
50 return nil, err
51 }
52 createMaterializedView.Refresh = refreshExpr
53
54 if p.tryConsumeKeywords(KeywordRandomize, KeywordFor) {
55 randomizeFor, err := p.parseInterval(false)
56 if err != nil {
57 return nil, err
58 }
59 createMaterializedView.RandomizeFor = randomizeFor
60 }
61 if p.tryConsumeKeywords(KeywordDepends, KeywordOn) {
62 dependsOnTables := make([]*TableIdentifier, 0)
63 table, err := p.parseTableIdentifier(p.Pos())
64 if err != nil {
65 return nil, err
66 }
67 dependsOnTables = append(dependsOnTables, table)
68 for p.matchTokenKind(TokenKindComma) {
69 table, err := p.parseTableIdentifier(p.Pos())
70 if err != nil {
71 return nil, err
72 }
73 dependsOnTables = append(dependsOnTables, table)
74 }
75 createMaterializedView.DependsOn = dependsOnTables
76 }

Callers 1

parseDDLMethod · 0.95

Calls 15

expectKeywordMethod · 0.95
tryParseIfNotExistsMethod · 0.95
parseTableIdentifierMethod · 0.95
PosMethod · 0.95
tryParseClusterClauseMethod · 0.95
tryParseRefreshExprMethod · 0.95
tryConsumeKeywordsMethod · 0.95
parseIntervalMethod · 0.95
matchTokenKindMethod · 0.95
matchKeywordMethod · 0.95

Tested by

no test coverage detected