package Ġorg . kom apper . r 2 dbc . dsl . runner Ċ Ċ import Ġorg . kom apper . core . Database Config Ċ import Ġorg . kom apper . core . Statement Ċ import Ġorg . kom apper . core . dsl . context . Entity Insert Context Ċ import Ġorg . kom apper . core . dsl . met amodel . Entity Met amodel Ċ import Ġorg . kom apper . core . dsl . runner . Entity Insert Single Runner Ċ import Ġorg . kom apper . r 2 dbc . R 2 dbc Database Config Ċ Ċ internal Ġclass ĠEntity Insert Single R 2 dbc Runner < ENTITY Ġ: ĠAny , ĠID Ġ: ĠAny , ĠMETA Ġ: ĠEntity Met amodel < ENTITY , ĠID , ĠMETA >>( ĊĠĠĠ Ġcontext : ĠEntity Insert Context < ENTITY , ĠID , ĠMETA >, ĊĠĠĠ Ġprivate Ġval Ġentity : ĠENT ITY Ċ ) Ġ: ĠR 2 dbc Runner < ENTITY > Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġrunner : ĠEntity Insert Single Runner < ENTITY , ĠID , ĠMETA > Ġ= ĊĠĠĠĠĠĠĠ ĠEntity Insert Single Runner ( context , Ġentity ) ĊĊĠĠĠ Ġprivate Ġval Ġsupport : ĠEntity Insert R 2 dbc Runner Support < ENTITY , ĠID , ĠMETA > Ġ= ĊĠĠĠĠĠĠĠ ĠEntity Insert R 2 dbc Runner Support ( context ) ĊĊĠĠĠ Ġoverride Ġsuspend Ġfun Ġrun ( config : ĠR 2 dbc Database Config ): ĠENT ITY Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Entity Ġ= Ġpre Insert ( config ) ĊĠĠĠĠĠĠĠ Ġval Ġ(_, Ġgenerated Keys ) Ġ= Ġinsert ( config , Ġnew Entity ) ĊĠĠĠĠĠĠĠ Ġreturn Ġpost Insert ( new Entity , Ġgenerated Keys ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġpre Insert ( config : ĠR 2 dbc Database Config ): ĠENT ITY Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsupport . pre Insert ( config , Ġentity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġsuspend Ġfun Ġinsert ( config : ĠR 2 dbc Database Config , Ġentity : ĠENT ITY ): ĠPair < Int , ĠLong Array > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġstatement Ġ= Ġrunner . build Statement ( config , Ġentity ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsupport . insert ( config ) Ġ{ Ġit . executeUpdate ( statement ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġpost Insert ( entity : ĠENT ITY , Ġgenerated Keys : ĠLong Array ): ĠENT ITY Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġkey Ġ= Ġgenerated Keys . first OrNull () ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( key Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsupport . post Insert ( entity , Ġkey ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentity ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdry Run ( config : ĠDatabase Config ): ĠStatement Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrunner . dry Run ( config ) ĊĠĠĠ Ġ} Ċ } Ċ