Skip to content

Commit 4293898

Browse files
committed
Support join strictness after type (RIGHT ANTI JOIN)
ClickHouse allows join strictness modifiers (ANTI, SEMI, ANY, ALL, ASOF) either before or after the join type. This fix adds support for parsing strictness after the type, enabling queries like: - RIGHT ANTI JOIN - LEFT SEMI JOIN etc. 10 tests now pass with this fix.
1 parent 3adff40 commit 4293898

11 files changed

Lines changed: 31 additions & 57 deletions

File tree

parser/parser.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1004,6 +1004,27 @@ func (p *Parser) parseTableElementWithJoin() *ast.TablesInSelectQueryElement {
10041004
join.Type = ast.JoinInner
10051005
}
10061006

1007+
// Parse strictness after type if not already parsed (e.g., RIGHT ANTI JOIN)
1008+
if join.Strictness == "" {
1009+
switch p.current.Token {
1010+
case token.ANY:
1011+
join.Strictness = ast.JoinStrictAny
1012+
p.nextToken()
1013+
case token.ALL:
1014+
join.Strictness = ast.JoinStrictAll
1015+
p.nextToken()
1016+
case token.ASOF:
1017+
join.Strictness = ast.JoinStrictAsof
1018+
p.nextToken()
1019+
case token.SEMI:
1020+
join.Strictness = ast.JoinStrictSemi
1021+
p.nextToken()
1022+
case token.ANTI:
1023+
join.Strictness = ast.JoinStrictAnti
1024+
p.nextToken()
1025+
}
1026+
}
1027+
10071028
if !p.expect(token.JOIN) {
10081029
return nil
10091030
}
Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1 @@
1-
{
2-
"explain_todo": {
3-
"stmt7": true,
4-
"stmt8": true
5-
}
6-
}
1+
{}
Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1 @@
1-
{
2-
"explain_todo": {
3-
"stmt24": true
4-
}
5-
}
1+
{}
Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1 @@
1-
{
2-
"explain_todo": {
3-
"stmt3": true
4-
}
5-
}
1+
{}
Lines changed: 1 addition & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1 @@
1-
{
2-
"explain_todo": {
3-
"stmt10": true,
4-
"stmt13": true,
5-
"stmt16": true,
6-
"stmt8": true
7-
}
8-
}
1+
{}
Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,5 @@
11
{
22
"explain_todo": {
3-
"stmt10": true,
4-
"stmt7": true,
5-
"stmt8": true,
6-
"stmt9": true
3+
"stmt8": true
74
}
85
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1 +1 @@
1-
{"explain_todo":{"stmt24":true}}
1+
{}

parser/testdata/03580_join_runtime_filter/metadata.json

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,6 @@
44
"stmt28": true,
55
"stmt30": true,
66
"stmt32": true,
7-
"stmt33": true,
8-
"stmt34": true,
9-
"stmt35": true
7+
"stmt34": true
108
}
119
}
Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1 @@
1-
{
2-
"explain_todo": {
3-
"stmt8": true,
4-
"stmt9": true
5-
}
6-
}
1+
{}
Lines changed: 1 addition & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,5 @@
11
{
22
"explain_todo": {
3-
"stmt10": true,
4-
"stmt11": true,
5-
"stmt12": true,
6-
"stmt8": true,
7-
"stmt9": true
3+
"stmt12": true
84
}
95
}

0 commit comments

Comments
 (0)