/* Ċ Ġ* ĠĠĠ ĠCopyright Ġ 2 0 1 6 - 2 0 2 2 Ġthe Ġoriginal Ġauthor Ġor Ġauthors . Ċ Ġ* Ċ Ġ* ĠĠĠ ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* ĠĠĠ Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠĠĠ ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠĠĠ ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* ĠĠĠ Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠĠĠ ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠĠĠ ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* ĠĠĠ Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ package Ġexamples . kotlin . mybatis 3 . general Ċ Ċ import Ġexamples . kotlin . mybatis 3 . general . Foo Dynamic Sql Support . A Ċ import Ġexamples . kotlin . mybatis 3 . general . Foo Dynamic Sql Support . B Ċ import Ġexamples . kotlin . mybatis 3 . general . Foo Dynamic Sql Support . C Ċ import Ġexamples . kotlin . mybatis 3 . general . Foo Dynamic Sql Support . foo Ċ import Ġorg . assertj . core . api . Assertions . assertThat Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . mybatis . dynamic . sql . Sql Table Ċ import Ġorg . mybatis . dynamic . sql . util . kotlin . elements . add Ċ import Ġorg . mybatis . dynamic . sql . util . kotlin . elements . column Ċ import Ġorg . mybatis . dynamic . sql . util . kotlin . elements . is Between Ċ import Ġorg . mybatis . dynamic . sql . util . kotlin . elements . is LessThan OrEqualTo Ċ import Ġorg . mybatis . dynamic . sql . util . kotlin . mybatis 3 . select Ċ Ċ object ĠFoo Dynamic Sql Support Ġ{ ĊĠĠĠ Ġclass ĠFoo Ġ: ĠSql Table (" Foo ") Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠA Ġ= Ġcolumn < Int >( name Ġ= Ġ" A ") ĊĠĠĠĠĠĠĠ Ġvar ĠB Ġ= Ġcolumn < Int >( name Ġ= Ġ" B ") ĊĠĠĠĠĠĠĠ Ġvar ĠC Ġ= Ġcolumn < String >( name Ġ= Ġ" C ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġfoo Ġ= ĠFoo () ĊĠĠĠ Ġval ĠA Ġ= Ġfoo . A ĊĠĠĠ Ġval ĠB Ġ= Ġfoo . B ĊĠĠĠ Ġval ĠC Ġ= Ġfoo . C Ċ } Ċ Ċ class ĠK Grouping Test Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Simple Grouping () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselect Statement Ġ= Ġselect ( A , ĠB , ĠC ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom ( foo ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhere Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA Ġ( is Between ( 1 ). and ( 5 ). map Ġ{ Ġit Ġ+ Ġ 3 Ġ}. filter { Ġ_ Ġ-> Ġtrue Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ{ ĠA Ġ( is LessThan OrEqualTo ( 3 ). map Ġ{ Ġit Ġ+ Ġ 6 Ġ}. filter Ġ{ Ġtrue Ġ}) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ{ ĠA Ġis Not EqualTo Ġ 9 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ{ ĠC Ġis Like Ġ" F red %" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġ{ ĠB Ġis EqualTo Ġ 3 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ{ Ġadd ( A , ĠB ) Ġis GreaterThan Ġ 4 Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ" select ĠA , ĠB , ĠC " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġfrom ĠFoo " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġwhere Ġ( A Ġbetween Ġ#{ parameters . p 1 } Ġand Ġ#{ parameters . p 2 } Ġor ĠA Ġ<= Ġ#{ parameters . p 3 } Ġor " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ĠA Ġ<> Ġ#{ parameters . p 4 } Ġor ĠC Ġlike Ġ#{ parameters . p 5 }) Ġand ĠB Ġ= Ġ#{ parameters . p 6 }" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġor Ġ( A Ġ+ ĠB ) Ġ> Ġ#{ parameters . p 7 }" ĊĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . select Statement ). isEqualTo ( expected ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 1 ", Ġ 4 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 2 ", Ġ 8 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 3 ", Ġ 9 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 4 ", Ġ 9 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 5 ", Ġ" F red % ") ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 6 ", Ġ 3 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 7 ", Ġ 4 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Complex Grouping () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselect Statement Ġ= Ġselect ( A , ĠB , ĠC ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom ( foo ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhere Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA Ġis EqualTo Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ{ ĠA Ġis GreaterThan Ġ 5 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġ{ ĠB Ġis EqualTo Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA Ġis LessThan Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġ{ ĠB Ġis EqualTo Ġ 2 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġ{ ĠC Ġis EqualTo Ġ" F red " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ" select ĠA , ĠB , ĠC " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġfrom ĠFoo " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġwhere Ġ(( A Ġ= Ġ#{ parameters . p 1 } Ġor ĠA Ġ> Ġ#{ parameters . p 2 }) Ġand ĠB Ġ= Ġ#{ parameters . p 3 }" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġor Ġ( A Ġ< Ġ#{ parameters . p 4 } Ġand ĠB Ġ= Ġ#{ parameters . p 5 })) Ġand ĠC Ġ= Ġ#{ parameters . p 6 }" ĊĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . select Statement ). isEqualTo ( expected ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 1 ", Ġ 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 2 ", Ġ 5 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 3 ", Ġ 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 4 ", Ġ 0 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 5 ", Ġ 2 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 6 ", Ġ" F red ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Group And Exists () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselect Statement Ġ= Ġselect ( A , ĠB , ĠC ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom ( foo ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhere Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexists Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect ( foo . all Columns ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfrom ( foo ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhere Ġ{ ĠA Ġis EqualTo Ġ 3 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġ{ ĠA Ġis EqualTo Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ{ ĠA Ġis GreaterThan Ġ 5 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġ{ ĠB Ġis EqualTo Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA Ġis LessThan Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġ{ ĠB Ġis EqualTo Ġ 2 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġ{ ĠC Ġis EqualTo Ġ" F red " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ" select ĠA , ĠB , ĠC " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġfrom ĠFoo " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġwhere Ġ(( exists Ġ( select Ġ* Ġfrom ĠFoo Ġwhere ĠA Ġ= Ġ#{ parameters . p 1 }) Ġand ĠA Ġ= Ġ#{ parameters . p 2 }" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġor ĠA Ġ> Ġ#{ parameters . p 3 }) Ġand ĠB Ġ= Ġ#{ parameters . p 4 } Ġor Ġ( A Ġ< Ġ#{ parameters . p 5 }" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġand ĠB Ġ= Ġ#{ parameters . p 6 })) Ġand ĠC Ġ= Ġ#{ parameters . p 7 }" ĊĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . select Statement ). isEqualTo ( expected ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 1 ", Ġ 3 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 2 ", Ġ 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 3 ", Ġ 5 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 4 ", Ġ 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 5 ", Ġ 0 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 6 ", Ġ 2 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 7 ", Ġ" F red ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Nested Grouping () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselect Statement Ġ= Ġselect ( A , ĠB , ĠC ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom ( foo ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhere Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA Ġis EqualTo Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ{ ĠA Ġis GreaterThan Ġ 5 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġ{ ĠA Ġis GreaterThan Ġ 5 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA Ġis EqualTo Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ{ ĠA Ġis GreaterThan Ġ 5 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ{ ĠB Ġis EqualTo Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA Ġis EqualTo Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ{ ĠA Ġis GreaterThan Ġ 5 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA Ġis LessThan Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġ{ ĠB Ġis EqualTo Ġ 2 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġ{ ĠC Ġis EqualTo Ġ" F red " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ" select ĠA , ĠB , ĠC " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġfrom ĠFoo " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġwhere Ġ((( A Ġ= Ġ#{ parameters . p 1 } Ġor ĠA Ġ> Ġ#{ parameters . p 2 }) Ġand ĠA Ġ> Ġ#{ parameters . p 3 })" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġand Ġ(( A Ġ= Ġ#{ parameters . p 4 } Ġor ĠA Ġ> Ġ#{ parameters . p 5 }) Ġor ĠB Ġ= Ġ#{ parameters . p 6 })" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġor Ġ(( A Ġ= Ġ#{ parameters . p 7 } Ġor ĠA Ġ> Ġ#{ parameters . p 8 }) Ġand Ġ( A Ġ< Ġ#{ parameters . p 9 }" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġand ĠB Ġ= Ġ#{ parameters . p 1 0 } ))) Ġand ĠC Ġ= Ġ#{ parameters . p 1 1 }" ĊĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . select Statement ). isEqualTo ( expected ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 1 ", Ġ 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 2 ", Ġ 5 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 3 ", Ġ 5 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 4 ", Ġ 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 5 ", Ġ 5 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 6 ", Ġ 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 7 ", Ġ 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 8 ", Ġ 5 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 9 ", Ġ 0 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 1 0 ", Ġ 2 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 1 1 ", Ġ" F red ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest And Or Criteria Groups () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselect Statement Ġ= Ġselect ( A , ĠB , ĠC ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom ( foo ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhere Ġ{ ĠA Ġis EqualTo Ġ 6 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġ{ ĠC Ġis EqualTo Ġ" F red " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA Ġis EqualTo Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ{ ĠA Ġis GreaterThan Ġ 5 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ{ ĠB Ġis EqualTo Ġ 1 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA Ġ Ġis EqualTo Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ{ ĠA Ġis GreaterThan Ġ 5 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠA Ġis LessThan Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġ{ ĠB Ġis EqualTo Ġ 2 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ" select ĠA , ĠB , ĠC " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġfrom ĠFoo " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġwhere ĠA Ġ= Ġ#{ parameters . p 1 }" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġand ĠC Ġ= Ġ#{ parameters . p 2 }" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġand Ġ(( A Ġ= Ġ#{ parameters . p 3 } Ġor ĠA Ġ> Ġ#{ parameters . p 4 }) Ġor ĠB Ġ= Ġ#{ parameters . p 5 })" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġor Ġ(( A Ġ= Ġ#{ parameters . p 6 } Ġor ĠA Ġ> Ġ#{ parameters . p 7 }) Ġand Ġ( A Ġ< Ġ#{ parameters . p 8 }" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġand ĠB Ġ= Ġ#{ parameters . p 9 })) " ĊĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . select Statement ). isEqualTo ( expected ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 1 ", Ġ 6 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 2 ", Ġ" F red ") ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 3 ", Ġ 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 4 ", Ġ 5 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 5 ", Ġ 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 6 ", Ġ 1 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 7 ", Ġ 5 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 8 ", Ġ 0 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 9 ", Ġ 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Not Group And Or Criteria Groups () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġselect Statement Ġ= Ġselect ( A , ĠB , ĠC ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom ( foo ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhere Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnot Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB Ġis EqualTo Ġ 4 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġ{ ĠA Ġis LessThan Ġ 5 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġ{ ĠA Ġis GreaterThan Ġ 3 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġ{ Ġnot Ġ{ ĠA Ġis GreaterThan Ġ 4 Ġ} Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġor Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnot Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠB Ġis LessThan Ġ 6 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġand Ġ{ ĠA Ġis GreaterThan OrEqualTo Ġ 7 Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= Ġ" select ĠA , ĠB , ĠC " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġfrom ĠFoo " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġwhere Ġnot Ġ(( B Ġ= Ġ#{ parameters . p 1 } Ġand ĠA Ġ< Ġ#{ parameters . p 2 }) Ġand ĠA Ġ> Ġ#{ parameters . p 3 })" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġand Ġnot ĠA Ġ> Ġ#{ parameters . p 4 }" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġor Ġnot Ġ( B Ġ< Ġ#{ parameters . p 5 } Ġand ĠA Ġ>= Ġ#{ parameters . p 6 })" ĊĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . select Statement ). isEqualTo ( expected ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 1 ", Ġ 4 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 2 ", Ġ 5 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 3 ", Ġ 3 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 4 ", Ġ 4 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 5 ", Ġ 6 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( select Statement . parameters ). contains Entry (" p 6 ", Ġ 7 ) ĊĠĠĠ Ġ} Ċ } Ċ