package Ġcom . github . j async _ sql _ extensions Ċ Ċ import Ġcom . github . j async . sql . db . Connection Ċ import Ġcom . github . j async . sql . db . QueryResult Ċ import Ġcom . github . j async . sql . db . util . length Ċ import Ġcom . github . j async _ sql _ extensions . data . Lang Ċ import Ġcom . github . j async _ sql _ extensions . data . User Json Ċ import Ġcom . google . common . util . concurrent . Unchecked ExecutionException Ċ import Ġextension . Postgres Extension Ċ import Ġorg . joda . time . DateTime Zone Ċ import Ġorg . junit . jupiter . api . Assertions Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . extension . Extend With Ċ import Ġjava . time . Instant Ċ Ċ @ Extend With ( Postgres Extension :: class ) Ċ class ĠTest PreparedStatement Binding Ġ{ ĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġone Binding ( connection : ĠConnection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Result : ĠQuery Result Ġ= Ġconnection . send PreparedStatement (""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġ: number ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent (), Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" number " Ġto Ġ 4 2 ĊĠĠĠĠĠĠĠ Ġ )). get () ĊĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( 1 , Ġquery Result . rows . length ) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( 1 , Ġquery Result . rows [ 0 ]. length ) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( 4 2 , Ġquery Result . rows [ 0 ][ 0 ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġmulti Binding ( connection : ĠConnection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Result : ĠQuery Result Ġ= Ġconnection . send PreparedStatement (""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġ: number , Ġ(: nab la ):: timestamp , Ġ: foo ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent (), Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" number " Ġto Ġ 4 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" foo " Ġto Ġ" bar ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" nab la " Ġto ĠInstant . of Epoch Milli ( 1 0 0 0 0 0 0 0 0 L ). toString () ĊĠĠĠĠĠĠĠ Ġ )). get () ĊĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( 1 , Ġquery Result . rows . length ) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( 3 , Ġquery Result . rows [ 0 ]. length ) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( 4 2 , Ġquery Result . rows [ 0 ][ 0 ]) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals (" bar ", Ġquery Result . rows [ 0 ][ 2 ]) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 0 0 0 0 0 0 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Result . rows [ 0 ]. getDate ( 1 )?. to DateTime ( DateTime Zone . UTC )?. millis ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġbean Binding ( connection : ĠConnection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Result : ĠQuery Result Ġ= Ġconnection . send PreparedStatement (""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġ: b . number , Ġ(: b . nab la ):: timestamp , Ġ: b . foo ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent (), Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" b " Ġto ĠTest Object 1 ( 4 2 , Ġ" bar ", ĠInstant . of Epoch Milli ( 1 0 0 0 0 0 0 0 0 L )) ĊĠĠĠĠĠĠĠ Ġ )). get () ĊĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( 1 , Ġquery Result . rows . length ) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( 3 , Ġquery Result . rows [ 0 ]. length ) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( 4 2 , Ġquery Result . rows [ 0 ][ 0 ]) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals (" bar ", Ġquery Result . rows [ 0 ][ 2 ]) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 0 0 0 0 0 0 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Result . rows [ 0 ]. getDate ( 1 )?. to DateTime ( DateTime Zone . UTC )?. millis ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġbean Binding Un cached ( connection : ĠConnection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Result : ĠQuery Result Ġ= Ġconnection . send Un cached PreparedStatement (""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġ: b . number , Ġ(: b . nab la ):: timestamp , Ġ: b . foo ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent (), Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" b " Ġto ĠTest Object 1 ( 4 2 , Ġ" bar ", ĠInstant . of Epoch Milli ( 1 0 0 0 0 0 0 0 0 L )) ĊĠĠĠĠĠĠĠ Ġ )). get () ĊĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( 1 , Ġquery Result . rows . length ) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( 3 , Ġquery Result . rows [ 0 ]. length ) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( 4 2 , Ġquery Result . rows [ 0 ][ 0 ]) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals (" bar ", Ġquery Result . rows [ 0 ][ 2 ]) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 0 0 0 0 0 0 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Result . rows [ 0 ]. getDate ( 1 )?. to DateTime ( DateTime Zone . UTC )?. millis ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠTest Object 1 ( val Ġnumber : ĠLong , Ġval Ġfoo : ĠString , Ġval Ġn ab la : ĠInstant ) ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġbean Optional Binding ( connection : ĠConnection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Result : ĠQuery Result Ġ= Ġconnection . send PreparedStatement (""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġ: b ?. a ?. number , Ġ(: b ?. a ?. nab la ):: timestamp , Ġ: b ?. a ?. foo ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent (), Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" b " Ġto ĠTest Object 2 ( Test Object 1 ( 4 2 , Ġ" bar ", ĠInstant . of Epoch Milli ( 1 0 0 0 0 0 0 0 0 L ))) ĊĠĠĠĠĠĠĠ Ġ )). get () ĊĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( 1 , Ġquery Result . rows . length ) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( 3 , Ġquery Result . rows [ 0 ]. length ) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( 4 2 , Ġquery Result . rows [ 0 ][ 0 ]) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals (" bar ", Ġquery Result . rows [ 0 ][ 2 ]) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 0 0 0 0 0 0 0 0 L , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquery Result . rows [ 0 ]. getDate ( 1 )?. to DateTime ( DateTime Zone . UTC )?. millis ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġbean Json Binding ( connection : ĠConnection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Result : ĠQuery Result Ġ= Ġconnection . send PreparedStatement (""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġ: b . name ĊĠĠĠĠĠĠĠ Ġ"" ", Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" b " Ġto ĠUser Json ( name Ġ= ĠLang (" hello ", Ġ" world ")) ĊĠĠĠĠĠĠĠ Ġ )). get () ĊĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( 1 , Ġquery Result . rows . length ) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( 1 , Ġquery Result . rows [ 0 ]. length ) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( Ġ"{\" de \":\" hello \",\" en \":\" world \" }", Ġquery Result . rows [ 0 ][ 0 ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġlist Binding ( connection : ĠConnection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Result : ĠQuery Result Ġ= Ġconnection . send PreparedStatement (""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġ 4 2 Ġin Ġ: list 0 , Ġ 1 5 6 Ġin Ġ: list 1 , Ġ 1 5 6 ĊĠĠĠĠĠĠĠ Ġ"" ", Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" list 0 " Ġto ĠlistOf ( 1 3 , Ġ 1 5 6 , Ġ 1 5 6 , Ġ 1 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" list 1 " Ġto ĠlistOf ( 4 5 , Ġ 1 5 6 , Ġ 1 5 6 , Ġ 4 2 ) ĊĠĠĠĠĠĠĠ Ġ )). get () ĊĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( 1 , Ġquery Result . rows . length ) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( 3 , Ġquery Result . rows [ 0 ]. length ) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( Ġfalse , Ġquery Result . rows [ 0 ][ 0 ]) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( Ġtrue , Ġquery Result . rows [ 0 ][ 1 ]) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( Ġ 1 5 6 , Ġquery Result . rows [ 0 ][ 2 ]) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġbean Optional Null Binding ( connection : ĠConnection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġquery Result : ĠQuery Result Ġ= Ġconnection . send PreparedStatement (""" ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġ: b ?. a ?. number , Ġ(: b ?. a ?. nab la ):: timestamp , Ġ: b ?. a ?. foo ĊĠĠĠĠĠĠĠ Ġ""" . trim Indent (), Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" b " Ġto ĠTest Object 2 ( null ) ĊĠĠĠĠĠĠĠ Ġ )). get () ĊĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( 1 , Ġquery Result . rows . length ) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( 3 , Ġquery Result . rows [ 0 ]. length ) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( null , Ġquery Result . rows [ 0 ][ 0 ]) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( null , Ġquery Result . rows [ 0 ][ 2 ]) ĊĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( null , Ġquery Result . rows [ 0 ]. getDate ( 1 )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġbean Binding Null ( connection : ĠConnection ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAssertions . assert Throws ( Kotlin NullPointerException :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . send PreparedStatement (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġ: b . a . number , Ġ(: b . a . nab la ):: timestamp , Ġ: b . a . foo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent (), Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" b " Ġto ĠTest Object 2 ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġfun Ġpositional Binding ( connection : ĠConnection ) Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconnection . send PreparedStatement (""" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSELECT Ġ?, Ġ(: b . a . nab la ):: timestamp , Ġ: b . a . foo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ""" . trim Indent (), Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" b " Ġto ĠTest Object 2 ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAssertions . assertEquals ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIllegalArgumentException :: class , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . cause !! :: class ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠAssertions . fail < String >(" No Ġexception Ġencountered ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠTest Object 2 ( val Ġa : ĠTest Object 1 ?) Ċ }