Skip to content
This repository was archived by the owner on Jun 15, 2023. It is now read-only.

Commit 2e2cd7a

Browse files
authored
Merge pull request #43 from wemrysi/bug/join-cond-precedence
[qz-3635] Correct precedence when parsing join conditions
2 parents d3a6cfa + efbf681 commit 2e2cd7a

File tree

3 files changed

+35
-1
lines changed

3 files changed

+35
-1
lines changed

src/SqlSquared/Parser.purs

+1-1
Original file line numberDiff line numberDiff line change
@@ -601,7 +601,7 @@ stdJoinRelation = do
601601
_ ← keyword "join"
602602
right ← simpleRelation
603603
_ ← keyword "on"
604-
clause ← expr
604+
clause ← definedExpr
605605
pure \left →
606606
Sig.JoinRelation
607607
{ left

test/src/Main.purs

+2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@ import Test.Constructors as Constructors
1515
import Test.Argonaut as Argonaut
1616
import Test.Gen as Gen
1717
import Test.Parse as Parse
18+
import Test.Precedence as Precedence
1819

1920
type Effects =
2021
( testOutputTESTOUTPUT
@@ -30,5 +31,6 @@ main = do
3031
Constructors.testSuite
3132
Argonaut.testSuite
3233
Parse.testSuite
34+
Precedence.testSuite
3335

3436
Gen.test

test/src/Precedence.purs

+32
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
module Test.Precedence where
2+
3+
import Prelude
4+
5+
import Data.Either as E
6+
import Matryoshka (project)
7+
8+
import SqlSquared as S
9+
10+
import Test.Unit (suite, test, Test, TestSuite)
11+
import Test.Unit.Assert as Assert
12+
13+
testParsedSql e. (S.Sql Test e) String Test e
14+
testParsedSql f s =
15+
case S.prettyParse S.parse s of
16+
E.Left err → Assert.assert ("\n" <> err) false
17+
E.Right sql → f sql
18+
19+
limitedJoinQuery String
20+
limitedJoinQuery = "select * from a inner join b on a.id = b.id limit 10"
21+
22+
expectLimit S.Sql Boolean
23+
expectLimit sql =
24+
case project sql of
25+
(S.Binop { lhs: _, rhs: _, op: S.Limit }) → true
26+
_ → false
27+
28+
testSuite e. TestSuite e
29+
testSuite = do
30+
suite "tests for parser precedence" do
31+
test "limit should have higher precedence than join condition"
32+
$ testParsedSql (Assert.assert "limit parsed incorrectly" <<< expectLimit) limitedJoinQuery

0 commit comments

Comments
 (0)