Skip to content

Commit 8e07af7

Browse files
authored
Support empty parentheses in index type definitions (#224)
1 parent 827df05 commit 8e07af7

File tree

4 files changed

+326
-224
lines changed

4 files changed

+326
-224
lines changed

parser/parser_column.go

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -901,7 +901,7 @@ func (p *Parser) parseColumnType(_ Pos) (ColumnType, error) { // nolint:funlen
901901
if err != nil {
902902
return nil, err
903903
}
904-
if p.tryConsumeTokenKind(TokenKindLParen) != nil {
904+
if lParen := p.tryConsumeTokenKind(TokenKindLParen); lParen != nil {
905905
switch {
906906
case p.matchTokenKind(TokenKindIdent):
907907
switch {
@@ -924,6 +924,14 @@ func (p *Parser) parseColumnType(_ Pos) (ColumnType, error) { // nolint:funlen
924924
case p.matchTokenKind(TokenKindInt), p.matchTokenKind(TokenKindFloat):
925925
// fixed size
926926
return p.parseColumnTypeWithParams(ident, p.Pos())
927+
case p.matchTokenKind(TokenKindRParen):
928+
rightParenPos := p.Pos()
929+
_ = p.lexer.consumeToken()
930+
return &TypeWithParams{
931+
Name: ident,
932+
LeftParenPos: lParen.Pos,
933+
RightParenPos: rightParenPos,
934+
}, nil
927935
default:
928936
return nil, fmt.Errorf("unexpected token kind: %v", p.lastTokenKind())
929937
}

parser/testdata/ddl/create_table_with_index.sql

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,12 +2,14 @@ CREATE TABLE IF NOT EXISTS test_local
22
(
33
`common.id` String CODEC(ZSTD(1)),
44
`id` UInt64 CODEC(Delta, ZSTD(1)),
5+
`idx` UInt64 CODEC(Delta, ZSTD(1)),
56
`api_id` UInt64 CODEC(ZSTD(1)),
67
`arr` Array(Int64),
78
`content` String CODEC(ZSTD(1)),
89
`output` String,
910
INDEX id_common_id_bloom_filter common.id TYPE bloom_filter(0.001) GRANULARITY 1,
1011
INDEX id_idx id TYPE minmax GRANULARITY 10,
12+
INDEX idx_id idx TYPE bloom_filter() GRANULARITY 1,
1113
INDEX api_id_idx api_id TYPE set(100) GRANULARITY 2,
1214
INDEX arr_idx arr TYPE bloom_filter(0.01) GRANULARITY 3,
1315
INDEX content_idx content TYPE tokenbf_v1(30720, 2, 0) GRANULARITY 1,

parser/testdata/ddl/format/create_table_with_index.sql

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,14 @@ CREATE TABLE IF NOT EXISTS test_local
33
(
44
`common.id` String CODEC(ZSTD(1)),
55
`id` UInt64 CODEC(Delta, ZSTD(1)),
6+
`idx` UInt64 CODEC(Delta, ZSTD(1)),
67
`api_id` UInt64 CODEC(ZSTD(1)),
78
`arr` Array(Int64),
89
`content` String CODEC(ZSTD(1)),
910
`output` String,
1011
INDEX id_common_id_bloom_filter common.id TYPE bloom_filter(0.001) GRANULARITY 1,
1112
INDEX id_idx id TYPE minmax GRANULARITY 10,
13+
INDEX idx_id idx TYPE bloom_filter() GRANULARITY 1,
1214
INDEX api_id_idx api_id TYPE set(100) GRANULARITY 2,
1315
INDEX arr_idx arr TYPE bloom_filter(0.01) GRANULARITY 3,
1416
INDEX content_idx content TYPE tokenbf_v1(30720, 2, 0) GRANULARITY 1,
@@ -22,4 +24,4 @@ SETTINGS execute_merges_on_single_replica_time_threshold=1200, index_granularity
2224

2325

2426
-- Format SQL:
25-
CREATE TABLE IF NOT EXISTS test_local (`common.id` String CODEC(ZSTD(1)), `id` UInt64 CODEC(Delta, ZSTD(1)), `api_id` UInt64 CODEC(ZSTD(1)), `arr` Array(Int64), `content` String CODEC(ZSTD(1)), `output` String, INDEX id_common_id_bloom_filter common.id TYPE bloom_filter(0.001) GRANULARITY 1, INDEX id_idx id TYPE minmax GRANULARITY 10, INDEX api_id_idx api_id TYPE set(100) GRANULARITY 2, INDEX arr_idx arr TYPE bloom_filter(0.01) GRANULARITY 3, INDEX content_idx content TYPE tokenbf_v1(30720, 2, 0) GRANULARITY 1, INDEX output_idx output TYPE ngrambf_v1(3, 10000, 2, 1) GRANULARITY 2) ENGINE = ReplicatedMergeTree('/root/test_local', '{replica}') ORDER BY (toUnixTimestamp64Nano(`timestamp`), `api_id`) PARTITION BY toStartOfHour(`timestamp`) TTL toStartOfHour(`timestamp`) + INTERVAL 7 DAY, toStartOfHour(`timestamp`) + INTERVAL 2 DAY SETTINGS execute_merges_on_single_replica_time_threshold=1200, index_granularity=16384, max_bytes_to_merge_at_max_space_in_pool=64424509440, storage_policy='main', ttl_only_drop_parts=1;
27+
CREATE TABLE IF NOT EXISTS test_local (`common.id` String CODEC(ZSTD(1)), `id` UInt64 CODEC(Delta, ZSTD(1)), `idx` UInt64 CODEC(Delta, ZSTD(1)), `api_id` UInt64 CODEC(ZSTD(1)), `arr` Array(Int64), `content` String CODEC(ZSTD(1)), `output` String, INDEX id_common_id_bloom_filter common.id TYPE bloom_filter(0.001) GRANULARITY 1, INDEX id_idx id TYPE minmax GRANULARITY 10, INDEX idx_id idx TYPE bloom_filter() GRANULARITY 1, INDEX api_id_idx api_id TYPE set(100) GRANULARITY 2, INDEX arr_idx arr TYPE bloom_filter(0.01) GRANULARITY 3, INDEX content_idx content TYPE tokenbf_v1(30720, 2, 0) GRANULARITY 1, INDEX output_idx output TYPE ngrambf_v1(3, 10000, 2, 1) GRANULARITY 2) ENGINE = ReplicatedMergeTree('/root/test_local', '{replica}') ORDER BY (toUnixTimestamp64Nano(`timestamp`), `api_id`) PARTITION BY toStartOfHour(`timestamp`) TTL toStartOfHour(`timestamp`) + INTERVAL 7 DAY, toStartOfHour(`timestamp`) + INTERVAL 2 DAY SETTINGS execute_merges_on_single_replica_time_threshold=1200, index_granularity=16384, max_bytes_to_merge_at_max_space_in_pool=64424509440, storage_policy='main', ttl_only_drop_parts=1;

0 commit comments

Comments
 (0)