package Ġcom . example . book test . mysql Ċ Ċ import Ġcom . example . db test . Mysql Db Test Extension Ċ import Ġcom . example . db test . Postgres Db Test Extension Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . extension . Register Extension Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . Offset DateTime Ċ import Ġjava . time . format . DateTime Formatter Ċ Ċ class ĠQueries Impl Test Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Field Ġ@ Register Extension Ġval Ġdb test Ġ= ĠM ysql Db Test Extension (" src / main / resources / book test / mysql / schema . sql ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Queries () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconn Ġ= Ġdb test . getConnection () ĊĠĠĠĠĠĠĠ Ġval Ġdb Ġ= ĠQueries Impl ( conn ) ĊĠĠĠĠĠĠĠ Ġval Ġauthor Id Ġ= Ġdb . create Author (" Unknown ĠMaster ") ĊĠĠĠĠĠĠĠ Ġval Ġauthor Ġ= Ġdb . get Author ( author Id . toInt ()) !! ĊĊĠĠĠĠĠĠĠ Ġ// ĠStart Ġa Ġtransaction ĊĠĠĠĠĠĠĠ Ġconn . auto Commit Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġdb . create Book ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Id Ġ= Ġauthor . author Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis bn Ġ= Ġ" 1 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" my Ġbook Ġtitle ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook Type Ġ= ĠBooks Book Type . NON FI CTION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy r Ġ= Ġ 2 0 1 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavailable Ġ= ĠLocalDateTime . now (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġb 1 Id Ġ= Ġdb . create Book ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Id Ġ= Ġauthor . author Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis bn Ġ= Ġ" 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" the Ġsecond Ġbook ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook Type Ġ= ĠBooks Book Type . NON FI CTION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy r Ġ= Ġ 2 0 1 6 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavailable Ġ= ĠLocalDateTime . now (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags Ġ= ĠlistOf (" cool ", Ġ" unique "). join ToString (",") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġdb . update Book ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook Id Ġ= Ġb 1 Id . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" changed Ġsecond Ġtitle ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags Ġ= ĠlistOf (" cool ", Ġ" dis ast or "). join ToString (",") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġb 3 Id Ġ= Ġdb . create Book ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Id Ġ= Ġauthor . author Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis bn Ġ= Ġ" 3 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" the Ġthird Ġbook ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook Type Ġ= ĠBooks Book Type . NON FI CTION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy r Ġ= Ġ 2 0 0 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavailable Ġ= ĠLocalDateTime . now (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags Ġ= ĠlistOf (" cool "). join ToString (",") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġdb . create Book ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauthor Id Ġ= Ġauthor . author Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis bn Ġ= Ġ" 4 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" 4 th Ġplace Ġfinish er ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook Type Ġ= ĠBooks Book Type . NON FI CTION , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġy r Ġ= Ġ 2 0 1 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavailable Ġ= ĠLocalDateTime . now (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags Ġ= ĠlistOf (" other "). join ToString (",") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCommit Ġtransaction ĊĠĠĠĠĠĠĠ Ġconn . commit () ĊĠĠĠĠĠĠĠ Ġconn . auto Commit Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġdb . update Book IS BN ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbook Id Ġ= Ġb 3 Id . toInt (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis bn Ġ= Ġ" NEW ĠIS BN ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle Ġ= Ġ" never Ġever Ġgonna Ġfinish , Ġa Ġquat rain ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtags Ġ= ĠlistOf (" some other "). join ToString (",") ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġbooks 0 Ġ= Ġdb . books By Title Year (" my Ġbook Ġtitle ", Ġ 2 0 1 6 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġformatter Ġ= ĠDateTime Formatter . ISO _ DATE _ TIME ĊĠĠĠĠĠĠĠ Ġfor Ġ( book Ġin Ġbooks 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Book Ġ${ book . book Id } Ġ(${ book . book Type }): Ġ${ book . title } Ġavailable : Ġ${ book . available . format ( formatter )} ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġauthor 2 Ġ= Ġdb . get Author ( book . author Id ) !! ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Book Ġ${ book . book Id } Ġauthor : Ġ${ author 2 . name }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġfind Ġa Ġbook Ġwith Ġeither Ġ" cool " Ġor Ġ" other " Ġtag ĊĠĠĠĠĠĠĠ Ġprintln (" --------- \\ n Tag Ġsearch Ġresults :\\ n ") ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġdb . books By Tags ( listOf (" cool ", Ġ" other ", Ġ" some other "). join ToString ("," )) ĊĠĠĠĠĠĠĠ Ġfor Ġ( ab Ġin Ġres ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" Book Ġ${ ab . book Id }: Ġ'${ ab . title }', ĠAuthor : Ġ'${ ab . name }', ĠIS BN : Ġ'${ ab . isbn }' ĠTags : Ġ'${ ab . tags . toList () }' ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }