package Ġorg . sam ox ive . safety j im . database Ċ Ċ import Ġio . react iverse . kotlin . pg client . prepared Query Await Ċ import Ġio . react iverse . pg client . Pg Row Set Ċ import Ġio . react iverse . pg client . Tuple Ċ import Ġnet . dv 8 tion . j da . api . entities . Guild Ċ import Ġnet . dv 8 tion . j da . api . entities . User Ċ Ċ private Ġconst Ġval Ġcreate SQL Ġ= Ġ""" Ċ create Ġtable Ġif Ġnot Ġexists Ġjoin list Ġ( ĊĠĠĠ Ġid Ġserial Ġnot Ġnull Ġprimary Ġkey , ĊĠĠĠ Ġuserid Ġbigint Ġnot Ġnull , ĊĠĠĠ Ġguild id Ġbigint Ġnot Ġnull , ĊĠĠĠ Ġjoint ime Ġbigint Ġnot Ġnull , ĊĠĠĠ Ġallow time Ġbigint Ġnot Ġnull , ĊĠĠĠ Ġallowed Ġboolean Ġnot Ġnull Ċ ); Ċ """ Ċ Ċ private Ġconst Ġval Ġinsert SQL Ġ= Ġ""" Ċ insert Ġinto Ġjoin list Ġ( ĊĠĠĠ Ġuserid , ĊĠĠĠ Ġguild id , ĊĠĠĠ Ġjoint ime , ĊĠĠĠ Ġallow time , ĊĠĠĠ Ġallowed Ċ ) Ċ values Ġ($ 1 , Ġ$ 2 , Ġ$ 3 , Ġ$ 4 , Ġ$ 5 ) Ċ return ing Ġ* ; Ċ """ Ċ Ċ private Ġconst Ġval Ġupdate SQL Ġ= Ġ""" Ċ update Ġjoin list Ġset ĊĠĠĠ Ġuserid Ġ= Ġ$ 2 , ĊĠĠĠ Ġguild id Ġ= Ġ$ 3 , ĊĠĠĠ Ġjoint ime Ġ= Ġ$ 4 , ĊĠĠĠ Ġallow time Ġ= Ġ$ 5 , ĊĠĠĠ Ġallowed Ġ= Ġ$ 6 Ċ where Ġid Ġ= Ġ$ 1 ; Ċ """ Ċ Ċ object ĠJoin s Table Ġ: ĠAbstract Table Ġ{ ĊĠĠĠ Ġoverride Ġval Ġcreate Statement Ġ= Ġcreate SQL ĊĠĠĠ Ġoverride Ġval Ġcreate Index Statements Ġ= ĠarrayOf < String >() ĊĊĠĠĠ Ġprivate Ġfun ĠP g Row Set . to Join Entities (): ĠList < Join Entity > Ġ= Ġthis . map Ġ{ ĊĠĠĠĠĠĠĠ ĠJoin Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġit . getInteger ( 0 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġit . getLong ( 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġguild Id Ġ= Ġit . getLong ( 2 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjoin Time Ġ= Ġit . getLong ( 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġallow Time Ġ= Ġit . getLong ( 4 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġallowed Ġ= Ġit . getBoolean ( 5 ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġfetch Guild Join s ( guild : ĠGuild ): ĠList < Join Entity > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpg Pool . prepared Query Await (" select Ġ* Ġfrom Ġjoin list Ġwhere Ġguild id Ġ= Ġ$ 1 ;", ĠTuple . of ( guild . id Long )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Join Entities () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġfetch Expired Join s (): ĠList < Join Entity > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtime Ġ= ĠSystem . currentTimeMillis () Ġ/ Ġ 1 0 0 0 ĊĠĠĠĠĠĠĠ Ġreturn Ġpg Pool . prepared Query Await (" select Ġ* Ġfrom Ġjoin list Ġwhere Ġallowed Ġ= Ġfalse Ġand Ġallow time Ġ< Ġ$ 1 ;", ĠTuple . of ( time )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Join Entities () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġinsert Join ( join : ĠJoin Entity ): ĠJoin Entity Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġpg Pool . prepared Query Await ( insert SQL , Ġjoin . to Tuple ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. to Join Entities () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. first () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġupdate Join ( new Join : ĠJoin Entity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpg Pool . prepared Query Await ( update SQL , Ġnew Join . to Tuple With Id ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġdelete User Join s ( guild : ĠGuild , Ġuser : ĠUser ) Ġ{ ĊĠĠĠĠĠĠĠ Ġpg Pool . prepared Query Await (" delete Ġfrom Ġjoin list Ġwhere Ġguild id Ġ= Ġ$ 1 Ġand Ġuserid Ġ= Ġ$ 2 ;", ĠTuple . of ( guild . id Long , Ġuser . id Long )) ĊĠĠĠ Ġ} Ċ } Ċ Ċ data Ġclass ĠJoin Entity ( ĊĠĠĠ Ġval Ġid : ĠInt Ġ= Ġ- 1 , ĊĠĠĠ Ġval ĠuserId : ĠLong , ĊĠĠĠ Ġval Ġguild Id : ĠLong , ĊĠĠĠ Ġval Ġjoin Time : ĠLong , ĊĠĠĠ Ġval Ġallow Time : ĠLong , ĊĠĠĠ Ġval Ġallowed : ĠBoolean Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġto Tuple (): ĠTuple Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTuple . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġguild Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjoin Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġallow Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġallowed ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġto Tuple With Id (): ĠTuple Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠTuple . of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġguild Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjoin Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġallow Time , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġallowed ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ