enhancing tests

This commit is contained in:
Simon Petit 2024-12-10 18:01:33 +01:00
parent 55a81cfe8a
commit 334cd6af9d

View File

@ -11,70 +11,164 @@ 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(
Table("t1"), Ref("a"),
Left, None
Table("t2"), )
Some( ],
Condition( Some(
Ref("a"), [
Comparison(Equals, Ref("b")) 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"),
Left,
Table("t2"),
Some(
Condition(
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( [
Table("t1"), Column(
Left, Ref("a"),
Table("t2"), None
Some(
Condition(
Ref("a"),
Comparison(Equals, Ref("b"))
)
) )
)], ],
Some(
[
Join(
Table("t1"),
Left,
Table("t2"),
Some(
Condition(
Ref("a"),
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( [
Table("t1"), Column(
Right, Ref("a"),
Table("t2"), None
Some(
Condition(
Ref("a"),
Comparison(Equals, Ref("b"))
)
) )
)], ],
Some(
[
Join(
Table("t1"),
Right,
Table("t2"),
Some(
Condition(
Ref("a"),
Comparison(Equals, Ref("b"))
)
)
)
]
),
None None
) )
) in ) in
@ -83,18 +177,28 @@ 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( [
Table("t1"), Column(
Inner, Ref("a"),
Table("t2"), None
Some(
Condition(
Ref("a"),
Comparison(Equals, Ref("b"))
)
) )
)], ],
Some(
[
Join(
Table("t1"),
Inner,
Table("t2"),
Some(
Condition(
Ref("a"),
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( [
Table("t1"), Column(
Union, Ref("a"),
Table("t2"), None
None )
)], ],
Some(
[
Join(
Table("t1"),
Union,
Table("t2"),
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( [
Table("t1"), Column(
Cross, Ref("a"),
Table("t2"), None
None )
)], ],
Some(
[
Join(
Table("t1"),
Cross,
Table("t2"),
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( [
Table("t1"), Column(
Natural, Ref("a"),
Table("t2"), None
None )
)], ],
Some(
[
Join(
Table("t1"),
Natural,
Table("t2"),
None
)
]
),
None None
) )
) in ) in
@ -148,30 +282,37 @@ 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(
Join( [
Column(
Ref("a"),
None
)
],
Some([
Join( Join(
Table("t1"), Join(
Table("t1"),
Left,
Table("t2"),
Some(
Condition(
Ref("a"),
Comparison(Equals, Ref("b"))
)
)
),
Left, Left,
Table("t2"), Table("t3"),
Some( Some(
Condition( Condition(
Ref("a"), Ref("a"),
Comparison(Equals, Ref("b")) Comparison(Equals, Ref("c"))
) )
) )
),
Left,
Table("t3"),
Some(
Condition(
Ref("a"),
Comparison(Equals, Ref("c"))
)
) )
) ]),
], None
None
) )
) in ) in
Alcotest.(check query_testable) "Ok" q1 ast1 Alcotest.(check query_testable) "Ok" q1 ast1
@ -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