package Ġorg . da iv . pers ister . object relational Ċ Ċ import Ġorg . da iv . pers ister . More Keys Data Ċ import Ġkotlin . reflect . type Of Ċ import Ġkotlin . test . Test Ċ import Ġkotlin . test . assertEquals Ċ import Ġkotlin . test . assertNot Equals Ċ Ċ class ĠObject Relational Header Test Ġ{ ĊĠĠĠ Ġdata Ġclass ĠTest Simple Ġpublic Ġconstructor ( val Ġx : ĠInt , Ġval Ġy : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ: ĠObject Relational Mapper < Test Simple > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode X ( t : ĠTest Simple ) Ġ= Ġt . x Ġ* Ġ 3 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc gh Ġby Ġlazy Ġ{ ĠCode Gen Helper ( Test Simple :: class , Ġempty Map ()) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp 1 Ġ= Ġc gh . simple Key < Int >(" x ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp 2 Ġ= Ġc gh . simple < String >(" y ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġclass Header Data : ĠClass Header Data Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass Header Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc gh . clazz , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( p 1 , Ġp 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMore Keys Data ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġobject Relational Header : ĠObject Relational Header Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Entries Ġ= ĠlistOf (" x ". head Int Key ( p 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObject Relational Header Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Entries , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" x ". head Int ( p 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġobject Relational Writer : ĠObject Relational Writer < Test Simple > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= ĠlistOf (" x ". write Key < Test Simple > Ġ{ Ġx Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObject Relational Writer Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeys , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" x ". writeValue < Test Simple > Ġ{ Ġx Ġ}), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġobject Relational Reader : ĠObject Relational Reader < Test Simple > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= ĠlistOf (" x ". readInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObject Relational Reader Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Simple :: class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeys , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" x ". readInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĠTest Simple ( get ( 0 ), Ġget ( 1 )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠTest Complex Ġconstructor ( val Ġp : ĠInt , Ġval Ġx : ĠFloat , Ġval Ġs : ĠTest Simple ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ: ĠObject Relational Mapper < Test Complex > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode X ( t : ĠTest Complex ) Ġ= Ġt . p Ġ* Ġ 3 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc gh Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCode Gen Helper ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Complex :: class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( Test Simple :: class Ġto Ġ{ ĠTest Simple . class Header Data Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp 1 Ġ= Ġc gh . simple Key < Int >(" p ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp 2 Ġ= Ġc gh . simple < Float >(" x ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp 3 Ġ= Ġc gh . simple < Test Simple >(" s ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġclass Header Data : ĠClass Header Data Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass Header Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc gh . clazz , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( p 1 , Ġp 2 , Ġp 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMore Keys Data ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġobject Relational Header : ĠObject Relational Header Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Entries Ġ= ĠlistOf (" p ". head Int Key ( p 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObject Relational Header Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Entries , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" x ". head Float ( p 2 )) Ġ+ ĠTest Simple . object Relational Header . key Head (" s ", Ġp 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ({ ĠTest Simple . object Relational Header Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġobject Relational Writer : ĠObject Relational Writer < Test Complex > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= ĠlistOf (" p ". write Key < Test Complex > Ġ{ Ġp Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObject Relational Writer Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeys , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" p ". writeValue Ġ{ Ġp Ġ}), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Test Simple . writer Map Ġ{ Ġs Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġobject Relational Reader : ĠObject Relational Reader < Test Complex > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= ĠlistOf (" p ". readInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObject Relational Reader Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Complex :: class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeys , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" p ". readInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĠTest Complex ( get ( 0 ), Ġget ( 1 ), Ġget ( 2 )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠTest List Complex Ġconstructor ( val Ġp : ĠInt , Ġval Ġx : ĠFloat , Ġval Ġlist : ĠList < Test Simple >) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ: ĠObject Relational Mapper < Test List Complex > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode X ( t : ĠTest List Complex ) Ġ= Ġt . p Ġ* Ġ 3 1 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc gh Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCode Gen Helper ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest List Complex :: class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of ( Test Simple :: class Ġto Ġ{ ĠTest Simple . class Header Data Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp 1 Ġ= Ġc gh . simple Key < Int >(" p ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp 2 Ġ= Ġc gh . simple < Float >(" x ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp 3 Ġ= Ġc gh . list < Test Simple >(" list ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġclass Header Data : ĠClass Header Data Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass Header Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc gh . clazz , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( p 1 , Ġp 2 , Ġp 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMore Keys Data ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġobject Relational Header : ĠObject Relational Header Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Entries Ġ= ĠlistOf (" p ". head Int Key ( p 1 )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObject Relational Header Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Entries , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" x ". head Float ( p 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ({ Ġlist Header ( key Entries . prefix (" ref _", Ġp 3 ), ĠTest Simple . object Relational Header ) Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġobject Relational Writer : ĠObject Relational Writer < Test List Complex > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= ĠlistOf (" p ". write Key < Test List Complex > Ġ{ Ġp Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObject Relational Writer Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeys , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" p ". writeValue < Test List Complex > Ġ{ Ġp Ġ}), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Test Simple . writer List Map Ġ{ Ġlist Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġobject Relational Reader : ĠObject Relational Reader < Test List Complex > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= ĠlistOf (" p ". readInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObject Relational Reader Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest List Complex :: class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeys , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" p ". readInt ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĠTest List Complex ( get ( 0 ), Ġget ( 1 ), Ġget ( 2 )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠTest HashCode Ġpublic Ġconstructor ( val Ġx : ĠInt , Ġval Ġy : ĠString ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġcompanion Ġobject Ġ: ĠObject Relational Mapper < Test HashCode > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠhashCode X ( t : ĠTest HashCode ) Ġ= Ġt . x Ġ* Ġ 3 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġc gh Ġby Ġlazy Ġ{ ĠCode Gen Helper ( Test HashCode :: class , Ġempty Map ()) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp 1 Ġ= Ġc gh . simple Key < Int >(" x ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġp 2 Ġ= Ġc gh . simple < String >(" y ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġclass Header Data : ĠClass Header Data Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠClass Header Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġc gh . clazz , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( p 1 , Ġp 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMore Keys Data ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġobject Relational Header : ĠObject Relational Header Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkey Entries Ġ= ĠhashCode Entries ( p 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObject Relational Header Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkey Entries , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" x ". head Int ( p 1 ), Ġ" y ". head String ( p 2 )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġobject Relational Writer : ĠObject Relational Writer < Test HashCode > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= ĠHash Code Write Entry . as Key ( Test HashCode ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObject Relational Writer Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeys , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" x ". writeValue < Test HashCode > Ġ{ Ġx Ġ}, Ġ" y ". writeValue < Test HashCode > Ġ{ Ġy Ġ}), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġval Ġobject Relational Reader : ĠObject Relational Reader < Test HashCode > Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġkeys Ġ= ĠhashCode Read () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠObject Relational Reader Data ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest HashCode :: class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġkeys , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf (" x ". readInt (), Ġ" y ". readString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĠTest HashCode ( get ( 0 ), Ġget ( 1 )) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠObject Relational Header . createTable ( parameter : ĠParameter ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġhead Ġ= Ġkey Head ( null , Ġparameter ) Ġ+ Ġhead Others () ĊĠĠĠĠĠĠĠ Ġval Ġcreate Table Ġ= Ġhead . map Ġ{ Ġ"${ it . name } Ġ${ it . type }" Ġ}. join ToString (", Ġ", Ġ" CREATE ĠTABLE ĠTest Complex Ġ( ", Ġ"); ") ĊĠĠĠĠĠĠĠ Ġreturn Ġcreate Table ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval ĠhashCode Counter Getter Ġ= Ġobject Ġ: ĠHash Code Counter Getter Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T > Ġget Counter ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Relational Writer : ĠObject Relational Writer < T >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Relational Reader : ĠObject Relational Reader < T >, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠhashCode : ĠInt ĊĠĠĠĠĠĠĠ Ġ): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġ< T > ĠObject Relational Writer < T >. insert ( t : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġret Ġ= Ġthis . write ( emptyList (), Ġt , ĠhashCode Counter Getter ) ĊĠĠĠĠĠĠĠ Ġprintln (" ret : Ġ$ ret ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest CreateTable () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcreate Table Ġ= ĠTest Complex . object Relational Header . createTable ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSimple Parameter ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Complex :: class , Ġ" p ", ĠtypeOf < Int >(), ĠKey Type . NORM , ĠCode Gen Helper ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Complex :: class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmap Of () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). map ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals (" CREATE ĠTABLE ĠTest Complex Ġ( p ĠInt , Ġx ĠFloat , Ġs _ x ĠInt ); ", Ġcreate Table ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Writer Write () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠTest Complex ( 5 , Ġ 0 . 2 f , ĠTest Simple ( 6 , Ġ" Hello ")) ĊĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠTest Complex . object Relational Writer ĊĠĠĠĠĠĠĠ Ġval Ġgot Ġ= Ġwriter . write ( emptyList (), Ġobj , ĠhashCode Counter Getter ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( Write Row ( listOf ( Write Entry (" x ", Ġ 0 . 2 f , Ġfalse ), ĠWrite Entry (" s _ x ", Ġ 6 , Ġfalse )))), Ġgot ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Writer Write Key () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġobj Ġ= ĠTest Complex ( 5 , Ġ 0 . 2 f , ĠTest Simple ( 6 , Ġ" Hello ")) ĊĠĠĠĠĠĠĠ Ġval Ġwriter Ġ= ĠTest Complex . object Relational Writer ĊĠĠĠĠĠĠĠ Ġval Ġgot Ġ= Ġwriter . write Key ( null , Ġobj , ĠhashCode Counter Getter ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( listOf ( Write Entry (" p ", Ġ 5 , Ġtrue )), Ġgot ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Reader () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreader Ġ= ĠTest Simple . object Relational Reader ĊĠĠĠĠĠĠĠ Ġval Ġread Ġ= Ġreader . read ( Read Collection ( List Native Reads ( listOf ( listOf ( 5 , Ġ" Hello ")) ), Ġobject Ġ: ĠData Request er Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T > Ġrequest Data ( key : ĠList < Read Entry >, Ġobject Relational Mapper : ĠObject Relational Reader < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTODO (" Not Ġyet Ġimplemented ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Test Simple ( 5 , Ġ" Hello "), Ġread ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Reader Complex () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreader Ġ= ĠTest Complex . object Relational Reader ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġmap Of < Pair < List < Read Entry >, ĠObject Relational Reader <* >>, ĠNative Reads >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( listOf ( Read Entry ( 5 )) Ġto ĠTest Simple . object Relational Reader ) Ġto ĠList Native Reads ( listOf ( listOf ( 5 , Ġ" Hello "))) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġread Ġ= Ġreader . read ( Read Collection ( List Native Reads ( listOf ( listOf ( 6 , Ġ 0 . 2 f , Ġ 5 ))), Ġobject Ġ: ĠData Request er Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T > Ġrequest Data ( key : ĠList < Read Entry >, Ġobject Relational Mapper : ĠObject Relational Reader < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmap [ key Ġto Ġobject Relational Mapper ]?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Relational Mapper . read ( Read Collection ( it , Ġthis )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġthrow ĠNullPointerException (" no Ġvalue Ġfor Ġ$ key Ġand Ġ$ object Relational Mapper ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Test Complex ( 6 , Ġ 0 . 2 f , ĠTest Simple ( 5 , Ġ" Hello ")), Ġread ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Reader List () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġreader Ġ= ĠTest List Complex . object Relational Reader ĊĠĠĠĠĠĠĠ Ġval Ġmap Ġ= Ġmap Of < Pair < List < Read Entry >, ĠObject Relational Reader <* >>, ĠList Native Reads >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( listOf ( Read Entry ( 5 )) Ġto ĠTest Simple . object Relational Reader ) Ġto ĠList Native Reads ( listOf ( listOf ( 5 , Ġ" Hello ")) ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( listOf ( Read Entry ( 7 )) Ġto ĠTest Simple . object Relational Reader ) Ġto ĠList Native Reads ( listOf ( listOf ( 7 , Ġ" World ")) ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( listOf ( Read Entry ( 6 )) Ġto ĠList Object Reader ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest List Complex . object Relational Reader , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty List (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Simple . object Relational Reader ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) Ġto ĠList Native Reads ( listOf ( listOf ( 6 , Ġ 1 , Ġ 7 ), ĠlistOf ( 6 , Ġ 0 , Ġ 5 ))), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġread Ġ= Ġreader . read ( Read Collection ( List Native Reads ( listOf ( listOf ( 6 , Ġ 0 . 2 f , Ġ 5 ))), Ġobject Ġ: ĠData Request er Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġ< T > Ġrequest Data ( key : ĠList < Read Entry >, Ġobject Relational Mapper : ĠObject Relational Reader < T >): ĠT Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmap [ key Ġto Ġobject Relational Mapper ]?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Relational Mapper . read ( Read Collection ( it . copy (), Ġthis )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġ?: Ġthrow ĠNullPointerException (" no Ġvalue Ġfor Ġ$ key Ġand Ġ$ object Relational Mapper ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ})) ĊĠĠĠĠĠĠĠ ĠassertEquals ( Test List Complex ( 6 , Ġ 0 . 2 f , ĠlistOf ( Test Simple ( 5 , Ġ" Hello "), ĠTest Simple ( 7 , Ġ" World ")) ), Ġread ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest List Equals () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġl Ġ= ĠList Object Reader ( Test List Complex . object Relational Reader , Ġempty List (), ĠTest Simple . object Relational Reader ) ĊĠĠĠĠĠĠĠ Ġval Ġl 2 Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠList Object Reader ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest List Complex . object Relational Reader , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Read Entry Task (" 5 ") Ġ{ Ġ 6 Ġ}), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Simple . object Relational Reader ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ ĠassertEquals ( l , Ġl 2 ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġtest Read Entry Task Equals () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġr 1 Ġ= ĠRead Entry Task (" hello ") Ġ{ Ġ 7 Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġr 2 Ġ= ĠRead Entry Task (" hello ") Ġ{ Ġ 7 Ġ} ĊĠĠĠĠĠĠĠ ĠassertEquals ( r 1 , Ġr 1 ) ĊĠĠĠĠĠĠĠ Ġassert Not Equals ( r 1 , Ġr 2 ) ĊĠĠĠ Ġ} Ċ } Ċ