Skip to content

Commit

Permalink
Added support for SumInt(Int), SumDec(BigDecimal) and AvgDec(BigDecimal)
Browse files Browse the repository at this point in the history
  • Loading branch information
balanka committed Oct 28, 2022
1 parent 2ff7dee commit 53ac997
Show file tree
Hide file tree
Showing 3 changed files with 28 additions and 3 deletions.
3 changes: 3 additions & 0 deletions core/jvm/src/main/scala/zio/sql/expr.scala
Original file line number Diff line number Diff line change
Expand Up @@ -277,7 +277,10 @@ trait ExprModule extends NewtypesModule with FeaturesModule with OpsModule {
object AggregationDef {
val Count = AggregationDef[Any, Long](FunctionName("count"))
val Sum = AggregationDef[Double, Double](FunctionName("sum"))
val SumInt = AggregationDef[Int, Int](FunctionName("sum"))
val SumDec = AggregationDef[BigDecimal, BigDecimal](FunctionName("sum"))
val Avg = AggregationDef[Double, Double](FunctionName("avg"))
val AvgDec = AggregationDef[BigDecimal, BigDecimal](FunctionName("avg"))
def Min[F, A, B: TypeTag](expr: Expr[F, A, B]) = AggregationDef[B, B](FunctionName("min"))(expr)
def Max[F, A, B: TypeTag](expr: Expr[F, A, B]) = AggregationDef[B, B](FunctionName("max"))(expr)
}
Expand Down
17 changes: 17 additions & 0 deletions core/jvm/src/test/scala/zio/sql/ExprSpec.scala
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
package zio.sql

import zio.test.Assertion.anything
import zio.test.{ZIOSpecDefault, assert}

object ExprSpec extends ZIOSpecDefault {
import ProductSchema._

def spec = suite("Aggregate Expression")(
test("+ works on integer, Double and BigDecimal columns") {
val query = agSelect
assert(query)(anything)
}

)
}

11 changes: 8 additions & 3 deletions core/jvm/src/test/scala/zio/sql/ProductSchema.scala
Original file line number Diff line number Diff line change
Expand Up @@ -12,17 +12,22 @@ object ProductSchema {
}
import sql.ColumnSet._
import sql._
import AggregationDef._

val productTable = (
string("id") ++
localDate("last_updated") ++
string("name") ++
int("base_amount") ++
int("final_amount") ++
double("vat_amount") ++
bigDecimal("total_amount") ++
boolean("deleted")
).table("product")

val (id, lastUpdated, name, baseAmount, finalAmount, deleted) = productTable.columns
).table("product")

val (id, lastUpdated, name, baseAmount, finalAmount, vatAmount, totalAmount, deleted) = productTable.columns
val selectAll = select(id, lastUpdated, baseAmount, deleted) from productTable
val agSelect = select(id, (SumInt(baseAmount) as "sumBaseAmount"), (Sum(vatAmount) as "sumVatAmount")
, (Avg(vatAmount) as "avgVatAmount"), (SumDec(totalAmount) as "sumTotalAmount")
, (AvgDec(totalAmount) as "avgTotalAmount")) from productTable groupBy(id)
}

0 comments on commit 53ac997

Please sign in to comment.