go-rel / rel

:gem: Modern ORM for Golang - Testable, Extendable and Crafted Into a Clean and Elegant API
https://go-rel.github.io/
MIT License
744 stars 58 forks source link

Aggregate does not allow to get a float (decimal) value #342

Open skolodyazhnyy opened 10 months ago

skolodyazhnyy commented 10 months ago

Aggregate API returns an integer, how do I aggregate a float field?

For instance, I have a decimal price field in my database and I would like to find a sum of all prices:

total, err := repo.Aggregate(ctx, rel.From("products"), "SUM", "price")

Instead of getting a sum I'm getting an error

sql: Scan error on column index 0, name "result": converting driver.Value type []uint8 ("1.00000000") to a int64: invalid syntax

Field price has type DECIMAL in MySQL database.

Fs02 commented 10 months ago

maybe you can use raw query as workaround?

var result struct {Sum float64}
sql := rel.SQL("SELECT ....")
err := repo.Find(ctx, &result, sql)
skolodyazhnyy commented 10 months ago

Not really, because result requires primary ID 😄

Finally, after https://github.com/go-rel/primaryreplica/pull/26 got merged, I could make request using sql connection directly. Still would be nice to be able to aggregate on decimal fields.