@@ -1717,15 +1717,40 @@ fn create_case_context() -> Result<ExecutionContext> {
17171717#[ tokio:: test]
17181718async fn equijoin ( ) -> Result < ( ) > {
17191719 let mut ctx = create_join_context ( "t1_id" , "t2_id" ) ?;
1720- let sql =
1721- "SELECT t1_id, t1_name, t2_name FROM t1 JOIN t2 ON t1_id = t2_id ORDER BY t1_id" ;
1722- let actual = execute ( & mut ctx, sql) . await ;
1720+ let equivalent_sql = [
1721+ "SELECT t1_id, t1_name, t2_name FROM t1 JOIN t2 ON t1_id = t2_id ORDER BY t1_id" ,
1722+ "SELECT t1_id, t1_name, t2_name FROM t1 JOIN t2 ON t2_id = t1_id ORDER BY t1_id" ,
1723+ ] ;
17231724 let expected = vec ! [
17241725 vec![ "11" , "a" , "z" ] ,
17251726 vec![ "22" , "b" , "y" ] ,
17261727 vec![ "44" , "d" , "x" ] ,
17271728 ] ;
1728- assert_eq ! ( expected, actual) ;
1729+ for sql in equivalent_sql. iter ( ) {
1730+ let actual = execute ( & mut ctx, sql) . await ;
1731+ assert_eq ! ( expected, actual) ;
1732+ }
1733+ Ok ( ( ) )
1734+ }
1735+
1736+ #[ tokio:: test]
1737+ async fn equijoin_multiple_condition_ordering ( ) -> Result < ( ) > {
1738+ let mut ctx = create_join_context ( "t1_id" , "t2_id" ) ?;
1739+ let equivalent_sql = [
1740+ "SELECT t1_id, t1_name, t2_name FROM t1 JOIN t2 ON t1_id = t2_id AND t1_name <> t2_name ORDER BY t1_id" ,
1741+ "SELECT t1_id, t1_name, t2_name FROM t1 JOIN t2 ON t1_id = t2_id AND t2_name <> t1_name ORDER BY t1_id" ,
1742+ "SELECT t1_id, t1_name, t2_name FROM t1 JOIN t2 ON t2_id = t1_id AND t1_name <> t2_name ORDER BY t1_id" ,
1743+ "SELECT t1_id, t1_name, t2_name FROM t1 JOIN t2 ON t2_id = t1_id AND t2_name <> t1_name ORDER BY t1_id" ,
1744+ ] ;
1745+ let expected = vec ! [
1746+ vec![ "11" , "a" , "z" ] ,
1747+ vec![ "22" , "b" , "y" ] ,
1748+ vec![ "44" , "d" , "x" ] ,
1749+ ] ;
1750+ for sql in equivalent_sql. iter ( ) {
1751+ let actual = execute ( & mut ctx, sql) . await ;
1752+ assert_eq ! ( expected, actual) ;
1753+ }
17291754 Ok ( ( ) )
17301755}
17311756
@@ -1754,51 +1779,70 @@ async fn equijoin_and_unsupported_condition() -> Result<()> {
17541779#[ tokio:: test]
17551780async fn left_join ( ) -> Result < ( ) > {
17561781 let mut ctx = create_join_context ( "t1_id" , "t2_id" ) ?;
1757- let sql = "SELECT t1_id, t1_name, t2_name FROM t1 LEFT JOIN t2 ON t1_id = t2_id ORDER BY t1_id" ;
1758- let actual = execute ( & mut ctx, sql) . await ;
1782+ let equivalent_sql = [
1783+ "SELECT t1_id, t1_name, t2_name FROM t1 LEFT JOIN t2 ON t1_id = t2_id ORDER BY t1_id" ,
1784+ "SELECT t1_id, t1_name, t2_name FROM t1 LEFT JOIN t2 ON t2_id = t1_id ORDER BY t1_id" ,
1785+ ] ;
17591786 let expected = vec ! [
17601787 vec![ "11" , "a" , "z" ] ,
17611788 vec![ "22" , "b" , "y" ] ,
17621789 vec![ "33" , "c" , "NULL" ] ,
17631790 vec![ "44" , "d" , "x" ] ,
17641791 ] ;
1765- assert_eq ! ( expected, actual) ;
1792+ for sql in equivalent_sql. iter ( ) {
1793+ let actual = execute ( & mut ctx, sql) . await ;
1794+ assert_eq ! ( expected, actual) ;
1795+ }
17661796 Ok ( ( ) )
17671797}
17681798
17691799#[ tokio:: test]
17701800async fn right_join ( ) -> Result < ( ) > {
17711801 let mut ctx = create_join_context ( "t1_id" , "t2_id" ) ?;
1772- let sql =
1773- "SELECT t1_id, t1_name, t2_name FROM t1 RIGHT JOIN t2 ON t1_id = t2_id ORDER BY t1_id" ;
1774- let actual = execute ( & mut ctx, sql) . await ;
1802+ let equivalent_sql = [
1803+ "SELECT t1_id, t1_name, t2_name FROM t1 RIGHT JOIN t2 ON t1_id = t2_id ORDER BY t1_id" ,
1804+ "SELECT t1_id, t1_name, t2_name FROM t1 RIGHT JOIN t2 ON t2_id = t1_id ORDER BY t1_id"
1805+ ] ;
17751806 let expected = vec ! [
17761807 vec![ "NULL" , "NULL" , "w" ] ,
17771808 vec![ "11" , "a" , "z" ] ,
17781809 vec![ "22" , "b" , "y" ] ,
17791810 vec![ "44" , "d" , "x" ] ,
17801811 ] ;
1781- assert_eq ! ( expected, actual) ;
1812+ for sql in equivalent_sql. iter ( ) {
1813+ let actual = execute ( & mut ctx, sql) . await ;
1814+ assert_eq ! ( expected, actual) ;
1815+ }
17821816 Ok ( ( ) )
17831817}
17841818
17851819#[ tokio:: test]
17861820async fn full_join ( ) -> Result < ( ) > {
17871821 let mut ctx = create_join_context ( "t1_id" , "t2_id" ) ?;
1788- let sql = "SELECT t1_id, t1_name, t2_name FROM t1 FULL JOIN t2 ON t1_id = t2_id ORDER BY t1_id" ;
1789- let actual = execute ( & mut ctx, sql) . await ;
1822+ let equivalent_sql = [
1823+ "SELECT t1_id, t1_name, t2_name FROM t1 FULL JOIN t2 ON t1_id = t2_id ORDER BY t1_id" ,
1824+ "SELECT t1_id, t1_name, t2_name FROM t1 FULL JOIN t2 ON t2_id = t1_id ORDER BY t1_id" ,
1825+ ] ;
17901826 let expected = vec ! [
17911827 vec![ "NULL" , "NULL" , "w" ] ,
17921828 vec![ "11" , "a" , "z" ] ,
17931829 vec![ "22" , "b" , "y" ] ,
17941830 vec![ "33" , "c" , "NULL" ] ,
17951831 vec![ "44" , "d" , "x" ] ,
17961832 ] ;
1797- assert_eq ! ( expected, actual) ;
1833+ for sql in equivalent_sql. iter ( ) {
1834+ let actual = execute ( & mut ctx, sql) . await ;
1835+ assert_eq ! ( expected, actual) ;
1836+ }
17981837
1799- let sql = "SELECT t1_id, t1_name, t2_name FROM t1 FULL OUTER JOIN t2 ON t1_id = t2_id ORDER BY t1_id" ;
1800- let actual = execute ( & mut ctx, sql) . await ;
1801- assert_eq ! ( expected, actual) ;
1838+ let equivalent_sql = [
1839+ "SELECT t1_id, t1_name, t2_name FROM t1 FULL OUTER JOIN t2 ON t1_id = t2_id ORDER BY t1_id" ,
1840+ "SELECT t1_id, t1_name, t2_name FROM t1 FULL OUTER JOIN t2 ON t2_id = t1_id ORDER BY t1_id" ,
1841+ ] ;
1842+ for sql in equivalent_sql. iter ( ) {
1843+ let actual = execute ( & mut ctx, sql) . await ;
1844+ assert_eq ! ( expected, actual) ;
1845+ }
18021846
18031847 Ok ( ( ) )
18041848}
@@ -1821,15 +1865,19 @@ async fn left_join_using() -> Result<()> {
18211865#[ tokio:: test]
18221866async fn equijoin_implicit_syntax ( ) -> Result < ( ) > {
18231867 let mut ctx = create_join_context ( "t1_id" , "t2_id" ) ?;
1824- let sql =
1825- "SELECT t1_id, t1_name, t2_name FROM t1, t2 WHERE t1_id = t2_id ORDER BY t1_id" ;
1826- let actual = execute ( & mut ctx, sql) . await ;
1868+ let equivalent_sql = [
1869+ "SELECT t1_id, t1_name, t2_name FROM t1, t2 WHERE t1_id = t2_id ORDER BY t1_id" ,
1870+ "SELECT t1_id, t1_name, t2_name FROM t1, t2 WHERE t2_id = t1_id ORDER BY t1_id" ,
1871+ ] ;
18271872 let expected = vec ! [
18281873 vec![ "11" , "a" , "z" ] ,
18291874 vec![ "22" , "b" , "y" ] ,
18301875 vec![ "44" , "d" , "x" ] ,
18311876 ] ;
1832- assert_eq ! ( expected, actual) ;
1877+ for sql in equivalent_sql. iter ( ) {
1878+ let actual = execute ( & mut ctx, sql) . await ;
1879+ assert_eq ! ( expected, actual) ;
1880+ }
18331881 Ok ( ( ) )
18341882}
18351883
0 commit comments