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

Method tryParseCompressionCodecs

parser/parser_column.go:1325–1408  ·  view source on GitHub ↗
(pos Pos)

Source from the content-addressed store, hash-verified

1323}
1324
1325func (p *Parser) tryParseCompressionCodecs(pos Pos) (*CompressionCodec, error) {
1326 if !p.tryConsumeKeywords(KeywordCodec) {
1327 return nil, nil // nolint
1328 }
1329
1330 if err := p.expectTokenKind(TokenKindLParen); err != nil {
1331 return nil, err
1332 }
1333
1334 // parse codec name
1335 codecType, err := p.parseIdent()
1336 if err != nil {
1337 return nil, err
1338 }
1339 // parse DELTA if CODEC(Delta, ZSTD(1))
1340 // or CODEC(Delta(9), ZSTD(1)) or CODEC(T64, ZSTD(1))
1341 var name *Ident
1342 var typeLevel *NumberLiteral
1343 switch strings.ToUpper(codecType.Name) {
1344 case "DELTA", "DOUBLEDELTA", "T64", "GORILLA":
1345 // try parse delta level
1346 typeLevel, err = p.tryParseCompressionLevel(p.Pos())
1347 if err != nil {
1348 return nil, err
1349 }
1350
1351 if p.matchTokenKind(TokenKindComma) {
1352 if err := p.expectTokenKind(TokenKindComma); err != nil {
1353 return nil, err
1354 }
1355 name, err = p.parseIdent()
1356 if err != nil {
1357 return nil, err
1358 }
1359 }
1360 case "ZSTD", "LZ4HC", "LH4":
1361 // For compression codecs, try to parse level
1362 typeLevel, err = p.tryParseCompressionLevel(p.Pos())
1363 if err != nil {
1364 return nil, err
1365 }
1366 }
1367
1368 var level *NumberLiteral
1369 // TODO: check if the codec name is valid
1370 if name != nil {
1371 switch strings.ToUpper(name.Name) {
1372 case "ZSTD", "LZ4HC", "LH4":
1373 level, err = p.tryParseCompressionLevel(p.Pos())
1374 if err != nil {
1375 return nil, err
1376 }
1377 }
1378 }
1379
1380 rightParenPos := p.End()
1381 if err := p.expectTokenKind(TokenKindRParen); err != nil {
1382 return nil, err

Callers 2

parseTableColumnExprMethod · 0.95
tryParseTTLPolicyMethod · 0.95

Calls 7

tryConsumeKeywordsMethod · 0.95
expectTokenKindMethod · 0.95
parseIdentMethod · 0.95
PosMethod · 0.95
matchTokenKindMethod · 0.95
EndMethod · 0.95

Tested by

no test coverage detected