Skip to content

Commit 652113f

Browse files
With clause support extended,added test cases.
1 parent bc14c9d commit 652113f

3 files changed

Lines changed: 9 additions & 15 deletions

File tree

join.go

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,6 @@ import (
88

99
func parseJoin(cursor *parsly.Cursor, join *query.Join, dest *query.Select, expectOn bool) error {
1010
match := cursor.MatchAfterOptional(whitespaceMatcher, parenthesesMatcher, exprMatcher, selectorMatcher)
11-
var skipAlias bool
1211
switch match.Code {
1312
case parenthesesCode:
1413
join.With = expr.NewRaw(match.Text(cursor))
@@ -18,17 +17,9 @@ func parseJoin(cursor *parsly.Cursor, join *query.Join, dest *query.Select, expe
1817
if match.Code == parenthesesCode {
1918
identityOrAlias += match.Text(cursor)
2019
}
21-
withSelect := dest.WithSelects.Select(identityOrAlias)
22-
if withSelect != nil {
23-
join.With = expr.NewSelector(identityOrAlias)
24-
join.Alias = ""
25-
skipAlias = true
26-
} else {
27-
join.With = expr.NewSelector(identityOrAlias)
28-
skipAlias = false
29-
}
20+
join.With = expr.NewSelector(identityOrAlias)
3021
}
31-
if join.Alias == "" && !skipAlias {
22+
if join.Alias == "" {
3223
join.Alias = discoverAlias(cursor)
3324
}
3425
match = cursor.MatchAfterOptional(whitespaceMatcher, commentBlockMatcher, onKeywordMatcher)

query.go

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -94,18 +94,15 @@ beginMatch:
9494
case fromKeyword:
9595
dest.From = query.From{}
9696
match = cursor.MatchAfterOptional(whitespaceMatcher, tableMatcher, parenthesesMatcher)
97-
var skipAlias bool
9897
switch match.Code {
9998
case tableTokenCode:
10099
identityOrAlias := match.Text(cursor)
101100
withSelect := dest.WithSelects.Select(identityOrAlias)
102101
if withSelect != nil {
103102
dest.From.X = expr.NewSelector(identityOrAlias)
104103
dest.From.Alias = ""
105-
skipAlias = true
106104
} else {
107105
dest.From.X = expr.NewSelector(identityOrAlias)
108-
skipAlias = false
109106
}
110107
case parenthesesCode:
111108
dest.From.X = expr.NewRaw(match.Text(cursor))
@@ -120,7 +117,7 @@ beginMatch:
120117
}
121118
rawNode.X = subSelect
122119
}
123-
if dest.From.Alias == "" && !skipAlias {
120+
if dest.From.Alias == "" {
124121
dest.From.Alias = discoverAlias(cursor)
125122
}
126123
match = cursor.MatchAfterOptional(whitespaceMatcher, commentBlockMatcher)

query_test.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,12 @@ func TestParseSelect(t *testing.T) {
7272
SELECT p.*, v.* FROM p JOIN v ON p.VENDOR_ID = v.ID`,
7373
expect: `WITH p AS (SELECT * FROM product), v AS (SELECT * FROM vendor) SELECT p.*, v.* FROM p JOIN v ON p.VENDOR_ID = v.ID`,
7474
},
75+
{
76+
description: "with join alias",
77+
SQL: `WITH audiences AS (SELECT 1 AS id)
78+
SELECT ar.id FROM foo f JOIN audiences ar ON ar.id = f.id`,
79+
expect: `WITH audiences AS (SELECT 1 AS id) SELECT ar.id FROM foo f JOIN audiences ar ON ar.id = f.id`,
80+
},
7581

7682
{
7783
description: "group by",

0 commit comments

Comments
 (0)