fix #570
This commit is contained in:
parent
a55bded518
commit
a0b6b62ba0
|
@ -71,3 +71,31 @@ func TestSum(t *testing.T) {
|
||||||
assert.EqualValues(t, 1, len(sumsInt))
|
assert.EqualValues(t, 1, len(sumsInt))
|
||||||
assert.EqualValues(t, i, int(sumsInt[0]))
|
assert.EqualValues(t, i, int(sumsInt[0]))
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestSumCustomColumn(t *testing.T) {
|
||||||
|
assert.NoError(t, prepareEngine())
|
||||||
|
|
||||||
|
type SumStruct struct {
|
||||||
|
Int int
|
||||||
|
Float float32
|
||||||
|
}
|
||||||
|
|
||||||
|
var (
|
||||||
|
cases = []SumStruct{
|
||||||
|
{1, 6.2},
|
||||||
|
{2, 5.3},
|
||||||
|
{92, -0.2},
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
assert.NoError(t, testEngine.Sync2(new(SumStruct)))
|
||||||
|
|
||||||
|
cnt, err := testEngine.Insert(cases)
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.EqualValues(t, 3, cnt)
|
||||||
|
|
||||||
|
sumInt, err := testEngine.Sum(new(SumStruct),
|
||||||
|
"CASE WHEN `int` <= 2 THEN `int` ELSE 0 END")
|
||||||
|
assert.NoError(t, err)
|
||||||
|
assert.EqualValues(t, 3, int(sumInt))
|
||||||
|
}
|
||||||
|
|
|
@ -1188,12 +1188,16 @@ func (statement *Statement) genSumSQL(bean interface{}, columns ...string) (stri
|
||||||
|
|
||||||
var sumStrs = make([]string, 0, len(columns))
|
var sumStrs = make([]string, 0, len(columns))
|
||||||
for _, colName := range columns {
|
for _, colName := range columns {
|
||||||
sumStrs = append(sumStrs, fmt.Sprintf("COALESCE(sum(%s),0)", statement.Engine.Quote(colName)))
|
if !strings.Contains(colName, " ") && strings.Contains(colName, "(") {
|
||||||
|
colName = statement.Engine.Quote(colName)
|
||||||
}
|
}
|
||||||
|
sumStrs = append(sumStrs, fmt.Sprintf("COALESCE(sum(%s),0)", colName))
|
||||||
|
}
|
||||||
|
sumSelect := strings.Join(sumStrs, ", ")
|
||||||
|
|
||||||
condSQL, condArgs, _ := statement.genConds(bean)
|
condSQL, condArgs, _ := statement.genConds(bean)
|
||||||
|
|
||||||
return statement.genSelectSQL(strings.Join(sumStrs, ", "), condSQL), append(statement.joinArgs, condArgs...)
|
return statement.genSelectSQL(sumSelect, condSQL), append(statement.joinArgs, condArgs...)
|
||||||
}
|
}
|
||||||
|
|
||||||
func (statement *Statement) genSelectSQL(columnStr, condSQL string) (a string) {
|
func (statement *Statement) genSelectSQL(columnStr, condSQL string) (a string) {
|
||||||
|
|
Loading…
Reference in New Issue