package Ġorg . kom apper . r 2 dbc . dsl . runner Ċ Ċ import Ġorg . kom apper . core . dsl . context . Entity Update Context Ċ import Ġorg . kom apper . core . dsl . met amodel . Entity Met amodel Ċ import Ġorg . kom apper . core . dsl . runner . check Optim istic Lock Ċ import Ġorg . kom apper . r 2 dbc . R 2 dbc Database Config Ċ import Ġorg . kom apper . r 2 dbc . R 2 dbc Executor Ċ Ċ internal Ġclass ĠEntity Update R 2 dbc Runner Support < ENTITY Ġ: ĠAny , ĠID Ġ: ĠAny , ĠMETA Ġ: ĠEntity Met amodel < ENTITY , ĠID , ĠMETA >>( ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠEntity Update Context < ENTITY , ĠID , ĠMETA >, Ċ ) Ġ{ ĊĊĠĠĠ Ġfun Ġpre Update ( config : ĠR 2 dbc Database Config , Ġentity : ĠENT ITY ): ĠENT ITY Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġclock Ġ= Ġconfig . clock Provider . now () ĊĠĠĠĠĠĠĠ Ġreturn Ġcontext . target . pre Update ( entity , Ġclock ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġsuspend Ġfun Ġ< T > Ġupdate ( config : ĠR 2 dbc Database Config , Ġexecute : Ġsuspend Ġ( R 2 dbc Executor ) Ġ-> ĠT ): ĠT Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġexecutor Ġ= ĠR 2 dbc Executor ( config , Ġcontext . options ) ĊĠĠĠĠĠĠĠ Ġreturn Ġexecute ( executor ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġpost Update ( entity : ĠENT ITY , Ġcount : ĠInt , Ġindex : ĠInt ? Ġ= Ġnull ): ĠENT ITY Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( context . target . version Property () Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Optim istic Lock ( context . options , Ġcount , Ġindex ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ(! context . options . disable Optim istic Lock ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . target . post Update ( entity ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentity ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ