package Ġcom . sql sor c ery Ċ Ċ import Ġcom . sql sor c ery . types . Type Ċ import Ġkotlin . collections . listOf Ċ import Ġkotlin . collections . set Ċ import Ġkotlin . reflect . K Property Ċ import Ġkotlin . text . replace Ċ Ċ class ĠColumn < T >( val Ġtype : ĠType < T >) Ġ: ĠIdentifier (), ĠSelect able < T > Ġ{ ĊĠĠĠ Ġoverride Ġval Ġmeta : ĠSelect able . Meta Ġ= ĠMeta ( this ) ĊĊĠĠĠ Ġval Ġali ased Name : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġfull QualifiedName . replace (".", Ġ"_ ") ĊĠĠĠ Ġval Ġfull QualifiedName : ĠString ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ"${ model Table . meta . full QualifiedName }. $ name " ĊĠĠĠ Ġval Ġname : ĠString Ġget () Ġ= Ġ_ name ĊĠĠĠ Ġval Ġmodel Table : ĠModel Table < *> Ġget () Ġ= Ġ_ model Table ĊĊĠĠĠ Ġlateinit Ġprivate Ġvar Ġ_ name : ĠString ĊĠĠĠ Ġlateinit Ġprivate Ġvar Ġ_ model Table : ĠModel Table < *> ĊĊĠĠĠ Ġoperator Ġfun ĠgetValue ( model : ĠModel , Ġproperty : ĠK Property < *> ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġreturn Ġmodel . meta . map [ name ] Ġas ĠT ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġin fix Ġfun Ġeq ( other : ĠT ): Ġcom . sql sor c ery . Condition Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcom . sql sor c ery . Equal Condition ( this , Ġcom . sql sor c ery . Value Identifier ( type , Ġother )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġfun Ġinit ( name : ĠString , Ġmodel Table : ĠModel Table <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ name Ġ= Ġname ĊĠĠĠĠĠĠĠ Ġ_ model Table Ġ= Ġmodel Table ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġfull QualifiedName ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnullable (): ĠColumn < T ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" CAST _ NE VER _ SU CCE ED S ") ĊĠĠĠĠĠĠĠ Ġreturn Ġthis Ġas ĠColumn < T ?> ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠMeta < T >( val Ġcolumn : ĠColumn < T >) Ġ: ĠSelect able . Meta Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġfull QualifiedName : ĠString ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġcolumn . full QualifiedName ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmap ( session : ĠSession , Ġfunc : Ġ() Ġ-> ĠAny ?): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġcolumn . type . decode ( func ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġflatten : ĠList < Selectable <* >> Ġ= ĠlistOf ( column ) ĊĠĠĠĠĠĠĠ Ġoverride Ġval Ġtable : ĠTable ? Ġget () Ġ= Ġcolumn . model Table . meta ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoperator Ġfun ĠsetValue ( model : ĠModel , Ġproperty : ĠK Property <* >, Ġt : ĠT ) Ġ{ ĊĠĠĠĠĠĠĠ Ġmodel . meta . map [ name ] Ġ= Ġt ĊĠĠĠ Ġ} Ċ }