(pos Pos)
| 2104 | } |
| 2105 | |
| 2106 | func (p *Parser) parseDictionaryEngineClause(pos Pos) (*DictionaryEngineClause, error) { |
| 2107 | engine := &DictionaryEngineClause{ |
| 2108 | EnginePos: pos, |
| 2109 | } |
| 2110 | |
| 2111 | // Parse PRIMARY KEY clause (optional) |
| 2112 | if p.matchKeyword(KeywordPrimary) { |
| 2113 | primaryKey, err := p.parseDictionaryPrimaryKeyClause(p.Pos()) |
| 2114 | if err != nil { |
| 2115 | return nil, err |
| 2116 | } |
| 2117 | engine.PrimaryKey = primaryKey |
| 2118 | } |
| 2119 | |
| 2120 | // Parse engine clauses (SOURCE, LIFETIME, LAYOUT, RANGE, SETTINGS) |
| 2121 | for { |
| 2122 | switch { |
| 2123 | case p.matchKeyword(KeywordSource): |
| 2124 | if engine.Source != nil { |
| 2125 | return nil, fmt.Errorf("duplicate SOURCE clause") |
| 2126 | } |
| 2127 | source, err := p.parseDictionarySourceClause(p.Pos()) |
| 2128 | if err != nil { |
| 2129 | return nil, err |
| 2130 | } |
| 2131 | engine.Source = source |
| 2132 | case p.matchKeyword(KeywordLifetime): |
| 2133 | if engine.Lifetime != nil { |
| 2134 | return nil, fmt.Errorf("duplicate LIFETIME clause") |
| 2135 | } |
| 2136 | lifetime, err := p.parseDictionaryLifetimeClause(p.Pos()) |
| 2137 | if err != nil { |
| 2138 | return nil, err |
| 2139 | } |
| 2140 | engine.Lifetime = lifetime |
| 2141 | case p.matchKeyword(KeywordLayout): |
| 2142 | if engine.Layout != nil { |
| 2143 | return nil, fmt.Errorf("duplicate LAYOUT clause") |
| 2144 | } |
| 2145 | layout, err := p.parseDictionaryLayoutClause(p.Pos()) |
| 2146 | if err != nil { |
| 2147 | return nil, err |
| 2148 | } |
| 2149 | engine.Layout = layout |
| 2150 | case p.matchKeyword(KeywordRange): |
| 2151 | if engine.Range != nil { |
| 2152 | return nil, fmt.Errorf("duplicate RANGE clause") |
| 2153 | } |
| 2154 | rangeClause, err := p.parseDictionaryRangeClause(p.Pos()) |
| 2155 | if err != nil { |
| 2156 | return nil, err |
| 2157 | } |
| 2158 | engine.Range = rangeClause |
| 2159 | case p.matchKeyword(KeywordSettings): |
| 2160 | if engine.Settings != nil { |
| 2161 | return nil, fmt.Errorf("duplicate SETTINGS clause") |
| 2162 | } |
| 2163 | settings, err := p.parseDictionarySettingsClause(p.Pos()) |
no test coverage detected