/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 ĠCo up ang ĠLtd . Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġorg . springframework . data . re query . kotlin . core Ċ Ċ import Ġio . re query . Transaction Isolation Ċ import Ġio . re query . kotlin . Deletion Ċ import Ġio . re query . kotlin . Insert Into Ċ import Ġio . re query . kotlin . Insertion Ċ import Ġio . re query . kotlin . Queryable Attribute Ċ import Ġio . re query . kotlin . Selection Ċ import Ġio . re query . kotlin . Update Ċ import Ġio . re query . meta . Attribute Ċ import Ġio . re query . meta . Entity Model Ċ import Ġio . re query . query . Expression Ċ import Ġio . re query . query . Result Ċ import Ġio . re query . query . Scalar Ċ import Ġio . re query . query . Tuple Ċ import Ġio . re query . query . element . Query Element Ċ import Ġio . re query . query . function . Count Ċ import Ġio . re query . sql . Entity Context Ċ import Ġio . re query . sql . Kotlin Entity DataStore Ċ import Ġorg . springframework . data . re query . kotlin . apply Where Conditions Ċ import Ġorg . springframework . data . re query . kotlin . getEntity Context Ċ import Ġorg . springframework . data . re query . kotlin . getEntity Model Ċ import Ġorg . springframework . data . re query . kotlin . mapping . Re query Mapping Context Ċ import Ġkotlin . reflect . K Class Ċ Ċ /** Ċ Ġ* Ġ ĠJava ìļ© ĠRe query Operations Ċ Ġ* Ġ Ġ// ĠTODO : ĠMove Ġto ĠJava Ġcode Ċ Ġ* Ċ Ġ* Ġ@ author Ġdeb op Ċ Ġ*/ Ċ interface ĠRe query Operations Ġ{ ĊĊĠĠĠ Ġval Ġdata Store : ĠKotlin Entity DataStore < Any > ĊĠĠĠ Ġval Ġmapping Context : ĠRe query Mapping Context ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġval Ġentity Model : ĠEntity Model ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdata Store . getEntity Model () ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġval Ġentity Context : ĠEntity Context < Any > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġdata Store . getEntity Context () ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny > Ġselect ( entity Type : ĠK Class < E >): ĠSelection < out ĠResult < E >> Ġ= Ġdata Store . select ( entity Type ) ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny > Ġselect ( entity Type : ĠK Class < E >, Ġvar arg Ġattributes : ĠQuery able Attribute < E , Ġ* >): ĠSelection < out ĠResult < E >> Ġ= ĊĠĠĠĠĠĠĠ Ġdata Store . select ( entity Type , Ġ* attributes ) ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġselect ( var arg Ġexpressions : ĠExpression < *> ): ĠSelection < out ĠResult < Tuple >> Ġ= Ġdata Store . select (* expressions ) ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny , ĠK > Ġfind ById ( entity Type : ĠK Class < E >, Ġid : ĠK ): ĠE ? Ġ= Ġdata Store . findBy Key ( entity Type , Ġid ) ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny > ĠfindAll ( entity Type : ĠK Class < E >): ĠList < E > Ġ= Ġdata Store . select ( entity Type ). get (). toList () ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny > Ġrefresh ( entity : ĠE ): ĠE Ġ= Ġdata Store . refresh ( entity ) ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny > Ġrefresh ( entity : ĠE , Ġvar arg Ġattributes : ĠAttribute < *, Ġ* >): ĠE Ġ= ĊĠĠĠĠĠĠĠ Ġdata Store . refresh ( entity , Ġ* attributes ) ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny > Ġrefresh All ( entities : ĠIterable < E >, Ġvar arg Ġattributes : ĠAttribute < *, Ġ* >): ĠList < E > Ġ= ĊĠĠĠĠĠĠĠ Ġdata Store . refresh < E >( entities , Ġ* attributes ). toList () ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny > Ġrefresh All Properties ( entity : ĠE ): ĠE Ġ= Ġdata Store . refresh All ( entity ) ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny > Ġrefresh All Entities ( entities : ĠIterable < E >, Ġvar arg Ġattributes : ĠAttribute < E , Ġ* >): ĠList < E > Ġ= ĊĠĠĠĠĠĠĠ Ġentities . map Ġ{ Ġrefresh All Properties ( it ) Ġ} ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny > Ġupsert ( entity : ĠE ): ĠE Ġ= Ġdata Store . upsert ( entity ) ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny > Ġupsert All ( entities : ĠIterable < E >): ĠList < E > Ġ= ĊĠĠĠĠĠĠĠ Ġdata Store . upsert < E >( entities ). toList () ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny > Ġinsert ( entity : ĠE ): ĠE Ġ= Ġdata Store . insert ( entity ) ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny , ĠK Ġ: ĠAny > Ġinsert ( entity : ĠE , Ġkey Class : ĠK Class < K >): ĠK Ġ= Ġdata Store . insert ( entity , Ġkey Class ) ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny > Ġinsert ( entity Type : ĠK Class < E >): ĠInsert ion < out ĠResult < Tuple >> Ġ= Ġdata Store . insert < E >( entity Type ) ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny > Ġinsert ( entity Type : ĠK Class < E >, Ġvar arg Ġattributes : ĠQuery able Attribute < E , Ġ* >): ĠInsert Into < out ĠResult < Tuple >> Ġ= ĊĠĠĠĠĠĠĠ Ġdata Store . insert ( entity Type , Ġ* attributes ) ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny > Ġinsert All ( entities : ĠIterable < E >): ĠList < E > Ġ= Ġdata Store . insert < E >( entities ). toList () ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny , ĠK Ġ: ĠAny > Ġinsert All ( entities : ĠIterable < E >, Ġkey Class : ĠK Class < K >): ĠList < K > Ġ= ĊĠĠĠĠĠĠĠ Ġdata Store . insert < K , ĠE >( entities , Ġkey Class ). toList () ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġupdate (): ĠUpdate < out ĠScalar < Int >> Ġ= Ġdata Store . update () ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny > Ġupdate ( entity : ĠE ): ĠE Ġ= Ġdata Store . update ( entity ) ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny > Ġupdate ( entity Type : ĠK Class < E >): ĠUpdate < out ĠScalar < Int >> Ġ= Ġdata Store . update < E >( entity Type ) ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny > Ġupdate All ( entities : ĠIterable < E >): ĠList < E > Ġ= Ġdata Store . update < E >( entities ). toList () ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny > Ġdelete (): ĠDe letion < out ĠScalar < Int >> Ġ= Ġdata Store . delete () ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny > Ġdelete ( entity Type : ĠK Class < E >): ĠDe letion < out ĠScalar < Int >> Ġ= Ġdata Store . delete < E >( entity Type ) ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny > Ġdelete ( entity : ĠE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Store . delete ( entity ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny > Ġdelete All ( entities : ĠIterable < E >) Ġ{ ĊĠĠĠĠĠĠĠ Ġdata Store . delete < E >( entities ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny > Ġdelete All ( entity Type : ĠK Class < E >): ĠInt Ġ= Ġdata Store . delete < E >( entity Type ). get (). value () ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny > Ġcount ( entity Type : ĠK Class < E >): ĠSelection < out ĠScalar < Int >> Ġ= ĊĠĠĠĠĠĠĠ Ġdata Store . count ( entity Type ) ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny > Ġcount ( var arg Ġattributes : ĠQuery able Attribute < Any , Ġ* >): ĠSelection < out ĠScalar < Int >> Ġ= ĊĠĠĠĠĠĠĠ Ġdata Store . count (* attributes ) ĊĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny > Ġcount ( entity Type : ĠK Class < E >, Ġwhere Clause : ĠQuery Element < out ĠResult < E >> ): ĠInt Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġselect ( Count . count ( entity Type . java )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Where Conditions ( where Clause . where Elements ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. unwrap Query () Ġas ĠQuery Element < out ĠResult < Tuple >> ĊĊĠĠĠĠĠĠĠ Ġval Ġtuple Ġ= Ġquery . get (). first () ĊĠĠĠĠĠĠĠ Ġreturn Ġtuple . get ( 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny > Ġexists ( entity Type : ĠK Class < E >, Ġwhere Clause : ĠQuery Element < out ĠResult < E >> ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġwhere Clause . limit ( 1 ). get (). first OrNull () Ġ!= Ġnull ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġraw ( query : ĠString , Ġvar arg Ġparameters : ĠAny ): ĠResult < Tuple > Ġ= ĊĠĠĠĠĠĠĠ Ġdata Store . raw ( query , Ġ* parameters ) ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< E Ġ: ĠAny > Ġraw ( entity Type : ĠK Class < E >, Ġquery : ĠString , Ġvar arg Ġparameters : ĠAny ): ĠResult < E > Ġ= ĊĠĠĠĠĠĠĠ Ġdata Store . raw ( entity Type , Ġquery , Ġ* parameters ) ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< V > Ġrun In Transaction ( callable : Ġ() Ġ-> ĠV ): ĠV Ġ= Ġrun In Transaction ( null , Ġcallable ) ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< V > Ġrun In Transaction ( is olation : ĠTransaction Isolation ?, Ġcallable : Ġ() Ġ-> ĠV ): ĠV Ġ= ĊĠĠĠĠĠĠĠ Ġwhen ( is olation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġdata Store . with Transaction Ġ{ Ġcallable . invoke () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġdata Store . with Transaction ( is olation ) Ġ{ Ġcallable . invoke () Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< V > Ġwith Transaction ( block : Ġ( Kotlin Entity DataStore < Any >) Ġ-> ĠV ): ĠV Ġ= Ġwith Transaction ( null , Ġblock ) ĊĊĠĠĠ Ġ@ Jvm Default ĊĠĠĠ Ġfun Ġ< V > Ġwith Transaction ( is olation : ĠTransaction Isolation ?, Ġblock : Ġ( Kotlin Entity DataStore < Any >) Ġ-> ĠV ): ĠV Ġ= ĊĠĠĠĠĠĠĠ Ġwhen ( is olation ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġdata Store . with Transaction Ġ{ Ġblock . invoke ( data Store ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġdata Store . with Transaction ( is olation ) Ġ{ Ġblock . invoke ( data Store ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ċ }