package Ġcom . ex per ive . buddy Ċ Ċ import Ġcom . ex per ive . benchmark . Benchmark Runner Ċ import Ġcom . ex per ive . buddy . mapper . json Ċ import Ġcom . ex per ive . buddy . support . Bu ddy Postgres Extension Ċ import Ġcom . fasterxml . jackson . databind . JsonNode Ċ import Ġcom . google . common . truth . Truth . assertThat Ċ import Ġorg . junit . jupiter . api . BeforeEach Ċ import Ġorg . junit . jupiter . api . Tag Ċ import Ġorg . junit . jupiter . api . Test Ċ import Ġorg . junit . jupiter . api . extension . Extend With Ċ import Ġreactor . core . publisher . Flux Ċ Ċ @ Extend With ( Bu ddy Postgres Extension :: class ) Ċ internal Ġclass ĠP g sql Core Database Test Ġ: ĠDatabase Core Queries () Ġ{ ĊĠĠĠ Ġ@ BeforeEach ĊĠĠĠ Ġinternal Ġfun ĠsetUp () Ġ{ ĊĠĠĠĠĠĠĠ Ġunder Test Ġ= ĠDatabase . using ( tx Manager ) ĊĊĠĠĠĠĠĠĠ Ġunder Test . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" create Ġtable Ġif Ġnot Ġexists Ġtest _ entity Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"( id Ġserial Ġprimary Ġkey , Ġname Ġtext , Ġfield _ name Ġint , Ġboolean _ field Ġboolean )" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġunder Test . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" create Ġtable Ġif Ġnot Ġexists Ġtest _ relation Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"( id Ġserial Ġprimary Ġkey , Ġtest _ id Ġint , Ġactive Ġboolean )" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġunder Test . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" create Ġtable Ġif Ġnot Ġexists Ġtest _ json Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"( id Ġserial Ġprimary Ġkey , Ġmap Ġjsonb , Ġrelation Ġjsonb )" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġunder Test . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" create Ġtable Ġif Ġnot Ġexists Ġdate _ entity Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"( id Ġserial Ġprimary Ġkey , Ġlocal _ time _ field Ġtime , Ġlocal _ date _ field Ġdate , Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" local _ date _ time _ field Ġtimestamp , Ġjava _ date _ field Ġtimestamp , Ġjava _ timestamp _ field Ġtimestamp )" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġunder Test . execute ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" create Ġtable Ġif Ġnot Ġexists Ġgeo _ sample Ġ" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"( osm _ id Ġbigint , Ġo sm _ type Ġtext , Ġclass Ġtext , Ġtype Ġtext , Ġname Ġjsonb , Ġaddress Ġjsonb )" ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġunder Test . persist Many ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Entity ( null , Ġ" M igu Ã© l ", Ġ 1 , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Entity ( null , Ġ" M IG U Ãī L ", Ġ 3 ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Entity ( null , Ġ" Michael ", Ġ 2 , Ġtrue ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Entity ( null , Ġ" M iche le ", Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). execute () ĊĊĠĠĠĠĠĠĠ Ġm ichael Id Ġ= Ġunder Test . persist ( Test Entity ( null , Ġ" Mic hel ", Ġ 4 , Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. return ing () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fetch Single Into ( Int :: class ) ĊĊĠĠĠĠĠĠĠ Ġm iku Id Ġ= Ġunder Test . persist ( Test Entity ( null , Ġ" M iku ", Ġ 2 7 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. return ing () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fetch Single Into ( Int :: class ) ĊĊĠĠĠĠĠĠĠ Ġmen del Id Ġ= Ġunder Test . persist ( Test Entity ( null , Ġ" Men del ", Ġ 2 7 , Ġtrue )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. return ing () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fetch Single Into ( Int :: class ) ĊĊĠĠĠĠĠĠĠ Ġunder Test . persist ( Test Entity ( null , Ġnull , Ġ 2 7 )). execute () ĊĊĠĠĠĠĠĠĠ Ġunder Test . insert Into ( test Relation Table ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ( tr TestId , Ġm ichael Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ( tr Active , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute () ĊĊĠĠĠĠĠĠĠ Ġunder Test . insert Into ( test Relation Table ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ( tr TestId , Ġm iku Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ( tr Active , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute () ĊĊĠĠĠĠĠĠĠ Ġunder Test . insert Into ( test Relation Table ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ( tr TestId , Ġmen del Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set ( tr Active , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. execute () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġinternal Ġfun Ġtest OrderBy Desc () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrecord Ġ= Ġunder Test ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. select From ( table ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. orderBy ( name , ĠDirection . DESC ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fetch () ĊĊĠĠĠĠĠĠĠ Ġval Ġresults Ġ= Ġrecord . map Ġ{ Ġit . into ( Test Entity :: class ) !! Ġ}. toList () ĊĠĠĠĠĠĠĠ ĠassertThat ( results ). has Size ( 8 ) ĊĠĠĠĠĠĠĠ ĠassertThat ( results . map Ġ{ Ġit . name Ġ}). isEqualTo ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarray ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" M iku ", Ġ" M IG U Ãī L ", Ġ" M igu Ã© l ", Ġ" M iche le ", Ġ" Mic hel ", Ġ" Michael ", Ġ" Men del ", Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġinternal Ġfun Ġtest Json Query () Ġ{ ĊĠĠĠĠĠĠĠ Ġunder Test . persist Many ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Json ( null , Ġjson Ġ{ Ġput (" a ", Ġ" 1 ") Ġ}, Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Json ( null , Ġjson Ġ{ Ġput (" a ", Ġ" 2 ") Ġ}, Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Json ( null , Ġjson Ġ{ Ġput (" a ", Ġ" 3 ") Ġ}, Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Json ( null , Ġjson Ġ{ Ġput (" a ", Ġ" 3 ") Ġ}, Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Json ( null , Ġjson Ġ{ Ġput (" a ", Ġ" 2 ") Ġ}, Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTest Json ( null , Ġjson Ġ{ Ġput (" a ", Ġ" 5 ") Ġ}, Ġnull ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ). execute () ĊĠĠĠĠĠĠĠ Ġval Ġjson Prop : ĠExpression < JsonNode > Ġ= Ġjson Table . column (" map ") !! ĊĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġunder Test . select From ( json Table ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. where ( json Prop . get < String >(" a "). eq (" 3 ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. fetch Into (). toList () ĊĊĠĠĠĠĠĠĠ ĠassertThat ( res . map Ġ{ Ġit . map !!. get (" a "). as Text () Ġ}). isEqualTo ( array ListOf (" 3 ", Ġ" 3 ")) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġinternal Ġfun Ġtest Copy In () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsample Data Ġ= Ġ( 0 Ġuntil Ġ 1 0 0 0 ). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGeo Sample ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" some ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" class ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"{\" name : en \": Ġ\" some \" Ġ} ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"{ Ġ\" addr : name \": Ġ\" lol \" Ġ}" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġunder Test . copy In ( Geo Sample :: class . table (), ĠFlux . from Iterable ( sample Data )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Test ĊĠĠĠ Ġ@ Tag (" benchmark ") ĊĠĠĠ Ġinternal Ġfun Ġbenchmark Copy () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġsample Data : ĠList < Geo Sample > Ġ= Ġ( 0 Ġuntil Ġ 2 0 0 _ 0 0 0 ). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGeo Sample ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . to Long (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" some ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" class ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" type ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"{\" name : en \": Ġ\" some \" Ġ} ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ"{ Ġ\" addr : name \": Ġ\" lol \" Ġ}" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠBenchmark Runner () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( this :: copy , Ġsample Data ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. run All () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġcopy ( sample Data : ĠList < Geo Sample >) Ġ{ ĊĠĠĠĠĠĠĠ Ġunder Test . copy In ( Geo Sample :: class . table (), ĠFlux . from Iterable ( sample Data )) ĊĠĠĠ Ġ} Ċ } Ċ