Skip to content

Commit 0d2402b

Browse files
committed
tests: sqlp add tests for arbitrary expressions in SQL JOIN constraints
1 parent d47c44e commit 0d2402b

File tree

1 file changed

+83
-0
lines changed

1 file changed

+83
-0
lines changed

tests/test_sqlp.rs

Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1559,6 +1559,89 @@ fn sqlp_sql_join_on_subquery() {
15591559
assert_eq!(got, expected);
15601560
}
15611561

1562+
#[test]
1563+
fn sqlp_sql_join_on_literal_string_comparison() {
1564+
let wrk = Workdir::new("sqlp_sql_join_on_literal_string_comparison");
1565+
wrk.create(
1566+
"test.csv",
1567+
vec![
1568+
svec!["name", "role"],
1569+
svec!["alice", "admin"],
1570+
svec!["bob", "user"],
1571+
svec!["adam", "admin"],
1572+
svec!["charlie", "user"],
1573+
],
1574+
);
1575+
1576+
wrk.create(
1577+
"test2.csv",
1578+
vec![
1579+
svec!["name", "dept"],
1580+
svec!["alice", "IT"],
1581+
svec!["bob", "HR"],
1582+
svec!["charlie", "IT"],
1583+
svec!["adam", "SEC"],
1584+
],
1585+
);
1586+
1587+
let mut cmd = wrk.command("sqlp");
1588+
cmd.arg("test.csv").arg("test2.csv").arg(
1589+
"SELECT t1.name, t1.role, t2.dept FROM test t1 INNER JOIN test2 t2 ON t1.name = t2.name \
1590+
AND t1.role = 'admin' ORDER BY t1.name",
1591+
);
1592+
1593+
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
1594+
let expected = vec![
1595+
svec!["name", "role", "dept"],
1596+
svec!["adam", "admin", "SEC"],
1597+
svec!["alice", "admin", "IT"],
1598+
];
1599+
1600+
assert_eq!(got, expected);
1601+
}
1602+
1603+
#[test]
1604+
fn sqlp_sql_join_on_expression_comparison() {
1605+
let wrk = Workdir::new("sqlp_sql_join_on_expression_comparison");
1606+
wrk.create(
1607+
"test.csv",
1608+
vec![
1609+
svec!["code", "value"],
1610+
svec!["HELLO", "100"],
1611+
svec!["WORLD", "200"],
1612+
svec!["FOO", "300"],
1613+
],
1614+
);
1615+
1616+
wrk.create(
1617+
"test2.csv",
1618+
vec![
1619+
svec!["code", "value"],
1620+
svec!["hello", "-1.2345"],
1621+
svec!["world", "4.5678"],
1622+
svec!["bar", "2.2222"],
1623+
],
1624+
);
1625+
1626+
let mut cmd = wrk.command("sqlp");
1627+
cmd.arg("test.csv")
1628+
.arg("test2.csv")
1629+
.arg(
1630+
"SELECT t1.code AS code1, t2.code AS code2, (t1.value * t2.value) AS VAL FROM test t1 \
1631+
INNER JOIN test2 t2 ON LOWER(t1.code) = t2.code",
1632+
)
1633+
.args(["--float-precision", "2"]);
1634+
1635+
let got: Vec<Vec<String>> = wrk.read_stdout(&mut cmd);
1636+
let expected = vec![
1637+
svec!["code1", "code2", "VAL"],
1638+
svec!["HELLO", "hello", "-123.45"],
1639+
svec!["WORLD", "world", "913.56"],
1640+
];
1641+
1642+
assert_eq!(got, expected);
1643+
}
1644+
15621645
#[test]
15631646
fn sqlp_sql_from_subquery() {
15641647
let wrk = Workdir::new("sqlp_sql_from_subquery");

0 commit comments

Comments
 (0)