package Ġorg . jetbrains . ex posed . sql . kotlin . datetime Ċ Ċ import Ġkotlinx . datetime .* Ċ import Ġkotlinx . datetime . TimeZone Ċ import Ġorg . jetbrains . ex posed . sql . Column Ċ import Ġorg . jetbrains . ex posed . sql . ColumnType Ċ import Ġorg . jetbrains . ex posed . sql . ID ate ColumnType Ċ import Ġorg . jetbrains . ex posed . sql . Table Ċ import Ġorg . jetbrains . ex posed . sql . vendors . Oracle Dialect Ċ import Ġorg . jetbrains . ex posed . sql . vendors . SQLite Dialect Ċ import Ġorg . jetbrains . ex posed . sql . vendors . current Dialect Ċ import Ġjava . sql . ResultSet Ċ import Ġjava . time . Zone Id Ċ import Ġjava . time . format . DateTime Formatter Ċ import Ġjava . util .* Ċ import Ġkotlin . time . Duration Ċ import Ġkotlin . time . Experimental Time Ċ Ċ private Ġconst Ġval ĠM ILL IS _ IN _ SECOND Ġ= Ġ 1 0 0 0 Ċ Ċ private Ġval ĠDEFAULT _ TIME _ ZONE Ġby Ġlazy Ġ{ ĊĠĠĠ ĠTime Zone . current System Default () Ċ } Ċ Ċ private Ġval ĠDEFAULT _ DATE _ STRING _ FORMAT TER Ġby Ġlazy Ġ{ ĊĠĠĠ ĠDateTime Formatter . ISO _ LOCAL _ DATE . with Locale ( Locale . ROOT ). with Zone ( Zone Id . system Default ()) Ċ } Ċ private Ġval ĠDEFAULT _ DATE _ TIME _ STRING _ FORMAT TER Ġby Ġlazy Ġ{ ĊĠĠĠ ĠDateTime Formatter . ISO _ LOCAL _ DATE _ TIME . with Locale ( Locale . ROOT ). with Zone ( Zone Id . system Default ()) Ċ } Ċ private Ġval ĠSQL ITE _ AND _ OR AC LE _ DATE _ TIME _ STRING _ FORMAT TER Ġby Ġlazy Ġ{ ĊĠĠĠ ĠDateTime Formatter . of Pattern ( ĊĠĠĠĠĠĠĠ Ġ" yyyy - MM - dd ĠHH : mm : ss . SS S ", ĊĠĠĠĠĠĠĠ ĠLocale . ROOT ĊĠĠĠ Ġ). with Zone ( Zone Id . system Default ()) Ċ } Ċ Ċ // Ġprivate Ġval ĠOR AC LE _ TIME _ STRING _ FORMAT TER Ġby Ġlazy Ġ{ Ċ // ĠĠĠ ĠDateTime Formatter . of Pattern ( Ċ // ĠĠĠĠĠĠĠ Ġ" 1 9 0 0 - 0 1 - 0 1 ĠHH : mm : ss ", Ċ // ĠĠĠĠĠĠĠ ĠLocale . ROOT Ċ // ĠĠĠ Ġ). with Zone ( Zone Offset . UTC ) Ċ // Ġ} Ċ // Ċ // Ġprivate Ġval ĠDEFAULT _ TIME _ STRING _ FORMAT TER Ġby Ġlazy Ġ{ Ċ // ĠĠĠ ĠDateTime Formatter . ISO _ LOCAL _ TIME . with Locale ( Locale . ROOT ). with Zone ( Zone Id . system Default ()) Ċ // Ġ} Ċ Ċ private Ġfun Ġformatter For DateString ( date : ĠString ) Ġ= ĠdateTime With Fraction Format ( date . substring After Last ('.', Ġ""). length ) Ċ private Ġfun ĠdateTime With Fraction Format ( fraction : ĠInt ): ĠDateTime Formatter Ġ{ ĊĠĠĠ Ġval Ġbase Format Ġ= Ġ" yyyy - MM - d ĠHH : mm : ss " ĊĠĠĠ Ġval Ġnew Format Ġ= Ġif Ġ( fraction Ġin Ġ 1 .. 9 ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ( 1 .. fraction ). join ToString ( prefix Ġ= Ġ"$ base Format .", Ġseparator Ġ= Ġ"") Ġ{ Ġ" S " Ġ} ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġbase Format ĊĠĠĠ Ġ} ĊĠĠĠ Ġreturn ĠDateTime Formatter . of Pattern ( new Format ). with Locale ( Locale . ROOT ). with Zone ( Zone Id . system Default ()) Ċ } Ċ Ċ private Ġval ĠLocalDate . millis Ġget () Ġ= Ġthis . at Start OfDay In ( TimeZone . current System Default ()). epoch Seconds Ġ* ĠM ILL IS _ IN _ SECOND Ċ Ċ class ĠKotlin LocalDate ColumnType Ġ: ĠColumn Type (), ĠI Date ColumnType Ġ{ ĊĠĠĠ Ġoverride Ġval Ġhas Time Part : ĠBoolean Ġ= Ġfalse ĊĊĠĠĠ Ġoverride Ġfun Ġsql Type (): ĠString Ġ= Ġ" DATE " ĊĊĠĠĠ Ġoverride Ġfun Ġnon NullValue ToString ( value : ĠAny ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinstant Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġreturn Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLocalDate Ġ-> ĠInstant . from Epoch Milliseconds ( value . at Start OfDay In ( DEFAULT _ TIME _ ZONE ). to Epoch Milliseconds ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Ġjava . sql . Date Ġ-> ĠInstant . from Epoch Milliseconds ( value . time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Ġjava . sql . Timestamp Ġ-> ĠInstant . from Epoch Seconds ( value . time Ġ/ ĠM ILL IS _ IN _ SECOND , Ġvalue . nan os . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unexpected Ġvalue : Ġ$ value Ġof Ġ${ value :: class . qualified Name }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ"' ${ DEFAULT _ DATE _ STRING _ FORMAT TER . format ( instant . to Java Instant ()) } '" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvalue From DB ( value : ĠAny ): ĠAny Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠLocalDate Ġ-> Ġvalue ĊĠĠĠĠĠĠĠ Ġis Ġjava . sql . Date Ġ-> Ġlong To LocalDate ( value . time ) ĊĠĠĠĠĠĠĠ Ġis Ġjava . sql . Timestamp Ġ-> Ġlong To LocalDate ( value . time ) ĊĠĠĠĠĠĠĠ Ġis ĠInt Ġ-> Ġlong To LocalDate ( value . to Long ()) ĊĠĠĠĠĠĠĠ Ġis ĠLong Ġ-> Ġlong To LocalDate ( value ) ĊĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġwhen Ġ( current Dialect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSQLite Dialect Ġ-> ĠLocalDate . parse ( value ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> ĠLocalDate . parse ( value . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnot NullValue To DB ( value : ĠAny ) Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠLocalDate Ġ-> Ġjava . sql . Date ( value . millis ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlong To LocalDate ( instant : ĠLong ) Ġ= ĠInstant . from Epoch Milliseconds ( instant ). to LocalDateTime ( DEFAULT _ TIME _ ZONE ). date ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġval ĠINSTANCE Ġ= ĠKotlin LocalDate ColumnType () ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠKotlin LocalDateTime ColumnType Ġ: ĠColumn Type (), ĠI Date ColumnType Ġ{ ĊĠĠĠ Ġoverride Ġval Ġhas Time Part : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġoverride Ġfun Ġsql Type (): ĠString Ġ= Ġcurrent Dialect . dataType Provider . dateTime Type () ĊĊĠĠĠ Ġoverride Ġfun Ġnon NullValue ToString ( value : ĠAny ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinstant Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġreturn Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLocalDateTime Ġ-> Ġvalue . to Instant ( DEFAULT _ TIME _ ZONE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Ġjava . sql . Date Ġ-> ĠInstant . from Epoch Milliseconds ( value . time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Ġjava . sql . Timestamp Ġ-> ĠInstant . from Epoch Seconds ( value . time Ġ/ ĠM ILL IS _ IN _ SECOND , Ġvalue . nan os . to Long ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unexpected Ġvalue : Ġ$ value Ġof Ġ${ value :: class . qualified Name }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( current Dialect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠSQLite Dialect , Ġis ĠOracle Dialect Ġ-> Ġ"' ${ SQL ITE _ AND _ OR AC LE _ DATE _ TIME _ STRING _ FORMAT TER . format ( instant . to Java Instant ()) } '" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"' ${ DEFAULT _ DATE _ TIME _ STRING _ FORMAT TER . format ( instant . to Java Instant ()) } '" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvalue From DB ( value : ĠAny ): ĠAny Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠLocalDateTime Ġ-> Ġvalue ĊĠĠĠĠĠĠĠ Ġis Ġjava . sql . Date Ġ-> Ġlong To LocalDateTime ( value . time ) ĊĠĠĠĠĠĠĠ Ġis Ġjava . sql . Timestamp Ġ-> Ġlong To LocalDateTime ( value . time Ġ/ ĠM ILL IS _ IN _ SECOND , Ġvalue . nan os . to Long ()) ĊĠĠĠĠĠĠĠ Ġis ĠInt Ġ-> Ġlong To LocalDateTime ( value . to Long ()) ĊĠĠĠĠĠĠĠ Ġis ĠLong Ġ-> Ġlong To LocalDateTime ( value ) ĊĠĠĠĠĠĠĠ Ġis Ġjava . time . LocalDateTime Ġ-> Ġvalue . to Kotlin LocalDateTime () ĊĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġjava . time . LocalDateTime . parse ( value , Ġformatter For DateString ( value )). to Kotlin LocalDateTime () ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue From DB ( value . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnot NullValue To DB ( value : ĠAny ): ĠAny Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue Ġis ĠLocalDateTime Ġ&& Ġcurrent Dialect Ġis ĠSQLite Dialect Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSQL ITE _ AND _ OR AC LE _ DATE _ TIME _ STRING _ FORMAT TER . format ( value . to Java LocalDateTime (). at Zone ( Zone Id . system Default ())) ĊĠĠĠĠĠĠĠ Ġvalue Ġis ĠLocalDateTime Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinstant Ġ= Ġvalue . to Java LocalDateTime (). at Zone ( Zone Id . system Default ()). to Instant () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjava . sql . Timestamp ( instant . to Epoch Milli ()). apply Ġ{ Ġnan os Ġ= Ġinstant . nano Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlong To LocalDateTime ( millis : ĠLong ) Ġ= ĠInstant . from Epoch Milliseconds ( millis ). to LocalDateTime ( DEFAULT _ TIME _ ZONE ) ĊĠĠĠ Ġprivate Ġfun Ġlong To LocalDateTime ( seconds : ĠLong , Ġnan os : ĠLong ) Ġ= ĠInstant . from Epoch Seconds ( seconds , Ġnan os ). to LocalDateTime ( DEFAULT _ TIME _ ZONE ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġval ĠINSTANCE Ġ= ĠKotlin LocalDateTime ColumnType () ĊĠĠĠ Ġ} Ċ } Ċ Ċ // Ġclass ĠJava Local Time ColumnType Ġ: ĠColumn Type (), ĠI Date ColumnType Ġ{ Ċ // ĠĠĠ Ġoverride Ġval Ġhas Time Part : ĠBoolean Ġ= Ġtrue Ċ // Ċ // ĠĠĠ Ġoverride Ġfun Ġsql Type (): ĠString Ġ= Ġcurrent Dialect . dataType Provider . time Type () Ċ // Ċ // ĠĠĠ Ġoverride Ġfun Ġnon NullValue ToString ( value : ĠAny ): ĠString Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġval Ġinstant Ġ= Ġwhen Ġ( value ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġreturn Ġvalue Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLocal Time Ġ-> Ġvalue Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġis Ġjava . sql . Time Ġ-> ĠInstant . of Epoch Milli ( value . time ). at Zone ( Zone Id . system Default ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġis Ġjava . sql . Timestamp Ġ-> ĠInstant . of Epoch Milli ( value . time ). at Zone ( Zone Id . system Default ()) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unexpected Ġvalue : Ġ$ value Ġof Ġ${ value :: class . qualified Name }") Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // Ċ // ĠĠĠĠĠĠĠ Ġval Ġformatter Ġ= Ġif Ġ( current Dialect Ġis ĠOracle Dialect ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠOR AC LE _ TIME _ STRING _ FORMAT TER Ċ // ĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠDEFAULT _ TIME _ STRING _ FORMAT TER Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġreturn Ġ"' ${ formatter . format ( instant )} '" Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġoverride Ġfun Ġvalue From DB ( value : ĠAny ): ĠLocal Time Ġ= Ġwhen Ġ( value ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġis ĠLocal Time Ġ-> Ġvalue Ċ // ĠĠĠĠĠĠĠ Ġis Ġjava . sql . Time Ġ-> Ġvalue . to Local Time () Ċ // ĠĠĠĠĠĠĠ Ġis Ġjava . sql . Timestamp Ġ-> Ġvalue . to LocalDateTime (). to Local Time () Ċ // ĠĠĠĠĠĠĠ Ġis ĠInt Ġ-> Ġlong ToLocal Time ( value . to Long ()) Ċ // ĠĠĠĠĠĠĠ Ġis ĠLong Ġ-> Ġlong ToLocal Time ( value ) Ċ // ĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformatter Ġ= Ġif Ġ( current Dialect Ġis ĠOracle Dialect ) Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġformatter For DateString ( value ) Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEFAULT _ TIME _ STRING _ FORMAT TER Ċ // ĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠĠĠĠĠ ĠLocal Time . parse ( value , Ġformatter ) Ċ // ĠĠĠĠĠĠĠ Ġ} Ċ // ĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue From DB ( value . toString ()) Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġoverride Ġfun Ġnot NullValue To DB ( value : ĠAny ): ĠAny Ġ= Ġwhen Ġ( value ) Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġis ĠLocal Time Ġ-> Ġjava . sql . Time . valueOf ( value ) Ċ // ĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue Ċ // ĠĠĠ Ġ} Ċ // Ċ // ĠĠĠ Ġprivate Ġfun Ġlong ToLocal Time ( millis : ĠLong ) Ġ= ĠInstant . of Epoch Milli ( millis ). at Zone ( Zone Id . system Default ()). to Local Time () Ċ // Ċ // ĠĠĠ Ġcompanion Ġobject Ġ{ Ċ // ĠĠĠĠĠĠĠ Ġinternal Ġval ĠINSTANCE Ġ= ĠJava Local Time ColumnType () Ċ // ĠĠĠ Ġ} Ċ // Ġ} Ċ Ċ class ĠKotlin Instant ColumnType Ġ: ĠColumn Type (), ĠI Date ColumnType Ġ{ ĊĠĠĠ Ġoverride Ġval Ġhas Time Part : ĠBoolean Ġ= Ġtrue ĊĠĠĠ Ġoverride Ġfun Ġsql Type (): ĠString Ġ= Ġcurrent Dialect . dataType Provider . dateTime Type () ĊĊĠĠĠ Ġoverride Ġfun Ġnon NullValue ToString ( value : ĠAny ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinstant Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġreturn Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠInstant Ġ-> Ġvalue . to Java Instant () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Ġjava . sql . Timestamp Ġ-> Ġvalue . to Instant () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unexpected Ġvalue : Ġ$ value Ġof Ġ${ value :: class . qualified Name }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( current Dialect ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠOracle Dialect Ġ-> Ġ"' ${ SQL ITE _ AND _ OR AC LE _ DATE _ TIME _ STRING _ FORMAT TER . format ( instant )} '" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ"' ${ DEFAULT _ DATE _ TIME _ STRING _ FORMAT TER . format ( instant )} '" ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvalue From DB ( value : ĠAny ): ĠInstant Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis Ġjava . sql . Timestamp Ġ-> Ġvalue . to Instant (). to Kotlin Instant () ĊĠĠĠĠĠĠĠ Ġis ĠString Ġ-> ĠInstant . parse ( value ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue From DB ( value . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread Object ( rs : ĠResultSet , Ġindex : ĠInt ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrs . getTimestamp ( index ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnot NullValue To DB ( value : ĠAny ): ĠAny Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠ Ġvalue Ġis ĠInstant Ġ&& Ġcurrent Dialect Ġis ĠSQLite Dialect Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSQL ITE _ AND _ OR AC LE _ DATE _ TIME _ STRING _ FORMAT TER . format ( value . to Java Instant ()) ĊĠĠĠĠĠĠĠ Ġvalue Ġis ĠInstant Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġjava . sql . Timestamp . from ( value . to Java Instant ()) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġval ĠINSTANCE Ġ= ĠKotlin Instant ColumnType () ĊĠĠĠ Ġ} Ċ } Ċ Ċ @ Experimental Time Ċ class ĠKotlin Duration ColumnType Ġ: ĠColumn Type () Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġsql Type (): ĠString Ġ= Ġcurrent Dialect . dataType Provider . long Type () ĊĊĠĠĠ Ġoverride Ġfun Ġnon NullValue ToString ( value : ĠAny ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġduration Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠString Ġ-> Ġreturn Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠDuration Ġ-> Ġvalue . in Whole Nan oseconds ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠLong Ġ-> Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠNumber Ġ-> Ġvalue . to Long () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unexpected Ġvalue : Ġ$ value Ġof Ġ${ value :: class . qualified Name }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ"' $ duration '" ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġvalue From DB ( value : ĠAny ): ĠDuration Ġ= Ġwhen Ġ( value ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠLong Ġ-> ĠDuration . nan oseconds ( value ) ĊĠĠĠĠĠĠĠ Ġis ĠNumber Ġ-> ĠDuration . nan oseconds ( value . to Long ()) ĊĠĠĠĠĠĠĠ Ġis ĠString Ġ-> ĠDuration . parse ( value ) ĊĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue From DB ( value . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġread Object ( rs : ĠResultSet , Ġindex : ĠInt ): ĠAny ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠResultSet . getLong Ġreturns Ġ 0 Ġinstead Ġof Ġnull ĊĠĠĠĠĠĠĠ Ġreturn Ġrs . getLong ( index ). take If Ġ{ Ġrs . getObject ( index ) Ġ!= Ġnull Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnot NullValue To DB ( value : ĠAny ): ĠAny Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( value Ġis ĠDuration ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġvalue . in Whole Nan oseconds ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġinternal Ġval ĠINSTANCE Ġ= ĠKotlin Duration ColumnType () ĊĠĠĠ Ġ} Ċ } Ċ Ċ /** Ċ Ġ* ĠA Ġdate Ġcolumn Ġto Ġstore Ġa Ġdate . Ċ Ġ* Ċ Ġ* Ġ@ param Ġname ĠThe Ġcolumn Ġname Ċ Ġ*/ Ċ fun ĠTable . date ( name : ĠString ): ĠColumn < LocalDate > Ġ= Ġregister Column ( name , ĠKotlin LocalDate ColumnType ()) Ċ Ċ /** Ċ Ġ* ĠA Ġdatetime Ġcolumn Ġto Ġstore Ġboth Ġa Ġdate Ġand Ġa Ġtime . Ċ Ġ* Ċ Ġ* Ġ@ param Ġname ĠThe Ġcolumn Ġname Ċ Ġ*/ Ċ fun ĠTable . datetime ( name : ĠString ): ĠColumn < LocalDateTime > Ġ= Ġregister Column ( name , ĠKotlin LocalDateTime ColumnType ()) Ċ Ċ // Ġ/** Ċ // Ġ* ĠA Ġtime Ġcolumn Ġto Ġstore Ġa Ġtime . Ċ // Ġ* Ċ // Ġ* ĠDoes n 't Ġreturn Ġnan os Ġfrom Ġdatabase . Ċ // Ġ* Ċ // Ġ* Ġ@ param Ġname ĠThe Ġcolumn Ġname Ċ // Ġ* Ġ@ author ĠMax im ĠVor ot yn sky Ċ // Ġ*/ Ċ // Ġfun ĠTable . time ( name : ĠString ): ĠColumn < Local Time > Ġ= Ġregister Column ( name , ĠJava Local Time ColumnType ()) Ċ Ċ /** Ċ Ġ* ĠA Ġtimestamp Ġcolumn Ġto Ġstore Ġboth Ġa Ġdate Ġand Ġa Ġtime . Ċ Ġ* Ċ Ġ* Ġ@ param Ġname ĠThe Ġcolumn Ġname Ċ Ġ*/ Ċ fun ĠTable . timestamp ( name : ĠString ): ĠColumn < Instant > Ġ= Ġregister Column ( name , ĠKotlin Instant ColumnType ()) Ċ Ċ /** Ċ Ġ* ĠA Ġdate Ġcolumn Ġto Ġstore Ġa Ġduration . Ċ Ġ* Ċ Ġ* Ġ@ param Ġname ĠThe Ġcolumn Ġname Ċ Ġ*/ Ċ @ Opt In ( Experimental Time :: class ) Ċ fun ĠTable . duration ( name : ĠString ): ĠColumn < Duration > Ġ= Ġregister Column ( name , ĠKotlin Duration ColumnType ()) Ċ