54 lines
1.2 KiB
OCaml
54 lines
1.2 KiB
OCaml
open Ast
|
|
|
|
let parse query =
|
|
let lexbuf = Lexing.from_string query in
|
|
Parser.main Lexer.read_token lexbuf
|
|
|
|
let () =
|
|
assert(parse "SELECT ab FROM b1" = Query(Select([Column("ab")], [Table "b1"])));
|
|
assert(parse "SELECT * FROM b1" = Query(Select([Asterisk], [Table "b1"])));
|
|
assert(parse "SELECT * FROM t1 CROSS JOIN t2" = Query(Select([Asterisk], [Join(Table("t1"), Cross, Table("t2"), None)])));
|
|
assert(parse "SELECT * FROM t1 JOIN t2 ON a = b" = Query(
|
|
Select([Asterisk], [
|
|
Join(
|
|
Table("t1"),
|
|
Left,
|
|
Table("t2"),
|
|
Some(
|
|
Condition(
|
|
"a",
|
|
Comparison(Equals, "b")
|
|
)
|
|
)
|
|
)
|
|
]
|
|
)
|
|
));
|
|
assert(parse "SELECT * FROM t1 JOIN t2 ON a = b JOIN t3 ON c = d" = Query(
|
|
Select([Asterisk], [
|
|
Join(
|
|
Join(
|
|
Table("t1"),
|
|
Left,
|
|
Table("t2"),
|
|
Some(
|
|
Condition(
|
|
"a",
|
|
Comparison(Equals, "b")
|
|
)
|
|
)
|
|
),
|
|
Left,
|
|
Table("t3"),
|
|
Some(
|
|
Condition(
|
|
"c",
|
|
Comparison(Equals, "d")
|
|
)
|
|
)
|
|
)
|
|
]
|
|
)
|
|
)
|
|
);
|