From 4682abafdf9579ed0c60ad224c566852191bea34 Mon Sep 17 00:00:00 2001 From: John Date: Wed, 15 Jan 2020 10:38:02 +0800 Subject: [PATCH] fix concurrent issue in gdb.Model.Count --- database/gdb/gdb_model.go | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/database/gdb/gdb_model.go b/database/gdb/gdb_model.go index e2954cab5..5e4b93ff2 100644 --- a/database/gdb/gdb_model.go +++ b/database/gdb/gdb_model.go @@ -844,16 +844,12 @@ func (m *Model) Count(where ...interface{}) (int, error) { if len(where) > 0 { return m.Where(where[0], where[1:]...).Count() } - defer func(fields string) { - m.fields = fields - }(m.fields) - if m.fields == "" || m.fields == "*" { - m.fields = "COUNT(1)" - } else { - m.fields = fmt.Sprintf(`COUNT(%s)`, m.fields) + countFields := "COUNT(1)" + if m.fields != "" && m.fields != "*" { + countFields = fmt.Sprintf(`COUNT(%s)`, m.fields) } condition, conditionArgs := m.formatCondition(false) - s := fmt.Sprintf("SELECT %s FROM %s %s", m.fields, m.tables, condition) + s := fmt.Sprintf("SELECT %s FROM %s %s", countFields, m.tables, condition) if len(m.groupBy) > 0 { s = fmt.Sprintf("SELECT COUNT(1) FROM (%s) count_alias", s) }