package Ġs late kit . data . en coders Ċ Ċ import Ġorg . th reet en . bp .* Ċ import Ġorg . th reet en . bp . format . DateTime Formatter Ċ import Ġs late kit . common . DateTime Ċ import Ġs late kit . common . DateTime s Ċ import Ġs late kit . common . values . Record Ċ import Ġs late kit . common . data . DataType Ċ import Ġs late kit . common . data . Value Ċ import Ġs late kit . common . ext .* Ċ import Ġs late kit . data . Consts Ċ Ċ /** Ċ Ġ* ĠSupport Ġfor Ġencoding Ġto / from Ġkotlin Ġvalue Ġto Ġa ĠSQL Ġvalue Ċ Ġ* ĠThe Ġen coders Ġhere Ġare Ġall Ġfor ĠDate / Time Ġbased Ġdata Ġtypes Ċ Ġ*/ Ċ open Ġclass ĠLocalDate Encoder ( val ĠdataType : ĠDataType Ġ= ĠDataType . DT LocalDate ) Ġ: ĠSql Encoder < LocalDate > Ġ{ ĊĠĠĠ Ġprotected Ġopen Ġval ĠDB Format Ġ= ĠDateTime Formatter . of Pattern (" yyyy MM dd ") ĊĊĠĠĠ Ġoverride Ġfun Ġencode ( value : ĠLocalDate ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue ?. let Ġ{ Ġ"'" Ġ+ Ġvalue . format ( Consts . date Format ) Ġ+ Ġ"'" Ġ} Ġ?: ĠConst s . NULL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode ( record : ĠRecord , Ġname : ĠString ): ĠLocalDate ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( dataType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDataType . DT Int Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnum Ġ= Ġrecord . getInt OrNull ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnum ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocalDate . parse ( it . toString (), ĠDB Format ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecord . get LocalDate OrNull ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġconvert ( name : ĠString , Ġvalue : ĠLocalDate ?): ĠValue Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfinal Value Ġ= Ġwhen Ġ( dataType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDataType . DT Int Ġ-> Ġvalue ?. let Ġ{ Ġit . to Numeric () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠValue ( name , ĠdataType , Ġfinal Value , Ġencode ( value )) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ open Ġclass ĠLocal Time Encoder ( val ĠdataType : ĠDataType Ġ= ĠDataType . DT Local Time ) Ġ: ĠSql Encoder < Local Time > Ġ{ ĊĠĠĠ Ġprotected Ġopen Ġval ĠDB Format Ġ= ĠDateTime Formatter . of Pattern (" HH mm ss ") ĊĠĠĠ Ġoverride Ġfun Ġencode ( value : ĠLocal Time ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue ?. let Ġ{ Ġ"'" Ġ+ Ġvalue . format ( Consts . time Format ) Ġ+ Ġ"'" Ġ} Ġ?: ĠConst s . NULL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode ( record : ĠRecord , Ġname : ĠString ): ĠLocal Time ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( dataType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDataType . DT Int Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnum Ġ= Ġrecord . getInt OrNull ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnum ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLocal Time . parse ( it . toString (), ĠDB Format ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrecord . getLocal Time OrNull ( name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġconvert ( name : ĠString , Ġvalue : ĠLocal Time ?): ĠValue Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfinal Value Ġ= Ġwhen Ġ( dataType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDataType . DT Int Ġ-> Ġvalue ?. let Ġ{ Ġit . to Numeric () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠValue ( name , ĠdataType , Ġfinal Value , Ġencode ( value )) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ open Ġclass ĠLocalDateTime Encoder ( val ĠdataType : ĠDataType Ġ= ĠDataType . DT LocalDateTime ) Ġ: ĠSql Encoder < LocalDateTime > Ġ{ ĊĠĠĠ Ġprotected Ġopen Ġval Ġoffset Ġ= ĠOffset DateTime . now (). offset ĊĊĠĠĠ Ġoverride Ġfun Ġencode ( value : ĠLocalDateTime ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġto Sql ( value , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode ( record : ĠRecord , Ġname : ĠString ): ĠLocalDateTime ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrecord . getLocal DateTime OrNull ( name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġto Sql ( value : ĠLocalDateTime ?, Ġis UTC : ĠBoolean Ġ= Ġfalse ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconverted Ġ= Ġif Ġ( is UTC ) ĠDateTime s . of ( value ). at Utc (). local () Ġelse Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"'" Ġ+ Ġconverted . format ( Consts . dateTime Format ) Ġ+ Ġ"'" ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠConst s . NULL ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġconvert ( name : ĠString , Ġvalue : ĠLocalDateTime ?): ĠValue Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfinal Value Ġ= Ġwhen Ġ( dataType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDataType . DT Long Ġ-> Ġvalue ?. let Ġ{ Ġit . to Instant ( offset ). to Epoch Milli () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠValue ( name , ĠdataType , Ġfinal Value , Ġencode ( value )) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ open Ġclass ĠDateTime Encoder ( val ĠdataType : ĠDataType Ġ= ĠDataType . DT DateTime , Ġprivate Ġval Ġut c : ĠBoolean Ġ= Ġtrue ) Ġ: ĠSql Encoder < DateTime > Ġ{ ĊĠĠĠ Ġprivate Ġval ĠdateTime Format : ĠDateTime Formatter Ġ= ĠDateTime Formatter . of Pattern (" yyyy - MM - dd ĠHH : mm : ss ") ĊĊĠĠĠ Ġoverride Ġfun Ġencode ( value : ĠDateTime ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconverted Ġ= Ġif Ġ( utc ) Ġvalue . at Utc () Ġelse Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"'" Ġ+ Ġconverted . format ( dateTime Format ) Ġ+ Ġ"'" ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠConst s . NULL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode ( record : ĠRecord , Ġname : ĠString ): ĠDateTime ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( utc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecord . getZ onedDateTime Utc OrNull ( name )?. at Utc Local () ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecord . get DateTime OrNull ( name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġconvert ( name : ĠString , Ġvalue : ĠDateTime ?): ĠValue Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfinal Value Ġ= Ġwhen Ġ( dataType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDataType . DT Long Ġ-> Ġvalue ?. let Ġ{ Ġit . to Instant (). to Epoch Milli () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠValue ( name , ĠdataType , Ġfinal Value , Ġencode ( value )) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ open Ġclass ĠZ onedDateTime Encoder ( val ĠdataType : ĠDataType Ġ= ĠDataType . DT Z onedDateTime , Ġprivate Ġval Ġut c : ĠBoolean Ġ= Ġtrue ) Ġ: ĠSql Encoder < Z onedDateTime > Ġ{ ĊĠĠĠ Ġprotected Ġopen Ġval ĠdateTime Format : ĠDateTime Formatter Ġ= ĠDateTime Formatter . of Pattern (" yyyy - MM - dd ĠHH : mm : ss ") ĊĊĠĠĠ Ġoverride Ġfun Ġencode ( value : ĠZ onedDateTime ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconverted Ġ= Ġif Ġ( utc ) Ġit . at Utc () Ġelse Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"'" Ġ+ Ġconverted . format ( Consts . dateTime Format ) Ġ+ Ġ"'" ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠConst s . NULL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode ( record : ĠRecord , Ġname : ĠString ): ĠZ onedDateTime ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( utc ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecord . getZ onedDateTime Utc OrNull ( name ) ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecord . getZ onedDateTime OrNull ( name ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġconvert ( name : ĠString , Ġvalue : ĠZ onedDateTime ?): ĠValue Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfinal Value Ġ= Ġwhen Ġ( dataType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDataType . DT Long Ġ-> Ġvalue ?. let Ġ{ Ġit . to Instant (). to Epoch Milli () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠValue ( name , ĠdataType , Ġfinal Value , Ġencode ( value )) ĊĠĠĠ Ġ} Ċ } ĊĊ Ċ open Ġclass ĠInstant Encoder ( val ĠdataType : ĠDataType Ġ= ĠDataType . DT Instant ) Ġ: ĠSql Encoder < Instant > Ġ{ ĊĠĠĠ Ġoverride Ġfun Ġencode ( value : ĠInstant ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġvalue ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ"'" Ġ+ ĠLocalDateTime . of Instant ( value , ĠZone Id . system Default ()). format ( Consts . dateTime Format ) Ġ+ Ġ"'" ĊĠĠĠĠĠĠĠ Ġ} Ġ?: ĠConst s . NULL ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġconvert ( name : ĠString , Ġvalue : ĠInstant ?): ĠValue Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfinal Value Ġ= Ġwhen Ġ( dataType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDataType . DT Long Ġ-> Ġvalue ?. let Ġ{ Ġit . to Epoch Milli () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠValue ( name , ĠdataType , Ġfinal Value , Ġencode ( value )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdecode ( record : ĠRecord , Ġname : ĠString ): ĠInstant ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġrecord . get Instant OrNull ( name ) ĊĠĠĠ Ġ} Ċ } ĊĊĊ