summaryrefslogtreecommitdiffstats
path: root/tests/dialects/test_prql.py
blob: 69e2e287fb8c91a9d8e54f8a432662ff0198310d (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
from tests.dialects.test_dialect import Validator


class TestPRQL(Validator):
    dialect = "prql"

    def test_prql(self):
        self.validate_identity("from x", "SELECT * FROM x")
        self.validate_identity("from x derive a + 1", "SELECT *, a + 1 FROM x")
        self.validate_identity("from x derive x = a + 1", "SELECT *, a + 1 AS x FROM x")
        self.validate_identity("from x derive {a + 1}", "SELECT *, a + 1 FROM x")
        self.validate_identity("from x derive {x = a + 1, b}", "SELECT *, a + 1 AS x, b FROM x")
        self.validate_identity(
            "from x derive {x = a + 1, b} select {y = x, 2}", "SELECT a + 1 AS y, 2 FROM x"
        )
        self.validate_identity("from x take 10", "SELECT * FROM x LIMIT 10")
        self.validate_identity("from x take 10 take 5", "SELECT * FROM x LIMIT 5")
        self.validate_identity("from x filter age > 25", "SELECT * FROM x WHERE age > 25")
        self.validate_identity(
            "from x derive {x = a + 1, b} filter age > 25",
            "SELECT *, a + 1 AS x, b FROM x WHERE age > 25",
        )
        self.validate_identity("from x filter dept != 'IT'", "SELECT * FROM x WHERE dept <> 'IT'")
        self.validate_identity(
            "from x filter p == 'product' select { a, b }", "SELECT a, b FROM x WHERE p = 'product'"
        )
        self.validate_identity(
            "from x filter age > 25 filter age < 27", "SELECT * FROM x WHERE age > 25 AND age < 27"
        )
        self.validate_identity(
            "from x filter (age > 25 && age < 27)", "SELECT * FROM x WHERE (age > 25 AND age < 27)"
        )
        self.validate_identity(
            "from x filter (age > 25 || age < 27)", "SELECT * FROM x WHERE (age > 25 OR age < 27)"
        )
        self.validate_identity(
            "from x filter (age > 25 || age < 22) filter age > 26 filter age < 27",
            "SELECT * FROM x WHERE ((age > 25 OR age < 22) AND age > 26) AND age < 27",
        )
        self.validate_identity(
            "from x sort age",
            "SELECT * FROM x ORDER BY age",
        )
        self.validate_identity(
            "from x sort {-age}",
            "SELECT * FROM x ORDER BY age DESC",
        )
        self.validate_identity(
            "from x sort {age, name}",
            "SELECT * FROM x ORDER BY age, name",
        )
        self.validate_identity(
            "from x sort {-age, +name}",
            "SELECT * FROM x ORDER BY age DESC, name",
        )
        self.validate_identity("from x append y", "SELECT * FROM x UNION ALL SELECT * FROM y")
        self.validate_identity("from x remove y", "SELECT * FROM x EXCEPT ALL SELECT * FROM y")
        self.validate_identity(
            "from x intersect y", "SELECT * FROM x INTERSECT ALL SELECT * FROM y"
        )