@@ -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]
15631646fn sqlp_sql_from_subquery ( ) {
15641647 let wrk = Workdir :: new ( "sqlp_sql_from_subquery" ) ;
0 commit comments