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 ab FROM test"  = Query(Select([Column("ab")], [Table "test"])));
  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")
          )
        )
      )
    ]
      )
    )
  );