package Ġorg . jetbrains . ex posed . sql Ċ Ċ import Ġorg . jetbrains . ex posed . dao . id . Entity ID Ċ import Ġorg . jetbrains . ex posed . dao . id . Entity ID Function Provider Ċ import Ġorg . jetbrains . ex posed . dao . id . Id Table Ċ import Ġorg . jetbrains . ex posed . exceptions . Duplicate Column Exception Ċ import Ġorg . jetbrains . ex posed . sql . statements . api . Ex posed Blob Ċ import Ġorg . jetbrains . ex posed . sql . transactions . Transaction Manager Ċ import Ġorg . jetbrains . ex posed . sql . vendors . Oracle Dialect Ċ import Ġorg . jetbrains . ex posed . sql . vendors . PostgreSQL Dialect Ċ import Ġorg . jetbrains . ex posed . sql . vendors . SQLite Dialect Ċ import Ġorg . jetbrains . ex posed . sql . vendors . current Dialect Ċ import Ġorg . jetbrains . ex posed . sql . vendors . current Dialect If Available Ċ import Ġorg . jetbrains . ex posed . sql . vendors . in Pro per Case Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . util .* Ċ import Ġkotlin . reflect . K Class Ċ import Ġkotlin . reflect . K Mutable Property 1 Ċ import Ġkotlin . reflect . K Parameter Ċ import Ġkotlin . reflect . K Property 1 Ċ import Ġkotlin . reflect . full . is Subclass Of Ċ import Ġkotlin . reflect . full . member Properties Ċ import Ġkotlin . reflect . full . primary Constructor Ċ Ċ /** ĠPair Ġof Ġexpressions Ġused Ġto Ġmatch Ġrows Ġfrom Ġtwo Ġjoined Ġtables . Ġ*/ Ċ type alias ĠJoin Condition Ġ= ĠPair < Expression <* >, ĠExpression <* >> Ċ Ċ /** Ċ Ġ* ĠRepresents Ġa Ġset Ġof Ġexpressions , Ġcontained Ġin Ġthe Ġgiven Ġcolumn Ġset . Ċ Ġ*/ Ċ interface ĠField Set Ġ{ ĊĠĠĠ Ġ/** ĠReturn Ġthe Ġcolumn Ġset Ġthat Ġcontains Ġthis Ġfield Ġset . Ġ*/ ĊĠĠĠ Ġval Ġsource : ĠColumn Set ĊĊĠĠĠ Ġ/** ĠReturns Ġthe Ġfield Ġof Ġthis Ġfield Ġset . Ġ*/ ĊĠĠĠ Ġval Ġfields : ĠList < Expression <* >> ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġall Ġreal Ġfields , Ġun rolling Ġcomposite Ġ[ Composite Column ] Ġif Ġpresent ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġval Ġreal Fields : ĠList < Expression <* >> ĊĠĠĠĠĠĠĠ Ġget () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġun rolled Ġ= ĠArrayList < Expression < *> >( fields . size ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġfields . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġis ĠComposite Column <* >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġun rolled . addAll ( it . get Real Columns ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġun rolled . add ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġun rolled ĊĠĠĠĠĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠRepresents Ġa Ġset Ġof Ġcolumns . Ċ Ġ*/ Ċ abstract Ġclass ĠColumn Set Ġ: ĠField Set Ġ{ ĊĠĠĠ Ġoverride Ġval Ġsource : ĠColumn Set Ġget () Ġ= Ġthis ĊĊĠĠĠ Ġ/** ĠReturns Ġthe Ġcolumns Ġof Ġthis Ġcolumn Ġset . Ġ*/ ĊĠĠĠ Ġabstract Ġval Ġcolumns : ĠList < Column <* >> ĊĠĠĠ Ġoverride Ġval Ġfields : ĠList < Expression <* >> Ġget () Ġ= Ġcolumns ĊĊĠĠĠ Ġ/** ĠApp ends Ġthe ĠSQL Ġrepresentation Ġof Ġthis Ġcolumn Ġset Ġto Ġthe Ġspecified Ġ[ query Builder ]. Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġdescribe ( s : ĠTransaction , Ġquery Builder : ĠQuery Builder ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġjoin Ġrelation Ġwith Ġ[ other Table ]. ĊĠĠĠĠ Ġ* ĠWhen Ġall Ġjoining Ġoptions Ġare Ġabsent ĠEx posed Ġwill Ġtry Ġto Ġresolve Ġreferencing Ġcolumns Ġby Ġitself . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġother Table Ġ[ Column Set ] Ġto Ġjoin Ġwith . ĊĠĠĠĠ Ġ* Ġ@ param Ġjoin Type ĠSee Ġ[ Join Type ] Ġfor Ġavailable Ġoptions . ĊĠĠĠĠ Ġ* Ġ@ param Ġon Column ĠThe Ġcolumn Ġfrom Ġa Ġcurrent Ġ[ Column Set ], Ġmay Ġbe Ġskipped Ġthen Ġ[ additional Constraint ] Ġwill Ġbe Ġused . ĊĠĠĠĠ Ġ* Ġ@ param Ġother Column ĠThe Ġcolumn Ġfrom Ġan Ġ[ other Table ], Ġmay Ġbe Ġskipped Ġthen Ġ[ additional Constraint ] Ġwill Ġbe Ġused . ĊĠĠĠĠ Ġ* Ġ@ param Ġadditional Constraint ĠThe Ġcondition Ġto Ġjoin Ġwhich Ġwill Ġbe Ġplaced Ġin ĠON Ġpart Ġof ĠSQL Ġquery . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ throws ĠIllegalStateException ĠIf Ġjoin Ġcould Ġnot Ġbe Ġprepared . ĠSee Ġexception Ġmessage Ġfor Ġmore Ġdetails . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġjoin ( ĊĠĠĠĠĠĠĠ Ġother Table : ĠColumn Set , ĊĠĠĠĠĠĠĠ Ġjoin Type : ĠJoin Type , ĊĠĠĠĠĠĠĠ Ġon Column : ĠExpression < *> ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġother Column : ĠExpression < *> ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġadditional Constraint : Ġ( Sql Expression Builder . () Ġ-> ĠOp < Boolean >) ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠJoin ĊĊĠĠĠ Ġ/** ĠCreates Ġan Ġinner Ġjoin Ġrelation Ġwith Ġ[ other Table ]. Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġinner Join ( other Table : ĠColumn Set ): ĠJoin ĊĊĠĠĠ Ġ/** ĠCreates Ġa Ġleft Ġouter Ġjoin Ġrelation Ġwith Ġ[ other Table ]. Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġleft Join ( other Table : ĠColumn Set ): ĠJoin ĊĊĠĠĠ Ġ/** ĠCreates Ġa Ġright Ġouter Ġjoin Ġrelation Ġwith Ġ[ other Table ]. Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġright Join ( other Table : ĠColumn Set ): ĠJoin ĊĊĠĠĠ Ġ/** ĠCreates Ġa Ġfull Ġouter Ġjoin Ġrelation Ġwith Ġ[ other Table ]. Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġfull Join ( other Table : ĠColumn Set ): ĠJoin ĊĊĠĠĠ Ġ/** ĠCreates Ġa Ġcross Ġjoin Ġrelation Ġwith Ġ[ other Table ]. Ġ*/ ĊĠĠĠ Ġabstract Ġfun Ġcross Join ( other Table : ĠColumn Set ): ĠJoin ĊĊĠĠĠ Ġ/** ĠSpecifies Ġa Ġsubset Ġof Ġ[ columns ] Ġof Ġthis Ġ[ Column Set ]. Ġ*/ ĊĠĠĠ Ġfun Ġslice ( column : ĠExpression <* >, Ġvar arg Ġcolumns : ĠExpression < *> ): ĠField Set Ġ= ĠSlice ( this , ĠlistOf ( column ) Ġ+ Ġcolumns ) ĊĊĠĠĠ Ġ/** ĠSpecifies Ġa Ġsubset Ġof Ġ[ columns ] Ġof Ġthis Ġ[ Column Set ]. Ġ*/ ĊĠĠĠ Ġfun Ġslice ( columns : ĠList < Expression <* >> ): ĠField Set Ġ= ĠSlice ( this , Ġcolumns ) Ċ } Ċ Ċ /** ĠCreates Ġan Ġinner Ġjoin Ġrelation Ġwith Ġ[ other Table ] Ġusing Ġ[ on Column ] Ġand Ġ[ other Column ] Ġas Ġthe Ġjoin Ġcondition . Ġ*/ Ċ fun Ġ< C 1 Ġ: ĠColumn Set , ĠC 2 Ġ: ĠColumn Set > ĠC 1 . inner Join ( ĊĠĠĠ Ġother Table : ĠC 2 , ĊĠĠĠ Ġon Column : ĠC 1 . () Ġ-> ĠExpression <* >, ĊĠĠĠ Ġother Column : ĠC 2 . () Ġ-> ĠExpression <* >, ĊĠĠĠ Ġadditional Constraint : Ġ( Sql Expression Builder . () Ġ-> ĠOp < Boolean >) ? Ġ= Ġnull , Ċ ): ĠJoin Ġ= Ġjoin ( other Table , ĠJoin Type . INNER , Ġon Column ( this ), Ġother Column ( other Table ), Ġadditional Constraint ) Ċ Ċ /** ĠCreates Ġa Ġleft Ġouter Ġjoin Ġrelation Ġwith Ġ[ other Table ] Ġusing Ġ[ on Column ] Ġand Ġ[ other Column ] Ġas Ġthe Ġjoin Ġcondition . Ġ*/ Ċ fun Ġ< C 1 Ġ: ĠColumn Set , ĠC 2 Ġ: ĠColumn Set > ĠC 1 . leftJoin ( ĊĠĠĠ Ġother Table : ĠC 2 , ĊĠĠĠ Ġon Column : ĠC 1 . () Ġ-> ĠExpression <* >, ĊĠĠĠ Ġother Column : ĠC 2 . () Ġ-> ĠExpression <* >, ĊĠĠĠ Ġadditional Constraint : Ġ( Sql Expression Builder . () Ġ-> ĠOp < Boolean >) ? Ġ= Ġnull , Ċ ): ĠJoin Ġ= Ġjoin ( other Table , ĠJoin Type . LEFT , Ġon Column (), Ġother Table . other Column (), Ġadditional Constraint ) Ċ Ċ /** ĠCreates Ġa Ġright Ġouter Ġjoin Ġrelation Ġwith Ġ[ other Table ] Ġusing Ġ[ on Column ] Ġand Ġ[ other Column ] Ġas Ġthe Ġjoin Ġcondition . Ġ*/ Ċ fun Ġ< C 1 Ġ: ĠColumn Set , ĠC 2 Ġ: ĠColumn Set > ĠC 1 . right Join ( ĊĠĠĠ Ġother Table : ĠC 2 , ĊĠĠĠ Ġon Column : ĠC 1 . () Ġ-> ĠExpression <* >, ĊĠĠĠ Ġother Column : ĠC 2 . () Ġ-> ĠExpression <* >, ĊĠĠĠ Ġadditional Constraint : Ġ( Sql Expression Builder . () Ġ-> ĠOp < Boolean >) ? Ġ= Ġnull , Ċ ): ĠJoin Ġ= Ġjoin ( other Table , ĠJoin Type . RIGHT , Ġon Column (), Ġother Table . other Column (), Ġadditional Constraint ) Ċ Ċ /** ĠCreates Ġa Ġfull Ġouter Ġjoin Ġrelation Ġwith Ġ[ other Table ] Ġusing Ġ[ on Column ] Ġand Ġ[ other Column ] Ġas Ġthe Ġjoin Ġcondition . Ġ*/ Ċ fun Ġ< C 1 Ġ: ĠColumn Set , ĠC 2 Ġ: ĠColumn Set > ĠC 1 . full Join ( ĊĠĠĠ Ġother Table : ĠC 2 , ĊĠĠĠ Ġon Column : ĠC 1 . () Ġ-> ĠExpression <* >, ĊĠĠĠ Ġother Column : ĠC 2 . () Ġ-> ĠExpression <* >, ĊĠĠĠ Ġadditional Constraint : Ġ( Sql Expression Builder . () Ġ-> ĠOp < Boolean >) ? Ġ= Ġnull , Ċ ): ĠJoin Ġ= Ġjoin ( other Table , ĠJoin Type . FULL , Ġon Column (), Ġother Table . other Column (), Ġadditional Constraint ) Ċ Ċ /** ĠCreates Ġa Ġcross Ġjoin Ġrelation Ġwith Ġ[ other Table ] Ġusing Ġ[ on Column ] Ġand Ġ[ other Column ] Ġas Ġthe Ġjoin Ġcondition . Ġ*/ Ċ fun Ġ< C 1 Ġ: ĠColumn Set , ĠC 2 Ġ: ĠColumn Set > ĠC 1 . cross Join ( ĊĠĠĠ Ġother Table : ĠC 2 , ĊĠĠĠ Ġon Column : ĠC 1 . () Ġ-> ĠExpression <* >, ĊĠĠĠ Ġother Column : ĠC 2 . () Ġ-> ĠExpression <* >, ĊĠĠĠ Ġadditional Constraint : Ġ( Sql Expression Builder . () Ġ-> ĠOp < Boolean >) ? Ġ= Ġnull , Ċ ): ĠJoin Ġ= Ġjoin ( other Table , ĠJoin Type . CROSS , Ġon Column (), Ġother Table . other Column (), Ġadditional Constraint ) Ċ Ċ /** Ċ Ġ* ĠRepresents Ġa Ġsubset Ġof Ġ[ fields ] Ġfrom Ġa Ġgiven Ġ[ source ]. Ċ Ġ*/ Ċ class ĠSlice ( override Ġval Ġsource : ĠColumn Set , Ġoverride Ġval Ġfields : ĠList < Expression <* >>) Ġ: ĠField Set Ċ Ċ /** Ċ Ġ* ĠRepresents Ġcolumn Ġset Ġjoin Ġtypes . Ċ Ġ*/ Ċ enum Ġclass ĠJoin Type Ġ{ ĊĠĠĠ Ġ/** ĠInner Ġjoin . Ġ*/ ĊĠĠĠ ĠINNER , ĊĊĠĠĠ Ġ/** ĠLeft Ġouter Ġjoin . Ġ*/ ĊĠĠĠ ĠLEFT , ĊĊĠĠĠ Ġ/** ĠRight Ġouter Ġjoin . Ġ*/ ĊĠĠĠ ĠRIGHT , ĊĊĠĠĠ Ġ/** ĠFull Ġouter Ġjoin . Ġ*/ ĊĠĠĠ ĠFULL , ĊĊĠĠĠ Ġ/** ĠCross Ġjoin . Ġ*/ ĊĠĠĠ ĠC ROSS Ċ } Ċ Ċ /** Ċ Ġ* ĠRepresents Ġa Ġjoin Ġrelation Ġbetween Ġmultiple Ġcolumn Ġsets . Ċ Ġ*/ Ċ class ĠJoin ( ĊĠĠĠ Ġ/** ĠThe Ġcolumn Ġset Ġto Ġwhich Ġothers Ġwill Ġbe Ġjoined . Ġ*/ ĊĠĠĠ Ġval Ġtable : ĠColumn Set Ċ ) Ġ: ĠColumn Set () Ġ{ ĊĊĠĠĠ Ġoverride Ġval Ġcolumns : ĠList < Column <* >> Ġget () Ġ= Ġjoin Parts . flatMap To ( table . columns . to Mutable List ()) Ġ{ Ġit . join Part . columns Ġ} ĊĊĠĠĠ Ġinternal Ġval Ġjoin Parts : ĠMutable List < Join Part > Ġ= Ġmutable ListOf () ĊĊĠĠĠ Ġconstructor ( ĊĠĠĠĠĠĠĠ Ġtable : ĠColumn Set , ĊĠĠĠĠĠĠĠ Ġother Table : ĠColumn Set , ĊĠĠĠĠĠĠĠ Ġjoin Type : ĠJoin Type Ġ= ĠJoin Type . INNER , ĊĠĠĠĠĠĠĠ Ġon Column : ĠExpression < *> ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġother Column : ĠExpression < *> ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġadditional Constraint : Ġ( Sql Expression Builder . () Ġ-> ĠOp < Boolean >) ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ: Ġthis ( table ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Join Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Column Ġ!= Ġnull Ġ&& Ġother Column Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjoin ( other Table , Ġjoin Type , Ġon Column , Ġother Column , Ġadditional Constraint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Column Ġ!= Ġnull Ġ|| Ġother Column Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Can 't Ġprepare Ġjoin Ġon Ġ$ table Ġand Ġ$ other Table Ġwhen Ġonly Ġcolumn Ġfrom Ġa Ġone Ġside Ġprovided .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadditional Constraint Ġ!= Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjoin ( other Table , Ġjoin Type , Ġempty List (), Ġadditional Constraint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġimplicit Join ( other Table , Ġjoin Type ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġjoin Parts . addAll ( new Join . join Parts ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdescribe ( s : ĠTransaction , Ġquery Builder : ĠQuery Builder ): ĠUnit Ġ= Ġquery Builder Ġ{ ĊĠĠĠĠĠĠĠ Ġtable . describe ( s , Ġthis ) ĊĠĠĠĠĠĠĠ Ġfor Ġ( p Ġin Ġjoin Parts ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Ġ${ p . join Type } ĠJOIN Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Join Ġ= Ġp . join Part Ġis ĠJoin ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Join ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" (" ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġp . join Part . describe ( s , Ġthis ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Join ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( p . join Type Ġ!= ĠJoin Type . CROSS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ĠON Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġp . append Conditions ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġjoin ( ĊĠĠĠĠĠĠĠ Ġother Table : ĠColumn Set , ĊĠĠĠĠĠĠĠ Ġjoin Type : ĠJoin Type , ĊĠĠĠĠĠĠĠ Ġon Column : ĠExpression < *> ?, ĊĠĠĠĠĠĠĠ Ġother Column : ĠExpression < *> ?, ĊĠĠĠĠĠĠĠ Ġadditional Constraint : Ġ( Sql Expression Builder . () Ġ-> ĠOp < Boolean >) ? ĊĠĠĠ Ġ): ĠJoin Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcond Ġ= Ġif Ġ( on Column Ġ!= Ġnull Ġ&& Ġother Column Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( Join Condition ( on Column , Ġother Column )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġjoin ( other Table , Ġjoin Type , Ġcond , Ġadditional Constraint ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġin fix Ġfun Ġinner Join ( other Table : ĠColumn Set ): ĠJoin Ġ= Ġimplicit Join ( other Table , ĠJoin Type . INNER ) ĊĊĠĠĠ Ġoverride Ġin fix Ġfun Ġleft Join ( other Table : ĠColumn Set ): ĠJoin Ġ= Ġimplicit Join ( other Table , ĠJoin Type . LEFT ) ĊĊĠĠĠ Ġoverride Ġin fix Ġfun Ġright Join ( other Table : ĠColumn Set ): ĠJoin Ġ= Ġimplicit Join ( other Table , ĠJoin Type . RIGHT ) ĊĊĠĠĠ Ġoverride Ġin fix Ġfun Ġfull Join ( other Table : ĠColumn Set ): ĠJoin Ġ= Ġimplicit Join ( other Table , ĠJoin Type . FULL ) ĊĊĠĠĠ Ġoverride Ġin fix Ġfun Ġcross Join ( other Table : ĠColumn Set ): ĠJoin Ġ= Ġimplicit Join ( other Table , ĠJoin Type . CROSS ) ĊĊĠĠĠ Ġprivate Ġfun Ġimplicit Join ( ĊĠĠĠĠĠĠĠ Ġother Table : ĠColumn Set , ĊĠĠĠĠĠĠĠ Ġjoin Type : ĠJoin Type ĊĠĠĠ Ġ): ĠJoin Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfk Keys Ġ= Ġfind Keys ( this , Ġother Table ) Ġ?: Ġfind Keys ( other Table , Ġthis ) Ġ?: Ġempty List () ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjoin Type Ġ!= ĠJoin Type . CROSS Ġ&& Ġfk Keys . isEmpty () Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Cannot Ġjoin Ġwith Ġ$ other Table Ġas Ġthere Ġis Ġno Ġmatching Ġprimary Ġkey / foreign Ġkey Ġpair Ġand Ġconstraint Ġmissing ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfk Keys . any Ġ{ Ġit . second . size Ġ> Ġ 1 Ġ} Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġreferences Ġ= Ġfk Keys . join ToString (" Ġ& Ġ") Ġ{ Ġ"${ it . first } Ġ-> Ġ${ it . second . join ToString () }" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Cannot Ġjoin Ġwith Ġ$ other Table Ġas Ġthere Ġis Ġmultiple Ġprimary Ġkey Ġ< -> Ġforeign Ġkey Ġreferences .\ n $ references ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcond Ġ= Ġfk Keys . filter Ġ{ Ġit . second . size Ġ== Ġ 1 Ġ}. map Ġ{ Ġit . first Ġto Ġit . second . single () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġjoin ( other Table , Ġjoin Type , Ġcond , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" Member Name Equals ClassName ") ĊĠĠĠ Ġprivate Ġfun Ġjoin ( ĊĠĠĠĠĠĠĠ Ġother Table : ĠColumn Set , ĊĠĠĠĠĠĠĠ Ġjoin Type : ĠJoin Type , ĊĠĠĠĠĠĠĠ Ġcond : ĠList < Join Condition >, ĊĠĠĠĠĠĠĠ Ġadditional Constraint : Ġ( Sql Expression Builder . () Ġ-> ĠOp < Boolean >) ? ĊĠĠĠ Ġ): ĠJoin Ġ= ĠJoin ( table ). also Ġ{ ĊĠĠĠĠĠĠĠ Ġit . join Parts . addAll ( this . join Parts ) ĊĠĠĠĠĠĠĠ Ġit . join Parts . add ( Join Part ( join Type , Ġother Table , Ġcond , Ġadditional Constraint )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfind Keys ( a : ĠColumn Set , Ġb : ĠColumn Set ): ĠList < Pair < Column <* >, ĠList < Column <* >>>> ? Ġ= Ġa . columns ĊĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġa _ pk Ġ-> Ġa _ pk Ġto Ġb . columns . filter Ġ{ Ġit . ref ere e Ġ== Ġa _ pk Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . second . isNotEmpty () Ġ} ĊĠĠĠĠĠĠĠ Ġ. take If Ġ{ Ġit . isNotEmpty () Ġ} ĊĊĠĠĠ Ġ/** ĠReturn Ġ` true ` Ġif Ġthe Ġspecified Ġ[ table ] Ġis Ġalready Ġin Ġthis Ġjoin , Ġ` false ` Ġotherwise . Ġ*/ ĊĠĠĠ Ġfun Ġalready In Join ( table : ĠTable ): ĠBoolean Ġ= Ġjoin Parts . any Ġ{ Ġit . join Part Ġ== Ġtable Ġ} ĊĊĠĠĠ Ġinternal Ġclass ĠJoin Part ( ĊĠĠĠĠĠĠĠ Ġval Ġjoin Type : ĠJoin Type , ĊĠĠĠĠĠĠĠ Ġval Ġjoin Part : ĠColumn Set , ĊĠĠĠĠĠĠĠ Ġval Ġconditions : ĠList < Join Condition >, ĊĠĠĠĠĠĠĠ Ġval Ġadditional Constraint : Ġ( Sql Expression Builder . () Ġ-> ĠOp < Boolean >) ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire ( join Type Ġ== ĠJoin Type . CROSS Ġ|| Ġconditions . isNotEmpty () Ġ|| Ġadditional Constraint Ġ!= Ġnull ) Ġ{ Ġ" Missing Ġjoin Ġcondition Ġon Ġ$ ${ this . join Part }" Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġappend Conditions ( builder : ĠQuery Builder ) Ġ= Ġbuilder Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconditions . appendTo ( this , Ġ" ĠAND Ġ") Ġ{ Ġ( pk Column , Ġfk Column ) Ġ-> Ġappend ( pk Column , Ġ" Ġ= Ġ", Ġfk Column ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( additional Constraint Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( conditions . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ĠAND Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" Ġ( ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( Sql Expression Builder .( additional Constraint ) ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠBase Ġclass Ġfor Ġany Ġsimple Ġtable . Ċ Ġ* Ċ Ġ* ĠIf Ġyou Ġwant Ġto Ġreference Ġyour Ġtable Ġuse Ġ[ Id Table ] Ġinstead . Ċ Ġ* Ċ Ġ* Ġ@ param Ġname ĠTable Ġname , Ġby Ġdefault Ġname Ġwill Ġbe Ġresolved Ġfrom Ġa Ġclass Ġname Ġwith Ġ" Table " Ġsuffix Ġremoved Ġ( if Ġpresent ) Ċ Ġ*/ Ċ open Ġclass ĠTable ( name : ĠString Ġ= Ġ"") Ġ: ĠColumn Set (), ĠD dl Aware Ġ{ ĊĠĠĠ Ġ/** ĠReturns Ġthe Ġtable Ġname . Ġ*/ ĊĠĠĠ Ġopen Ġval ĠtableName : ĠString Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġname . isNotEmpty () Ġ-> Ġname ĊĠĠĠĠĠĠĠ Ġjava Class .` package ` Ġ== Ġnull Ġ-> Ġjava Class . name . remove Suffix (" Table ") ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġjava Class . name . remove Prefix ("${ java Class .` package `. name }. "). substring After ('$ '). remove Suffix (" Table ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinternal Ġval ĠtableName Without Scheme : ĠString Ġget () Ġ= ĠtableName . substring After (".") ĊĊĠĠĠ Ġprivate Ġval Ġ_ columns Ġ= Ġmutable ListOf < Column <* >>() ĊĊĠĠĠ Ġ/** ĠReturns Ġall Ġthe Ġcolumns Ġdefined Ġon Ġthe Ġtable . Ġ*/ ĊĠĠĠ Ġoverride Ġval Ġcolumns : ĠList < Column <* >> Ġget () Ġ= Ġ_ columns ĊĊĠĠĠ Ġ/** ĠReturns Ġthe Ġfirst Ġauto - increment Ġcolumn Ġon Ġthe Ġtable . Ġ*/ ĊĠĠĠ Ġval Ġauto Inc Column : ĠColumn < *> ? Ġget () Ġ= Ġcolumns . first OrNull Ġ{ Ġit . column Type . is Auto Inc Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġ_ indices Ġ= Ġmutable ListOf < Index >() ĊĊĠĠĠ Ġ/** ĠReturns Ġall Ġindices Ġdeclared Ġon Ġthe Ġtable . Ġ*/ ĊĠĠĠ Ġval Ġindices : ĠList < Index > Ġget () Ġ= Ġ_ indices ĊĊĠĠĠ Ġprivate Ġval Ġ_ foreign Keys Ġ= Ġmutable ListOf < ForeignKey Constraint >() ĊĊĠĠĠ Ġ/** ĠReturns Ġall Ġforeign Keys Ġdeclared Ġon Ġthe Ġtable . Ġ*/ ĊĠĠĠ Ġval Ġforeign Keys : ĠList < ForeignKey Constraint > Ġget () Ġ= Ġcolumns . map NotNull Ġ{ Ġit . foreign Key Ġ} Ġ+ Ġ_ foreign Keys ĊĊĠĠĠ Ġprivate Ġval Ġcheck Constraints Ġ= Ġmutable ListOf < Pair < String , ĠOp < Boolean >> >() ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġtable Ġname Ġin Ġproper Ġcase . ĊĠĠĠĠ Ġ* ĠShould Ġbe Ġcalled Ġwithin Ġtransaction Ġor Ġdefault Ġ[ tableName ] Ġwill Ġbe Ġreturned . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġname In Database Case (): ĠString Ġ= ĠtableName . in Pro per Case () ĊĊĠĠĠ Ġoverride Ġfun Ġdescribe ( s : ĠTransaction , Ġquery Builder : ĠQuery Builder ): ĠUnit Ġ= Ġquery Builder Ġ{ Ġappend ( s . identity ( this @ Table )) Ġ} ĊĊĠĠĠ Ġ// ĠJoin Ġoperations ĊĊĠĠĠ Ġoverride Ġfun Ġjoin ( ĊĠĠĠĠĠĠĠ Ġother Table : ĠColumn Set , ĊĠĠĠĠĠĠĠ Ġjoin Type : ĠJoin Type , ĊĠĠĠĠĠĠĠ Ġon Column : ĠExpression < *> ?, ĊĠĠĠĠĠĠĠ Ġother Column : ĠExpression < *> ?, ĊĠĠĠĠĠĠĠ Ġadditional Constraint : Ġ( Sql Expression Builder . () Ġ-> ĠOp < Boolean >) ? ĊĠĠĠ Ġ): ĠJoin Ġ= ĠJoin ( this , Ġother Table , Ġjoin Type , Ġon Column , Ġother Column , Ġadditional Constraint ) ĊĊĠĠĠ Ġoverride Ġin fix Ġfun Ġinner Join ( other Table : ĠColumn Set ): ĠJoin Ġ= ĠJoin ( this , Ġother Table , ĠJoin Type . INNER ) ĊĊĠĠĠ Ġoverride Ġin fix Ġfun Ġleft Join ( other Table : ĠColumn Set ): ĠJoin Ġ= ĠJoin ( this , Ġother Table , ĠJoin Type . LEFT ) ĊĊĠĠĠ Ġoverride Ġin fix Ġfun Ġright Join ( other Table : ĠColumn Set ): ĠJoin Ġ= ĠJoin ( this , Ġother Table , ĠJoin Type . RIGHT ) ĊĊĠĠĠ Ġoverride Ġin fix Ġfun Ġfull Join ( other Table : ĠColumn Set ): ĠJoin Ġ= ĠJoin ( this , Ġother Table , ĠJoin Type . FULL ) ĊĊĠĠĠ Ġoverride Ġin fix Ġfun Ġcross Join ( other Table : ĠColumn Set ): ĠJoin Ġ= ĠJoin ( this , Ġother Table , ĠJoin Type . CROSS ) ĊĊĠĠĠ Ġ// ĠColumn Ġregistration ĊĊĠĠĠ Ġ/** ĠAdds Ġa Ġcolumn Ġof Ġthe Ġspecified Ġ[ type ] Ġand Ġwith Ġthe Ġspecified Ġ[ name ] Ġto Ġthe Ġtable . Ġ*/ ĊĠĠĠ Ġfun Ġ< T > Ġregister Column ( name : ĠString , Ġtype : ĠI ColumnType ): ĠColumn < T > Ġ= ĠColumn < T >( this , Ġname , Ġtype ). also Ġ{ Ġ_ columns . addColumn ( it ) Ġ} ĊĊĠĠĠ Ġfun Ġ< R , ĠT Ġ: ĠComposite Column < R >> Ġregister Composite Column ( column : ĠT ): ĠT Ġ= Ġcolumn . apply Ġ{ Ġget Real Columns (). forEach Ġ{ Ġ_ columns . addColumn ( it ) Ġ} Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRe places Ġthe Ġspecified Ġ[ old Column ] Ġwith Ġthe Ġspecified Ġ[ new Column ] Ġin Ġthe Ġtable . ĊĠĠĠĠ Ġ* ĠMost ly Ġused Ġinternally Ġby Ġthe Ġlibrary . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T Column Ġ: ĠColumn <* >> Ġreplace Column ( old Column : ĠColumn <* >, Ġnew Column : ĠT Column ): ĠT Column Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ columns . remove ( old Column ) ĊĠĠĠĠĠĠĠ Ġ_ columns . addColumn ( new Column ) ĊĠĠĠĠĠĠĠ Ġreturn Ġnew Column ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠMutable List < Column <* >> . addColumn ( column : ĠColumn <* >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this . any Ġ{ Ġit . name Ġ== Ġcolumn . name Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠDuplicate Column Exception ( column . name , ĠtableName ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . add ( column ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠPrimary Ġkeys ĊĊĠĠĠ Ġinternal Ġfun Ġis Custom PK Name Defined (): ĠBoolean Ġ= Ġprimary Key ?. let Ġ{ Ġit . name Ġ!= Ġ" pk _$ tableName " Ġ} Ġ== Ġtrue ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRepresents Ġa Ġprimary Ġkey Ġcomposed Ġby Ġthe Ġspecified Ġ[ columns ], Ġand Ġwith Ġthe Ġspecified Ġ[ name ]. ĊĠĠĠĠ Ġ* ĠIf Ġno Ġname Ġis Ġspecified , Ġthe Ġtable Ġname Ġwith Ġthe Ġ" pk _" Ġprefix Ġwill Ġbe Ġused Ġinstead . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ sample Ġorg . jetbrains . ex posed . sql . tests . demo . sql . Users ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinner Ġclass ĠPrimary Key ( ĊĠĠĠĠĠĠĠ Ġ/** ĠReturns Ġthe Ġcolumns Ġthat Ġcompose Ġthe Ġprimary Ġkey . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġcolumns : ĠArray < Column <* >>, ĊĠĠĠĠĠĠĠ Ġ/** ĠReturns Ġthe Ġname Ġof Ġthe Ġprimary Ġkey . Ġ*/ ĊĠĠĠĠĠĠĠ Ġval Ġname : ĠString Ġ= Ġ" pk _$ tableName " ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġconstructor ( first Column : ĠColumn <* >, Ġvar arg Ġcolumns : ĠColumn <* >, Ġname : ĠString Ġ= Ġ" pk _$ tableName ") Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis ( array Of ( first Column , Ġ* columns ), Ġname ) ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolumns . sort With ( compare By Ġ{ Ġ! it . column Type . is Auto Inc Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġprimary Ġkey Ġof Ġthe Ġtable Ġif Ġpresent , Ġ` null ` Ġotherwise . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠYou Ġhave Ġto Ġdefine Ġit Ġexplicitly Ġby Ġoverriding Ġthat Ġval Ġinstead Ġor Ġuse Ġone Ġof Ġpredefined ĊĠĠĠĠ Ġ* Ġtable Ġtypes Ġlike Ġ[ Int Id Table ], Ġ[ Long Id Table ], Ġor Ġ[ UUID Id Table ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġopen Ġval Ġprimary Key : ĠPrimary Key ? Ġ= Ġnull ĊĊĠĠĠ Ġ// ĠEntity ID Ġcolumns ĊĊĠĠĠ Ġ/** ĠConverts Ġthe Ġ@ receiver Ġcolumn Ġto Ġan Ġ[ Entity ID ] Ġcolumn . Ġ*/ ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġ< T Ġ: ĠComparable < T >> ĠColumn < T >. entityId (): ĠColumn < Entity ID < T >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Column Ġ= ĠColumn < Entity ID < T >>( table , Ġname , ĠEntity ID ColumnType ( this )). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . defaultValue Fun Ġ= ĠdefaultValue Fun ?. let Ġ{ Ġ{ ĠEntity ID Function Provider . create Entity ID ( it (), Ġtable Ġas ĠId Table < T >) Ġ} Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġreplace Column ( this , Ġnew Column ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠCreates Ġan Ġ[ Entity ID ] Ġcolumn , Ġwith Ġthe Ġspecified Ġ[ name ], Ġfor Ġstoring Ġthe Ġsame Ġobjects Ġas Ġthe Ġspecified Ġ[ original Column ]. Ġ*/ ĊĠĠĠ Ġfun Ġ< ID Ġ: ĠComparable < ID >> Ġentity Id ( name : ĠString , Ġoriginal Column : ĠColumn < ID >): ĠColumn < Entity ID < ID >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcolumn Type Copy Ġ= Ġoriginal Column . column Type . clone As BaseType () ĊĠĠĠĠĠĠĠ Ġval Ġanswer Ġ= ĠColumn < Entity ID < ID >>( this , Ġname , ĠEntity ID ColumnType ( Column < ID >( original Column . table , Ġname , Ġcolumn Type Copy ))) ĊĠĠĠĠĠĠĠ Ġ_ columns . addColumn ( answer ) ĊĠĠĠĠĠĠĠ Ġreturn Ġanswer ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠCreates Ġan Ġ[ Entity ID ] Ġcolumn , Ġwith Ġthe Ġspecified Ġ[ name ], Ġfor Ġstoring Ġthe Ġidentifier Ġof Ġthe Ġspecified Ġ[ table ]. Ġ*/ ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġ< ID Ġ: ĠComparable < ID >> Ġentity Id ( name : ĠString , Ġtable : ĠId Table < ID >): ĠColumn < Entity ID < ID >> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġoriginal Column Ġ= Ġ( table . id . column Type Ġas ĠEntity ID ColumnType < *> ). id Column Ġas ĠColumn < ID > ĊĠĠĠĠĠĠĠ Ġreturn Ġentity Id ( name , Ġoriginal Column ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠNumeric Ġcolumns ĊĊĠĠĠ Ġ/** ĠCreates Ġa Ġnumeric Ġcolumn , Ġwith Ġthe Ġspecified Ġ[ name ], Ġfor Ġstoring Ġ 1 - byte Ġintegers . Ġ*/ ĊĠĠĠ Ġfun Ġbyte ( name : ĠString ): ĠColumn < Byte > Ġ= Ġregister Column ( name , ĠByte ColumnType ()) ĊĊĠĠĠ Ġ/** ĠCreates Ġa Ġnumeric Ġcolumn , Ġwith Ġthe Ġspecified Ġ[ name ], Ġfor Ġstoring Ġ 1 - byte Ġunsigned Ġintegers . Ġ*/ ĊĠĠĠ Ġ@ Experimental Unsigned Types ĊĠĠĠ Ġfun Ġ ubyte ( name : ĠString ): ĠColumn < U Byte > Ġ= Ġregister Column ( name , ĠU Byte ColumnType ()) ĊĊĠĠĠ Ġ/** ĠCreates Ġa Ġnumeric Ġcolumn , Ġwith Ġthe Ġspecified Ġ[ name ], Ġfor Ġstoring Ġ 2 - byte Ġintegers . Ġ*/ ĊĠĠĠ Ġfun Ġshort ( name : ĠString ): ĠColumn < Short > Ġ= Ġregister Column ( name , ĠShort ColumnType ()) ĊĊĠĠĠ Ġ/** ĠCreates Ġa Ġnumeric Ġcolumn , Ġwith Ġthe Ġspecified Ġ[ name ], Ġfor Ġstoring Ġ 2 - byte Ġunsigned Ġintegers . Ġ*/ ĊĠĠĠ Ġ@ Experimental Unsigned Types ĊĠĠĠ Ġfun Ġushort ( name : ĠString ): ĠColumn < U Short > Ġ= Ġregister Column ( name , ĠU Short ColumnType ()) ĊĊĠĠĠ Ġ/** ĠCreates Ġa Ġnumeric Ġcolumn , Ġwith Ġthe Ġspecified Ġ[ name ], Ġfor Ġstoring Ġ 4 - byte Ġintegers . Ġ*/ ĊĠĠĠ Ġfun Ġinteger ( name : ĠString ): ĠColumn < Int > Ġ= Ġregister Column ( name , ĠInteger ColumnType ()) ĊĊĠĠĠ Ġ/** ĠCreates Ġa Ġnumeric Ġcolumn , Ġwith Ġthe Ġspecified Ġ[ name ], Ġfor Ġstoring Ġ 4 - byte Ġunsigned Ġintegers . Ġ*/ ĊĠĠĠ Ġ@ Experimental Unsigned Types ĊĠĠĠ Ġfun Ġuint e ger ( name : ĠString ): ĠColumn < UInt > Ġ= Ġregister Column ( name , ĠU Integer ColumnType ()) ĊĊĠĠĠ Ġ/** ĠCreates Ġa Ġnumeric Ġcolumn , Ġwith Ġthe Ġspecified Ġ[ name ], Ġfor Ġstoring Ġ 8 - byte Ġintegers . Ġ*/ ĊĠĠĠ Ġfun Ġlong ( name : ĠString ): ĠColumn < Long > Ġ= Ġregister Column ( name , ĠLong ColumnType ()) ĊĊĠĠĠ Ġ/** ĠCreates Ġa Ġnumeric Ġcolumn , Ġwith Ġthe Ġspecified Ġ[ name ], Ġfor Ġstoring Ġ 8 - byte Ġunsigned Ġintegers . Ġ*/ ĊĠĠĠ Ġ@ Experimental Unsigned Types ĊĠĠĠ Ġfun Ġulong ( name : ĠString ): ĠColumn < UL ong > Ġ= Ġregister Column ( name , ĠU Long ColumnType ()) ĊĊĠĠĠ Ġ/** ĠCreates Ġa Ġnumeric Ġcolumn , Ġwith Ġthe Ġspecified Ġ[ name ], Ġfor Ġstoring Ġ 4 - byte Ġ( single Ġprecision ) Ġfloating - point Ġnumbers . Ġ*/ ĊĠĠĠ Ġfun Ġfloat ( name : ĠString ): ĠColumn < Float > Ġ= Ġregister Column ( name , ĠFloat ColumnType ()) ĊĊĠĠĠ Ġ/** ĠCreates Ġa Ġnumeric Ġcolumn , Ġwith Ġthe Ġspecified Ġ[ name ], Ġfor Ġstoring Ġ 8 - byte Ġ( double Ġprecision ) Ġfloating - point Ġnumbers . Ġ*/ ĊĠĠĠ Ġfun Ġdouble ( name : ĠString ): ĠColumn < Double > Ġ= Ġregister Column ( name , ĠDouble ColumnType ()) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġnumeric Ġcolumn , Ġwith Ġthe Ġspecified Ġ[ name ], Ġfor Ġstoring Ġnumbers Ġwith Ġthe Ġspecified Ġ[ precision ] Ġand Ġ[ scale ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠTo Ġstore Ġthe Ġdecimal Ġ` 1 2 3 . 4 5 `, Ġ[ precision ] Ġwould Ġhave Ġto Ġbe Ġset Ġto Ġ 5 Ġ( as Ġthere Ġare Ġfive Ġdigits Ġin Ġtotal ) Ġand ĊĠĠĠĠ Ġ* Ġ[ scale ] Ġto Ġ 2 Ġ( as Ġthere Ġare Ġtwo Ġdigits Ġbehind Ġthe Ġdecimal Ġpoint ). ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġname ĠName Ġof Ġthe Ġcolumn . ĊĠĠĠĠ Ġ* Ġ@ param Ġprecision ĠTotal Ġcount Ġof Ġsignificant Ġdigits Ġin Ġthe Ġwhole Ġnumber , Ġthat Ġis , Ġthe Ġnumber Ġof Ġdigits Ġto Ġboth Ġsides Ġof Ġthe Ġdecimal Ġpoint . ĊĠĠĠĠ Ġ* Ġ@ param Ġscale ĠCount Ġof Ġdecimal Ġdigits Ġin Ġthe Ġfraction al Ġpart . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġdecimal ( name : ĠString , Ġprecision : ĠInt , Ġscale : ĠInt ): ĠColumn < BigDecimal > Ġ= Ġregister Column ( name , ĠDecimal ColumnType ( precision , Ġscale )) ĊĊĠĠĠ Ġ// ĠCharacter Ġcolumns ĊĊĠĠĠ Ġ/** ĠCreates Ġa Ġcharacter Ġcolumn , Ġwith Ġthe Ġspecified Ġ[ name ], Ġfor Ġstoring Ġsingle Ġcharacters . Ġ*/ ĊĠĠĠ Ġfun Ġchar ( name : ĠString ): ĠColumn < Char > Ġ= Ġregister Column ( name , ĠCharacter ColumnType ()) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġcharacter Ġcolumn , Ġwith Ġthe Ġspecified Ġ[ name ], Ġfor Ġstoring Ġstrings Ġwith Ġthe Ġspecified Ġ[ length ] Ġusing Ġthe Ġspecified Ġtext Ġ[ collate ] Ġtype . ĊĠĠĠĠ Ġ* ĠIf Ġno Ġcol late Ġtype Ġis Ġspecified Ġthen Ġthe Ġdatabase Ġdefault Ġis Ġused . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġchar ( name : ĠString , Ġlength : ĠInt , Ġcol late : ĠString ? Ġ= Ġnull ): ĠColumn < String > Ġ= Ġregister Column ( name , ĠChar ColumnType ( length , Ġcol late )) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġcharacter Ġcolumn , Ġwith Ġthe Ġspecified Ġ[ name ], Ġfor Ġstoring Ġstrings Ġwith Ġthe Ġspecified Ġmaximum Ġ[ length ] Ġusing Ġthe Ġspecified Ġtext Ġ[ collate ] Ġtype . ĊĠĠĠĠ Ġ* ĠIf Ġno Ġcol late Ġtype Ġis Ġspecified Ġthen Ġthe Ġdatabase Ġdefault Ġis Ġused . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġvarchar ( name : ĠString , Ġlength : ĠInt , Ġcol late : ĠString ? Ġ= Ġnull ): ĠColumn < String > Ġ= Ġregister Column ( name , ĠVar Char ColumnType ( length , Ġcol late )) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġcharacter Ġcolumn , Ġwith Ġthe Ġspecified Ġ[ name ], Ġfor Ġstoring Ġstrings Ġof Ġarbitrary Ġlength Ġusing Ġthe Ġspecified Ġ[ collate ] Ġtype . ĊĠĠĠĠ Ġ* ĠIf Ġno Ġcol late Ġtype Ġis Ġspecified Ġthen Ġthe Ġdatabase Ġdefault Ġis Ġused . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠSome Ġdatabase Ġdrivers Ġdo Ġnot Ġload Ġtext Ġcontent Ġimmediately Ġ( by Ġperformance Ġand Ġmemory Ġreasons ) ĊĠĠĠĠ Ġ* Ġwhat Ġmeans Ġthat Ġyou Ġcan Ġobtain Ġcolumn Ġvalue Ġonly Ġwithin Ġthe Ġopen Ġtransaction . ĊĠĠĠĠ Ġ* ĠIf Ġyou Ġdes ire Ġto Ġmake Ġcontent Ġavailable Ġoutside Ġthe Ġtransaction Ġuse Ġ[ e ager Loading ] Ġparam . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġtext ( name : ĠString , Ġcol late : ĠString ? Ġ= Ġnull , Ġeager Loading : ĠBoolean Ġ= Ġfalse ): ĠColumn < String > Ġ= ĊĠĠĠĠĠĠĠ Ġregister Column ( name , ĠText ColumnType ( collate , Ġeager Loading )) ĊĊĠĠĠ Ġ// ĠBinary Ġcolumns ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġbinary Ġcolumn , Ġwith Ġthe Ġspecified Ġ[ name ], Ġfor Ġstoring Ġbyte Ġarrays Ġof Ġarbitrary Ġsize . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ** Note :** ĠThis Ġfunction Ġis Ġonly Ġsupported Ġby ĠOracle Ġand ĠPost ge SQL Ġdialect s , Ġfor Ġthe Ġrest Ġplease Ġspecify Ġa Ġlength . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ sample Ġorg . jetbrains . ex posed . sql . tests . shared . DDL Tests . test Binary Without Length ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbinary ( name : ĠString ): ĠColumn < ByteArray > Ġ= Ġregister Column ( name , ĠBasic Binary ColumnType ()) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġbinary Ġcolumn , Ġwith Ġthe Ġspecified Ġ[ name ], Ġfor Ġstoring Ġbyte Ġarrays Ġwith Ġthe Ġspecified Ġmaximum Ġ[ length ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ sample Ġorg . jetbrains . ex posed . sql . tests . shared . DDL Tests . test Binary ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġbinary ( name : ĠString , Ġlength : ĠInt ): ĠColumn < ByteArray > Ġ= Ġregister Column ( name , ĠBinary ColumnType ( length )) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġbinary Ġcolumn , Ġwith Ġthe Ġspecified Ġ[ name ], Ġfor Ġstoring ĠBLOB s . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ sample Ġorg . jetbrains . ex posed . sql . tests . shared . DDL Tests . test Blob ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġblob ( name : ĠString ): ĠColumn < Ex posed Blob > Ġ= Ġregister Column ( name , ĠBlob ColumnType ()) ĊĊĠĠĠ Ġ/** ĠCreates Ġa Ġbinary Ġcolumn , Ġwith Ġthe Ġspecified Ġ[ name ], Ġfor Ġstoring ĠUUID s . Ġ*/ ĊĠĠĠ Ġfun Ġuuid ( name : ĠString ): ĠColumn < UUID > Ġ= Ġregister Column ( name , ĠUUID ColumnType ()) ĊĊĠĠĠ Ġ// ĠBoolean Ġcolumns ĊĊĠĠĠ Ġ/** ĠCreates Ġa Ġcolumn , Ġwith Ġthe Ġspecified Ġ[ name ], Ġfor Ġstoring Ġboolean Ġvalues . Ġ*/ ĊĠĠĠ Ġfun Ġbool ( name : ĠString ): ĠColumn < Boolean > Ġ= Ġregister Column ( name , ĠBoolean ColumnType ()) ĊĊĠĠĠ Ġ// ĠEnumeration Ġcolumns ĊĊĠĠĠ Ġ/** ĠCreates Ġan Ġenumeration Ġcolumn , Ġwith Ġthe Ġspecified Ġ[ name ], Ġfor Ġstoring Ġenums Ġof Ġtype Ġ[ klass ] Ġby Ġtheir Ġordinal . Ġ*/ ĊĠĠĠ Ġfun Ġ< T Ġ: ĠEnum < T >> Ġenumeration ( name : ĠString , Ġklass : ĠK Class < T >): ĠColumn < T > Ġ= Ġregister Column ( name , ĠEnumeration ColumnType ( klass )) ĊĊĠĠĠ Ġ/** ĠCreates Ġan Ġenumeration Ġcolumn , Ġwith Ġthe Ġspecified Ġ[ name ], Ġfor Ġstoring Ġenums Ġof Ġtype Ġ[ T ] Ġby Ġtheir Ġordinal . Ġ*/ ĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠEnum < T >> Ġenumeration ( name : ĠString ) Ġ= Ġenumeration ( name , ĠT :: class ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġan Ġenumeration Ġcolumn , Ġwith Ġthe Ġspecified Ġ[ name ], Ġfor Ġstoring Ġenums Ġof Ġtype Ġ[ klass ] Ġby Ġtheir Ġname . ĊĠĠĠĠ Ġ* ĠWith Ġthe Ġspecified Ġmaximum Ġ[ length ] Ġfor Ġeach Ġname Ġvalue . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T Ġ: ĠEnum < T >> Ġenumeration ByName ( name : ĠString , Ġlength : ĠInt , Ġklass : ĠK Class < T >): ĠColumn < T > Ġ= ĊĠĠĠĠĠĠĠ Ġregister Column ( name , ĠEnumeration Name ColumnType ( klass , Ġlength )) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġan Ġenumeration Ġcolumn , Ġwith Ġthe Ġspecified Ġ[ name ], Ġfor Ġstoring Ġenums Ġof Ġtype Ġ[ T ] Ġby Ġtheir Ġname . ĊĠĠĠĠ Ġ* ĠWith Ġthe Ġspecified Ġmaximum Ġ[ length ] Ġfor Ġeach Ġname Ġvalue . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġinline Ġfun Ġ< re ified ĠT Ġ: ĠEnum < T >> Ġenumeration ByName ( name : ĠString , Ġlength : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ Ġenumeration ByName ( name , Ġlength , ĠT :: class ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġan Ġenumeration Ġcolumn Ġwith Ġcustom ĠSQL Ġtype . ĊĠĠĠĠ Ġ* ĠThe Ġmain Ġusage Ġis Ġto Ġuse Ġa Ġdatabase Ġspecific Ġtype . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠSee Ġ[ https :// github . com / Jet Brains / Ex posed / wiki / DataTypes # how - to - use - database - enum - types ] Ġfor Ġmore Ġdetails . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġname ĠThe Ġcolumn Ġname ĊĠĠĠĠ Ġ* Ġ@ param Ġsql ĠA ĠSQL Ġdefinition Ġfor Ġthe Ġcolumn ĊĠĠĠĠ Ġ* Ġ@ param Ġfrom Db ĠA Ġlambda Ġto Ġconvert Ġa Ġvalue Ġreceived Ġfrom Ġa Ġdatabase Ġto Ġan Ġenumeration Ġinstance ĊĠĠĠĠ Ġ* Ġ@ param Ġto Db ĠA Ġlambda Ġto Ġconvert Ġan Ġenumeration Ġinstance Ġto Ġa Ġvalue Ġwhich Ġwill Ġbe Ġstored Ġto Ġa Ġdatabase ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġ< T Ġ: ĠEnum < T >> Ġcustom Enumeration ( ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġsql : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġfrom Db : Ġ( Any ) Ġ-> ĠT , ĊĠĠĠĠĠĠĠ Ġto Db : Ġ( T ) Ġ-> ĠAny ĊĠĠĠ Ġ): ĠColumn < T > Ġ= Ġregister Column ( ĊĠĠĠĠĠĠĠ Ġname , ĊĠĠĠĠĠĠĠ Ġobject Ġ: ĠString ColumnType () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsql Type (): ĠString Ġ= Ġsql Ġ?: Ġerror (" Column Ġ$ name Ġshould Ġexists Ġin Ġdatabase Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġvalue From DB ( value : ĠAny ): ĠT Ġ= Ġif Ġ( value :: class . is Subclass Of ( Enum :: class )) Ġvalue Ġas ĠT Ġelse Ġfrom Db ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġnot NullValue To DB ( value : ĠAny ): ĠAny Ġ= Ġto Db ( value Ġas ĠT ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ// ĠAuto - generated Ġvalues ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMake Ġ@ receiver Ġcolumn Ġan Ġauto - increment Ġto Ġgenerate Ġits Ġvalues Ġin Ġa Ġdatabase . ĊĠĠĠĠ Ġ* ĠOnly Ġinteger Ġand Ġlong Ġcolumns Ġsupported . ĊĠĠĠĠ Ġ* ĠSome Ġdatabases Ġlike Ġa ĠPostgreSQL Ġsupports Ġauto - increment Ġvia Ġsequences . ĊĠĠĠĠ Ġ* ĠIn Ġthat Ġcase Ġyou Ġshould Ġprovide Ġa Ġname Ġwith Ġ[ id Seq Name ] Ġparam Ġand ĠEx posed Ġwill Ġcreate Ġa Ġsequence Ġfor Ġyou . ĊĠĠĠĠ Ġ* ĠIf Ġyou Ġalready Ġhave Ġa Ġsequence Ġin Ġa Ġdatabase Ġjust Ġuse Ġits Ġname Ġin Ġ[ id Seq Name ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġid Seq Name Ġan Ġoptional Ġparameter Ġto Ġprovide Ġa Ġsequence Ġname ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< N Ġ: ĠAny > ĠColumn < N >. auto Increment ( id Seq Name : ĠString ? Ġ= Ġnull ): ĠColumn < N > Ġ= ĊĠĠĠĠĠĠĠ Ġclone With Auto Inc ( id Seq Name ). also Ġ{ Ġreplace Column ( this , Ġit ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMake Ġ@ receiver Ġcolumn Ġan Ġauto - increment Ġto Ġgenerate Ġits Ġvalues Ġin Ġa Ġdatabase . ĊĠĠĠĠ Ġ* ĠOnly Ġinteger Ġand Ġlong Ġcolumns Ġsupported . ĊĠĠĠĠ Ġ* ĠSome Ġdatabases Ġlike Ġa ĠPostgreSQL Ġsupports Ġauto - increment Ġvia Ġsequences . ĊĠĠĠĠ Ġ* ĠIn Ġthat Ġcase Ġyou Ġshould Ġprovide Ġa Ġname Ġwith Ġ[ id Seq Name ] Ġparam Ġand ĠEx posed Ġwill Ġcreate Ġa Ġsequence Ġfor Ġyou . ĊĠĠĠĠ Ġ* ĠIf Ġyou Ġalready Ġhave Ġa Ġsequence Ġin Ġa Ġdatabase Ġjust Ġuse Ġits Ġname Ġin Ġ[ id Seq Name ]. ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġid Seq Name Ġan Ġoptional Ġparameter Ġto Ġprovide Ġa Ġsequence Ġname ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< N Ġ: ĠComparable < N >> ĠColumn < Entity ID < N >> . auto inc ( id Seq Name : ĠString ? Ġ= Ġnull ): ĠColumn < Entity ID < N >> Ġ= ĊĠĠĠĠĠĠĠ Ġclone With Auto Inc ( id Seq Name ). also Ġ{ Ġreplace Column ( this , Ġit ) Ġ} ĊĊĠĠĠ Ġ/** ĠSets Ġthe Ġdefault Ġvalue Ġfor Ġthis Ġcolumn Ġin Ġthe Ġdatabase Ġside . Ġ*/ ĊĠĠĠ Ġfun Ġ< T > ĠColumn < T >. default ( defaultValue : ĠT ): ĠColumn < T > Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġdb DefaultValue Ġ= Ġwith ( Sql Expression Builder ) Ġ{ Ġas Literal ( defaultValue ) Ġ} ĊĠĠĠĠĠĠĠ ĠdefaultValue Fun Ġ= Ġ{ ĠdefaultValue Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠSets Ġthe Ġdefault Ġvalue Ġfor Ġthis Ġcolumn Ġin Ġthe Ġdatabase Ġside . Ġ*/ ĊĠĠĠ Ġfun Ġ< T > ĠComposite Column < T >. default ( defaultValue : ĠT ): ĠComposite Column < T > Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( this @ Table ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ default . get Real Columns With Values ( defaultValue ). forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( it . key Ġas ĠColumn < Any >). default ( it . value Ġas ĠAny ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠSets Ġthe Ġdefault Ġvalue Ġfor Ġthis Ġcolumn Ġin Ġthe Ġdatabase Ġside . Ġ*/ ĊĠĠĠ Ġfun Ġ< T > ĠColumn < T >. default Expression ( defaultValue : ĠExpression < T >): ĠColumn < T > Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġdb DefaultValue Ġ= ĠdefaultValue ĊĠĠĠĠĠĠĠ ĠdefaultValue Fun Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠSets Ġthe Ġdefault Ġvalue Ġfor Ġthis Ġcolumn Ġin Ġthe Ġclient Ġside . Ġ*/ ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > ĠColumn < T >. client Default ( defaultValue : Ġ() Ġ-> ĠT ): ĠColumn < T > Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġdb DefaultValue Ġ= Ġnull ĊĠĠĠĠĠĠĠ ĠdefaultValue Fun Ġ= ĠdefaultValue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠUUID Ġcolumn Ġwill Ġauto Ġgenerate Ġits Ġvalue Ġon Ġa Ġclient Ġside Ġjust Ġbefore Ġan Ġinsert . Ġ*/ ĊĠĠĠ Ġfun ĠColumn < UUID >. auto Generate (): ĠColumn < UUID > Ġ= Ġclient Default Ġ{ ĠUUID . randomUUID () Ġ} ĊĊĠĠĠ Ġ// ĠColumn Ġreferences ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġreference Ġfrom Ġa Ġ@ receiver Ġcolumn Ġto Ġ[ ref ] Ġcolumn . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠIt 's Ġa Ġshort Ġin fix Ġversion Ġof Ġ[ references ] Ġfunction Ġwith Ġdefault ĠonDelete Ġand ĠonUpdate Ġbehavior . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ receiver ĠA Ġcolumn Ġfrom Ġcurrent Ġtable Ġwhere Ġreference Ġvalues Ġwill Ġbe Ġstored ĊĠĠĠĠ Ġ* Ġ@ param Ġref ĠA Ġcolumn Ġfrom Ġanother Ġtable Ġwhich Ġwill Ġbe Ġused Ġas Ġa Ġ" parent ". ĊĠĠĠĠ Ġ* Ġ@ see Ġ[ references ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġin fix Ġfun Ġ< T Ġ: ĠComparable < T >, ĠS Ġ: ĠT , ĠC Ġ: ĠColumn < S >> ĠC . references ( ref : ĠColumn < T >): ĠC Ġ= Ġreferences ( ref , Ġnull , Ġnull , Ġnull ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġreference Ġfrom Ġa Ġ@ receiver Ġcolumn Ġto Ġ[ ref ] Ġcolumn Ġwith Ġ[ onDelete ], Ġ[ on Update ], Ġand Ġ[ fk Name ] Ġoptions . ĊĠĠĠĠ Ġ* Ġ[ onDelete ] Ġand Ġ[ on Update ] Ġoptions Ġdescribes Ġbehavior Ġon Ġhow Ġlinks Ġbetween Ġtables Ġwill Ġbe Ġchecked Ġin Ġcase Ġof Ġdeleting Ġor Ġchanging Ġcorresponding Ġcolumns ' Ġvalues . ĊĠĠĠĠ Ġ* ĠSuch Ġrelationship Ġwill Ġbe Ġrepresented Ġas ĠFOREIGN ĠKEY Ġconstraint Ġon Ġa Ġtable Ġcreation . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ receiver ĠA Ġcolumn Ġfrom Ġcurrent Ġtable Ġwhere Ġreference Ġvalues Ġwill Ġbe Ġstored ĊĠĠĠĠ Ġ* Ġ@ param Ġref ĠA Ġcolumn Ġfrom Ġanother Ġtable Ġwhich Ġwill Ġbe Ġused Ġas Ġa Ġ" parent ". ĊĠĠĠĠ Ġ* Ġ@ param ĠonDelete ĠOptional Ġreference Ġoption Ġfor Ġcases Ġwhen Ġlinked Ġrow Ġfrom Ġa Ġparent Ġtable Ġwill Ġbe Ġdeleted . ĠSee Ġ[ Reference Option ] Ġdocumentation Ġfor Ġdetails . ĊĠĠĠĠ Ġ* Ġ@ param ĠonUpdate ĠOptional Ġreference Ġoption Ġfor Ġcases Ġwhen Ġvalue Ġin Ġa Ġreferenced Ġcolumn Ġhad Ġchanged . ĠSee Ġ[ Reference Option ] Ġdocumentation Ġfor Ġdetails . ĊĠĠĠĠ Ġ* Ġ@ param Ġfk Name ĠOptional Ġforeign Ġkey Ġconstraint Ġname . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T Ġ: ĠComparable < T >, ĠS Ġ: ĠT , ĠC Ġ: ĠColumn < S >> ĠC . references ( ĊĠĠĠĠĠĠĠ Ġref : ĠColumn < T >, ĊĠĠĠĠĠĠĠ ĠonDelete : ĠReference Option ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ ĠonUpdate : ĠReference Option ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġfk Name : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠC Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . foreign Key Ġ= ĠForeign Key Constraint ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Ġ= Ġref , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Ġ= Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonUpdate Ġ= ĠonUpdate , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonDelete Ġ= ĠonDelete , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġfk Name ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreate Ġreference Ġfrom Ġa Ġ@ receiver Ġcolumn Ġto Ġ[ ref ] Ġcolumn Ġwith Ġ[ onDelete ], Ġ[ on Update ], Ġand Ġ[ fk Name ] Ġoptions . ĊĠĠĠĠ Ġ* Ġ[ onDelete ] Ġand Ġ[ on Update ] Ġoptions Ġdescribes Ġbehavior Ġon Ġhow Ġlinks Ġbetween Ġtables Ġwill Ġbe Ġchecked Ġin Ġcase Ġof Ġdeleting Ġor Ġchanging Ġcorresponding Ġcolumns ' Ġvalues . ĊĠĠĠĠ Ġ* ĠSuch Ġrelationship Ġwill Ġbe Ġrepresented Ġas ĠFOREIGN ĠKEY Ġconstraint Ġon Ġa Ġtable Ġcreation . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ receiver ĠA Ġcolumn Ġfrom Ġcurrent Ġtable Ġwhere Ġreference Ġvalues Ġwill Ġbe Ġstored ĊĠĠĠĠ Ġ* Ġ@ param Ġref ĠA Ġcolumn Ġfrom Ġanother Ġtable Ġwhich Ġwill Ġbe Ġused Ġas Ġa Ġ" parent ". ĊĠĠĠĠ Ġ* Ġ@ param ĠonDelete ĠOptional Ġreference Ġoption Ġfor Ġcases Ġwhen Ġlinked Ġrow Ġfrom Ġa Ġparent Ġtable Ġwill Ġbe Ġdeleted . ĠSee Ġ[ Reference Option ] Ġdocumentation Ġfor Ġdetails . ĊĠĠĠĠ Ġ* Ġ@ param ĠonUpdate ĠOptional Ġreference Ġoption Ġfor Ġcases Ġwhen Ġvalue Ġin Ġa Ġreferenced Ġcolumn Ġhad Ġchanged . ĠSee Ġ[ Reference Option ] Ġdocumentation Ġfor Ġdetails . ĊĠĠĠĠ Ġ* Ġ@ param Ġfk Name ĠOptional Ġforeign Ġkey Ġconstraint Ġname . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Jvm Name (" references ById ") ĊĠĠĠ Ġfun Ġ< T Ġ: ĠComparable < T >, ĠS Ġ: ĠT , ĠC Ġ: ĠColumn < S >> ĠC . references ( ĊĠĠĠĠĠĠĠ Ġref : ĠColumn < Entity ID < T >>, ĊĠĠĠĠĠĠĠ ĠonDelete : ĠReference Option ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ ĠonUpdate : ĠReference Option ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġfk Name : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠC Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . foreign Key Ġ= ĠForeign Key Constraint ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtarget Ġ= Ġref , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfrom Ġ= Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonUpdate Ġ= ĠonUpdate , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonDelete Ġ= ĠonDelete , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġname Ġ= Ġfk Name ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġcolumn Ġwith Ġthe Ġspecified Ġ[ name ] Ġwith Ġa Ġreference Ġto Ġthe Ġ[ ref Column ] Ġcolumn Ġand Ġwith Ġ[ onDelete ], Ġ[ on Update ], Ġand Ġ[ fk Name ] Ġoptions . ĊĠĠĠĠ Ġ* Ġ[ onDelete ] Ġand Ġ[ on Update ] Ġoptions Ġdescribes Ġbehavior Ġon Ġhow Ġlinks Ġbetween Ġtables Ġwill Ġbe Ġchecked Ġin Ġcase Ġof Ġdeleting Ġor Ġchanging Ġcorresponding Ġcolumns ' Ġvalues . ĊĠĠĠĠ Ġ* ĠSuch Ġrelationship Ġwill Ġbe Ġrepresented Ġas ĠFOREIGN ĠKEY Ġconstraint Ġon Ġa Ġtable Ġcreation . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġname ĠName Ġof Ġthe Ġcolumn . ĊĠĠĠĠ Ġ* Ġ@ param Ġref Column ĠA Ġcolumn Ġfrom Ġanother Ġtable Ġwhich Ġwill Ġbe Ġused Ġas Ġa Ġ" parent ". ĊĠĠĠĠ Ġ* Ġ@ param ĠonDelete ĠOptional Ġreference Ġoption Ġfor Ġcases Ġwhen Ġlinked Ġrow Ġfrom Ġa Ġparent Ġtable Ġwill Ġbe Ġdeleted . ĊĠĠĠĠ Ġ* Ġ@ param ĠonUpdate ĠOptional Ġreference Ġoption Ġfor Ġcases Ġwhen Ġvalue Ġin Ġa Ġreferenced Ġcolumn Ġhad Ġchanged . ĊĠĠĠĠ Ġ* Ġ@ param Ġfk Name ĠOptional Ġforeign Ġkey Ġconstraint Ġname . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠReference Option ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T Ġ: ĠComparable < T >> Ġreference ( ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġref Column : ĠColumn < T >, ĊĠĠĠĠĠĠĠ ĠonDelete : ĠReference Option ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ ĠonUpdate : ĠReference Option ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġfk Name : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠColumn < T > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcolumn Ġ= ĠColumn < T >( this , Ġname , Ġref Column . column Type . clone As BaseType ()). references ( ref Column , ĠonDelete , ĠonUpdate , Ġfk Name ) ĊĠĠĠĠĠĠĠ Ġ_ columns . addColumn ( column ) ĊĠĠĠĠĠĠĠ Ġreturn Ġcolumn ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġcolumn Ġwith Ġthe Ġspecified Ġ[ name ] Ġwith Ġa Ġreference Ġto Ġthe Ġ[ ref Column ] Ġcolumn Ġand Ġwith Ġ[ onDelete ], Ġ[ on Update ], Ġand Ġ[ fk Name ] Ġoptions . ĊĠĠĠĠ Ġ* Ġ[ onDelete ] Ġand Ġ[ on Update ] Ġoptions Ġdescribes Ġbehavior Ġon Ġhow Ġlinks Ġbetween Ġtables Ġwill Ġbe Ġchecked Ġin Ġcase Ġof Ġdeleting Ġor Ġchanging Ġcorresponding Ġcolumns ' Ġvalues . ĊĠĠĠĠ Ġ* ĠSuch Ġrelationship Ġwill Ġbe Ġrepresented Ġas ĠFOREIGN ĠKEY Ġconstraint Ġon Ġa Ġtable Ġcreation . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġname ĠName Ġof Ġthe Ġcolumn . ĊĠĠĠĠ Ġ* Ġ@ param Ġref Column ĠA Ġcolumn Ġfrom Ġanother Ġtable Ġwhich Ġwill Ġbe Ġused Ġas Ġa Ġ" parent ". ĊĠĠĠĠ Ġ* Ġ@ param ĠonDelete ĠOptional Ġreference Ġoption Ġfor Ġcases Ġwhen Ġlinked Ġrow Ġfrom Ġa Ġparent Ġtable Ġwill Ġbe Ġdeleted . ĊĠĠĠĠ Ġ* Ġ@ param ĠonUpdate ĠOptional Ġreference Ġoption Ġfor Ġcases Ġwhen Ġvalue Ġin Ġa Ġreferenced Ġcolumn Ġhad Ġchanged . ĊĠĠĠĠ Ġ* Ġ@ param Ġfk Name ĠOptional Ġforeign Ġkey Ġconstraint Ġname . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠReference Option ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġ@ Jvm Name (" reference ById Column ") ĊĠĠĠ Ġfun Ġ< T Ġ: ĠComparable < T >, ĠE Ġ: ĠEntity ID < T >> Ġreference ( ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġref Column : ĠColumn < E >, ĊĠĠĠĠĠĠĠ ĠonDelete : ĠReference Option ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ ĠonUpdate : ĠReference Option ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġfk Name : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠColumn < E > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġentity ID Column Ġ= Ġentity Id ( name , Ġ( ref Column . column Type Ġas ĠEntity ID ColumnType < T >). id Column ) Ġas ĠColumn < E > ĊĠĠĠĠĠĠĠ Ġreturn Ġentity ID Column . references ( ref Column , ĠonDelete , ĠonUpdate , Ġfk Name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġcolumn Ġwith Ġthe Ġspecified Ġ[ name ] Ġwith Ġa Ġreference Ġto Ġthe Ġ` id ` Ġcolumn Ġin Ġ[ foreign ] Ġtable Ġand Ġwith Ġ[ onDelete ], Ġ[ on Update ], Ġand Ġ[ fk Name ] Ġoptions . ĊĠĠĠĠ Ġ* Ġ[ onDelete ] Ġand Ġ[ on Update ] Ġoptions Ġdescribes Ġbehavior Ġon Ġhow Ġlinks Ġbetween Ġtables Ġwill Ġbe Ġchecked Ġin Ġcase Ġof Ġdeleting Ġor Ġchanging Ġcorresponding Ġcolumns ' Ġvalues . ĊĠĠĠĠ Ġ* ĠSuch Ġrelationship Ġwill Ġbe Ġrepresented Ġas ĠFOREIGN ĠKEY Ġconstraint Ġon Ġa Ġtable Ġcreation . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġname ĠName Ġof Ġthe Ġcolumn . ĊĠĠĠĠ Ġ* Ġ@ param Ġforeign ĠA Ġtable Ġwith Ġan Ġ` id ` Ġcolumn Ġwhich Ġwill Ġbe Ġused Ġas Ġa Ġ" parent ". ĊĠĠĠĠ Ġ* Ġ@ param ĠonDelete ĠOptional Ġreference Ġoption Ġfor Ġcases Ġwhen Ġlinked Ġrow Ġfrom Ġa Ġparent Ġtable Ġwill Ġbe Ġdeleted . ĊĠĠĠĠ Ġ* Ġ@ param ĠonUpdate ĠOptional Ġreference Ġoption Ġfor Ġcases Ġwhen Ġvalue Ġin Ġa Ġreferenced Ġcolumn Ġhad Ġchanged . ĊĠĠĠĠ Ġ* Ġ@ param Ġfk Name ĠOptional Ġforeign Ġkey Ġconstraint Ġname . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠReference Option ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T Ġ: ĠComparable < T >> Ġreference ( ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġforeign : ĠId Table < T >, ĊĠĠĠĠĠĠĠ ĠonDelete : ĠReference Option ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ ĠonUpdate : ĠReference Option ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġfk Name : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠColumn < Entity ID < T >> Ġ= Ġentity Id ( name , Ġforeign ). references ( foreign . id , ĠonDelete , ĠonUpdate , Ġfk Name ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġcolumn Ġwith Ġthe Ġspecified Ġ[ name ] Ġwith Ġan Ġoptional Ġreference Ġto Ġthe Ġ[ ref Column ] Ġcolumn Ġwith Ġ[ onDelete ], Ġ[ on Update ], Ġand Ġ[ fk Name ] Ġoptions . ĊĠĠĠĠ Ġ* Ġ[ onDelete ] Ġand Ġ[ on Update ] Ġoptions Ġdescribes Ġbehavior Ġon Ġhow Ġlinks Ġbetween Ġtables Ġwill Ġbe Ġchecked Ġin Ġcase Ġof Ġdeleting Ġor Ġchanging Ġcorresponding Ġcolumns ' Ġvalues . ĊĠĠĠĠ Ġ* ĠSuch Ġrelationship Ġwill Ġbe Ġrepresented Ġas ĠFOREIGN ĠKEY Ġconstraint Ġon Ġa Ġtable Ġcreation . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġname ĠName Ġof Ġthe Ġcolumn . ĊĠĠĠĠ Ġ* Ġ@ param Ġref Column ĠA Ġcolumn Ġfrom Ġanother Ġtable Ġwhich Ġwill Ġbe Ġused Ġas Ġa Ġ" parent ". ĊĠĠĠĠ Ġ* Ġ@ param ĠonDelete ĠOptional Ġreference Ġoption Ġfor Ġcases Ġwhen Ġlinked Ġrow Ġfrom Ġa Ġparent Ġtable Ġwill Ġbe Ġdeleted . ĊĠĠĠĠ Ġ* Ġ@ param ĠonUpdate ĠOptional Ġreference Ġoption Ġfor Ġcases Ġwhen Ġvalue Ġin Ġa Ġreferenced Ġcolumn Ġhad Ġchanged . ĊĠĠĠĠ Ġ* Ġ@ param Ġfk Name ĠOptional Ġforeign Ġkey Ġconstraint Ġname . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠReference Option ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T Ġ: ĠComparable < T >> Ġopt Reference ( ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġref Column : ĠColumn < T >, ĊĠĠĠĠĠĠĠ ĠonDelete : ĠReference Option ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ ĠonUpdate : ĠReference Option ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġfk Name : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠColumn < T ?> Ġ= Ġreference ( name , Ġref Column , ĠonDelete , ĠonUpdate , Ġfk Name ). nullable () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġcolumn Ġwith Ġthe Ġspecified Ġ[ name ] Ġwith Ġan Ġoptional Ġreference Ġto Ġthe Ġ[ ref Column ] Ġcolumn Ġwith Ġ[ onDelete ], Ġ[ on Update ], Ġand Ġ[ fk Name ] Ġoptions . ĊĠĠĠĠ Ġ* Ġ[ onDelete ] Ġand Ġ[ on Update ] Ġoptions Ġdescribes Ġbehavior Ġon Ġhow Ġlinks Ġbetween Ġtables Ġwill Ġbe Ġchecked Ġin Ġcase Ġof Ġdeleting Ġor Ġchanging Ġcorresponding Ġcolumns ' Ġvalues . ĊĠĠĠĠ Ġ* ĠSuch Ġrelationship Ġwill Ġbe Ġrepresented Ġas ĠFOREIGN ĠKEY Ġconstraint Ġon Ġa Ġtable Ġcreation . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġname ĠName Ġof Ġthe Ġcolumn . ĊĠĠĠĠ Ġ* Ġ@ param Ġref Column ĠA Ġcolumn Ġfrom Ġanother Ġtable Ġwhich Ġwill Ġbe Ġused Ġas Ġa Ġ" parent ". ĊĠĠĠĠ Ġ* Ġ@ param ĠonDelete ĠOptional Ġreference Ġoption Ġfor Ġcases Ġwhen Ġlinked Ġrow Ġfrom Ġa Ġparent Ġtable Ġwill Ġbe Ġdeleted . ĊĠĠĠĠ Ġ* Ġ@ param ĠonUpdate ĠOptional Ġreference Ġoption Ġfor Ġcases Ġwhen Ġvalue Ġin Ġa Ġreferenced Ġcolumn Ġhad Ġchanged . ĊĠĠĠĠ Ġ* Ġ@ param Ġfk Name ĠOptional Ġforeign Ġkey Ġconstraint Ġname . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠReference Option ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġ@ Jvm Name (" opt Reference ById Column ") ĊĠĠĠ Ġfun Ġ< T Ġ: ĠComparable < T >, ĠE Ġ: ĠEntity ID < T >> Ġopt Reference ( ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġref Column : ĠColumn < E >, ĊĠĠĠĠĠĠĠ ĠonDelete : ĠReference Option ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ ĠonUpdate : ĠReference Option ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġfk Name : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠColumn < E ?> Ġ= Ġreference ( name , Ġref Column , ĠonDelete , ĠonUpdate , Ġfk Name ). nullable () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġcolumn Ġwith Ġthe Ġspecified Ġ[ name ] Ġwith Ġan Ġoptional Ġreference Ġto Ġthe Ġ` id ` Ġcolumn Ġin Ġ[ foreign ] Ġtable Ġwith Ġ[ onDelete ], Ġ[ on Update ], Ġand Ġ[ fk Name ] Ġoptions . ĊĠĠĠĠ Ġ* Ġ[ onDelete ] Ġand Ġ[ on Update ] Ġoptions Ġdescribes Ġbehavior Ġon Ġhow Ġlinks Ġbetween Ġtables Ġwill Ġbe Ġchecked Ġin Ġcase Ġof Ġdeleting Ġor Ġchanging Ġcorresponding Ġcolumns ' Ġvalues . ĊĠĠĠĠ Ġ* ĠSuch Ġrelationship Ġwill Ġbe Ġrepresented Ġas ĠFOREIGN ĠKEY Ġconstraint Ġon Ġa Ġtable Ġcreation . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġname ĠName Ġof Ġthe Ġcolumn . ĊĠĠĠĠ Ġ* Ġ@ param Ġforeign ĠA Ġtable Ġwith Ġan Ġ` id ` Ġcolumn Ġwhich Ġwill Ġbe Ġused Ġas Ġa Ġ" parent ". ĊĠĠĠĠ Ġ* Ġ@ param ĠonDelete ĠOptional Ġreference Ġoption Ġfor Ġcases Ġwhen Ġlinked Ġrow Ġfrom Ġa Ġparent Ġtable Ġwill Ġbe Ġdeleted . ĊĠĠĠĠ Ġ* Ġ@ param ĠonUpdate ĠOptional Ġreference Ġoption Ġfor Ġcases Ġwhen Ġvalue Ġin Ġa Ġreferenced Ġcolumn Ġhad Ġchanged . ĊĠĠĠĠ Ġ* Ġ@ param Ġfk Name ĠOptional Ġforeign Ġkey Ġconstraint Ġname . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ see ĠReference Option ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T Ġ: ĠComparable < T >> Ġopt Reference ( ĊĠĠĠĠĠĠĠ Ġname : ĠString , ĊĠĠĠĠĠĠĠ Ġforeign : ĠId Table < T >, ĊĠĠĠĠĠĠĠ ĠonDelete : ĠReference Option ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ ĠonUpdate : ĠReference Option ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġfk Name : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ): ĠColumn < Entity ID < T > ?> Ġ= Ġreference ( name , Ġforeign , ĠonDelete , ĠonUpdate , Ġfk Name ). nullable () ĊĊĠĠĠ Ġ// ĠMis cellaneous ĊĊĠĠĠ Ġ/** ĠMark s Ġthis Ġcolumn Ġas Ġnullable . Ġ*/ ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny > ĠColumn < T >. nullable (): ĠColumn < T ?> Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew Column Ġ= ĠColumn < T ? >( table , Ġname , Ġcolumn Type ) ĊĠĠĠĠĠĠĠ Ġnew Column . foreign Key Ġ= Ġforeign Key ĊĠĠĠĠĠĠĠ Ġnew Column . defaultValue Fun Ġ= ĠdefaultValue Fun ĊĠĠĠĠĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠĠĠĠĠ Ġnew Column . db DefaultValue Ġ= Ġdb DefaultValue Ġas ĠExpression < T ?> ? ĊĠĠĠĠĠĠĠ Ġnew Column . column Type . nullable Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġreturn Ġreplace Column ( this , Ġnew Column ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġfun Ġ< T Ġ: ĠAny , ĠC Ġ: ĠComposite Column < T >> ĠC . nullable (): ĠComposite Column < T ?> Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġnullable Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġget Real Columns (). filter Ġ{ Ġ! it . column Type . nullable Ġ}. forEach Ġ{ Ġ( it Ġas ĠColumn < Any >). nullable () Ġ} ĊĠĠĠ Ġ} Ġas ĠComposite Column < T ?> ĊĊĠĠĠ Ġ// ĠInd ices ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġan Ġindex . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcolumns ĠColumns Ġthat Ġcompose Ġthe Ġindex . ĊĠĠĠĠ Ġ* Ġ@ param Ġis Unique ĠWhether Ġthe Ġindex Ġis Ġunique Ġor Ġnot . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġindex ( is Unique : ĠBoolean Ġ= Ġfalse , Ġvar arg Ġcolumns : ĠColumn < *> ): ĠUnit Ġ= Ġindex ( null , Ġis Unique , Ġ* columns ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġan Ġindex . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcustom Index Name ĠName Ġof Ġthe Ġindex . ĊĠĠĠĠ Ġ* Ġ@ param Ġcolumns ĠColumns Ġthat Ġcompose Ġthe Ġindex . ĊĠĠĠĠ Ġ* Ġ@ param Ġis Unique ĠWhether Ġthe Ġindex Ġis Ġunique Ġor Ġnot . ĊĠĠĠĠ Ġ* Ġ@ param Ġindex Type ĠA Ġcustom Ġindex Ġtype Ġ( e . g ., Ġ" BT REE " Ġor Ġ" HASH "). ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġindex ( custom Index Name : ĠString ? Ġ= Ġnull , Ġis Unique : ĠBoolean Ġ= Ġfalse , Ġvar arg Ġcolumns : ĠColumn <* >, Ġindex Type : ĠString ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ indices . add ( Index ( columns . toList (), Ġis Unique , Ġcustom Index Name , Ġindex Type Ġ= Ġindex Type )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġan Ġindex Ġcomposed Ġby Ġthis Ġcolumn Ġonly . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcustom Index Name ĠName Ġof Ġthe Ġindex . ĊĠĠĠĠ Ġ* Ġ@ param Ġis Unique ĠWhether Ġthe Ġindex Ġis Ġunique Ġor Ġnot . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T > ĠColumn < T >. index ( custom Index Name : ĠString ? Ġ= Ġnull , Ġis Unique : ĠBoolean Ġ= Ġfalse ): ĠColumn < T > Ġ= ĊĠĠĠĠĠĠĠ Ġapply Ġ{ Ġtable . index ( custom Index Name , Ġis Unique , Ġthis ) Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġunique Ġindex Ġcomposed Ġby Ġthis Ġcolumn Ġonly . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcustom Index Name ĠName Ġof Ġthe Ġindex . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T > ĠColumn < T >. unique Index ( custom Index Name : ĠString ? Ġ= Ġnull ): ĠColumn < T > Ġ= Ġindex ( custom Index Name , Ġtrue ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġunique Ġindex . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcolumns ĠColumns Ġthat Ġcompose Ġthe Ġindex . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġunique Index ( var arg Ġcolumns : ĠColumn < *> ): ĠUnit Ġ= Ġindex ( null , Ġtrue , Ġ* columns ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġunique Ġindex . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġcustom Index Name ĠName Ġof Ġthe Ġindex . ĊĠĠĠĠ Ġ* Ġ@ param Ġcolumns ĠColumns Ġthat Ġcompose Ġthe Ġindex . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġunique Index ( custom Index Name : ĠString ? Ġ= Ġnull , Ġvar arg Ġcolumns : ĠColumn < *> ): ĠUnit Ġ= Ġindex ( custom Index Name , Ġtrue , Ġ* columns ) ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġcomposite Ġforeign Ġkey . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġfrom ĠColumns Ġthat Ġcompose Ġthe Ġforeign Ġkey . ĠThe ir Ġorder Ġshould Ġmatch Ġthe Ġorder Ġof Ġcolumns Ġin Ġreferenced Ġprimary Ġkey . ĊĠĠĠĠ Ġ* Ġ@ param Ġtarget ĠPrimary Ġkey Ġof Ġthe Ġreferenced Ġtable . ĊĠĠĠĠ Ġ* Ġ@ param ĠonUpdate ĠReference Ġoption Ġwhen Ġperforming Ġupdate Ġoperations . ĊĠĠĠĠ Ġ* Ġ@ param ĠonUpdate ĠReference Ġoption Ġwhen Ġperforming Ġdelete Ġoperations . ĊĠĠĠĠ Ġ* Ġ@ param Ġname ĠCustom Ġforeign Ġkey Ġname ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġforeign Key ( ĊĠĠĠĠĠĠĠ Ġvar arg Ġfrom : ĠColumn <* >, ĊĠĠĠĠĠĠĠ Ġtarget : ĠPrimary Key , ĊĠĠĠĠĠĠĠ ĠonUpdate : ĠReference Option ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ ĠonDelete : ĠReference Option ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġname : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( from . size Ġ== Ġtarget . columns . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfk Name Ġ= Ġif Ġ( name Ġ!= Ġnull ) Ġ" Ġ($ name )" Ġelse Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" Foreign Ġkey $ fk Name Ġhas Ġ${ from . size } Ġcolumns , Ġwhile Ġreferenced Ġprimary Ġkey Ġ(${ target . name }) Ġhas Ġ${ target . columns . size }" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ_ foreign Keys . add ( ForeignKey Constraint ( from . zip ( target . columns ). toMap (), ĠonUpdate , ĠonDelete , Ġname )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġcomposite Ġforeign Ġkey . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġreferences ĠPair s Ġof Ġcolumns Ġthat Ġcompose Ġthe Ġforeign Ġkey . ĊĠĠĠĠ Ġ* ĠFirst Ġvalue Ġof Ġpair Ġis Ġa Ġcolumn Ġof Ġreferencing Ġtable , Ġsecond Ġvalue Ġ- Ġa Ġcolumn Ġof Ġa Ġreferenced Ġone . ĊĠĠĠĠ Ġ* ĠAll Ġreferencing Ġcolumns Ġmust Ġbelong Ġto Ġthis Ġtable . ĊĠĠĠĠ Ġ* ĠAll Ġreferenced Ġcolumns Ġmust Ġbelong Ġto Ġthe Ġsame Ġtable . ĊĠĠĠĠ Ġ* Ġ@ param ĠonUpdate ĠReference Ġoption Ġwhen Ġperforming Ġupdate Ġoperations . ĊĠĠĠĠ Ġ* Ġ@ param ĠonUpdate ĠReference Ġoption Ġwhen Ġperforming Ġdelete Ġoperations . ĊĠĠĠĠ Ġ* Ġ@ param Ġname ĠCustom Ġforeign Ġkey Ġname ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġforeign Key ( ĊĠĠĠĠĠĠĠ Ġvar arg Ġreferences : ĠPair < Column <* >, ĠColumn <* >>, ĊĠĠĠĠĠĠĠ ĠonUpdate : ĠReference Option ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ ĠonDelete : ĠReference Option ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġname : ĠString ? Ġ= Ġnull ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ foreign Keys . add ( ForeignKey Constraint ( references . toMap (), ĠonUpdate , ĠonDelete , Ġname )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠCheck Ġconstraints ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġcheck Ġconstraint Ġin Ġthis Ġcolumn . ĊĠĠĠĠ Ġ* Ġ@ param Ġname ĠThe Ġname Ġto Ġidentify Ġthe Ġconstraint , Ġoptional . ĠMust Ġbe Ġ** unique ** Ġ( case - ins ensitive ) Ġto Ġthis Ġtable , Ġotherwise , Ġthe Ġconstraint Ġwill ĊĠĠĠĠ Ġ* Ġnot Ġbe Ġcreated . ĠAll Ġnames Ġare Ġ[ trimmed ][ String . trim ], Ġblank Ġnames Ġare Ġignored Ġand Ġthe Ġdatabase Ġengine Ġdec ides Ġthe Ġdefault Ġname . ĊĠĠĠĠ Ġ* Ġ@ param Ġop ĠThe Ġexpression Ġagainst Ġwhich Ġthe Ġnewly Ġinserted Ġvalues Ġwill Ġbe Ġcompared . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġ< T > ĠColumn < T >. check ( name : ĠString Ġ= Ġ"", Ġop : ĠSql Expression Builder .( Column < T >) Ġ-> ĠOp < Boolean >): ĠColumn < T > Ġ= Ġapply Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( name . isEmpty () Ġ|| Ġtable . check Constraints . none Ġ{ Ġit . first . equals ( name , Ġtrue ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtable . check Constraints . add ( name Ġto ĠSql Expression Builder . op ( this )) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexposed Logger . warn (" A ĠCHECK Ġconstraint Ġwith Ġname Ġ'$ name ' Ġwas Ġignored Ġbecause Ġthere Ġis Ġalready Ġone Ġwith Ġthat Ġname ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġcheck Ġconstraint Ġin Ġthis Ġtable . ĊĠĠĠĠ Ġ* Ġ@ param Ġname ĠThe Ġname Ġto Ġidentify Ġthe Ġconstraint , Ġoptional . ĠMust Ġbe Ġ** unique ** Ġ( case - ins ensitive ) Ġto Ġthis Ġtable , Ġotherwise , Ġthe Ġconstraint Ġwill ĊĠĠĠĠ Ġ* Ġnot Ġbe Ġcreated . ĠAll Ġnames Ġare Ġ[ trimmed ][ String . trim ], Ġblank Ġnames Ġare Ġignored Ġand Ġthe Ġdatabase Ġengine Ġdec ides Ġthe Ġdefault Ġname . ĊĠĠĠĠ Ġ* Ġ@ param Ġop ĠThe Ġexpression Ġagainst Ġwhich Ġthe Ġnewly Ġinserted Ġvalues Ġwill Ġbe Ġcompared . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġcheck ( name : ĠString Ġ= Ġ"", Ġop : ĠSql Expression Builder . () Ġ-> ĠOp < Boolean >) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( name . isEmpty () Ġ|| Ġcheck Constraints . none Ġ{ Ġit . first . equals ( name , Ġtrue ) Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Constraints . add ( name Ġto ĠSql Expression Builder . op ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexposed Logger . warn (" A ĠCHECK Ġconstraint Ġwith Ġname Ġ'$ name ' Ġwas Ġignored Ġbecause Ġthere Ġis Ġalready Ġone Ġwith Ġthat Ġname ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠCl oning Ġutils ĊĊĠĠĠ Ġprivate Ġfun Ġ< T Ġ: ĠAny > ĠT . clone ( replace Args : ĠMap < K Property 1 < T , Ġ* >, ĠAny > Ġ= Ġempty Map ()): ĠT Ġ= Ġjava Class . kotlin . run Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcons Params Ġ= Ġprimary Constructor !!. parameters ĊĠĠĠĠĠĠĠ Ġval Ġmutable Properties Ġ= Ġmember Properties . filter Is Instance < K Mutable Property 1 < T , ĠAny ? >>() ĊĠĠĠĠĠĠĠ Ġval Ġall Values Ġ= Ġmember Properties ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit Ġin Ġmutable Properties Ġ|| Ġit . name Ġin Ġcons Params . map ( K Parameter :: name ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. associate Ġ{ Ġit . name Ġto Ġ( replace Args [ it ] Ġ?: Ġit . get ( this @ clone )) Ġ} ĊĠĠĠĠĠĠĠ Ġprimary Constructor !!. call By ( cons Params . associate With Ġ{ Ġall Values [ it . name ] Ġ}). also Ġ{ Ġnew Instance Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( prop Ġin Ġmutable Properties ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprop . set ( newInstance , Ġall Values [ prop . name ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠI ColumnType . clone As BaseType (): ĠI ColumnType Ġ= Ġ(( this Ġas ? ĠAuto Inc ColumnType )?. delegate Ġ?: Ġthis ). clone () ĊĊĠĠĠ Ġprivate Ġfun Ġ< T > ĠColumn < T >. clone With Auto Inc ( id Seq Name : ĠString ?): ĠColumn < T > Ġ= Ġwhen Ġ( column Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠAuto Inc ColumnType Ġ-> Ġthis ĊĠĠĠĠĠĠĠ Ġis ĠColumn Type Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . with ColumnType ( Auto Inc ColumnType ( column Type , Ġid Seq Name , Ġ"${ tableName }_${ name }_ seq ")) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unsupported Ġcolumn Ġtype Ġfor Ġauto - increment Ġ$ column Type ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠD DL Ġstatements ĊĊĠĠĠ Ġ/** ĠReturns Ġthe Ġlist Ġof ĠD DL Ġstatements Ġthat Ġcreate Ġthis Ġtable . Ġ*/ ĊĠĠĠ Ġval Ġd dl : ĠList < String > Ġget () Ġ= Ġcreate Statement () ĊĊĠĠĠ Ġinternal Ġfun Ġprimary Key Constraint (): ĠString ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġprimary Key ?. let Ġ{ Ġprimary Key Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtr Ġ= ĠTransaction Manager . current () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconstraint Ġ= Ġtr . db . identifier Manager . cut If Ne cessary And Quote ( primaryKey . name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġprimary Key . columns . join ToString ( prefix Ġ= Ġ" CONSTRAINT Ġ$ constraint ĠPRIMARY ĠKEY Ġ( ", Ġpostfix Ġ= Ġ" )", Ġtransform Ġ= Ġtr :: identity ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate Statement (): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcreate Sequence Ġ= Ġauto Inc Column ?. auto Inc ColumnType ?. auto inc Seq ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSequence ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart With Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmin Value Ġ= Ġ 1 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠmaxValue Ġ= ĠLong . MAX _ VALUE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). createStatement () ĊĠĠĠĠĠĠĠ Ġ}. or Empty () ĊĊĠĠĠĠĠĠĠ Ġval Ġadd Foreign Keys In Alter Part Ġ= ĠSchema Utils . check Cycle ( this ) Ġ&& Ġcurrent Dialect Ġ! is ĠSQLite Dialect ĊĊĠĠĠĠĠĠĠ Ġval Ġforeign Key Constraints Ġ= Ġforeign Keys ĊĊĠĠĠĠĠĠĠ Ġval Ġcreate Table Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" CREATE ĠTABLE Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Dialect . supports IfNot Exists ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" IF ĠNOT ĠEXISTS Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( Transaction Manager . current (). identity ( this @ Table )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( columns . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcolumns . join To ( this , Ġprefix Ġ= Ġ" Ġ( ") Ġ{ Ġit . description D dl ( false ) Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( columns . any Ġ{ Ġit . is Primary Constraint Will Be Defined Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprimary Key Constraint ()?. let Ġ{ Ġappend (", Ġ$ it ") Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! add Foreign Keys In Alter Part Ġ&& Ġforeign Key Constraints . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġforeign Key Constraints . join To ( this , Ġprefix Ġ= Ġ", Ġ", Ġseparator Ġ= Ġ", Ġ") Ġ{ Ġit . foreign Key Part Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( check Constraints . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Constraints . map Indexed Ġ{ Ġindex , Ġ( name , Ġop ) Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresolved Name Ġ= Ġname . if Blank Ġ{ Ġ" check _${ tableName }_ $ index " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCheck Constraint . from ( this @ Table , Ġresolved Name , Ġop ). check Part ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. join To ( this , Ġprefix Ġ= Ġ", Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" )") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġcreate Constraint Ġ= Ġif Ġ( add Foreign Keys In Alter Part ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġforeign Key Constraints . flatMap Ġ{ Ġit . createStatement () Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġcreate Sequence Ġ+ Ġcreate Table Ġ+ Ġcreate Constraint ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġmodify Statement (): ĠList < String > Ġ= Ġthrow ĠUnsupportedOperationException (" Use Ġmodify Ġon Ġcolumns Ġand Ġindices ") ĊĊĠĠĠ Ġoverride Ġfun Ġdrop Statement (): ĠList < String > Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdrop Table Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" DROP ĠTABLE Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Dialect . supports IfNot Exists ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" IF ĠEXISTS Ġ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend ( Transaction Manager . current (). identity ( this @ Table )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Dialect If Available Ġis ĠOracle Dialect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ĠCASCADE ĠCONSTRAINT S ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( current Dialect If Available Ġis ĠPostgreSQL Dialect Ġ&& ĠSchema Utils . check Cycle ( this @ Table )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ĠCASCADE ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġdrop Sequence Ġ= Ġauto Inc Column ?. auto Inc ColumnType ?. auto inc Seq ?. let Ġ{ ĠSequence ( it ). drop Statement () Ġ}. or Empty () ĊĊĠĠĠĠĠĠĠ Ġreturn ĠlistOf ( drop Table ) Ġ+ Ġdrop Sequence ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġequals ( other : ĠAny ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( this Ġ=== Ġother ) Ġreturn Ġtrue ĊĠĠĠĠĠĠĠ Ġif Ġ( other Ġ! is ĠTable ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġif Ġ( tableName Ġ!= Ġother . tableName ) Ġreturn Ġfalse ĊĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠhashCode (): ĠInt Ġ= ĠtableName . hashCode () ĊĊĠĠĠ Ġobject ĠDual Ġ: ĠTable (" dual ") Ċ } Ċ Ċ /** ĠReturns Ġthe Ġlist Ġof Ġtables Ġto Ġwhich Ġthe Ġcolumns Ġin Ġthis Ġcolumn Ġset Ġbelong . Ġ*/ Ċ fun ĠColumn Set . target Tables (): ĠList < Table > Ġ= Ġwhen Ġ( this ) Ġ{ ĊĠĠĠ Ġis ĠAlias < *> Ġ-> ĠlistOf ( this . delegate ) ĊĠĠĠ Ġis ĠQuery Alias Ġ-> Ġthis . query . set . source . target Tables () ĊĠĠĠ Ġis ĠTable Ġ-> ĠlistOf ( this ) ĊĠĠĠ Ġis ĠJoin Ġ-> Ġthis . table . target Tables () Ġ+ Ġthis . join Parts . flatMap Ġ{ Ġit . join Part . target Tables () Ġ} ĊĠĠĠ Ġelse Ġ-> Ġerror (" No Ġtarget Ġprovided Ġfor Ġupdate ") Ċ } Ċ