enhancing tests
This commit is contained in:
parent
55a81cfe8a
commit
334cd6af9d
228
test/test_ast.ml
228
test/test_ast.ml
@ -11,40 +11,122 @@ let query_testable =
|
|||||||
Alcotest.testable Ast.pp_query equal_ast
|
Alcotest.testable Ast.pp_query equal_ast
|
||||||
|
|
||||||
let test_simple_select () =
|
let test_simple_select () =
|
||||||
let q1 = parse "SELECT a FROM t" in
|
let query = "SELECT a FROM t" in
|
||||||
let ast1 = Query(Select([Column("a")], [Table("t")], None)) in
|
let q1 = parse query in
|
||||||
Alcotest.(check query_testable) "Ok" q1 ast1;
|
|
||||||
|
|
||||||
let q2 = parse "SELECT * FROM t" in
|
|
||||||
let ast2 = Query(Select([Asterisk], [Table("t")], None)) in
|
|
||||||
Alcotest.(check query_testable) "Ok2" q2 ast2
|
|
||||||
|
|
||||||
let test_default_join () =
|
|
||||||
let q1 = parse "SELECT a FROM t1 JOIN t2 ON a = b" in
|
|
||||||
let ast1 = Query(
|
let ast1 = Query(
|
||||||
Select(
|
Select(
|
||||||
[Column("a")],
|
[
|
||||||
[Join(
|
Column(
|
||||||
|
Ref("a"),
|
||||||
|
None
|
||||||
|
)
|
||||||
|
],
|
||||||
|
Some(
|
||||||
|
[
|
||||||
|
Table("t")
|
||||||
|
]
|
||||||
|
),
|
||||||
|
None
|
||||||
|
)
|
||||||
|
) in
|
||||||
|
Alcotest.(check query_testable) query q1 ast1;
|
||||||
|
|
||||||
|
let query = "SELECT * FROM t" in
|
||||||
|
let q2 = parse query in
|
||||||
|
let ast2 = Query(
|
||||||
|
Select(
|
||||||
|
[
|
||||||
|
Asterisk
|
||||||
|
],
|
||||||
|
Some(
|
||||||
|
[
|
||||||
|
Table("t")
|
||||||
|
]
|
||||||
|
t ),
|
||||||
|
None
|
||||||
|
)
|
||||||
|
) in
|
||||||
|
Alcotest.(check query_testable) query q2 ast2 ;
|
||||||
|
|
||||||
|
let query = "SELECT 'a'" in
|
||||||
|
let q3 = parse query in
|
||||||
|
let ast3 = Query(
|
||||||
|
Select(
|
||||||
|
[
|
||||||
|
Column(
|
||||||
|
StringLiteral("a"),
|
||||||
|
None
|
||||||
|
)
|
||||||
|
],
|
||||||
|
None,
|
||||||
|
None
|
||||||
|
)
|
||||||
|
) in
|
||||||
|
Alcotest.(check query_testable) query q3 ast3;
|
||||||
|
|
||||||
|
let q4 = parse "SELECT DATE '2024-12-25' AS date" in
|
||||||
|
let ast4 = Query(
|
||||||
|
Select(
|
||||||
|
[
|
||||||
|
Column(
|
||||||
|
DateLiteral("2024-12-25"),
|
||||||
|
Some(
|
||||||
|
As("date")
|
||||||
|
)
|
||||||
|
)
|
||||||
|
],
|
||||||
|
None,
|
||||||
|
None
|
||||||
|
)
|
||||||
|
) in
|
||||||
|
Alcotest.(check query_testable) "OK" q4 ast4
|
||||||
|
|
||||||
|
let test_default_join () =
|
||||||
|
let q1 = parse "SELECT a FROM t1 JOIN t2 ON b = c" in
|
||||||
|
let ast1 = Query(
|
||||||
|
Select(
|
||||||
|
[
|
||||||
|
Column(
|
||||||
|
Ref("a"),
|
||||||
|
None
|
||||||
|
)
|
||||||
|
],
|
||||||
|
Some(
|
||||||
|
[
|
||||||
|
Join(
|
||||||
Table("t1"),
|
Table("t1"),
|
||||||
Left,
|
Left,
|
||||||
Table("t2"),
|
Table("t2"),
|
||||||
Some(
|
Some(
|
||||||
Condition(
|
Condition(
|
||||||
Ref("a"),
|
Ref("b"),
|
||||||
Comparison(Equals, Ref("b"))
|
Comparison(
|
||||||
|
Equals,
|
||||||
|
Ref("c"))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)],
|
)
|
||||||
|
]
|
||||||
|
),
|
||||||
None
|
None
|
||||||
)
|
)
|
||||||
) in
|
) in
|
||||||
Alcotest.(check query_testable) "Ok" q1 ast1
|
Alcotest.(check query_testable) "Ok" q1 ast1
|
||||||
|
|
||||||
let test_left_join () =
|
let test_left_join () =
|
||||||
let q1 = parse "SELECT a FROM t1 LEFT JOIN t2 ON a = b" in
|
let query = "SELECT a FROM t1 LEFT JOIN t2 ON a = b" in
|
||||||
|
let q1 = parse query in
|
||||||
let ast1 = Query(
|
let ast1 = Query(
|
||||||
Select([Column("a")],
|
Select(
|
||||||
[Join(
|
[
|
||||||
|
Column(
|
||||||
|
Ref("a"),
|
||||||
|
None
|
||||||
|
)
|
||||||
|
],
|
||||||
|
Some(
|
||||||
|
[
|
||||||
|
Join(
|
||||||
Table("t1"),
|
Table("t1"),
|
||||||
Left,
|
Left,
|
||||||
Table("t2"),
|
Table("t2"),
|
||||||
@ -54,17 +136,27 @@ let test_left_join () =
|
|||||||
Comparison(Equals, Ref("b"))
|
Comparison(Equals, Ref("b"))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)],
|
)
|
||||||
|
]
|
||||||
|
),
|
||||||
None
|
None
|
||||||
)
|
)
|
||||||
) in
|
) in
|
||||||
Alcotest.(check query_testable) "Ok" q1 ast1
|
Alcotest.(check query_testable) query q1 ast1
|
||||||
|
|
||||||
let test_right_join () =
|
let test_right_join () =
|
||||||
let q1 = parse "SELECT a FROM t1 RIGHT JOIN t2 ON a = b" in
|
let q1 = parse "SELECT a FROM t1 RIGHT JOIN t2 ON a = b" in
|
||||||
let ast1 = Query(
|
let ast1 = Query(
|
||||||
Select([Column("a")],
|
Select(
|
||||||
[Join(
|
[
|
||||||
|
Column(
|
||||||
|
Ref("a"),
|
||||||
|
None
|
||||||
|
)
|
||||||
|
],
|
||||||
|
Some(
|
||||||
|
[
|
||||||
|
Join(
|
||||||
Table("t1"),
|
Table("t1"),
|
||||||
Right,
|
Right,
|
||||||
Table("t2"),
|
Table("t2"),
|
||||||
@ -74,7 +166,9 @@ let test_right_join () =
|
|||||||
Comparison(Equals, Ref("b"))
|
Comparison(Equals, Ref("b"))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)],
|
)
|
||||||
|
]
|
||||||
|
),
|
||||||
None
|
None
|
||||||
)
|
)
|
||||||
) in
|
) in
|
||||||
@ -83,8 +177,16 @@ let test_right_join () =
|
|||||||
let test_inner_join () =
|
let test_inner_join () =
|
||||||
let q1 = parse "SELECT a FROM t1 INNER JOIN t2 ON a = b" in
|
let q1 = parse "SELECT a FROM t1 INNER JOIN t2 ON a = b" in
|
||||||
let ast1 = Query(
|
let ast1 = Query(
|
||||||
Select([Column("a")],
|
Select(
|
||||||
[Join(
|
[
|
||||||
|
Column(
|
||||||
|
Ref("a"),
|
||||||
|
None
|
||||||
|
)
|
||||||
|
],
|
||||||
|
Some(
|
||||||
|
[
|
||||||
|
Join(
|
||||||
Table("t1"),
|
Table("t1"),
|
||||||
Inner,
|
Inner,
|
||||||
Table("t2"),
|
Table("t2"),
|
||||||
@ -94,7 +196,9 @@ let test_inner_join () =
|
|||||||
Comparison(Equals, Ref("b"))
|
Comparison(Equals, Ref("b"))
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
)],
|
)
|
||||||
|
]
|
||||||
|
),
|
||||||
None
|
None
|
||||||
)
|
)
|
||||||
) in
|
) in
|
||||||
@ -103,13 +207,23 @@ let test_inner_join () =
|
|||||||
let test_union_join () =
|
let test_union_join () =
|
||||||
let q1 = parse "SELECT a FROM t1 UNION JOIN t2" in
|
let q1 = parse "SELECT a FROM t1 UNION JOIN t2" in
|
||||||
let ast1 = Query(
|
let ast1 = Query(
|
||||||
Select([Column("a")],
|
Select(
|
||||||
[Join(
|
[
|
||||||
|
Column(
|
||||||
|
Ref("a"),
|
||||||
|
None
|
||||||
|
)
|
||||||
|
],
|
||||||
|
Some(
|
||||||
|
[
|
||||||
|
Join(
|
||||||
Table("t1"),
|
Table("t1"),
|
||||||
Union,
|
Union,
|
||||||
Table("t2"),
|
Table("t2"),
|
||||||
None
|
None
|
||||||
)],
|
)
|
||||||
|
]
|
||||||
|
),
|
||||||
None
|
None
|
||||||
)
|
)
|
||||||
) in
|
) in
|
||||||
@ -118,13 +232,23 @@ let test_union_join () =
|
|||||||
let test_cross_join () =
|
let test_cross_join () =
|
||||||
let q1 = parse "SELECT a FROM t1 CROSS JOIN t2" in
|
let q1 = parse "SELECT a FROM t1 CROSS JOIN t2" in
|
||||||
let ast1 = Query(
|
let ast1 = Query(
|
||||||
Select([Column("a")],
|
Select(
|
||||||
[Join(
|
[
|
||||||
|
Column(
|
||||||
|
Ref("a"),
|
||||||
|
None
|
||||||
|
)
|
||||||
|
],
|
||||||
|
Some(
|
||||||
|
[
|
||||||
|
Join(
|
||||||
Table("t1"),
|
Table("t1"),
|
||||||
Cross,
|
Cross,
|
||||||
Table("t2"),
|
Table("t2"),
|
||||||
None
|
None
|
||||||
)],
|
)
|
||||||
|
]
|
||||||
|
),
|
||||||
None
|
None
|
||||||
)
|
)
|
||||||
) in
|
) in
|
||||||
@ -133,13 +257,23 @@ let test_cross_join () =
|
|||||||
let test_natural_join () =
|
let test_natural_join () =
|
||||||
let q1 = parse "SELECT a FROM t1 NATURAL JOIN t2" in
|
let q1 = parse "SELECT a FROM t1 NATURAL JOIN t2" in
|
||||||
let ast1 = Query(
|
let ast1 = Query(
|
||||||
Select([Column("a")],
|
Select(
|
||||||
[Join(
|
[
|
||||||
|
Column(
|
||||||
|
Ref("a"),
|
||||||
|
None
|
||||||
|
)
|
||||||
|
],
|
||||||
|
Some(
|
||||||
|
[
|
||||||
|
Join(
|
||||||
Table("t1"),
|
Table("t1"),
|
||||||
Natural,
|
Natural,
|
||||||
Table("t2"),
|
Table("t2"),
|
||||||
None
|
None
|
||||||
)],
|
)
|
||||||
|
]
|
||||||
|
),
|
||||||
None
|
None
|
||||||
)
|
)
|
||||||
) in
|
) in
|
||||||
@ -148,7 +282,14 @@ let test_natural_join () =
|
|||||||
let test_join_join () =
|
let test_join_join () =
|
||||||
let q1 = parse "SELECT a FROM t1 JOIN t2 ON a = b JOIN t3 ON a = c" in
|
let q1 = parse "SELECT a FROM t1 JOIN t2 ON a = b JOIN t3 ON a = c" in
|
||||||
let ast1 = Query(
|
let ast1 = Query(
|
||||||
Select([Column("a")], [
|
Select(
|
||||||
|
[
|
||||||
|
Column(
|
||||||
|
Ref("a"),
|
||||||
|
None
|
||||||
|
)
|
||||||
|
],
|
||||||
|
Some([
|
||||||
Join(
|
Join(
|
||||||
Join(
|
Join(
|
||||||
Table("t1"),
|
Table("t1"),
|
||||||
@ -170,7 +311,7 @@ let test_join_join () =
|
|||||||
)
|
)
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
],
|
]),
|
||||||
None
|
None
|
||||||
)
|
)
|
||||||
) in
|
) in
|
||||||
@ -180,8 +321,17 @@ let test_where_equals () =
|
|||||||
let q1 = parse "SELECT a FROM t1 WHERE a = a OR a = b" in
|
let q1 = parse "SELECT a FROM t1 WHERE a = a OR a = b" in
|
||||||
let ast1 = Query(
|
let ast1 = Query(
|
||||||
Select(
|
Select(
|
||||||
[Column("a")],
|
[
|
||||||
[Table("t1")],
|
Column(
|
||||||
|
Ref("a"),
|
||||||
|
None
|
||||||
|
)
|
||||||
|
],
|
||||||
|
Some(
|
||||||
|
[
|
||||||
|
Table("t1")
|
||||||
|
]
|
||||||
|
),
|
||||||
None
|
None
|
||||||
)
|
)
|
||||||
) in
|
) in
|
||||||
|
Loading…
Reference in New Issue
Block a user