Compare commits
No commits in common. "827a7fd1d3f34da4ba6996ec94ab56f571e7b71e" and "7e8c6379413bd4a00c6da806dd9d7c408f52f756" have entirely different histories.
827a7fd1d3
...
7e8c637941
10
lib/ast.ml
10
lib/ast.ml
@ -28,8 +28,8 @@ and predicate =
|
|||||||
| Comparison of operator * predicand
|
| Comparison of operator * predicand
|
||||||
| Between of predicand * predicand
|
| Between of predicand * predicand
|
||||||
| NotBetween of predicand * predicand
|
| NotBetween of predicand * predicand
|
||||||
| In of predicand list
|
| In of string list
|
||||||
| NotIn of predicand list
|
| NotIn of string list
|
||||||
| Like of string
|
| Like of string
|
||||||
| NotLike of string
|
| NotLike of string
|
||||||
and operator =
|
and operator =
|
||||||
@ -66,7 +66,7 @@ let rec pp_query fmt ast =
|
|||||||
|
|
||||||
and pp_select s =
|
and pp_select s =
|
||||||
match s with
|
match s with
|
||||||
| Select(cols, _, _) -> String.cat "SELECT " (pp_columns cols)
|
| Select(cols, _, _) -> pp_columns cols
|
||||||
|
|
||||||
and pp_columns cols =
|
and pp_columns cols =
|
||||||
match cols with
|
match cols with
|
||||||
@ -77,10 +77,8 @@ and pp_columns cols =
|
|||||||
and pp_column col =
|
and pp_column col =
|
||||||
match col with
|
match col with
|
||||||
| Column(Ref(name),_) -> name
|
| Column(Ref(name),_) -> name
|
||||||
| Column(StringLiteral(name),_) -> "'"^name^"'"
|
|
||||||
| Column(DateLiteral(name),_) -> "'"^name^"'"
|
|
||||||
| Asterisk -> "*"
|
| Asterisk -> "*"
|
||||||
| _ -> failwith "Pretty parsing of Column not supported"
|
| _ -> failwith "not supported"
|
||||||
|
|
||||||
and pp_tables tables =
|
and pp_tables tables =
|
||||||
match tables with
|
match tables with
|
||||||
|
@ -509,8 +509,8 @@ as_clause :
|
|||||||
|
|
||||||
predicate :
|
predicate :
|
||||||
| comparison_predicate { $1 }
|
| comparison_predicate { $1 }
|
||||||
| in_predicate { $1 }
|
|
||||||
(* | between_predicate { $1 } *)
|
(* | between_predicate { $1 } *)
|
||||||
|
(* | in_predicate { $1 } *)
|
||||||
(* | like_predicate { $1 }*)
|
(* | like_predicate { $1 }*)
|
||||||
|
|
||||||
(*****************)
|
(*****************)
|
||||||
|
@ -11,15 +11,11 @@ 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 query = "SELECT a, b FROM t" in
|
let query = "SELECT a FROM t" in
|
||||||
let q1 = parse query in
|
let q1 = parse query in
|
||||||
let ast1 = Query(
|
let ast1 = Query(
|
||||||
Select(
|
Select(
|
||||||
[
|
[
|
||||||
Column(
|
|
||||||
Ref("b"),
|
|
||||||
None
|
|
||||||
);
|
|
||||||
Column(
|
Column(
|
||||||
Ref("a"),
|
Ref("a"),
|
||||||
None
|
None
|
||||||
@ -52,31 +48,38 @@ let test_simple_select () =
|
|||||||
) in
|
) in
|
||||||
Alcotest.(check query_testable) query q2 ast2 ;
|
Alcotest.(check query_testable) query q2 ast2 ;
|
||||||
|
|
||||||
let query = "SELECT 'b', 'a', DATE '2024-12-25' AS date" in
|
let query = "SELECT 'a'" in
|
||||||
let q3 = parse query in
|
let q3 = parse query in
|
||||||
let ast3 = Query(
|
let ast3 = Query(
|
||||||
Select(
|
Select(
|
||||||
[
|
[
|
||||||
Column(
|
|
||||||
DateLiteral("2024-12-25"),
|
|
||||||
Some(
|
|
||||||
As("date")
|
|
||||||
)
|
|
||||||
);
|
|
||||||
Column(
|
Column(
|
||||||
StringLiteral("a"),
|
StringLiteral("a"),
|
||||||
None
|
None
|
||||||
);
|
|
||||||
Column(
|
|
||||||
StringLiteral("b"),
|
|
||||||
None
|
|
||||||
)
|
)
|
||||||
],
|
],
|
||||||
None,
|
None,
|
||||||
None
|
None
|
||||||
)
|
)
|
||||||
) in
|
) in
|
||||||
Alcotest.(check query_testable) query q3 ast3
|
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 test_default_join () =
|
||||||
let q1 = parse "SELECT a FROM t1 JOIN t2 ON b = c" in
|
let q1 = parse "SELECT a FROM t1 JOIN t2 ON b = c" in
|
||||||
@ -334,26 +337,6 @@ let test_where_equals () =
|
|||||||
) in
|
) in
|
||||||
Alcotest.(check query_testable) "Ok" q1 ast1
|
Alcotest.(check query_testable) "Ok" q1 ast1
|
||||||
|
|
||||||
(*
|
|
||||||
let test_aggregtes () =
|
|
||||||
let query = "SELECT AVG(a) FROM t" in
|
|
||||||
let q1 = parse query in
|
|
||||||
let ast1 = Query(
|
|
||||||
Select(
|
|
||||||
[
|
|
||||||
],
|
|
||||||
Some(
|
|
||||||
[
|
|
||||||
Table("t")
|
|
||||||
]
|
|
||||||
),
|
|
||||||
None
|
|
||||||
)
|
|
||||||
) in
|
|
||||||
Alcotest.(check query_testable) query q1 ast1
|
|
||||||
|
|
||||||
*)
|
|
||||||
|
|
||||||
let simple_select_set = [ ("Equals", `Quick, test_simple_select) ]
|
let simple_select_set = [ ("Equals", `Quick, test_simple_select) ]
|
||||||
|
|
||||||
let simple_join_set = [
|
let simple_join_set = [
|
||||||
|
Loading…
Reference in New Issue
Block a user