package Ġme . gent ie lez aj . sql d roid . models Ċ Ċ import Ġme . gent ie lez aj . sql d roid . common . value OrDefault Ċ import Ġme . gent ie lez aj . sql d roid . models . annotations . column . Unique Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . full . find Annotation Ċ import Ġkotlin . reflect . full . member Properties Ċ Ċ data Ġclass ĠUnique Key Info ( val Ġname : ĠString , Ġval Ġcolumns : ĠCollection < Column Info >) Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġfun Ġcreate ( clazz : ĠK Class <* >) Ġ: ĠList < Unique Key Info >? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġres Ġ= Ġmutable Map Of < String , ĠMutable Collection < Column Info >>() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor ( property Ġin Ġclazz . member Properties ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġunique Ġ= Ġproperty . find Annotation < Unique >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( unique Ġ== Ġnull ) Ġreturn Ġ Ġcontinue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcolumn Info Ġ= ĠColumn Info . create ( property ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġunique . index . value OrDefault (" UN _${ clazz . simple Name !!. substring ( 0 , Ġ 2 ). toUpperCase ()} _${ column Info . name . toUpperCase () }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif ( res . containsKey ( name )) Ġres [ name ] !!. add ( column Info ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġres . put ( name , Ġmutable ListOf ( column Info )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( res . isEmpty ()) Ġreturn Ġnull ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġres . map Ġ{ ĠUnique Key Info ( it . key , Ġit . value ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }