package Ġcom . github . ray m ank 2 6 . csv sh . executor Ċ Ċ import Ġcom . github . ray m ank 2 6 . csv sh . Double Value Ċ import Ġcom . github . ray m ank 2 6 . csv sh . Long Value Ċ import Ġcom . github . ray m ank 2 6 . csv sh . Sql Value Atom Ċ import Ġcom . github . ray m ank 2 6 . csv sh . StringValue Ċ import Ġcom . github . ray m ank 2 6 . csv sh . max Ċ import Ġcom . github . ray m ank 2 6 . csv sh . min Ċ import Ġcom . github . ray m ank 2 6 . csv sh . plus Ċ Ċ enum Ġclass ĠAggregate Type Ġ{ ĊĠĠĠ ĠCOUNT , ĊĠĠĠ ĠSUM , ĊĠĠĠ ĠMAX , ĊĠĠĠ ĠMIN ĊĠĠĠ Ġ; Ċ } Ċ Ċ class ĠAggregate Function ( private Ġvar Ġinitial : ĠSql Value Atom , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġagg : Ġ( Sql Value Atom , ĠSql Value Atom ) Ġ-> ĠSql Value Atom , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġagg Type : ĠAggregate Type ) Ġ{ ĊĠĠĠ Ġfun Ġprocess ( value : ĠSql Value Atom ) Ġ{ ĊĠĠĠĠĠĠĠ Ġinitial Ġ= Ġagg . invoke ( initial , Ġvalue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Result (): ĠSql Value Atom Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġinitial ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġvalue Type Ġ= Ġinitial . type Ċ } Ċ Ċ type alias ĠAggregate Function Factory Ġ= Ġ() Ġ-> ĠAggregate Function Ċ Ċ object ĠAg greg ates Ġ{ ĊĠĠĠ Ġval ĠSUM _ INT : ĠAggregate Function Factory Ġ= Ġ{ ĠAggregate Function ( Long Value ( 0 ), ĠSql Value Atom :: plus , ĠAggregate Type . SUM ) Ġ} ĊĠĠĠ Ġval ĠSUM _ FLOAT : ĠAggregate Function Factory Ġ= Ġ{ ĠAggregate Function ( Double Value ( 0 . toDouble ()), ĠSql Value Atom :: plus , ĠAggregate Type . SUM ) Ġ} ĊĠĠĠ Ġval ĠCOUNT _ ANY : ĠAggregate Function Factory Ġ= Ġ{ ĠAggregate Function ( Long Value ( 0 ), Ġ{ Ġa , Ġ_ Ġ-> Ġa Ġplus ĠLong Value ( 1 ) Ġ}, ĠAggregate Type . COUNT ) Ġ} ĊĠĠĠ Ġval ĠMAX _ INT : ĠAggregate Function Factory Ġ= Ġ{ ĠAggregate Function ( Long Value ( null ), ĠSql Value Atom :: max , ĠAggregate Type . MAX ) Ġ} ĊĠĠĠ Ġval ĠMIN _ INT : ĠAggregate Function Factory Ġ= Ġ{ ĠAggregate Function ( Long Value ( null ), ĠSql Value Atom :: min , ĠAggregate Type . MIN ) Ġ} ĊĠĠĠ Ġval ĠMAX _ FLOAT : ĠAggregate Function Factory Ġ= Ġ{ ĠAggregate Function ( Double Value ( null ), ĠSql Value Atom :: max , ĠAggregate Type . MAX ) Ġ} ĊĠĠĠ Ġval ĠMIN _ FLOAT : ĠAggregate Function Factory Ġ= Ġ{ ĠAggregate Function ( Double Value ( null ), ĠSql Value Atom :: min , ĠAggregate Type . MIN ) Ġ} ĊĠĠĠ Ġval ĠMAX _ STRING : ĠAggregate Function Factory Ġ= Ġ{ ĠAggregate Function ( StringValue ( null ), ĠSql Value Atom :: max , ĠAggregate Type . MAX ) Ġ} ĊĠĠĠ Ġval ĠMIN _ STRING : ĠAggregate Function Factory Ġ= Ġ{ ĠAggregate Function ( StringValue ( null ), ĠSql Value Atom :: min , ĠAggregate Type . MIN ) Ġ} Ċ }