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 . sql . statements . DefaultValue Marker Ċ import Ġorg . jetbrains . ex posed . sql . statements . api . Ex posed Blob Ċ import Ġorg . jetbrains . ex posed . sql . statements . api . PreparedStatement Api Ċ import Ġorg . jetbrains . ex posed . sql . vendors . current Dialect Ċ import Ġjava . io . InputStream Ċ import Ġjava . math . BigDecimal Ċ import Ġjava . math . Round ingMode Ċ import Ġjava . nio . ByteBuffer Ċ import Ġjava . sql . Blob Ċ import Ġjava . sql . C lob Ċ import Ġjava . sql . ResultSet Ċ import Ġjava . util .* Ċ import Ġkotlin . reflect . K Class Ċ Ċ /** Ċ Ġ* ĠInterface Ġcommon Ġto Ġall Ġcolumn Ġtypes . Ċ Ġ*/ Ċ interface ĠI ColumnType Ġ{ ĊĠĠĠ Ġ/** ĠReturns Ġ` true ` Ġif Ġthe Ġcolumn Ġtype Ġis Ġnullable , Ġ` false ` Ġotherwise . Ġ*/ ĊĠĠĠ Ġvar Ġnullable : ĠBoolean ĊĊĠĠĠ Ġ/** ĠReturns Ġthe ĠSQL Ġtype Ġof Ġthis Ġcolumn . Ġ*/ ĊĠĠĠ Ġfun Ġsql Type (): ĠString ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠConverts Ġthe Ġspecified Ġ[ value ] Ġ( from Ġthe Ġdatabase ) Ġto Ġan Ġobject Ġof Ġthe Ġappro pri ated Ġtype , Ġfor Ġthis Ġcolumn Ġtype . ĊĠĠĠĠ Ġ* ĠDefault Ġimplementation Ġreturns Ġthe Ġsame Ġinstance . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġvalue From DB ( value : ĠAny ): ĠAny Ġ= Ġvalue ĊĊĠĠĠ Ġ/** ĠReturns Ġan Ġobject Ġcompatible Ġwith Ġthe Ġdatabase , Ġfrom Ġthe Ġspecified Ġ[ value ], Ġfor Ġthis Ġcolumn Ġtype . Ġ*/ ĊĠĠĠ Ġfun Ġvalue To DB ( value : ĠAny ?): ĠAny ? Ġ= Ġvalue ?. let (:: notNull Value To DB ) ĊĊĠĠĠ Ġ/** ĠReturns Ġan Ġobject Ġcompatible Ġwith Ġthe Ġdatabase , Ġfrom Ġthe Ġspecified Ġ** non - null ** Ġ[ value ], Ġfor Ġthis Ġcolumn Ġtype . Ġ*/ ĊĠĠĠ Ġfun Ġnot NullValue To DB ( value : ĠAny ): ĠAny Ġ= Ġvalue ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe ĠSQL Ġrepresentation Ġof Ġthe Ġspecified Ġ[ value ], Ġfor Ġthis Ġcolumn Ġtype . ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġvalue Ġis Ġ` null ` Ġand Ġthe Ġcolumn Ġis Ġnot Ġnullable , Ġan Ġexception Ġwill Ġbe Ġthrown . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġvalue ToString ( value : ĠAny ?): ĠString Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġnull Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck ( nullable ) Ġ{ Ġ" NULL Ġin Ġnon - nullable Ġcolumn " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" NULL " ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠDefault Value Marker Ġ-> Ġ" DEFAULT " ĊĠĠĠĠĠĠĠ Ġis ĠIterable < *> Ġ-> Ġvalue . join ToString (",", Ġtransform Ġ= Ġ:: value ToString ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnon NullValue ToString ( value ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠReturns Ġthe ĠSQL Ġrepresentation Ġof Ġthe Ġspecified Ġ** non - null ** Ġ[ value ], Ġfor Ġthis Ġcolumn Ġtype . Ġ*/ ĊĠĠĠ Ġfun Ġnon NullValue ToString ( value : ĠAny ): ĠString Ġ= Ġnot NullValue To DB ( value ). toString () ĊĊĠĠĠ Ġ/** ĠReturns Ġthe Ġobject Ġat Ġthe Ġspecified Ġ[ index ] Ġin Ġthe Ġ[ rs ]. Ġ*/ ĊĠĠĠ Ġfun Ġread Object ( rs : ĠResultSet , Ġindex : ĠInt ): ĠAny ? Ġ= Ġrs . getObject ( index ) ĊĊĠĠĠ Ġ/** ĠSets Ġthe Ġ[ value ] Ġat Ġthe Ġspecified Ġ[ index ] Ġinto Ġthe Ġ[ stmt ]. Ġ*/ ĊĠĠĠ Ġfun Ġset Parameter ( stmt : ĠPreparedStatement Api , Ġindex : ĠInt , Ġvalue : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġstmt [ index ] Ġ= Ġvalue ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠStandard Ġcolumn Ġtype . Ċ Ġ*/ Ċ abstract Ġclass ĠColumn Type ( override Ġvar Ġnullable : ĠBoolean Ġ= Ġfalse ) Ġ: ĠI ColumnType Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠtoString (): ĠString Ġ= Ġsql Type () Ċ } Ċ Ċ /** Ċ Ġ* ĠAuto - increment Ġcolumn Ġtype . Ċ Ġ*/ Ċ class ĠAuto Inc ColumnType ( ĊĠĠĠ Ġ/** ĠReturns Ġthe Ġbase Ġcolumn Ġtype Ġof Ġthis Ġauto - increment Ġcolumn . Ġ*/ ĊĠĠĠ Ġval Ġdelegate : ĠColumn Type , ĊĠĠĠ Ġ_ auto inc Seq : ĠString Ċ ) Ġ: ĠI ColumnType Ġby Ġdelegate Ġ{ ĊĊĠĠĠ Ġ/** ĠReturns Ġthe Ġname Ġof Ġthe Ġsequence Ġused Ġto Ġgenerate Ġnew Ġvalues Ġfor Ġthis Ġauto - increment Ġcolumn . Ġ*/ ĊĠĠĠ Ġval Ġauto inc Seq : ĠString ? Ġ= Ġ_ auto inc Seq ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġif Ġ( current Dialect . needs Sequence To Auto Inc ) Ġfield Ġelse Ġnull ĊĊĠĠĠ Ġprivate Ġfun Ġresolve Auto Inc Type ( column Type : ĠI ColumnType ): ĠString Ġ= Ġwhen Ġ( column Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠEntity ID ColumnType < *> Ġ-> Ġresolve Auto Inc Type ( column Type . id Column . column Type ) ĊĠĠĠĠĠĠĠ Ġis ĠInteger ColumnType Ġ-> Ġcurrent Dialect . dataType Provider . integer Auto inc Type () ĊĠĠĠĠĠĠĠ Ġis ĠLong ColumnType Ġ-> Ġcurrent Dialect . dataType Provider . long Auto inc Type () ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġguess Auto Inc Type By ( column Type . sql Type ()) ĊĠĠĠ Ġ} Ġ?: Ġerror (" Unsupported Ġtype Ġ$ delegate Ġfor Ġauto - increment ") ĊĊĠĠĠ Ġprivate Ġfun Ġguess Auto Inc Type By ( sql Type : ĠString ): ĠString ? Ġ= Ġwhen Ġ( sql Type ) Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrent Dialect . dataType Provider . long Type () Ġ-> Ġcurrent Dialect . dataType Provider . long Auto inc Type () ĊĠĠĠĠĠĠĠ Ġcurrent Dialect . dataType Provider . integer Type () Ġ-> Ġcurrent Dialect . dataType Provider . integer Auto inc Type () ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsql Type (): ĠString Ġ= Ġresolve Auto Inc Type ( delegate ) Ċ } Ċ Ċ /** ĠReturns Ġ` true ` Ġif Ġthis Ġis Ġan Ġauto - increment Ġcolumn , Ġ` false ` Ġotherwise . Ġ*/ Ċ val ĠI ColumnType . is Auto Inc : ĠBoolean Ġget () Ġ= Ġthis Ġis ĠAuto Inc ColumnType Ġ|| Ġ( this Ġis ĠEntity ID ColumnType < *> Ġ&& Ġid Column . column Type . is Auto Inc ) Ċ /** ĠReturns Ġthe Ġname Ġof Ġthe Ġauto - increment Ġsequence Ġof Ġthis Ġcolumn . Ġ*/ Ċ val ĠColumn <* >. auto Inc Seq Name : ĠString ? ĊĠĠĠ Ġget () Ġ= Ġ( column Type Ġas ? ĠAuto Inc ColumnType )?. auto inc Seq Ġ?: Ġ( column Type Ġas ? ĠEntity ID ColumnType <* >) ?. id Column ?. auto Inc Seq Name Ċ Ċ class ĠEntity ID ColumnType < T Ġ: ĠComparable < T >>( val Ġid Column : ĠColumn < T >) Ġ: ĠColumn Type () Ġ{ ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire ( id Column . table Ġis ĠId Table <* >) Ġ{ Ġ" EntityId Ġsupported Ġonly Ġfor ĠId Tables " Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsql Type (): ĠString Ġ= Ġid Column . column Type . sql Type () ĊĊĠĠĠ Ġoverride Ġfun Ġnot NullValue To DB ( value : ĠAny ): ĠAny Ġ= Ġid Column . column Type . notNull Value To DB ( ĊĠĠĠĠĠĠĠ Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEntity ID < *> Ġ-> Ġvalue . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġnon NullValue ToString ( value : ĠAny ): ĠString Ġ= Ġid Column . column Type . non NullValue ToString ( ĊĠĠĠĠĠĠĠ Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEntity ID < *> Ġ-> Ġvalue . value ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġfun Ġvalue From DB ( value : ĠAny ): ĠEntity ID < T > Ġ= ĠEntity ID Function Provider . create Entity ID ( ĊĠĠĠĠĠĠĠ Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠEntity ID < *> Ġ-> Ġvalue . value Ġas ĠT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġid Column . column Type . value From DB ( value ) Ġas ĠT ĊĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠ Ġid Column . table Ġas ĠId Table < T > ĊĠĠĠ Ġ) Ċ } Ċ Ċ // ĠNumeric Ġcolumns Ċ Ċ /** Ċ Ġ* ĠNumeric Ġcolumn Ġfor Ġstoring Ġ 2 - byte Ġintegers . Ċ Ġ*/ Ċ class ĠShort ColumnType Ġ: ĠColumn Type () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsql Type (): ĠString Ġ= Ġ" SMALLINT " ĊĠĠĠ Ġoverride Ġfun Ġvalue From DB ( value : ĠAny ): ĠShort Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠShort Ġ-> Ġvalue ĊĠĠĠĠĠĠĠ Ġis ĠNumber Ġ-> Ġvalue . to Short () ĊĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġvalue . to Short () ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unexpected Ġvalue Ġof Ġtype ĠShort : Ġ$ value Ġof Ġ${ value :: class . qualified Name }") ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠNumeric Ġcolumn Ġfor Ġstoring Ġ 4 - byte Ġintegers . Ċ Ġ*/ Ċ class ĠInteger ColumnType Ġ: ĠColumn Type () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsql Type (): ĠString Ġ= Ġcurrent Dialect . dataType Provider . integer Type () ĊĠĠĠ Ġoverride Ġfun Ġvalue From DB ( value : ĠAny ): ĠInt Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠInt Ġ-> Ġvalue ĊĠĠĠĠĠĠĠ Ġis ĠNumber Ġ-> Ġvalue . toInt () ĊĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġvalue . toInt () ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unexpected Ġvalue Ġof Ġtype ĠInt : Ġ$ value Ġof Ġ${ value :: class . qualified Name }") ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠNumeric Ġcolumn Ġfor Ġstoring Ġ 8 - byte Ġintegers . Ċ Ġ*/ Ċ class ĠLong ColumnType Ġ: ĠColumn Type () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsql Type (): ĠString Ġ= Ġcurrent Dialect . dataType Provider . long Type () ĊĠĠĠ Ġoverride Ġfun Ġvalue From DB ( value : ĠAny ): ĠLong Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠLong Ġ-> Ġvalue ĊĠĠĠĠĠĠĠ Ġis ĠNumber Ġ-> Ġvalue . to Long () ĊĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġvalue . to Long () ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unexpected Ġvalue Ġof Ġtype ĠLong : Ġ$ value Ġof Ġ${ value :: class . qualified Name }") ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠNumeric Ġcolumn Ġfor Ġstoring Ġ 4 - byte Ġ( single Ġprecision ) Ġfloating - point Ġnumbers . Ċ Ġ*/ Ċ class ĠFloat ColumnType Ġ: ĠColumn Type () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsql Type (): ĠString Ġ= Ġcurrent Dialect . dataType Provider . float Type () ĊĠĠĠ Ġoverride Ġfun Ġvalue From DB ( value : ĠAny ): ĠFloat Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠFloat Ġ-> Ġvalue ĊĠĠĠĠĠĠĠ Ġis ĠNumber Ġ-> Ġvalue . toFloat () ĊĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġvalue . toFloat () ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unexpected Ġvalue Ġof Ġtype ĠFloat : Ġ$ value Ġof Ġ${ value :: class . qualified Name }") ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠNumeric Ġcolumn Ġfor Ġstoring Ġ 8 - byte Ġ( double Ġprecision ) Ġfloating - point Ġnumbers . Ċ Ġ*/ Ċ class ĠDouble ColumnType Ġ: ĠColumn Type () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsql Type (): ĠString Ġ= Ġcurrent Dialect . dataType Provider . double Type () ĊĠĠĠ Ġoverride Ġfun Ġvalue From DB ( value : ĠAny ): ĠDouble Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠDouble Ġ-> Ġvalue ĊĠĠĠĠĠĠĠ Ġis ĠNumber Ġ-> Ġvalue . toDouble () ĊĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġvalue . toDouble () ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unexpected Ġvalue Ġof Ġtype ĠDouble : Ġ$ value Ġof Ġ${ value :: class . qualified Name }") ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠNumeric Ġcolumn Ġfor Ġstoring Ġnumbers Ġwith Ġthe Ġspecified Ġ[ precision ] Ġand Ġ[ scale ]. Ċ Ġ*/ Ċ class ĠDecimal ColumnType ( ĊĠĠĠ Ġ/** ĠTotal Ġcount Ġof Ġsignificant Ġdigits Ġin Ġthe Ġwhole Ġnumber . Ġ*/ ĊĠĠĠ Ġval Ġprecision : ĠInt , ĊĠĠĠ Ġ/** ĠCount Ġof Ġdecimal Ġdigits Ġin Ġthe Ġfraction al Ġpart . Ġ*/ ĊĠĠĠ Ġval Ġscale : ĠInt Ċ ) Ġ: ĠColumn Type () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsql Type (): ĠString Ġ= Ġ" DECIMAL ($ precision , Ġ$ scale )" ĊĠĠĠ Ġoverride Ġfun Ġvalue From DB ( value : ĠAny ): ĠBigDecimal Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠBigDecimal Ġ-> Ġvalue ĊĠĠĠĠĠĠĠ Ġis ĠDouble Ġ-> Ġvalue . to BigDecimal () ĊĠĠĠĠĠĠĠ Ġis ĠFloat Ġ-> Ġvalue . to BigDecimal () ĊĠĠĠĠĠĠĠ Ġis ĠLong Ġ-> Ġvalue . to BigDecimal () ĊĠĠĠĠĠĠĠ Ġis ĠInt Ġ-> Ġvalue . to BigDecimal () ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unexpected Ġvalue Ġof Ġtype ĠDouble : Ġ$ value Ġof Ġ${ value :: class . qualified Name }") ĊĠĠĠ Ġ}. set Scale ( scale , ĠRound ingMode . HALF _ E VEN ) Ċ } Ċ Ċ // ĠCharacter Ġcolumns Ċ Ċ /** Ċ Ġ* ĠCharacter Ġcolumn Ġfor Ġstoring Ġsingle Ġcharacters . Ċ Ġ*/ Ċ class ĠCharacter ColumnType Ġ: ĠColumn Type () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsql Type (): ĠString Ġ= Ġ" CHAR " ĊĠĠĠ Ġoverride Ġfun Ġvalue From DB ( value : ĠAny ): ĠChar Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠChar Ġ-> Ġvalue ĊĠĠĠĠĠĠĠ Ġis ĠNumber Ġ-> Ġvalue . to Char () ĊĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġvalue . single () ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unexpected Ġvalue Ġof Ġtype ĠChar : Ġ$ value Ġof Ġ${ value :: class . qualified Name }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnot NullValue To DB ( value : ĠAny ): ĠAny Ġ= Ġvalue . toString () ĊĠĠĠ Ġoverride Ġfun Ġnon NullValue ToString ( value : ĠAny ): ĠString Ġ= Ġ"' $ value '" Ċ } Ċ Ċ /** Ċ Ġ* ĠBase Ġcharacter Ġcolumn Ġfor Ġstoring Ġstrings Ġusing Ġthe Ġspecified Ġtext Ġ[ collate ] Ġtype . Ċ Ġ*/ Ċ abstract Ġclass ĠString ColumnType ( ĊĠĠĠ Ġ/** ĠReturns Ġthe Ġcol late Ġtype Ġused Ġin Ġby Ġthis Ġcolumn . Ġ*/ ĊĠĠĠ Ġval Ġcol late : ĠString ? Ġ= Ġnull Ċ ) Ġ: ĠColumn Type () Ġ{ ĊĠĠĠ Ġ/** ĠReturns Ġthe Ġspecified Ġ[ value ] Ġwith Ġspecial Ġcharacters Ġescaped . Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġescape ( value : ĠString ): ĠString Ġ= Ġvalue . map Ġ{ Ġcharacters To Escape [ it ] Ġ?: Ġit Ġ}. join ToString ("") ĊĊĠĠĠ Ġoverride Ġfun Ġvalue From DB ( value : ĠAny ): ĠAny Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠC lob Ġ-> Ġvalue . character Stream . read Text () ĊĠĠĠĠĠĠĠ Ġis ĠByteArray Ġ-> ĠString ( value ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnon NullValue ToString ( value : ĠAny ): ĠString Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠ Ġappend (' \' ') ĊĠĠĠĠĠĠĠ Ġappend ( escape ( value . toString ())) ĊĠĠĠĠĠĠĠ Ġappend (' \' ') ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġcharacters To Escape Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ'\'' Ġto Ġ"\ ' \' ", Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ'\" ' Ġto Ġ"\" \"", Ġ// Ġno Ġneed Ġto Ġescape Ġdouble Ġquote Ġas Ġwe Ġput Ġstring Ġin Ġsingle Ġquotes ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ'\ r ' Ġto Ġ"\\ r ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ'\ n ' Ġto Ġ"\\ n " ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠCharacter Ġcolumn Ġfor Ġstoring Ġstrings Ġwith Ġthe Ġspecified Ġmaximum Ġ[ col Length ] Ġusing Ġthe Ġspecified Ġ[ collate ] Ġtype . Ċ Ġ*/ Ċ open Ġclass ĠVar Char ColumnType ( ĊĠĠĠ Ġ/** ĠReturns Ġthe Ġmaximum Ġlength Ġof Ġthis Ġcolumn . Ġ*/ ĊĠĠĠ Ġval Ġcol Length : ĠInt Ġ= Ġ 2 5 5 , ĊĠĠĠ Ġcol late : ĠString ? Ġ= Ġnull Ċ ) Ġ: ĠString ColumnType ( collate ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsql Type (): ĠString Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠ Ġappend (" VARCHAR ($ col Length )") ĊĠĠĠĠĠĠĠ Ġif Ġ( collate Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ĠCOLLATE Ġ${ escape ( collate )} ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠCharacter Ġcolumn Ġfor Ġstoring Ġstrings Ġof Ġarbitrary Ġlength Ġusing Ġthe Ġspecified Ġ[ collate ] Ġtype . Ċ Ġ*/ Ċ open Ġclass ĠText ColumnType ( collate : ĠString ? Ġ= Ġnull ) Ġ: ĠString ColumnType ( collate ) Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsql Type (): ĠString Ġ= Ġbuild String Ġ{ ĊĠĠĠĠĠĠĠ Ġappend ( current Dialect . dataType Provider . text Type ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( collate Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġappend (" ĠCOLLATE Ġ${ escape ( collate )} ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ // ĠBinary Ġcolumns Ċ Ċ /** Ċ Ġ* ĠBinary Ġcolumn Ġfor Ġstoring Ġbinary Ġstrings Ġof Ġvariable Ġand Ġ_ un limited _ Ġlength . Ċ Ġ*/ Ċ open Ġclass ĠBasic Binary ColumnType Ġ: ĠColumn Type () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsql Type (): ĠString Ġ= Ġcurrent Dialect . dataType Provider . binary Type () ĊĊĠĠĠ Ġoverride Ġfun Ġvalue From DB ( value : ĠAny ): ĠAny Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠBlob Ġ-> Ġvalue . binary Stream . read Bytes () ĊĠĠĠĠĠĠĠ Ġis ĠInputStream Ġ-> Ġvalue . read Bytes () ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnon NullValue ToString ( value : ĠAny ): ĠString Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠByteArray Ġ-> Ġvalue . toString ( Charsets . UTF _ 8 ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue . toString () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠBinary Ġcolumn Ġfor Ġstoring Ġbinary Ġstrings Ġof Ġa Ġspecific Ġ[ length ]. Ċ Ġ*/ Ċ class ĠBinary ColumnType ( ĊĠĠĠ Ġ/** ĠReturns Ġthe Ġlength Ġof Ġthe Ġcolumn - Ġ*/ ĊĠĠĠ Ġval Ġlength : ĠInt Ċ ) Ġ: ĠBasic Binary ColumnType () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsql Type (): ĠString Ġ= Ġcurrent Dialect . dataType Provider . binary Type ( length ) Ċ } Ċ Ċ /** Ċ Ġ* ĠBinary Ġcolumn Ġfor Ġstoring ĠBLOB s . Ċ Ġ*/ Ċ class ĠBlob ColumnType Ġ: ĠColumn Type () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsql Type (): ĠString Ġ= Ġcurrent Dialect . dataType Provider . blob Type () ĊĊĠĠĠ Ġoverride Ġfun Ġvalue From DB ( value : ĠAny ): ĠEx posed Blob Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠEx posed Blob Ġ-> Ġvalue ĊĠĠĠĠĠĠĠ Ġis ĠBlob Ġ-> ĠEx posed Blob ( value . binary Stream . read Bytes ()) ĊĠĠĠĠĠĠĠ Ġis ĠInputStream Ġ-> ĠEx posed Blob ( value . read Bytes ()) ĊĠĠĠĠĠĠĠ Ġis ĠByteArray Ġ-> ĠEx posed Blob ( value ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unexpected Ġvalue Ġof Ġtype ĠBlob : Ġ$ value Ġof Ġ${ value :: class . qualified Name }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnot NullValue To DB ( value : ĠAny ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( current Dialect . dataType Provider . blob AsStream Ġ&& Ġvalue Ġis ĠBlob ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue . binary Stream ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnon NullValue ToString ( value : ĠAny ): ĠString Ġ= Ġ" ?" ĊĊĠĠĠ Ġoverride Ġfun Ġread Object ( rs : ĠResultSet , Ġindex : ĠInt ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( current Dialect . dataType Provider . blob AsStream ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrs . getBytes ( index )?. let (:: Ex posed Blob ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrs . get Blob ( index )?. binary Stream ?. read Bytes ()?. let (:: Ex posed Blob ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Parameter ( stmt : ĠPreparedStatement Api , Ġindex : ĠInt , Ġvalue : ĠAny ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġto SetValue Ġ= Ġ( value Ġas ? ĠEx posed Blob )?. bytes ?. inputStream () Ġ?: Ġvalue ĊĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Dialect . dataType Provider . blob AsStream Ġ&& Ġto SetValue Ġis ĠInputStream Ġ-> Ġstmt . set InputStream ( index , Ġto SetValue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġto SetValue Ġ== Ġnull Ġ-> Ġstmt . set InputStream ( index , Ġto SetValue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġsuper . setParameter ( stmt , Ġindex , Ġto SetValue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠBinary Ġcolumn Ġfor Ġstoring Ġ[ UUID ]. Ċ Ġ*/ Ċ class ĠUUID ColumnType Ġ: ĠColumn Type () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsql Type (): ĠString Ġ= Ġcurrent Dialect . dataType Provider . uuid Type () ĊĊĠĠĠ Ġoverride Ġfun Ġvalue From DB ( value : ĠAny ): ĠUUID Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue Ġis ĠUUID Ġ-> Ġvalue ĊĠĠĠĠĠĠĠ Ġvalue Ġis ĠByteArray Ġ-> ĠByteBuffer . wrap ( value ). let Ġ{ Ġb Ġ-> ĠUUID ( b . long , Ġb . long ) Ġ} ĊĠĠĠĠĠĠĠ Ġvalue Ġis ĠString Ġ&& Ġvalue . matches ( uuid Regexp ) Ġ-> ĠUUID . fromString ( value ) ĊĠĠĠĠĠĠĠ Ġvalue Ġis ĠString Ġ-> ĠByteBuffer . wrap ( value . toByteArray ()). let Ġ{ Ġb Ġ-> ĠUUID ( b . long , Ġb . long ) Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unexpected Ġvalue Ġof Ġtype ĠUUID : Ġ$ value Ġof Ġ${ value :: class . qualified Name }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnot NullValue To DB ( value : ĠAny ): ĠAny Ġ= Ġcurrent Dialect . dataType Provider . uuid To DB ( value To UUID ( value )) ĊĊĠĠĠ Ġoverride Ġfun Ġnon NullValue ToString ( value : ĠAny ): ĠString Ġ= Ġ"' ${ value To UUID ( value )} '" ĊĊĠĠĠ Ġprivate Ġfun Ġvalue To UUID ( value : ĠAny ): ĠUUID Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠUUID Ġ-> Ġvalue ĊĠĠĠĠĠĠĠ Ġis ĠString Ġ-> ĠUUID . fromString ( value ) ĊĠĠĠĠĠĠĠ Ġis ĠByteArray Ġ-> ĠByteBuffer . wrap ( value ). let Ġ{ ĠUUID ( it . long , Ġit . long ) Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unexpected Ġvalue Ġof Ġtype ĠUUID : Ġ${ value . java Class . canonical Name }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġuuid Regexp Ġ= ĠRegex ("[ 0 - 9 A - F ]{ 8 }- [ 0 - 9 A - F ]{ 4 }- [ 0 - 9 A - F ]{ 4 }- [ 0 - 9 A - F ]{ 4 }- [ 0 - 9 A - F ]{ 1 2 }", ĠRegex Option . IGNORE _ CASE ) ĊĠĠĠ Ġ} Ċ } Ċ Ċ // ĠBoolean Ġcolumns Ċ Ċ /** Ċ Ġ* ĠBoolean Ġcolumn Ġfor Ġstoring Ġboolean Ġvalues . Ċ Ġ*/ Ċ class ĠBoolean ColumnType Ġ: ĠColumn Type () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsql Type (): ĠString Ġ= Ġcurrent Dialect . dataType Provider . boolean Type () ĊĊĠĠĠ Ġoverride Ġfun Ġvalue From DB ( value : ĠAny ): ĠBoolean Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠNumber Ġ-> Ġvalue . to Long () Ġ!= Ġ 0 L ĊĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġcurrent Dialect . dataType Provider . boolean FromString To Boolean ( value ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue . toString (). to Boolean () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnon NullValue ToString ( value : ĠAny ): ĠString Ġ= Ġcurrent Dialect . dataType Provider . boolean To Statement String ( value Ġas ĠBoolean ) Ċ } Ċ Ċ // ĠEnumeration Ġcolumns Ċ Ċ /** Ċ Ġ* ĠEnumeration Ġcolumn Ġfor Ġstoring Ġenums Ġof Ġtype Ġ[ klass ] Ġby Ġtheir Ġordinal . Ċ Ġ*/ Ċ class ĠEnumeration ColumnType < T Ġ: ĠEnum < T >>( ĊĠĠĠ Ġ/** ĠReturns Ġthe Ġenum Ġclass Ġused Ġin Ġthis Ġcolumn Ġtype . Ġ*/ ĊĠĠĠ Ġval Ġklass : ĠK Class < T > Ċ ) Ġ: ĠColumn Type () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsql Type (): ĠString Ġ= Ġcurrent Dialect . dataType Provider . integer Type () ĊĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġfun Ġvalue From DB ( value : ĠAny ): ĠT Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠNumber Ġ-> Ġklass . java . enum Constants ! ![ value . toInt ()] ĊĠĠĠĠĠĠĠ Ġis ĠEnum < *> Ġ-> Ġvalue Ġas ĠT ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror ("$ value Ġof Ġ${ value :: class . qualified Name } Ġis Ġnot Ġvalid Ġfor Ġenum Ġ${ klass . simple Name }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnot NullValue To DB ( value : ĠAny ): ĠInt Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠInt Ġ-> Ġvalue ĊĠĠĠĠĠĠĠ Ġis ĠEnum < *> Ġ-> Ġvalue . ordinal ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror ("$ value Ġof Ġ${ value :: class . qualified Name } Ġis Ġnot Ġvalid Ġfor Ġenum Ġ${ klass . simple Name }") ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠEnumeration Ġcolumn Ġfor Ġstoring Ġenums Ġof Ġtype Ġ[ klass ] Ġby Ġtheir Ġname . Ċ Ġ*/ Ċ class ĠEnumeration Name ColumnType < T Ġ: ĠEnum < T >>( ĊĠĠĠ Ġ/** ĠReturns Ġthe Ġenum Ġclass Ġused Ġin Ġthis Ġcolumn Ġtype . Ġ*/ ĊĠĠĠ Ġval Ġklass : ĠK Class < T >, Ġcol Length : ĠInt Ċ ) Ġ: ĠVar Char ColumnType ( col Length ) Ġ{ ĊĠĠĠ Ġ@ Suppress (" UN CHECK ED _ CAST ") ĊĠĠĠ Ġoverride Ġfun Ġvalue From DB ( value : ĠAny ): ĠT Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġklass . java . enum Constants !!. first Ġ{ Ġit . name Ġ== Ġvalue Ġ} ĊĠĠĠĠĠĠĠ Ġis ĠEnum < *> Ġ-> Ġvalue Ġas ĠT ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror ("$ value Ġof Ġ${ value :: class . qualified Name } Ġis Ġnot Ġvalid Ġfor Ġenum Ġ${ klass . qualified Name }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnot NullValue To DB ( value : ĠAny ): ĠString Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġvalue ĊĠĠĠĠĠĠĠ Ġis ĠEnum < *> Ġ-> Ġvalue . name ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror ("$ value Ġof Ġ${ value :: class . qualified Name } Ġis Ġnot Ġvalid Ġfor Ġenum Ġ${ klass . qualified Name }") ĊĠĠĠ Ġ} Ċ } Ċ Ċ // ĠDate / Time Ġcolumns Ċ Ċ /** Ċ Ġ* ĠMarker Ġinterface Ġfor Ġdate / datetime Ġrelated Ġcolumn Ġtypes . Ċ Ġ**/ Ċ interface ĠI Date ColumnType Ċ