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") ) ) ) ] ) ) );