/* Ċ Ġ* ĠCopyright Ġ 2 0 1 8 - 2 0 2 1 Ġthe Ġoriginal Ġauthor Ġor Ġauthors . Ċ Ġ* Ċ Ġ* Ġ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 . kt orm . migration Ċ Ċ import Ġorg . kt orm . expression . Scalar Expression Ċ import Ġorg . kt orm . schema .* Ċ Ċ /** Ċ Ġ* ĠRepresents Ġa Ġconstraint Ġon Ġan ĠSQL ĠTable . Ċ Ġ*/ Ċ public Ġabstract Ġclass ĠConstraint () Ġ{ ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠChecks Ġif Ġthe Ġconstraints Ġare Ġequivalent Ġin Ġterms Ġof Ġmigrations . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġabstract Ġin fix Ġfun Ġmigration Equal ( other : ĠConstraint ): ĠBoolean ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġa Ġ[ Table Constraint Expression ] Ġrepresenting Ġthe Ġdefinition Ġof Ġthis Ġconstraint . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġabstract Ġfun Ġas Expression (): ĠTable Constraint Expression Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġunique Ġconstraint , Ġwhich Ġensures Ġthat Ġevery Ġrow Ġhas Ġa Ġdifferent Ġset Ġof Ġvalues Ġfor Ġthe Ġgiven Ġcolumns . Ċ Ġ*/ Ċ public Ġdata Ġclass ĠUnique Constraint ( val Ġacross : ĠList < Column <* >>) Ġ: ĠConstraint () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġmigration Equal ( other : ĠConstraint ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġother Ġis ĠUnique Constraint Ġ&& Ġthis . ac ross . zip ( other . ac ross ) Ġ{ Ġa , Ġb Ġ-> Ġa . name Ġ== Ġb . name Ġ}. all Ġ{ Ġit Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġas Expression (): ĠUnique Table Constraint Expression Ġ= ĠUnique Table Constraint Expression ( ĊĠĠĠĠĠĠĠ Ġacross Ġ= Ġacross . map Ġ{ Ġit . as Reference Expression () Ġ} ĊĠĠĠ Ġ) Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġcheck Ġconstraint , Ġwhich Ġensures Ġthat Ġinserted Ġor Ġupdated Ġrows Ġad here Ġto Ġthe Ġgiven Ġ[ condition ]. Ċ Ġ*/ Ċ public Ġdata Ġclass ĠCheck Constraint ( val Ġcondition : ĠScalar Expression < Boolean >) Ġ: ĠConstraint () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġmigration Equal ( other : ĠConstraint ): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġother Ġis ĠCheck Constraint Ġ&& Ġthis . condition Ġ== Ġother . condition ĊĊĠĠĠ Ġoverride Ġfun Ġas Expression (): ĠCheck Table Constraint Expression Ġ= ĠCheck Table Constraint Expression ( condition ) Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġforeign Ġkey Ġconstraint , Ġwhich Ġensures Ġthat Ġthe Ġcolumns Ġin Ġ[ corre spond ence ] Ġmap Ġto Ġthe Ġtarget Ġtable . Ċ Ġ* ĠIf Ġthe Ġtarget Ġrow Ġis Ġmodified , Ġ[ on Update ] Ġis Ġtriggered . Ċ Ġ* ĠIf Ġthe Ġtarget Ġrow Ġis Ġdeleted , Ġ[ onDelete ] Ġis Ġtriggered . Ċ Ġ*/ Ċ public Ġdata Ġclass ĠForeign Key Constraint ( ĊĠĠĠ Ġval Ġto : ĠBase Table <* >, ĊĠĠĠ Ġval Ġcorrespond ence : ĠMap < Column <* >, ĠColumn <* >>, ĊĠĠĠ Ġval ĠonUpdate : ĠOn Modification Ġ= ĠOn Modification . Cascade , ĊĠĠĠ Ġval ĠonDelete : ĠOn Modification Ġ= ĠOn Modification . Error , Ċ ) Ġ: ĠConstraint () Ġ{ ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRepresents Ġthe Ġdifferent Ġways Ġof Ġhandling Ġa Ġtarget Ġrow Ġmodification . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġpublic Ġenum Ġclass ĠOn Modification Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠThrow Ġan Ġerror , Ġdo Ġnot Ġproceed ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ ĠError , ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠCorre sponding Ġrows Ġare Ġupdated Ġor Ġdeleted Ġin Ġthe Ġreferencing Ġtable Ġwhen Ġthat Ġrow Ġis Ġupdated Ġor Ġdeleted Ġin Ġthe Ġparent Ġtable . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ ĠCascade , ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReferences Ġto Ġthe Ġtarget Ġrow Ġare Ġset Ġto Ġnull . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ ĠSet Null , ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠReferences Ġto Ġthe Ġtarget Ġrow Ġare Ġset Ġto Ġthe Ġdefault Ġvalue . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ ĠSet Default ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmigration Equal ( other : ĠConstraint ): ĠBoolean Ġ= Ġother Ġis ĠForeign Key Constraint ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġthis . corre spond ence . entries . zip ( other . corre spond ence . entries ) Ġ{ Ġa , Ġb Ġ-> ĊĠĠĠĠĠĠĠ Ġa . key . name Ġ== Ġb . key . name Ġ&& Ġa . value . name Ġ== Ġb . value . name ĊĠĠĠ Ġ}. all Ġ{ Ġit Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġas Expression (): ĠForeign Key Table Constraint Expression Ġ= ĠForeign Key Table Constraint Expression ( ĊĠĠĠĠĠĠĠ Ġother Table Ġ= Ġto . as Reference Expression (), ĊĠĠĠĠĠĠĠ Ġcorrespond ence Ġ= Ġcorrespond ence . entries . associate Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . key . as Reference Expression () Ġto Ġit . value . as Reference Expression () ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ ĠonUpdate Ġ= ĠonUpdate , ĊĠĠĠĠĠĠĠ ĠonDelete Ġ= ĠonDelete , ĊĠĠĠ Ġ) Ċ } Ċ