///|
fn read_and_parse(path : String) -> Statement {
let input = @fs.read_file_to_string(path) catch {
e => {
println("Read file error: \{e.to_string()}")
panic()
}
}
parse_sql(input) catch {
LexerError(e) => {
println(e)
panic()
}
ParserError(e) => {
println(e)
panic()
}
}
}
///|
test "TPCH 1" {
let stmt = read_and_parse("src/tpch/1.sql")
inspect(
stmt,
content="SELECT l_returnflag, l_linestatus, sum(l_quantity) AS sum_qty, sum(l_extendedprice) AS sum_base_price, sum((l_extendedprice * (1 - l_discount))) AS sum_disc_price, sum(((l_extendedprice * (1 - l_discount)) * (1 + l_tax))) AS sum_charge, avg(l_quantity) AS avg_qty, avg(l_extendedprice) AS avg_price, avg(l_discount) AS avg_disc, count(*) AS count_order FROM lineitem WHERE (l_shipdate <= (DATE '1998-12-01' - INTERVAL '90' DAY (3))) GROUP BY l_returnflag, l_linestatus ORDER BY l_returnflag, l_linestatus;",
)
}
///|
test "TPCH 2" {
let stmt = read_and_parse("src/tpch/2.sql")
inspect(stmt, content=
#|SELECT s_acctbal, s_name, n_name, p_partkey, p_mfgr, s_address, s_phone, s_comment FROM part, supplier, partsupp, nation, region WHERE ((((((((p_partkey = ps_partkey) AND (s_suppkey = ps_suppkey)) AND (p_size = 15)) AND (p_type LIKE "%BRASS")) AND (s_nationkey = n_nationkey)) AND (n_regionkey = r_regionkey)) AND (r_name = "EUROPE")) AND (ps_supplycost = (SELECT min(ps_supplycost) FROM partsupp, supplier, nation, region WHERE (((((p_partkey = ps_partkey) AND (s_suppkey = ps_suppkey)) AND (s_nationkey = n_nationkey)) AND (n_regionkey = r_regionkey)) AND (r_name = "EUROPE"))))) ORDER BY s_acctbal DESC, n_name, s_name, p_partkey;
)
}
test "TPCH 3" {
let stmt = read_and_parse("src/tpch/3.sql")
inspect(stmt, content=
#|SELECT l_orderkey, sum((l_extendedprice * (1 - l_discount))) AS revenue, o_orderdate, o_shippriority FROM customer, orders, lineitem WHERE (((((c_mktsegment = "BUILDING") AND (c_custkey = o_custkey)) AND (l_orderkey = o_orderkey)) AND (o_orderdate < DATE '1995-03-15')) AND (l_shipdate > DATE '1995-03-15')) GROUP BY l_orderkey, o_orderdate, o_shippriority ORDER BY revenue DESC, o_orderdate;
)
}